|
@@ -3619,24 +3619,24 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|
|
case BC_ISNEXT:
|
|
case BC_ISNEXT:
|
|
| // RA = base*8, RD = target (points to ITERN)
|
|
| // RA = base*8, RD = target (points to ITERN)
|
|
| addu RA, BASE, RA
|
|
| addu RA, BASE, RA
|
|
- | lw TMP0, -24+HI(RA)
|
|
|
|
- | lw CFUNC:TMP1, -24+LO(RA)
|
|
|
|
- | lw TMP2, -16+HI(RA)
|
|
|
|
- | lw TMP3, -8+HI(RA)
|
|
|
|
|
|
+ | srl TMP0, RD, 1
|
|
|
|
+ | lw CARG1, -24+HI(RA)
|
|
|
|
+ | lw CFUNC:CARG2, -24+LO(RA)
|
|
|
|
+ | addu TMP0, PC, TMP0
|
|
|
|
+ | lw CARG3, -16+HI(RA)
|
|
|
|
+ | lw CARG4, -8+HI(RA)
|
|
| li AT, LJ_TFUNC
|
|
| li AT, LJ_TFUNC
|
|
- | bne TMP0, AT, >5
|
|
|
|
- |. addiu TMP2, TMP2, -LJ_TTAB
|
|
|
|
- | lbu TMP1, CFUNC:TMP1->ffid
|
|
|
|
- | addiu TMP3, TMP3, -LJ_TNIL
|
|
|
|
- | srl TMP0, RD, 1
|
|
|
|
- | or TMP2, TMP2, TMP3
|
|
|
|
- | addiu TMP1, TMP1, -FF_next_N
|
|
|
|
- | addu TMP0, PC, TMP0
|
|
|
|
- | or TMP1, TMP1, TMP2
|
|
|
|
- | bnez TMP1, >5
|
|
|
|
- |. lui TMP2, (-(BCBIAS_J*4 >> 16) & 65535)
|
|
|
|
|
|
+ | bne CARG1, AT, >5
|
|
|
|
+ |. lui TMP2, (-(BCBIAS_J*4 >> 16) & 65535)
|
|
|
|
+ | lbu CARG2, CFUNC:CARG2->ffid
|
|
|
|
+ | addiu CARG3, CARG3, -LJ_TTAB
|
|
|
|
+ | addiu CARG4, CARG4, -LJ_TNIL
|
|
|
|
+ | or CARG3, CARG3, CARG4
|
|
|
|
+ | addiu CARG2, CARG2, -FF_next_N
|
|
|
|
+ | or CARG2, CARG2, CARG3
|
|
|
|
+ | bnez CARG2, >5
|
|
|
|
+ |. lui TMP1, 0xfffe
|
|
| addu PC, TMP0, TMP2
|
|
| addu PC, TMP0, TMP2
|
|
- | lui TMP1, 0xfffe
|
|
|
|
| ori TMP1, TMP1, 0x7fff
|
|
| ori TMP1, TMP1, 0x7fff
|
|
| sw r0, -8+LO(RA) // Initialize control var.
|
|
| sw r0, -8+LO(RA) // Initialize control var.
|
|
| sw TMP1, -8+HI(RA)
|
|
| sw TMP1, -8+HI(RA)
|
|
@@ -3646,7 +3646,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|
|
| li TMP3, BC_JMP
|
|
| li TMP3, BC_JMP
|
|
| li TMP1, BC_ITERC
|
|
| li TMP1, BC_ITERC
|
|
| sb TMP3, -4+OFS_OP(PC)
|
|
| sb TMP3, -4+OFS_OP(PC)
|
|
- | addu PC, TMP0, TMP2
|
|
|
|
|
|
+ | addu PC, TMP0, TMP2
|
|
| b <1
|
|
| b <1
|
|
|. sb TMP1, OFS_OP(PC)
|
|
|. sb TMP1, OFS_OP(PC)
|
|
break;
|
|
break;
|