[fpc-devel] Patch, font rendering on Arm-Linux devices.

Daniël Mantione daniel.mantione at freepascal.org
Fri Feb 29 15:43:58 CET 2008



Op Fri, 29 Feb 2008, schreef Christian Iversen:

>> Memory access. What happens is that the non-packed version causes more 
>> cache misses. A cache miss costs many cycles on a modern cpu, a misaligned 
>> read just costs an extra memory access (which is fast if cached) on x86, 
>> and extra load instruction on ARM. This much cheaper than a chache miss.
>
> It's much worse than that. Some architectures simply _can't_ do unaligned 
> access, and they will trigger an exception.
>
> This exception will in many configurations be caught by the OS, that then 
> might simulate the read by doing 2 reads, putting the result together, 
> writing into the application memory, and doing a task switch.
>
> This, in total, is several _orders of magnitude_ worse than unaligned access 
> on a supported platform.
>
> Of course, unaligned access in itself is pretty bad.

True, but irrelevant, because the discussion was under the assumption than 
an unaligned read is done using the "unaligned" pseudo function. Unless 
there is a bug in the compiler, the use of "unaligned" will never cause an 
exception.

Instead "unaligned" will simulate an unaligned load with two loads and 
some rotation etc. On the ARM, where every mnemonic can rotate operands, 
this is isn't that bad of a penalty.

Therefore, I wouldn't be surprised that even on ARM, arrays with packed 
structures are faster than arrays with unpacked structures.

Daniël


More information about the fpc-devel mailing list