diff options
Diffstat (limited to 'src/vm_mips64.dasc')
-rw-r--r-- | src/vm_mips64.dasc | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/src/vm_mips64.dasc b/src/vm_mips64.dasc index 05395ffd..0d28326a 100644 --- a/src/vm_mips64.dasc +++ b/src/vm_mips64.dasc | |||
@@ -1322,27 +1322,24 @@ static void build_subroutines(BuildCtx *ctx) | |||
1322 | |//-- Base library: iterators ------------------------------------------- | 1322 | |//-- Base library: iterators ------------------------------------------- |
1323 | | | 1323 | | |
1324 | |.ffunc_1 next | 1324 | |.ffunc_1 next |
1325 | | checktp CARG2, CARG1, -LJ_TTAB, ->fff_fallback | 1325 | | checktp CARG1, -LJ_TTAB, ->fff_fallback |
1326 | | daddu TMP2, BASE, NARGS8:RC | 1326 | | daddu TMP2, BASE, NARGS8:RC |
1327 | | sd TISNIL, 0(TMP2) // Set missing 2nd arg to nil. | 1327 | | sd TISNIL, 0(TMP2) // Set missing 2nd arg to nil. |
1328 | | ld PC, FRAME_PC(BASE) | ||
1329 | | load_got lj_tab_next | 1328 | | load_got lj_tab_next |
1330 | | sd BASE, L->base // Add frame since C call can throw. | 1329 | | ld PC, FRAME_PC(BASE) |
1331 | | sd BASE, L->top // Dummy frame length is ok. | 1330 | | daddiu CARG2, BASE, 8 |
1332 | | daddiu CARG3, BASE, 8 | 1331 | | call_intern lj_tab_next // (GCtab *t, cTValue *key, TValue *o) |
1333 | | sd PC, SAVE_PC | 1332 | |. daddiu CARG3, BASE, -16 |
1334 | | call_intern lj_tab_next // (lua_State *L, GCtab *t, TValue *key) | 1333 | | // Returns 1=found, 0=end, -1=error. |
1335 | |. move CARG1, L | 1334 | | daddiu RA, BASE, -16 |
1336 | | // Returns 0 at end of traversal. | 1335 | | bgtz CRET1, ->fff_res // Found key/value. |
1336 | |. li RD, (2+1)*8 | ||
1337 | | beqz CRET1, ->fff_restv // End of traversal: return nil. | 1337 | | beqz CRET1, ->fff_restv // End of traversal: return nil. |
1338 | |. move CARG1, TISNIL | 1338 | |. move CARG1, TISNIL |
1339 | | ld TMP0, 8(BASE) | 1339 | | ld CFUNC:RB, FRAME_FUNC(BASE) |
1340 | | daddiu RA, BASE, -16 | 1340 | | cleartp CFUNC:RB |
1341 | | ld TMP2, 16(BASE) | 1341 | | b ->fff_fallback // Invalid key. |
1342 | | sd TMP0, 0(RA) | 1342 | |. li RC, 2*8 |
1343 | | sd TMP2, 8(RA) | ||
1344 | | b ->fff_res | ||
1345 | |. li RD, (2+1)*8 | ||
1346 | | | 1343 | | |
1347 | |.ffunc_1 pairs | 1344 | |.ffunc_1 pairs |
1348 | | checktp TAB:TMP1, CARG1, -LJ_TTAB, ->fff_fallback | 1345 | | checktp TAB:TMP1, CARG1, -LJ_TTAB, ->fff_fallback |
@@ -4727,11 +4724,10 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
4727 | |. addiu RC, RC, 1 | 4724 | |. addiu RC, RC, 1 |
4728 | | sd TMP2, 0(RA) | 4725 | | sd TMP2, 0(RA) |
4729 | | sd CARG1, 8(RA) | 4726 | | sd CARG1, 8(RA) |
4730 | | or TMP0, RC, CARG3 | ||
4731 | | lui TMP3, (-(BCBIAS_J*4 >> 16) & 65535) | 4727 | | lui TMP3, (-(BCBIAS_J*4 >> 16) & 65535) |
4732 | | decode_RD4b RD | 4728 | | decode_RD4b RD |
4733 | | daddu RD, RD, TMP3 | 4729 | | daddu RD, RD, TMP3 |
4734 | | sw TMP0, -8+LO(RA) // Update control var. | 4730 | | sw RC, -8+LO(RA) // Update control var. |
4735 | | daddu PC, PC, RD | 4731 | | daddu PC, PC, RD |
4736 | |3: | 4732 | |3: |
4737 | | ins_next | 4733 | | ins_next |
@@ -4781,9 +4777,9 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
4781 | | daddiu TMP1, TMP1, -FF_next_N | 4777 | | daddiu TMP1, TMP1, -FF_next_N |
4782 | | or AT, AT, TMP1 | 4778 | | or AT, AT, TMP1 |
4783 | | bnez AT, >5 | 4779 | | bnez AT, >5 |
4784 | |. lui TMP1, 0xfffe | 4780 | |. lui TMP1, (LJ_KEYINDEX >> 16) |
4785 | | daddu PC, TMP0, TMP2 | 4781 | | daddu PC, TMP0, TMP2 |
4786 | | ori TMP1, TMP1, 0x7fff | 4782 | | ori TMP1, TMP1, (LJ_KEYINDEX & 0xffff) |
4787 | | dsll TMP1, TMP1, 32 | 4783 | | dsll TMP1, TMP1, 32 |
4788 | | sd TMP1, -8(RA) | 4784 | | sd TMP1, -8(RA) |
4789 | |1: | 4785 | |1: |