rendered paste body [lreg, local, scratch("?")] -> {
x86_mov_reg_reg(inst, $3, $1, 4);
x86_imul_reg_membase(inst, $3, X86_EBP, $2 + 4);
x86_imul_reg_membase(inst, %1, X86_EBP, $2);
x86_alu_reg_reg(inst, X86_ADD, %1, $3);
if(%1==X86_EDX || %1 == X86_EAX)
x86_mov_reg_reg(inst, $3, %1, 4);
if($1!=X86_EAX) x86_mov_reg_reg(inst, X86_EAX, $1, 4);
x86_mul_membase(inst, X86_EBP, $2, 0);
if(%1==X86_EDX || %1 == X86_EAX)
{
x86_alu_reg_reg(inst, X86_ADD, $3, X86_EDX);
x86_mov_reg_reg(inst, %1, $3, 4);
}
else
{
x86_alu_reg_reg(inst, X86_ADD, %1, X86_EDX);
}
if($1!=X86_EAX) x86_mov_reg_reg(inst, $1, X86_EAX, 4);
}
[lreg, lreg, scratch("?")] ->
}
i thought of sometning like this:
source1 : S1L : S1H
source2: S2L : S2H
temp: RH
S1L * S2H -> RH /* RH = low dword of the multiply resulr */
S1H * S2L -> eax /* eax = low dword of result */
RH += eax /* RH
S1L * S2L -> eax: edx
edx += RH
result in eax:edx