W dniu 2010-10-23 23:04, Florian Klämpfl pisze:

Second: when I review assembler list I've notice some strange lines (all
optimizations are enabled):

Which compiler version? 2.4.x? I think r15502 in trunk should fix this.
2.5.1 but older. Now I test from current. Its better (faster) but  I
found other strange:

first: dec(i) is translate to three lines
     movl    %esi,%eax
     decl    %eax
     movl    %eax,%esi

why not simple decl %esi ?
Yes. I saw this too and I didn't find the cause, especially because I
were not able to reproduce it in a small example.

attached before uhlm.pas is too long? its form fpHash

When variable is in %ebx things are the same.


second  if I have:
   while ii>0 do begin
      ....;
    dec(ii);


assembler look:


# [121] while ii>0 do begin
     jmp    .Lj16  //<   here add first test of ii
     .balign 4,0x90
.Lj15:
.Ll8:
# [122] result:=LongWord(result *8010817  ) xor (Pw^);
.Ll10:
# [124] dec(ii);
     movl    %esi,%eax
     decl    %eax
     movl    %eax,%esi
.Lj16:
     testl    %esi,%esi    //<--  this can be avoid, because test from DECL
     jg    .Lj15


Is this possible to achieve this optimizations,
If yes, can somebody help, from which file I should start

Replacing the jmp by a test and jz is two-fold: it increases code size
(thus higher code cache pollution) and it pollutes the branch prediction
unit while an uncoditional jump is very cheap on modern processers.

You don't understand me
My proposition is moving one instruction, outside loop

# [121] while ii>0 do begin
    testl    %esi,%esi    //<--  this should be added, because after .Lj16 test 
is absent
    jmp    .Lj16   // jmp not change ZF
.balign 4,0x90
.Lj15:
.Ll8:
# [122] result:=LongWord(result *8010817  ) xor (Pw^);
.Ll10:
# [124] dec(ii);
    decl    %esi
.Lj16:
    jg    .Lj15 // ZF is setting by decl (first timie by testl)





--
  Darek




_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to