GCC tries its best not use the costly mutiplication mul instruction when possible, in favor of cheaper addition and shift. Multiplication by power of 2 are easy because it's a simple shift.
Some 'complex' example:
- (x * 3) can be expressed as (x + x * 2) which outputs leal (%rdi,%rdi,2), %eax
- (x * 40) is (x * 5 * 8) ie. ((x + x * 4) * 8) which gives leal (%rdi,%rdi,4), %eax + sall $3, %eax
And it seems that gcc does this trick for all factors until 42. I know.
Aucun commentaire:
Enregistrer un commentaire