[fpc-devel] (no subject)
Florian Klaempfl
florian at freepascal.org
Fri Aug 12 10:20:52 CEST 2005
Ростислав Окулов wrote:
>>Ростислав Окулов wrote:
>>
>>>How I can aligh data in FPC like in C?
>>>
>>>struct __declspec(align(16)) VECTOR4F
>>>{
>>> float x;
>>> float y;
>>> float z;
>>> float w;
>>>};
>>
>>FPC can align local data only up to 4 byte boundaries. Aligning to 16 byte
>>boundaries done by the compiler requires too much extra code because at every
>>procedure entry the stack must be realigned so causing often a slow down.
>>
>
> Ok. By when you use SSE2 or SSE3 data *MUST* be alligned to 16 bytes..
Only vector data. The compiler doesn't generate vector instruction so you need
it for assembler only and in assembler procedures you can align the stack yourself.
> and if it is? we can use movups or movaps instead movss(FPC use this instruction, but It's more sloly than use mov*ps)
Clock cycle count of mov*ps might be lower but: movups/movaps move 16 bytes
while movss moves only 4 bytes: higher memory traffic. Further, if you load a
single, using mov*ps is dangerous because you could access data outside valid
memory which can cause segmentation faults, if the segment limits aren't aligned
to 16 byte boundaries.
More information about the fpc-devel
mailing list