fpc/rtl/arm
florian df0201799e o patch by Nico Erfurth: Support Assembly optimized functions of SwapEndian on ARM
Currently the ARM-Port uses generic functions for SwapEndian, which are
relativly slow.

This patch adds optimized functions for the 32 and 64-bit case, the 16
bit case is still handled with a normal function, while the generated
code is far from optimal, the inlining (which is not possible with
asm-functions) makes it faster than the optimized function.

Some Numbers from my 1.2GHz Kirkwood (ARMv5):

                        Old     New     Result
SwapEndian(Integer)     12.168s 5.411s  44.47%
SwapEndian(Int64)       168.28s 9.015s   5.36%

Testcode was
begin
        I := $FFFFFFF;
        while I > 0 do
        begin
                Val2 := MySwapEndian(Val);
                Dec(I);
        end;
end.

Currently only the ARM implementation is tested. ARMv6+ includes a rev
instruction, while I've implemented them, I was not able to test them.

git-svn-id: trunk@20685 -
2012-04-01 17:31:49 +00:00
..
arm.inc o patch by Nico Erfurth: Support Assembly optimized functions of SwapEndian on ARM 2012-04-01 17:31:49 +00:00
divide.inc + patch by Jeppe Johansen to make use of the div/udiv instruction on arm7m, resolves #20022 2011-09-24 21:41:01 +00:00
int64p.inc * fix int64 multiplication on armeb 2008-03-08 13:02:51 +00:00
makefile.cpu
math.inc + support for the ARM hard float EABI on Linux (patch by Peter Green): 2012-03-29 20:50:09 +00:00
mathu.inc + support for the ARM hard float EABI on Linux (patch by Peter Green): 2012-03-29 20:50:09 +00:00
mathuh.inc
set.inc
setjump.inc + support for the ARM hard float EABI on Linux (patch by Peter Green): 2012-03-29 20:50:09 +00:00
setjumph.inc + support for the ARM hard float EABI on Linux (patch by Peter Green): 2012-03-29 20:50:09 +00:00
strings.inc
stringss.inc
thumb2.inc * Promoted result type of FPC_PCHAR_LENGTH and FPC_PWIDECHAR_LENGTH to SizeInt. 2011-06-13 04:59:17 +00:00