除法最適化解除のメモのメモ
今日の#lowhacks @ irc.freenode.net [ log ]
via. d:id:h0shu:20080302
r0 = A; // mov r0, A edx:eax = eax * r0; // imul r0 edxには上位32bitが入る。( edx = edx:eax >> 32 ) (signed)edx /= 2^B; // sar edx, B r1 = edx; // mov r1, edx (unsigned)r1 /= 2^C; // shr r1, C r1 += edx; // add r1, edx
これで全体としては
r1 = ((eax * A) >> 32 >> B) + ((eax * A) >> 32 >> B >> C);
という動作をする模様。
x86初心者の私はimul r0でedxに上位32bitが入るということに気づくのにかなり時間がかかった…。