MIPS: Fix BC_ISNEXT fallback path.

Thanks to RT-RK.com.
This commit is contained in:
Mike Pall 2016-04-14 00:14:42 +02:00
parent 1c6fd13dbd
commit e5b5e079c3

View File

@ -3619,24 +3619,24 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
case BC_ISNEXT:
| // RA = base*8, RD = target (points to ITERN)
| 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
| 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
| lui TMP1, 0xfffe
| ori TMP1, TMP1, 0x7fff
| sw r0, -8+LO(RA) // Initialize control var.
| sw TMP1, -8+HI(RA)
@ -3646,7 +3646,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| li TMP3, BC_JMP
| li TMP1, BC_ITERC
| sb TMP3, -4+OFS_OP(PC)
| addu PC, TMP0, TMP2
| addu PC, TMP0, TMP2
| b <1
|. sb TMP1, OFS_OP(PC)
break;