mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-08 15:34:09 +00:00
Implement some boolean operations.
This commit is contained in:
parent
ae38a6913e
commit
8518df8e56
@ -1381,8 +1381,28 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|
|||||||
| stg r0, 0(r0)
|
| stg r0, 0(r0)
|
||||||
break;
|
break;
|
||||||
case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
|
case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
|
||||||
| stg r0, 0(r0)
|
| ins_AD // RA = dst or unused, RD = src, JMP with RD = target
|
||||||
| stg r0, 0(r0)
|
| sllg RD, RD, 3(r0)
|
||||||
|
| sllg RA, RA, 3(r0)
|
||||||
|
| lg ITYPE, 0(RD, BASE)
|
||||||
|
| la PC, 4(PC)
|
||||||
|
if (op == BC_ISTC || op == BC_ISFC) {
|
||||||
|
| lgr RB, ITYPE
|
||||||
|
}
|
||||||
|
| srag ITYPE, ITYPE, 47(r0)
|
||||||
|
| clfi ITYPE, LJ_TISTRUECOND
|
||||||
|
if (op == BC_IST || op == BC_ISTC) {
|
||||||
|
| jhe >1
|
||||||
|
} else {
|
||||||
|
| jl >1
|
||||||
|
}
|
||||||
|
if (op == BC_ISTC || op == BC_ISFC) {
|
||||||
|
| stg RB, 0(RA, BASE)
|
||||||
|
}
|
||||||
|
| llgh RD, PC_RD
|
||||||
|
| branchPC RD
|
||||||
|
|1: // Fallthrough to the next instruction.
|
||||||
|
| ins_next
|
||||||
break;
|
break;
|
||||||
case BC_ISTYPE:
|
case BC_ISTYPE:
|
||||||
| stg r0, 0(r0)
|
| stg r0, 0(r0)
|
||||||
@ -1401,8 +1421,18 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|
|||||||
| ins_next_
|
| ins_next_
|
||||||
break;
|
break;
|
||||||
case BC_NOT:
|
case BC_NOT:
|
||||||
| stg r0, 0(r0)
|
| ins_AD // RA = dst, RD = src
|
||||||
| stg r0, 0(r0)
|
| sllg RD, RD, 3(r0)
|
||||||
|
| sllg RA, RA, 3(r0)
|
||||||
|
| lg RB, 0(RD, BASE)
|
||||||
|
| srag RB, RB, 47(r0)
|
||||||
|
| load_false RC
|
||||||
|
| cghi RB, LJ_TTRUE
|
||||||
|
| je >1 // TODO: Maybe do something fancy to avoid the jump?
|
||||||
|
| load_true RC
|
||||||
|
|1:
|
||||||
|
| stg RC, 0(RA, BASE)
|
||||||
|
| ins_next
|
||||||
break;
|
break;
|
||||||
case BC_UNM:
|
case BC_UNM:
|
||||||
| stg r0, 0(r0)
|
| stg r0, 0(r0)
|
||||||
@ -1598,8 +1628,13 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|
|||||||
| ins_next
|
| ins_next
|
||||||
break;
|
break;
|
||||||
case BC_KPRI:
|
case BC_KPRI:
|
||||||
| stg r0, 0(r0)
|
| ins_AD // RA = dst, RD = primitive type (~)
|
||||||
| stg r0, 0(r0)
|
| sllg RA, RA, 3(r0)
|
||||||
|
| sllg RD, RD, 47(r0)
|
||||||
|
| lghi TMPR2, -1
|
||||||
|
| xgr RD, TMPR2 // not
|
||||||
|
| stg RD, 0(RA, BASE)
|
||||||
|
| ins_next
|
||||||
break;
|
break;
|
||||||
case BC_KNIL:
|
case BC_KNIL:
|
||||||
| stg r0, 0(r0)
|
| stg r0, 0(r0)
|
||||||
|
Loading…
Reference in New Issue
Block a user