Main warning at the end of the message. > This is not always true. Sparc requires 64bit alignment for doubles. And > i386 requires 128bit alignment for XMM. 1. I think, that when you optimize for size, default options should be "avoid alignment when possible". 2. SSE2 is a special case and, by the way, will FPC support integer SSE2 operations? (Current mmx unit is not widely used, so Florian K. said it is low priority.)
Compile this with "-OG" and notice, that while record has size 9, individual variables of that type are aligned by 16-byte. (FPC 2.0.3, i386, win32) And it does not depend on processor model: -Cp386 and -CpPENTIUM4 yield the same results. {$A-} type a= record a: int64; b: byte; end; var x: a; y: byte; // these are yy: longword; // 9 zz: longword; // bytes z: a; begin writeln(sizeof(a)); writeln(longint(@x)); writeln(longint(@y)); writeln(longint(@z)); end. This program makes me feel strange: it aligns records by 16 bytes for no reason (last two addresses are odd). (Don't forget {$A-}) {$A-} type a= record b: byte; a: int64; end; var x: a; y: byte; yy: longword; zz: longword; z: a; begin writeln(sizeof(a)); writeln; writeln(longint(@x)); writeln(longint(@y)); writeln(longint(@z)); writeln; writeln(longint(@(x.a))); writeln(longint(@(z.a))); end. Get rid of {$A-}, use "-O3rp4", "-CpPENTIUM4", and one of int64 addresses is not 4 bytes aligned! And records are persistently 16 bytes aligned! _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel