hi 
example code:
function roo(lk:longint):byte;
var k : longint;
    bit : longint;
    num : byte;
begin
     num:=0;
     for k:=0 to 25 do
     begin
          bit:= longint(1) shl k;
          if (lk and bit) <> 0 then
          begin
               lk:=lk xor bit;
               inc(num);
          end;
     end;
     roo:=num;
end;
begin
end.

asm code 
# [109] bit:= longint(1) shl k;
    movslq    %ecx,%rdx
    # Register r8d allocated
    movl    $1,%r8d
    # Register edx,edx allocated
    shlx    %edx,%r8d,%edx
    # Register r8d released
    # Register edx allocated
    movl    %edx,%esi
# Peephole Optimization: %esi = %edx; changed to minimise pipeline stall 
(MovXXX2MovXXX)
# Peephole Optimization: Mov2Nop 4 done


what purpose serve: movslq    %ecx,%rdx   ?

movl    %edx,%esi seems unnecessary, 
when just enough would be
movl    $1,%esi
shlx    %ecx,%esi,%esi

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to