void OPPROTO op_mull_T0_T1(void)
{
uint64_t res;
- res = T0 * T1;
+ res = (uint64_t)T0 * (uint64_t)T1;
T1 = res >> 32;
T0 = res;
}
void OPPROTO op_imull_T0_T1(void)
{
uint64_t res;
- res = (int32_t)T0 * (int32_t)T1;
+ res = (int64_t)T0 * (int64_t)T1;
T1 = res >> 32;
T0 = res;
}
gen_movl_T0_reg(s, rs);
gen_movl_T1_reg(s, rm);
if (insn & (1 << 22))
- gen_op_mull_T0_T1();
- else
gen_op_imull_T0_T1();
+ else
+ gen_op_mull_T0_T1();
if (insn & (1 << 21))
gen_op_addq_T0_T1(rn, rd);
if (insn & (1 << 20))