mirror of
https://github.com/mii443/qemu.git
synced 2025-12-16 17:18:49 +00:00
tcg/tci: Implement 64-bit division
Trivially implemented like other arithmetic. Tested via check-tcg and the ppc64 target. Tested-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
28
tcg/tci.c
28
tcg/tci.c
@@ -894,14 +894,30 @@ uintptr_t QEMU_DISABLE_CFI tcg_qemu_tb_exec(CPUArchState *env,
|
||||
t2 = tci_read_ri64(regs, &tb_ptr);
|
||||
tci_write_reg(regs, t0, t1 * t2);
|
||||
break;
|
||||
#if TCG_TARGET_HAS_div_i64
|
||||
case INDEX_op_div_i64:
|
||||
case INDEX_op_divu_i64:
|
||||
case INDEX_op_rem_i64:
|
||||
case INDEX_op_remu_i64:
|
||||
TODO();
|
||||
t0 = *tb_ptr++;
|
||||
t1 = tci_read_ri64(regs, &tb_ptr);
|
||||
t2 = tci_read_ri64(regs, &tb_ptr);
|
||||
tci_write_reg(regs, t0, (int64_t)t1 / (int64_t)t2);
|
||||
break;
|
||||
case INDEX_op_divu_i64:
|
||||
t0 = *tb_ptr++;
|
||||
t1 = tci_read_ri64(regs, &tb_ptr);
|
||||
t2 = tci_read_ri64(regs, &tb_ptr);
|
||||
tci_write_reg(regs, t0, (uint64_t)t1 / (uint64_t)t2);
|
||||
break;
|
||||
case INDEX_op_rem_i64:
|
||||
t0 = *tb_ptr++;
|
||||
t1 = tci_read_ri64(regs, &tb_ptr);
|
||||
t2 = tci_read_ri64(regs, &tb_ptr);
|
||||
tci_write_reg(regs, t0, (int64_t)t1 % (int64_t)t2);
|
||||
break;
|
||||
case INDEX_op_remu_i64:
|
||||
t0 = *tb_ptr++;
|
||||
t1 = tci_read_ri64(regs, &tb_ptr);
|
||||
t2 = tci_read_ri64(regs, &tb_ptr);
|
||||
tci_write_reg(regs, t0, (uint64_t)t1 % (uint64_t)t2);
|
||||
break;
|
||||
#endif
|
||||
case INDEX_op_and_i64:
|
||||
t0 = *tb_ptr++;
|
||||
t1 = tci_read_ri64(regs, &tb_ptr);
|
||||
|
||||
Reference in New Issue
Block a user