mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
PPC: Add binary arithmetic instructions (except MOD).
This commit is contained in:
parent
15834c3990
commit
db735e0519
@ -1160,17 +1160,50 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|
|||||||
|
|
||||||
/* -- Binary ops -------------------------------------------------------- */
|
/* -- Binary ops -------------------------------------------------------- */
|
||||||
|
|
||||||
|
|.macro ins_arithpre, t0, t1
|
||||||
|
| // RA = dst*8, RB = src1*8, RC = src2*8 | num_const*8
|
||||||
|
||vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
|
||||||
|
||switch (vk) {
|
||||||
|
||case 0:
|
||||||
|
| evlddx t0, BASE, RB
|
||||||
|
| checknum t0
|
||||||
|
| evlddx t1, KBASE, RC
|
||||||
|
| checkfail ->vmeta_arith_vn
|
||||||
|
|| break;
|
||||||
|
||case 1:
|
||||||
|
| evlddx t1, BASE, RB
|
||||||
|
| checknum t1
|
||||||
|
| evlddx t0, KBASE, RC
|
||||||
|
| checkfail ->vmeta_arith_nv
|
||||||
|
|| break;
|
||||||
|
||default:
|
||||||
|
| evlddx t0, BASE, RB
|
||||||
|
| evlddx t1, BASE, RC
|
||||||
|
| evmergehi TMP2, t0, t1
|
||||||
|
| checknum TMP2
|
||||||
|
| checkanyfail ->vmeta_arith_vv
|
||||||
|
|| break;
|
||||||
|
||}
|
||||||
|
|.endmacro
|
||||||
|
|
|
||||||
|
|.macro ins_arith, ins
|
||||||
|
| ins_arithpre TMP0, TMP1
|
||||||
|
| ins TMP0, TMP0, TMP1
|
||||||
|
| evstddx TMP0, BASE, RA
|
||||||
|
| ins_next
|
||||||
|
|.endmacro
|
||||||
|
|
||||||
case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
|
case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
|
||||||
| NYI
|
| ins_arith efdadd
|
||||||
break;
|
break;
|
||||||
case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
|
case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
|
||||||
| NYI
|
| ins_arith efdsub
|
||||||
break;
|
break;
|
||||||
case BC_MULVN: case BC_MULNV: case BC_MULVV:
|
case BC_MULVN: case BC_MULNV: case BC_MULVV:
|
||||||
| NYI
|
| ins_arith efdmul
|
||||||
break;
|
break;
|
||||||
case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
|
case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
|
||||||
| NYI
|
| ins_arith efddiv
|
||||||
break;
|
break;
|
||||||
case BC_MODVN:
|
case BC_MODVN:
|
||||||
| NYI
|
| NYI
|
||||||
@ -1179,7 +1212,16 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|
|||||||
| NYI
|
| NYI
|
||||||
break;
|
break;
|
||||||
case BC_POW:
|
case BC_POW:
|
||||||
| NYI
|
| evlddx CARG2, BASE, RB
|
||||||
|
| evlddx CARG4, BASE, RC
|
||||||
|
| evmergehi CARG1, CARG4, CARG2
|
||||||
|
| checknum CARG1
|
||||||
|
| evmergehi CARG3, CARG4, CARG4
|
||||||
|
| checkanyfail ->vmeta_arith_vv
|
||||||
|
| bl extern pow
|
||||||
|
| evmergelo CRET2, CRET1, CRET2
|
||||||
|
| evstddx CRET2, BASE, RA
|
||||||
|
| ins_next
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BC_CAT:
|
case BC_CAT:
|
||||||
|
Loading…
Reference in New Issue
Block a user