aboutsummaryrefslogtreecommitdiff
path: root/src/vm_mips.dasc
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm_mips.dasc')
-rw-r--r--src/vm_mips.dasc38
1 files changed, 15 insertions, 23 deletions
diff --git a/src/vm_mips.dasc b/src/vm_mips.dasc
index 7bd86514..3b0ea4a2 100644
--- a/src/vm_mips.dasc
+++ b/src/vm_mips.dasc
@@ -1262,35 +1262,27 @@ static void build_subroutines(BuildCtx *ctx)
1262 |//-- Base library: iterators ------------------------------------------- 1262 |//-- Base library: iterators -------------------------------------------
1263 | 1263 |
1264 |.ffunc next 1264 |.ffunc next
1265 | lw CARG1, HI(BASE) 1265 | lw CARG2, HI(BASE)
1266 | lw TAB:CARG2, LO(BASE) 1266 | lw TAB:CARG1, LO(BASE)
1267 | beqz NARGS8:RC, ->fff_fallback 1267 | beqz NARGS8:RC, ->fff_fallback
1268 |. addu TMP2, BASE, NARGS8:RC 1268 |. addu TMP2, BASE, NARGS8:RC
1269 | li AT, LJ_TTAB 1269 | li AT, LJ_TTAB
1270 | sw TISNIL, HI(TMP2) // Set missing 2nd arg to nil. 1270 | sw TISNIL, HI(TMP2) // Set missing 2nd arg to nil.
1271 | bne CARG1, AT, ->fff_fallback 1271 | bne CARG2, AT, ->fff_fallback
1272 |. lw PC, FRAME_PC(BASE) 1272 |. lw PC, FRAME_PC(BASE)
1273 | load_got lj_tab_next 1273 | load_got lj_tab_next
1274 | sw BASE, L->base // Add frame since C call can throw. 1274 | addiu CARG2, BASE, 8
1275 | sw BASE, L->top // Dummy frame length is ok. 1275 | call_intern lj_tab_next // (GCtab *t, cTValue *key, TValue *o)
1276 | addiu CARG3, BASE, 8 1276 |. addiu CARG3, BASE, -8
1277 | sw PC, SAVE_PC 1277 | // Returns 1=found, 0=end, -1=error.
1278 | call_intern lj_tab_next // (lua_State *L, GCtab *t, TValue *key) 1278 | addiu RA, BASE, -8
1279 |. move CARG1, L 1279 | bgtz CRET1, ->fff_res // Found key/value.
1280 | // Returns 0 at end of traversal. 1280 |. li RD, (2+1)*8
1281 | beqz CRET1, ->fff_restv // End of traversal: return nil. 1281 | beqz CRET1, ->fff_restv // End of traversal: return nil.
1282 |. li SFARG1HI, LJ_TNIL 1282 |. li SFARG1HI, LJ_TNIL
1283 | lw TMP0, 8+HI(BASE) 1283 | lw CFUNC:RB, FRAME_FUNC(BASE)
1284 | lw TMP1, 8+LO(BASE) 1284 | b ->fff_fallback // Invalid key.
1285 | addiu RA, BASE, -8 1285 |. li RC, 2*8
1286 | lw TMP2, 16+HI(BASE)
1287 | lw TMP3, 16+LO(BASE)
1288 | sw TMP0, HI(RA)
1289 | sw TMP1, LO(RA)
1290 | sw TMP2, 8+HI(RA)
1291 | sw TMP3, 8+LO(RA)
1292 | b ->fff_res
1293 |. li RD, (2+1)*8
1294 | 1286 |
1295 |.ffunc_1 pairs 1287 |.ffunc_1 pairs
1296 | li AT, LJ_TTAB 1288 | li AT, LJ_TTAB
@@ -4611,9 +4603,9 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
4611 | addiu CARG2, CARG2, -FF_next_N 4603 | addiu CARG2, CARG2, -FF_next_N
4612 | or CARG2, CARG2, CARG3 4604 | or CARG2, CARG2, CARG3
4613 | bnez CARG2, >5 4605 | bnez CARG2, >5
4614 |. lui TMP1, 0xfffe 4606 |. lui TMP1, (LJ_KEYINDEX >> 16)
4615 | addu PC, TMP0, TMP2 4607 | addu PC, TMP0, TMP2
4616 | ori TMP1, TMP1, 0x7fff 4608 | ori TMP1, TMP1, (LJ_KEYINDEX & 0xffff)
4617 | sw r0, -8+LO(RA) // Initialize control var. 4609 | sw r0, -8+LO(RA) // Initialize control var.
4618 | sw TMP1, -8+HI(RA) 4610 | sw TMP1, -8+HI(RA)
4619 |1: 4611 |1: