diff options
Diffstat (limited to 'src/vm_mips.dasc')
-rw-r--r-- | src/vm_mips.dasc | 38 |
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: |