mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-20 18:50:21 +02:00
Implement the qmul and qdiv instructions.
2013-02-04 Paulo Andrade <pcpa@gnu.org> * include/lightning.h, include/lightning/jit_private.h, lib/jit_arm-cpu.c, lib/jit_arm.c, lib/jit_mips-cpu.c, lib/jit_mips.c, lib/jit_ppc-cpu.c, lib/jit_ppc.c, lib/jit_x86-cpu.c, lib/jit_x86.c, lib/lightning.c: Implement the new qmul and qdiv instructions that return signed and unsigned lo/hi multiplication result and div/rem division result. These should be useful for jit translation of code that needs to know if a multiplication overflows (no branch opcode added) or if a division is exact (easy check if remainder is zero). * check/lightning.c, lib/jit_print.c, check/Makefile.am, check/all.tst: Update for the new qmul and qdiv instructions. * check/qalu.inc, check/qalu_div.ok, check/qalu_div.tst, check/qalu_mul.ok, check/qalu_mul.tst: New files implementing simple test cases for qmul and qdiv.
This commit is contained in:
parent
708cca9465
commit
d91b25d1be
22 changed files with 1073 additions and 95 deletions
|
@ -704,6 +704,16 @@ _emit_code(jit_state_t *_jit)
|
|||
case jit_code_##name##i##type: \
|
||||
name##i##type(rn(node->u.w), rn(node->v.w), node->w.w); \
|
||||
break
|
||||
#define case_rrrr(name, type) \
|
||||
case jit_code_##name##r##type: \
|
||||
name##r##type(rn(node->u.q.l), rn(node->u.q.h), \
|
||||
rn(node->v.w), rn(node->w.w)); \
|
||||
break
|
||||
#define case_rrrw(name, type) \
|
||||
case jit_code_##name##i##type: \
|
||||
name##i##type(rn(node->u.q.l), rn(node->u.q.h), \
|
||||
rn(node->v.w), node->w.w); \
|
||||
break
|
||||
#define case_rrf(name, type, size) \
|
||||
case jit_code_##name##i##type: \
|
||||
assert(node->flag & jit_flag_data); \
|
||||
|
@ -785,10 +795,18 @@ _emit_code(jit_state_t *_jit)
|
|||
case_rrw(subx,);
|
||||
case_rrr(mul,);
|
||||
case_rrw(mul,);
|
||||
case_rrrr(qmul,);
|
||||
case_rrrw(qmul,);
|
||||
case_rrrr(qmul, _u);
|
||||
case_rrrw(qmul, _u);
|
||||
case_rrr(div,);
|
||||
case_rrw(div,);
|
||||
case_rrr(div, _u);
|
||||
case_rrw(div, _u);
|
||||
case_rrrr(qdiv,);
|
||||
case_rrrw(qdiv,);
|
||||
case_rrrr(qdiv, _u);
|
||||
case_rrrw(qdiv, _u);
|
||||
case_rrr(rem,);
|
||||
case_rrw(rem,);
|
||||
case_rrr(rem, _u);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue