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