[fpc-pascal] Registers in loops

denisgolovan denisgolovan at yandex.ru
Thu Dec 13 20:51:56 CET 2012


Hi all

Recently I discovered that fpc refuses to use registers in my loops even with optimization turned on (-O1,-O3 used).
I tested using both Linux x86 and Windows x64 version.

The results are basically the same.
The compiler just uses stack variables.

I've also included naive asm version of the same loop just to see the comparison.
All tests were done using EpikTimer.

======================================
Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz
Sandy Bridge-DT XE
Microsoft Windows XP Professional x64 Edition Build 3790
Free Pascal Compiler version 2.7.1 [2012/08/25] for x86_64
Result:
  
asm 0.0256358138703286 sec
for downto 0.193564002384441 sec
for to 0.177300077002942 sec
repeat 0.158137833298043 sec
while 0.156996773175159 sec

Intel(R) Core(TM)2 CPU 6600  @ 2.40GHz
Linux x86
Free Pascal Compiler version 2.7.1 [2012/11/17] for i386
Result:

asm 0.049642 sec
for downto 0.322694 sec
for to 0.312163 sec
repeat 0.298781 sec
while 0.298575 sec
======================================

You can easily see that asm version is about 10 times faster.
Is this something that can be fixed?

P.S. A full test source + assembler listings are attached.

 -- 
Regards,
Denis Golovan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: loop-test.tar.gz
Type: application/x-gzip
Size: 19202 bytes
Desc: not available
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20121213/c114f98b/attachment.bin>


More information about the fpc-pascal mailing list