On Dec 13, 2010, at 13:58 , Török Edwin wrote:

> It is still possible to avoid the division, gcc generates this:
>       movq    %rdi, %rax
>       shrq    $63, %rax
>       addq    %rdi, %rax
>       sarq    %rax
> 
> Or a better example with division by 8:
>       leaq    7(%rdi), %rax
>       testq   %rdi, %rdi
>       cmovns  %rdi, %rax
>       sarq    $3, %rax

ocamlopt does exactly this, atleast for x86-64.

> And division by non-power of two integers can optimized by replacing it
> with multiplication with its inverse (which gcc and llvm don't do for
> signed divisions, only for unsigned ones):
> http://www.hackersdelight.org/HDcode/magic.c.txt
> http://www.hackersdelight.org/HDcode/magicu.c.txt

The AMD64 optimization guide gives additional pointers here, i.e. it also lists 
replacement sequences for multiplication by constant.

> Best regards,
> --Edwin

greets,
Benedikt
_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Reply via email to