But Delphi does also optimize DIV (2^n) terms to signed shift SAR opcodes.Code:function sar(Value,Shift:integer):integer; {$IFDEF CPU386}assembler; register;{$ELSE}{$IFDEF FPC}inline;{$ELSE}register;{$ENDIF}{$ENDIF} {$IFDEF CPU386} asm mov ecx,edx sar eax,cl end; {$ELSE} begin result:=(Value shr Shift) or (($ffffffff+(1-((Value and (1 shl 31)) shr 31) and ord(Shift<>0))) shl (32-Shift)); end; {$ENDIF}
Bookmarks