diff options
author | Mike Pall <mike> | 2011-10-24 16:23:01 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-10-24 16:24:47 +0200 |
commit | 96d8611d1b3c038d565016c0383e2cb7a8064449 (patch) | |
tree | d141413c36917dcb3f8e804228f8e1f14188e6e4 /src | |
parent | 167f638f91a4ff186ffa6ef8a8915422ea52f38b (diff) | |
download | luajit-96d8611d1b3c038d565016c0383e2cb7a8064449.tar.gz luajit-96d8611d1b3c038d565016c0383e2cb7a8064449.tar.bz2 luajit-96d8611d1b3c038d565016c0383e2cb7a8064449.zip |
PPC: Fix/improve interpreter/JIT integration.
Switch to per-trace exit stubs.
Drop register holding current trace number.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_ppc.dasc | 34 | ||||
-rw-r--r-- | src/buildvm_ppc.h | 820 |
2 files changed, 444 insertions, 410 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index c0a461cd..aa133dcc 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
@@ -25,8 +25,7 @@ | |||
25 | |.define DISPATCH, r17 // Opcode dispatch table. | 25 | |.define DISPATCH, r17 // Opcode dispatch table. |
26 | |.define LREG, r18 // Register holding lua_State (also in SAVE_L). | 26 | |.define LREG, r18 // Register holding lua_State (also in SAVE_L). |
27 | |.define MULTRES, r19 // Size of multi-result: (nresults+1)*8. | 27 | |.define MULTRES, r19 // Size of multi-result: (nresults+1)*8. |
28 | |.define JGL, r30 // On-trace: global_State + 32768. | 28 | |.define JGL, r31 // On-trace: global_State + 32768. |
29 | |.define JTR, r31 // On-trace: trace number. | ||
30 | | | 29 | | |
31 | |// Constants for type-comparisons, stores and conversions. C callee-save. | 30 | |// Constants for type-comparisons, stores and conversions. C callee-save. |
32 | |.define TISNUM, r22 | 31 | |.define TISNUM, r22 |
@@ -2318,6 +2317,7 @@ static void build_subroutines(BuildCtx *ctx) | |||
2318 | | sub NARGS8:RC, TMP0, BASE | 2317 | | sub NARGS8:RC, TMP0, BASE |
2319 | | add RA, BASE, RA | 2318 | | add RA, BASE, RA |
2320 | | lwz LFUNC:RB, FRAME_FUNC(BASE) | 2319 | | lwz LFUNC:RB, FRAME_FUNC(BASE) |
2320 | | lwz INS, -4(PC) | ||
2321 | | mtctr CRET1 | 2321 | | mtctr CRET1 |
2322 | | bctr | 2322 | | bctr |
2323 | | | 2323 | | |
@@ -2353,7 +2353,7 @@ static void build_subroutines(BuildCtx *ctx) | |||
2353 | | savex_ 16,17,18,19 | 2353 | | savex_ 16,17,18,19 |
2354 | | stw TMP1, 16+32*8+0*4(sp) // Clear RID_TMP. | 2354 | | stw TMP1, 16+32*8+0*4(sp) // Clear RID_TMP. |
2355 | | savex_ 20,21,22,23 | 2355 | | savex_ 20,21,22,23 |
2356 | | lwz CARG4, 0(CARG3) // Load exit stub group offset. | 2356 | | lhz CARG4, 2(CARG3) // Load trace number. |
2357 | | savex_ 24,25,26,27 | 2357 | | savex_ 24,25,26,27 |
2358 | | lwz L, DISPATCH_GL(jit_L)(DISPATCH) | 2358 | | lwz L, DISPATCH_GL(jit_L)(DISPATCH) |
2359 | | savex_ 28,29,30,31 | 2359 | | savex_ 28,29,30,31 |
@@ -2363,12 +2363,11 @@ static void build_subroutines(BuildCtx *ctx) | |||
2363 | | stw L, DISPATCH_J(L)(DISPATCH) | 2363 | | stw L, DISPATCH_J(L)(DISPATCH) |
2364 | | subi CARG3, CARG3, 2 | 2364 | | subi CARG3, CARG3, 2 |
2365 | | stw TMP1, DISPATCH_GL(jit_L)(DISPATCH) | 2365 | | stw TMP1, DISPATCH_GL(jit_L)(DISPATCH) |
2366 | | add CARG3, CARG4, CARG3 | 2366 | | stw CARG4, DISPATCH_J(parent)(DISPATCH) |
2367 | | stw BASE, L->base | 2367 | | stw BASE, L->base |
2368 | | addi CARG1, DISPATCH, GG_DISP2J | 2368 | | addi CARG1, DISPATCH, GG_DISP2J |
2369 | | stw CARG3, DISPATCH_J(exitno)(DISPATCH) | 2369 | | stw CARG3, DISPATCH_J(exitno)(DISPATCH) |
2370 | | addi CARG2, sp, 16 | 2370 | | addi CARG2, sp, 16 |
2371 | | stw JTR, DISPATCH_J(parent)(DISPATCH) | ||
2372 | | bl extern lj_trace_exit // (jit_State *J, ExitState *ex) | 2371 | | bl extern lj_trace_exit // (jit_State *J, ExitState *ex) |
2373 | | // Returns MULTRES (unscaled) or negated error code. | 2372 | | // Returns MULTRES (unscaled) or negated error code. |
2374 | | lwz TMP1, L->cframe | 2373 | | lwz TMP1, L->cframe |
@@ -2416,13 +2415,14 @@ static void build_subroutines(BuildCtx *ctx) | |||
2416 | | decode_RA8 RA, INS | 2415 | | decode_RA8 RA, INS |
2417 | | lwzx TMP0, DISPATCH, TMP1 | 2416 | | lwzx TMP0, DISPATCH, TMP1 |
2418 | | mtctr TMP0 | 2417 | | mtctr TMP0 |
2419 | | cmpwi TMP1, BC_FUNCF*4 // Function header? | 2418 | | cmplwi TMP1, BC_FUNCF*4 // Function header? |
2420 | | beq >2 | 2419 | | bge >2 |
2421 | | decode_RB8 RB, INS | 2420 | | decode_RB8 RB, INS |
2422 | | decode_RD8 RD, INS | 2421 | | decode_RD8 RD, INS |
2423 | | decode_RC8 RC, INS | 2422 | | decode_RC8 RC, INS |
2424 | | bctr | 2423 | | bctr |
2425 | |2: | 2424 | |2: |
2425 | | subi RC, MULTRES, 8 | ||
2426 | | add RA, RA, BASE | 2426 | | add RA, RA, BASE |
2427 | | bctr | 2427 | | bctr |
2428 | | | 2428 | | |
@@ -4348,12 +4348,12 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
4348 | | bgt >3 // See FP loop below. | 4348 | | bgt >3 // See FP loop below. |
4349 | } else if (op == BC_JFORI) { | 4349 | } else if (op == BC_JFORI) { |
4350 | | addis PC, RD, -(BCBIAS_J*4 >> 16) | 4350 | | addis PC, RD, -(BCBIAS_J*4 >> 16) |
4351 | | ble =>BC_JLOOP | 4351 | | bley >7 |
4352 | } else if (op == BC_IFORL) { | 4352 | } else if (op == BC_IFORL) { |
4353 | | bgt >2 | 4353 | | bgt >2 |
4354 | | addis PC, RD, -(BCBIAS_J*4 >> 16) | 4354 | | addis PC, RD, -(BCBIAS_J*4 >> 16) |
4355 | } else { | 4355 | } else { |
4356 | | ble =>BC_JLOOP | 4356 | | bley =>BC_JLOOP |
4357 | } | 4357 | } |
4358 | |2: | 4358 | |2: |
4359 | | ins_next | 4359 | | ins_next |
@@ -4419,8 +4419,10 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
4419 | } | 4419 | } |
4420 | |1: | 4420 | |1: |
4421 | | addis PC, RD, -(BCBIAS_J*4 >> 16) | 4421 | | addis PC, RD, -(BCBIAS_J*4 >> 16) |
4422 | } else if (op == BC_JFORI) { | ||
4423 | | bley >7 | ||
4422 | } else { | 4424 | } else { |
4423 | | ble =>BC_JLOOP | 4425 | | bley =>BC_JLOOP |
4424 | } | 4426 | } |
4425 | if (LJ_DUALNUM) { | 4427 | if (LJ_DUALNUM) { |
4426 | | b <2 | 4428 | | b <2 |
@@ -4435,10 +4437,18 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
4435 | | addis PC, RD, -(BCBIAS_J*4 >> 16) | 4437 | | addis PC, RD, -(BCBIAS_J*4 >> 16) |
4436 | } else if (op == BC_IFORL) { | 4438 | } else if (op == BC_IFORL) { |
4437 | | bgey <1 | 4439 | | bgey <1 |
4440 | } else if (op == BC_JFORI) { | ||
4441 | | bgey >7 | ||
4438 | } else { | 4442 | } else { |
4439 | | bge =>BC_JLOOP | 4443 | | bgey =>BC_JLOOP |
4440 | } | 4444 | } |
4441 | | b <2 | 4445 | | b <2 |
4446 | if (op == BC_JFORI) { | ||
4447 | |7: | ||
4448 | | lwz INS, -4(PC) | ||
4449 | | decode_RD8 RD, INS | ||
4450 | | b =>BC_JLOOP | ||
4451 | } | ||
4442 | break; | 4452 | break; |
4443 | 4453 | ||
4444 | case BC_ITERL: | 4454 | case BC_ITERL: |
@@ -4490,6 +4500,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
4490 | | // RA = base*8 (ignored), RD = traceno*8 | 4500 | | // RA = base*8 (ignored), RD = traceno*8 |
4491 | | lwz TMP1, DISPATCH_J(trace)(DISPATCH) | 4501 | | lwz TMP1, DISPATCH_J(trace)(DISPATCH) |
4492 | | srwi RD, RD, 1 | 4502 | | srwi RD, RD, 1 |
4503 | | // Traces on PPC don't store the trace number, so use 0. | ||
4504 | | stw ZERO, DISPATCH_GL(vmstate)(DISPATCH) | ||
4493 | | lwzx TRACE:TMP2, TMP1, RD | 4505 | | lwzx TRACE:TMP2, TMP1, RD |
4494 | | mcrxr cr0 // Clear SO flag. | 4506 | | mcrxr cr0 // Clear SO flag. |
4495 | | lwz TMP2, TRACE:TMP2->mcode | 4507 | | lwz TMP2, TRACE:TMP2->mcode |
diff --git a/src/buildvm_ppc.h b/src/buildvm_ppc.h index 724ef661..0bc8229f 100644 --- a/src/buildvm_ppc.h +++ b/src/buildvm_ppc.h | |||
@@ -12,7 +12,7 @@ | |||
12 | #define DASM_SECTION_CODE_OP 0 | 12 | #define DASM_SECTION_CODE_OP 0 |
13 | #define DASM_SECTION_CODE_SUB 1 | 13 | #define DASM_SECTION_CODE_SUB 1 |
14 | #define DASM_MAXSECTION 2 | 14 | #define DASM_MAXSECTION 2 |
15 | static const unsigned int build_actionlist[7562] = { | 15 | static const unsigned int build_actionlist[7577] = { |
16 | 0x00010001, | 16 | 0x00010001, |
17 | 0x00060014, | 17 | 0x00060014, |
18 | 0x72000000, | 18 | 0x72000000, |
@@ -3793,6 +3793,7 @@ static const unsigned int build_actionlist[7562] = { | |||
3793 | 0x7d6e0050, | 3793 | 0x7d6e0050, |
3794 | 0x7e8ea214, | 3794 | 0x7e8ea214, |
3795 | 0x814efffc, | 3795 | 0x814efffc, |
3796 | 0x80f0fffc, | ||
3796 | 0x7c6903a6, | 3797 | 0x7c6903a6, |
3797 | 0x4e800420, | 3798 | 0x4e800420, |
3798 | 0x00060096, | 3799 | 0x00060096, |
@@ -3801,7 +3802,7 @@ static const unsigned int build_actionlist[7562] = { | |||
3801 | 0x00098200, | 3802 | 0x00098200, |
3802 | 0xbc410000, | 3803 | 0xbc410000, |
3803 | 0x00098200, | 3804 | 0x00098200, |
3804 | 0x3a3e0000, | 3805 | 0x3a3f0000, |
3805 | 0x00098200, | 3806 | 0x00098200, |
3806 | 0x38800000, | 3807 | 0x38800000, |
3807 | 0x00098200, | 3808 | 0x00098200, |
@@ -3868,7 +3869,7 @@ static const unsigned int build_actionlist[7562] = { | |||
3868 | 0x00098200, | 3869 | 0x00098200, |
3869 | 0xdae10000, | 3870 | 0xdae10000, |
3870 | 0x00098200, | 3871 | 0x00098200, |
3871 | 0x80c50000, | 3872 | 0xa0c50002, |
3872 | 0xdb010000, | 3873 | 0xdb010000, |
3873 | 0x00098200, | 3874 | 0x00098200, |
3874 | 0xdb210000, | 3875 | 0xdb210000, |
@@ -3898,7 +3899,8 @@ static const unsigned int build_actionlist[7562] = { | |||
3898 | 0x38a5fffe, | 3899 | 0x38a5fffe, |
3899 | 0x91110000, | 3900 | 0x91110000, |
3900 | 0x00098200, | 3901 | 0x00098200, |
3901 | 0x7ca62a14, | 3902 | 0x90d10000, |
3903 | 0x00098200, | ||
3902 | 0x91d20000, | 3904 | 0x91d20000, |
3903 | 0x00098200, | 3905 | 0x00098200, |
3904 | 0x38710000, | 3906 | 0x38710000, |
@@ -3906,8 +3908,6 @@ static const unsigned int build_actionlist[7562] = { | |||
3906 | 0x90b10000, | 3908 | 0x90b10000, |
3907 | 0x00098200, | 3909 | 0x00098200, |
3908 | 0x38810010, | 3910 | 0x38810010, |
3909 | 0x93f10000, | ||
3910 | 0x00098200, | ||
3911 | 0x48000001, | 3911 | 0x48000001, |
3912 | 0x0003002b, | 3912 | 0x0003002b, |
3913 | 0x81120000, | 3913 | 0x81120000, |
@@ -3925,7 +3925,7 @@ static const unsigned int build_actionlist[7562] = { | |||
3925 | 0x00060097, | 3925 | 0x00060097, |
3926 | 0x00000000, | 3926 | 0x00000000, |
3927 | 0x82410024, | 3927 | 0x82410024, |
3928 | 0x3a3e0000, | 3928 | 0x3a3f0000, |
3929 | 0x00098200, | 3929 | 0x00098200, |
3930 | 0x0006000b, | 3930 | 0x0006000b, |
3931 | 0x2c030000, | 3931 | 0x2c030000, |
@@ -3963,15 +3963,16 @@ static const unsigned int build_actionlist[7562] = { | |||
3963 | 0x54f4dd78, | 3963 | 0x54f4dd78, |
3964 | 0x7c11402e, | 3964 | 0x7c11402e, |
3965 | 0x7c0903a6, | 3965 | 0x7c0903a6, |
3966 | 0x2c080000, | 3966 | 0x28080000, |
3967 | 0x00098200, | 3967 | 0x00090200, |
3968 | 0x41820000, | 3968 | 0x40800000, |
3969 | 0x00050802, | 3969 | 0x00050802, |
3970 | 0x54ea5d78, | 3970 | 0x54ea5d78, |
3971 | 0x54ec9b78, | 3971 | 0x54ec9b78, |
3972 | 0x54eb9d78, | 3972 | 0x54eb9d78, |
3973 | 0x4e800420, | 3973 | 0x4e800420, |
3974 | 0x0006000c, | 3974 | 0x0006000c, |
3975 | 0x3973fff8, | ||
3975 | 0x7e947214, | 3976 | 0x7e947214, |
3976 | 0x4e800420, | 3977 | 0x4e800420, |
3977 | 0x0006000d, | 3978 | 0x0006000d, |
@@ -7193,15 +7194,15 @@ static const unsigned int build_actionlist[7562] = { | |||
7193 | 0x00000000, | 7194 | 0x00000000, |
7194 | 0x3e0c0000, | 7195 | 0x3e0c0000, |
7195 | 0x00098200, | 7196 | 0x00098200, |
7196 | 0x40810000, | 7197 | 0x40a10000, |
7197 | 0x00070800, | 7198 | 0x00050807, |
7198 | 0x00000000, | 7199 | 0x00000000, |
7199 | 0x41810000, | 7200 | 0x41810000, |
7200 | 0x00050802, | 7201 | 0x00050802, |
7201 | 0x3e0c0000, | 7202 | 0x3e0c0000, |
7202 | 0x00098200, | 7203 | 0x00098200, |
7203 | 0x00000000, | 7204 | 0x00000000, |
7204 | 0x40810000, | 7205 | 0x40a10000, |
7205 | 0x00070800, | 7206 | 0x00070800, |
7206 | 0x00000000, | 7207 | 0x00000000, |
7207 | 0x0006000c, | 7208 | 0x0006000c, |
@@ -7296,7 +7297,10 @@ static const unsigned int build_actionlist[7562] = { | |||
7296 | 0x3e0c0000, | 7297 | 0x3e0c0000, |
7297 | 0x00098200, | 7298 | 0x00098200, |
7298 | 0x00000000, | 7299 | 0x00000000, |
7299 | 0x40810000, | 7300 | 0x40a10000, |
7301 | 0x00050807, | ||
7302 | 0x00000000, | ||
7303 | 0x40a10000, | ||
7300 | 0x00070800, | 7304 | 0x00070800, |
7301 | 0x00000000, | 7305 | 0x00000000, |
7302 | 0x48000000, | 7306 | 0x48000000, |
@@ -7325,12 +7329,21 @@ static const unsigned int build_actionlist[7562] = { | |||
7325 | 0x40a00000, | 7329 | 0x40a00000, |
7326 | 0x0005080b, | 7330 | 0x0005080b, |
7327 | 0x00000000, | 7331 | 0x00000000, |
7328 | 0x40800000, | 7332 | 0x40a00000, |
7333 | 0x00050807, | ||
7334 | 0x00000000, | ||
7335 | 0x40a00000, | ||
7329 | 0x00070800, | 7336 | 0x00070800, |
7330 | 0x00000000, | 7337 | 0x00000000, |
7331 | 0x48000000, | 7338 | 0x48000000, |
7332 | 0x0005000c, | 7339 | 0x0005000c, |
7333 | 0x00000000, | 7340 | 0x00000000, |
7341 | 0x00060011, | ||
7342 | 0x80f0fffc, | ||
7343 | 0x54ec9b78, | ||
7344 | 0x48000000, | ||
7345 | 0x00070000, | ||
7346 | 0x00000000, | ||
7334 | 0x5608fe7c, | 7347 | 0x5608fe7c, |
7335 | 0x39080000, | 7348 | 0x39080000, |
7336 | 0x00098200, | 7349 | 0x00098200, |
@@ -7398,6 +7411,8 @@ static const unsigned int build_actionlist[7562] = { | |||
7398 | 0x00098200, | 7411 | 0x00098200, |
7399 | 0x558c007e, | 7412 | 0x558c007e, |
7400 | 0x000900ab, | 7413 | 0x000900ab, |
7414 | 0x93110000, | ||
7415 | 0x00098200, | ||
7401 | 0x7d28602e, | 7416 | 0x7d28602e, |
7402 | 0x7c000400, | 7417 | 0x7c000400, |
7403 | 0x81290000, | 7418 | 0x81290000, |
@@ -7407,7 +7422,7 @@ static const unsigned int build_actionlist[7562] = { | |||
7407 | 0x7d2903a6, | 7422 | 0x7d2903a6, |
7408 | 0x92510000, | 7423 | 0x92510000, |
7409 | 0x00098200, | 7424 | 0x00098200, |
7410 | 0x3bd10000, | 7425 | 0x3bf10000, |
7411 | 0x00098200, | 7426 | 0x00098200, |
7412 | 0x4e800420, | 7427 | 0x4e800420, |
7413 | 0x00000000, | 7428 | 0x00000000, |
@@ -8312,29 +8327,29 @@ static void build_subroutines(BuildCtx *ctx) | |||
8312 | #endif | 8327 | #endif |
8313 | dasm_put(Dst, 3762, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); | 8328 | dasm_put(Dst, 3762, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); |
8314 | #if LJ_HASJIT | 8329 | #if LJ_HASJIT |
8315 | dasm_put(Dst, 3784, -(16+32*8+32*4), 16+32*8+2*4, -GG_DISP2G-32768, ~LJ_VMST_EXIT, 16+32*8+32*4, DISPATCH_GL(vmstate), 16+0*8, 16+1*8, 16+2*8, 16+3*8, 16+4*8, 16+5*8, 16+6*8, 16+7*8, 16+32*8+32*4, 16+8*8, 16+9*8, 16+10*8, 16+11*8, 16+32*8+1*4, 16+12*8, 16+13*8); | 8330 | dasm_put(Dst, 3785, -(16+32*8+32*4), 16+32*8+2*4, -GG_DISP2G-32768, ~LJ_VMST_EXIT, 16+32*8+32*4, DISPATCH_GL(vmstate), 16+0*8, 16+1*8, 16+2*8, 16+3*8, 16+4*8, 16+5*8, 16+6*8, 16+7*8, 16+32*8+32*4, 16+8*8, 16+9*8, 16+10*8, 16+11*8, 16+32*8+1*4, 16+12*8, 16+13*8); |
8316 | dasm_put(Dst, 3831, 16+14*8, 16+15*8, 16+16*8, 16+17*8, 16+18*8, 16+19*8, 16+32*8+0*4, 16+20*8, 16+21*8, 16+22*8, 16+23*8, 16+24*8, 16+25*8, 16+26*8, 16+27*8, DISPATCH_GL(jit_L), 16+28*8, 16+29*8, 16+30*8, 16+31*8, DISPATCH_GL(jit_base), 32-2); | 8331 | dasm_put(Dst, 3832, 16+14*8, 16+15*8, 16+16*8, 16+17*8, 16+18*8, 16+19*8, 16+32*8+0*4, 16+20*8, 16+21*8, 16+22*8, 16+23*8, 16+24*8, 16+25*8, 16+26*8, 16+27*8, DISPATCH_GL(jit_L), 16+28*8, 16+29*8, 16+30*8, 16+31*8, DISPATCH_GL(jit_base), 32-2); |
8317 | dasm_put(Dst, 3880, DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), GG_DISP2J, DISPATCH_J(exitno), DISPATCH_J(parent), Dt1(->cframe), Dt1(->base)); | 8332 | dasm_put(Dst, 3881, DISPATCH_J(L), DISPATCH_GL(jit_L), DISPATCH_J(parent), Dt1(->base), GG_DISP2J, DISPATCH_J(exitno), Dt1(->cframe), Dt1(->base)); |
8318 | #endif | 8333 | #endif |
8319 | dasm_put(Dst, 3909); | 8334 | dasm_put(Dst, 3909); |
8320 | #if LJ_HASJIT | 8335 | #if LJ_HASJIT |
8321 | dasm_put(Dst, 3911, -GG_DISP2G-32768, 31-3, Dt7(->pc), DISPATCH_GL(jit_L), PC2PROTO(k), LJ_TISNUM, LJ_TNIL, DISPATCH_GL(vmstate), BC_FUNCF*4); | 8336 | dasm_put(Dst, 3911, -GG_DISP2G-32768, 31-3, Dt7(->pc), DISPATCH_GL(jit_L), PC2PROTO(k), LJ_TISNUM, LJ_TNIL, DISPATCH_GL(vmstate), BC_FUNCF*4); |
8322 | #endif | 8337 | #endif |
8323 | dasm_put(Dst, 3967); | 8338 | dasm_put(Dst, 3968); |
8324 | #if LJ_HASJIT | 8339 | #if LJ_HASJIT |
8325 | dasm_put(Dst, 3975); | 8340 | dasm_put(Dst, 3976); |
8326 | #endif | 8341 | #endif |
8327 | dasm_put(Dst, 3978); | 8342 | dasm_put(Dst, 3979); |
8328 | #if LJ_HASJIT | 8343 | #if LJ_HASJIT |
8329 | dasm_put(Dst, 4058); | 8344 | dasm_put(Dst, 4059); |
8330 | #else | 8345 | #else |
8331 | dasm_put(Dst, 4080); | 8346 | dasm_put(Dst, 4081); |
8332 | #endif | 8347 | #endif |
8333 | dasm_put(Dst, 4082); | 8348 | dasm_put(Dst, 4083); |
8334 | #if LJ_HASFFI | 8349 | #if LJ_HASFFI |
8335 | #define DtE(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) | 8350 | #define DtE(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) |
8336 | dasm_put(Dst, 4084, DtE(->spadj), DtE(->nsp), DtE(->nfpr), DtE(->stack), 31-2, DtE(->fpr[0]), DtE(->fpr[1]), DtE(->fpr[2]), DtE(->fpr[3]), DtE(->fpr[4]), DtE(->fpr[5]), DtE(->fpr[6]), DtE(->fpr[7]), DtE(->func), DtE(->gpr[1]), DtE(->gpr[2])); | 8351 | dasm_put(Dst, 4085, DtE(->spadj), DtE(->nsp), DtE(->nfpr), DtE(->stack), 31-2, DtE(->fpr[0]), DtE(->fpr[1]), DtE(->fpr[2]), DtE(->fpr[3]), DtE(->fpr[4]), DtE(->fpr[5]), DtE(->fpr[6]), DtE(->fpr[7]), DtE(->func), DtE(->gpr[1]), DtE(->gpr[2])); |
8337 | dasm_put(Dst, 4140, DtE(->gpr[3]), DtE(->gpr[4]), DtE(->gpr[5]), DtE(->gpr[6]), DtE(->gpr[7]), DtE(->gpr[0]), DtE(->gpr[0]), DtE(->fpr[0]), DtE(->gpr[1]), DtE(->gpr[2]), DtE(->gpr[3])); | 8352 | dasm_put(Dst, 4141, DtE(->gpr[3]), DtE(->gpr[4]), DtE(->gpr[5]), DtE(->gpr[6]), DtE(->gpr[7]), DtE(->gpr[0]), DtE(->gpr[0]), DtE(->fpr[0]), DtE(->gpr[1]), DtE(->gpr[2]), DtE(->gpr[3])); |
8338 | #endif | 8353 | #endif |
8339 | } | 8354 | } |
8340 | 8355 | ||
@@ -8342,7 +8357,7 @@ static void build_subroutines(BuildCtx *ctx) | |||
8342 | static void build_ins(BuildCtx *ctx, BCOp op, int defop) | 8357 | static void build_ins(BuildCtx *ctx, BCOp op, int defop) |
8343 | { | 8358 | { |
8344 | int vk = 0; | 8359 | int vk = 0; |
8345 | dasm_put(Dst, 4171, defop); | 8360 | dasm_put(Dst, 4172, defop); |
8346 | 8361 | ||
8347 | switch (op) { | 8362 | switch (op) { |
8348 | 8363 | ||
@@ -8352,224 +8367,224 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
8352 | 8367 | ||
8353 | case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: | 8368 | case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: |
8354 | if (LJ_DUALNUM) { | 8369 | if (LJ_DUALNUM) { |
8355 | dasm_put(Dst, 4173, -(BCBIAS_J*4 >> 16)); | 8370 | dasm_put(Dst, 4174, -(BCBIAS_J*4 >> 16)); |
8356 | if (op == BC_ISLT) { | 8371 | if (op == BC_ISLT) { |
8357 | dasm_put(Dst, 4190); | 8372 | dasm_put(Dst, 4191); |
8358 | } else if (op == BC_ISGE) { | 8373 | } else if (op == BC_ISGE) { |
8359 | dasm_put(Dst, 4193); | 8374 | dasm_put(Dst, 4194); |
8360 | } else if (op == BC_ISLE) { | 8375 | } else if (op == BC_ISLE) { |
8361 | dasm_put(Dst, 4196); | 8376 | dasm_put(Dst, 4197); |
8362 | } else { | 8377 | } else { |
8363 | dasm_put(Dst, 4199); | 8378 | dasm_put(Dst, 4200); |
8364 | } | 8379 | } |
8365 | dasm_put(Dst, 4202); | 8380 | dasm_put(Dst, 4203); |
8366 | if (op == BC_ISLT) { | 8381 | if (op == BC_ISLT) { |
8367 | dasm_put(Dst, 4241); | 8382 | dasm_put(Dst, 4242); |
8368 | } else if (op == BC_ISGE) { | 8383 | } else if (op == BC_ISGE) { |
8369 | dasm_put(Dst, 4244); | 8384 | dasm_put(Dst, 4245); |
8370 | } else if (op == BC_ISLE) { | 8385 | } else if (op == BC_ISLE) { |
8371 | dasm_put(Dst, 4247); | 8386 | dasm_put(Dst, 4248); |
8372 | } else { | 8387 | } else { |
8373 | dasm_put(Dst, 4251); | 8388 | dasm_put(Dst, 4252); |
8374 | } | 8389 | } |
8375 | dasm_put(Dst, 4255); | 8390 | dasm_put(Dst, 4256); |
8376 | } else { | 8391 | } else { |
8377 | dasm_put(Dst, 4258, -(BCBIAS_J*4 >> 16)); | 8392 | dasm_put(Dst, 4259, -(BCBIAS_J*4 >> 16)); |
8378 | if (op == BC_ISLT) { | 8393 | if (op == BC_ISLT) { |
8379 | dasm_put(Dst, 4275); | 8394 | dasm_put(Dst, 4276); |
8380 | } else if (op == BC_ISGE) { | 8395 | } else if (op == BC_ISGE) { |
8381 | dasm_put(Dst, 4278); | 8396 | dasm_put(Dst, 4279); |
8382 | } else if (op == BC_ISLE) { | 8397 | } else if (op == BC_ISLE) { |
8383 | dasm_put(Dst, 4281); | 8398 | dasm_put(Dst, 4282); |
8384 | } else { | 8399 | } else { |
8385 | dasm_put(Dst, 4285); | 8400 | dasm_put(Dst, 4286); |
8386 | } | 8401 | } |
8387 | dasm_put(Dst, 4289); | 8402 | dasm_put(Dst, 4290); |
8388 | } | 8403 | } |
8389 | break; | 8404 | break; |
8390 | 8405 | ||
8391 | case BC_ISEQV: case BC_ISNEV: | 8406 | case BC_ISEQV: case BC_ISNEV: |
8392 | vk = op == BC_ISEQV; | 8407 | vk = op == BC_ISEQV; |
8393 | if (LJ_DUALNUM) { | 8408 | if (LJ_DUALNUM) { |
8394 | dasm_put(Dst, 4302, -(BCBIAS_J*4 >> 16)); | 8409 | dasm_put(Dst, 4303, -(BCBIAS_J*4 >> 16)); |
8395 | if (vk) { | 8410 | if (vk) { |
8396 | dasm_put(Dst, 4315); | 8411 | dasm_put(Dst, 4316); |
8397 | } else { | 8412 | } else { |
8398 | dasm_put(Dst, 4318); | 8413 | dasm_put(Dst, 4319); |
8399 | } | 8414 | } |
8400 | } else { | 8415 | } else { |
8401 | dasm_put(Dst, 4321, -(BCBIAS_J*4 >> 16)); | 8416 | dasm_put(Dst, 4322, -(BCBIAS_J*4 >> 16)); |
8402 | if (vk) { | 8417 | if (vk) { |
8403 | dasm_put(Dst, 4338); | 8418 | dasm_put(Dst, 4339); |
8404 | } else { | 8419 | } else { |
8405 | dasm_put(Dst, 4342); | 8420 | dasm_put(Dst, 4343); |
8406 | } | 8421 | } |
8407 | dasm_put(Dst, 4346); | 8422 | dasm_put(Dst, 4347); |
8408 | } | 8423 | } |
8409 | dasm_put(Dst, 4358); | 8424 | dasm_put(Dst, 4359); |
8410 | if (!LJ_DUALNUM) { | 8425 | if (!LJ_DUALNUM) { |
8411 | dasm_put(Dst, 4360); | 8426 | dasm_put(Dst, 4361); |
8412 | } | 8427 | } |
8413 | if (LJ_HASFFI) { | 8428 | if (LJ_HASFFI) { |
8414 | dasm_put(Dst, 4363, LJ_TCDATA, LJ_TCDATA); | 8429 | dasm_put(Dst, 4364, LJ_TCDATA, LJ_TCDATA); |
8415 | } | 8430 | } |
8416 | dasm_put(Dst, 4368, ~LJ_TISPRI); | 8431 | dasm_put(Dst, 4369, ~LJ_TISPRI); |
8417 | if (LJ_HASFFI) { | 8432 | if (LJ_HASFFI) { |
8418 | dasm_put(Dst, 4373); | 8433 | dasm_put(Dst, 4374); |
8419 | } | 8434 | } |
8420 | dasm_put(Dst, 4375, ~LJ_TISTABUD); | 8435 | dasm_put(Dst, 4376, ~LJ_TISTABUD); |
8421 | if (LJ_HASFFI) { | 8436 | if (LJ_HASFFI) { |
8422 | dasm_put(Dst, 4378); | 8437 | dasm_put(Dst, 4379); |
8423 | } | 8438 | } |
8424 | dasm_put(Dst, 4381); | 8439 | dasm_put(Dst, 4382); |
8425 | if (vk) { | 8440 | if (vk) { |
8426 | dasm_put(Dst, 4389); | 8441 | dasm_put(Dst, 4390); |
8427 | } else { | 8442 | } else { |
8428 | dasm_put(Dst, 4394); | 8443 | dasm_put(Dst, 4395); |
8429 | } | 8444 | } |
8430 | if (LJ_DUALNUM) { | 8445 | if (LJ_DUALNUM) { |
8431 | dasm_put(Dst, 4399); | 8446 | dasm_put(Dst, 4400); |
8432 | } else { | 8447 | } else { |
8433 | dasm_put(Dst, 4414); | 8448 | dasm_put(Dst, 4415); |
8434 | } | 8449 | } |
8435 | dasm_put(Dst, 4417, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq); | 8450 | dasm_put(Dst, 4418, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq); |
8436 | break; | 8451 | break; |
8437 | 8452 | ||
8438 | case BC_ISEQS: case BC_ISNES: | 8453 | case BC_ISEQS: case BC_ISNES: |
8439 | vk = op == BC_ISEQS; | 8454 | vk = op == BC_ISEQS; |
8440 | dasm_put(Dst, 4436, 32-1); | 8455 | dasm_put(Dst, 4437, 32-1); |
8441 | if (LJ_HASFFI) { | 8456 | if (LJ_HASFFI) { |
8442 | dasm_put(Dst, 4444, LJ_TCDATA); | 8457 | dasm_put(Dst, 4445, LJ_TCDATA); |
8443 | } | 8458 | } |
8444 | dasm_put(Dst, 4447, LJ_TSTR); | 8459 | dasm_put(Dst, 4448, LJ_TSTR); |
8445 | if (LJ_HASFFI) { | 8460 | if (LJ_HASFFI) { |
8446 | dasm_put(Dst, 4451); | 8461 | dasm_put(Dst, 4452); |
8447 | } | 8462 | } |
8448 | dasm_put(Dst, 4454, -(BCBIAS_J*4 >> 16)); | 8463 | dasm_put(Dst, 4455, -(BCBIAS_J*4 >> 16)); |
8449 | if (vk) { | 8464 | if (vk) { |
8450 | dasm_put(Dst, 4462); | 8465 | dasm_put(Dst, 4463); |
8451 | } else { | 8466 | } else { |
8452 | dasm_put(Dst, 4464); | 8467 | dasm_put(Dst, 4465); |
8453 | } | 8468 | } |
8454 | dasm_put(Dst, 4466); | 8469 | dasm_put(Dst, 4467); |
8455 | break; | 8470 | break; |
8456 | 8471 | ||
8457 | case BC_ISEQN: case BC_ISNEN: | 8472 | case BC_ISEQN: case BC_ISNEN: |
8458 | vk = op == BC_ISEQN; | 8473 | vk = op == BC_ISEQN; |
8459 | if (LJ_DUALNUM) { | 8474 | if (LJ_DUALNUM) { |
8460 | dasm_put(Dst, 4478, -(BCBIAS_J*4 >> 16)); | 8475 | dasm_put(Dst, 4479, -(BCBIAS_J*4 >> 16)); |
8461 | if (vk) { | 8476 | if (vk) { |
8462 | dasm_put(Dst, 4490); | 8477 | dasm_put(Dst, 4491); |
8463 | } else { | 8478 | } else { |
8464 | dasm_put(Dst, 4492); | 8479 | dasm_put(Dst, 4493); |
8465 | } | 8480 | } |
8466 | dasm_put(Dst, 4494); | 8481 | dasm_put(Dst, 4495); |
8467 | } else { | 8482 | } else { |
8468 | if (vk) { | 8483 | if (vk) { |
8469 | dasm_put(Dst, 4501); | 8484 | dasm_put(Dst, 4502); |
8470 | } else { | 8485 | } else { |
8471 | dasm_put(Dst, 4503); | 8486 | dasm_put(Dst, 4504); |
8472 | } | 8487 | } |
8473 | dasm_put(Dst, 4505, -(BCBIAS_J*4 >> 16)); | 8488 | dasm_put(Dst, 4506, -(BCBIAS_J*4 >> 16)); |
8474 | } | 8489 | } |
8475 | if (vk) { | 8490 | if (vk) { |
8476 | dasm_put(Dst, 4518); | 8491 | dasm_put(Dst, 4519); |
8477 | if (!LJ_HASFFI) { | 8492 | if (!LJ_HASFFI) { |
8478 | dasm_put(Dst, 4523); | 8493 | dasm_put(Dst, 4524); |
8479 | } | 8494 | } |
8480 | } else { | 8495 | } else { |
8481 | dasm_put(Dst, 4525); | 8496 | dasm_put(Dst, 4526); |
8482 | if (!LJ_HASFFI) { | 8497 | if (!LJ_HASFFI) { |
8483 | dasm_put(Dst, 4529); | 8498 | dasm_put(Dst, 4530); |
8484 | } | 8499 | } |
8485 | dasm_put(Dst, 4531); | 8500 | dasm_put(Dst, 4532); |
8486 | } | 8501 | } |
8487 | dasm_put(Dst, 4534); | 8502 | dasm_put(Dst, 4535); |
8488 | if (LJ_HASFFI) { | 8503 | if (LJ_HASFFI) { |
8489 | dasm_put(Dst, 4545, LJ_TCDATA); | 8504 | dasm_put(Dst, 4546, LJ_TCDATA); |
8490 | } | 8505 | } |
8491 | if (LJ_DUALNUM) { | 8506 | if (LJ_DUALNUM) { |
8492 | dasm_put(Dst, 4553); | 8507 | dasm_put(Dst, 4554); |
8493 | } | 8508 | } |
8494 | break; | 8509 | break; |
8495 | 8510 | ||
8496 | case BC_ISEQP: case BC_ISNEP: | 8511 | case BC_ISEQP: case BC_ISNEP: |
8497 | vk = op == BC_ISEQP; | 8512 | vk = op == BC_ISEQP; |
8498 | dasm_put(Dst, 4577, 32-3); | 8513 | dasm_put(Dst, 4578, 32-3); |
8499 | if (LJ_HASFFI) { | 8514 | if (LJ_HASFFI) { |
8500 | dasm_put(Dst, 4584, LJ_TCDATA); | 8515 | dasm_put(Dst, 4585, LJ_TCDATA); |
8501 | } | 8516 | } |
8502 | dasm_put(Dst, 4587); | 8517 | dasm_put(Dst, 4588); |
8503 | if (LJ_HASFFI) { | 8518 | if (LJ_HASFFI) { |
8504 | dasm_put(Dst, 4589); | 8519 | dasm_put(Dst, 4590); |
8505 | } | 8520 | } |
8506 | dasm_put(Dst, 4592, -(BCBIAS_J*4 >> 16)); | 8521 | dasm_put(Dst, 4593, -(BCBIAS_J*4 >> 16)); |
8507 | if (vk) { | 8522 | if (vk) { |
8508 | dasm_put(Dst, 4598); | 8523 | dasm_put(Dst, 4599); |
8509 | } else { | 8524 | } else { |
8510 | dasm_put(Dst, 4600); | 8525 | dasm_put(Dst, 4601); |
8511 | } | 8526 | } |
8512 | dasm_put(Dst, 4602); | 8527 | dasm_put(Dst, 4603); |
8513 | break; | 8528 | break; |
8514 | 8529 | ||
8515 | /* -- Unary test and copy ops ------------------------------------------- */ | 8530 | /* -- Unary test and copy ops ------------------------------------------- */ |
8516 | 8531 | ||
8517 | case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: | 8532 | case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: |
8518 | dasm_put(Dst, 4614); | 8533 | dasm_put(Dst, 4615); |
8519 | if (op == BC_IST || op == BC_ISF) { | 8534 | if (op == BC_IST || op == BC_ISF) { |
8520 | dasm_put(Dst, 4618, LJ_TTRUE, -(BCBIAS_J*4 >> 16)); | 8535 | dasm_put(Dst, 4619, LJ_TTRUE, -(BCBIAS_J*4 >> 16)); |
8521 | if (op == BC_IST) { | 8536 | if (op == BC_IST) { |
8522 | dasm_put(Dst, 4625); | 8537 | dasm_put(Dst, 4626); |
8523 | } else { | 8538 | } else { |
8524 | dasm_put(Dst, 4627); | 8539 | dasm_put(Dst, 4628); |
8525 | } | 8540 | } |
8526 | dasm_put(Dst, 4629); | 8541 | dasm_put(Dst, 4630); |
8527 | } else { | 8542 | } else { |
8528 | dasm_put(Dst, 4631, LJ_TFALSE); | 8543 | dasm_put(Dst, 4632, LJ_TFALSE); |
8529 | if (op == BC_ISTC) { | 8544 | if (op == BC_ISTC) { |
8530 | dasm_put(Dst, 4636); | 8545 | dasm_put(Dst, 4637); |
8531 | } else { | 8546 | } else { |
8532 | dasm_put(Dst, 4639); | 8547 | dasm_put(Dst, 4640); |
8533 | } | 8548 | } |
8534 | dasm_put(Dst, 4642, -(BCBIAS_J*4 >> 16)); | 8549 | dasm_put(Dst, 4643, -(BCBIAS_J*4 >> 16)); |
8535 | } | 8550 | } |
8536 | dasm_put(Dst, 4649); | 8551 | dasm_put(Dst, 4650); |
8537 | break; | 8552 | break; |
8538 | 8553 | ||
8539 | /* -- Unary ops --------------------------------------------------------- */ | 8554 | /* -- Unary ops --------------------------------------------------------- */ |
8540 | 8555 | ||
8541 | case BC_MOV: | 8556 | case BC_MOV: |
8542 | dasm_put(Dst, 4660); | 8557 | dasm_put(Dst, 4661); |
8543 | break; | 8558 | break; |
8544 | case BC_NOT: | 8559 | case BC_NOT: |
8545 | dasm_put(Dst, 4673, LJ_TTRUE); | 8560 | dasm_put(Dst, 4674, LJ_TTRUE); |
8546 | break; | 8561 | break; |
8547 | case BC_UNM: | 8562 | case BC_UNM: |
8548 | dasm_put(Dst, 4689); | 8563 | dasm_put(Dst, 4690); |
8549 | if (LJ_DUALNUM) { | 8564 | if (LJ_DUALNUM) { |
8550 | dasm_put(Dst, 4693); | 8565 | dasm_put(Dst, 4694); |
8551 | } | 8566 | } |
8552 | dasm_put(Dst, 4721); | 8567 | dasm_put(Dst, 4722); |
8553 | if (LJ_DUALNUM) { | 8568 | if (LJ_DUALNUM) { |
8554 | dasm_put(Dst, 4731); | 8569 | dasm_put(Dst, 4732); |
8555 | } else { | 8570 | } else { |
8556 | dasm_put(Dst, 4734); | 8571 | dasm_put(Dst, 4735); |
8557 | } | 8572 | } |
8558 | break; | 8573 | break; |
8559 | case BC_LEN: | 8574 | case BC_LEN: |
8560 | dasm_put(Dst, 4743, LJ_TSTR, Dt5(->len)); | 8575 | dasm_put(Dst, 4744, LJ_TSTR, Dt5(->len)); |
8561 | if (LJ_DUALNUM) { | 8576 | if (LJ_DUALNUM) { |
8562 | dasm_put(Dst, 4753); | 8577 | dasm_put(Dst, 4754); |
8563 | } else { | 8578 | } else { |
8564 | dasm_put(Dst, 4758); | 8579 | dasm_put(Dst, 4759); |
8565 | } | 8580 | } |
8566 | dasm_put(Dst, 4765, LJ_TTAB); | 8581 | dasm_put(Dst, 4766, LJ_TTAB); |
8567 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | 8582 | #ifdef LUAJIT_ENABLE_LUA52COMPAT |
8568 | dasm_put(Dst, 4779, Dt6(->metatable)); | 8583 | dasm_put(Dst, 4780, Dt6(->metatable)); |
8569 | #endif | 8584 | #endif |
8570 | dasm_put(Dst, 4786); | 8585 | dasm_put(Dst, 4787); |
8571 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | 8586 | #ifdef LUAJIT_ENABLE_LUA52COMPAT |
8572 | dasm_put(Dst, 4792, Dt6(->nomm), 1<<MM_len); | 8587 | dasm_put(Dst, 4793, Dt6(->nomm), 1<<MM_len); |
8573 | #endif | 8588 | #endif |
8574 | break; | 8589 | break; |
8575 | 8590 | ||
@@ -8581,77 +8596,77 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
8581 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8596 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8582 | switch (vk) { | 8597 | switch (vk) { |
8583 | case 0: | 8598 | case 0: |
8584 | dasm_put(Dst, 4802); | 8599 | dasm_put(Dst, 4803); |
8585 | break; | 8600 | break; |
8586 | case 1: | 8601 | case 1: |
8587 | dasm_put(Dst, 4808); | 8602 | dasm_put(Dst, 4809); |
8588 | break; | 8603 | break; |
8589 | default: | 8604 | default: |
8590 | dasm_put(Dst, 4814); | 8605 | dasm_put(Dst, 4815); |
8591 | break; | 8606 | break; |
8592 | } | 8607 | } |
8593 | dasm_put(Dst, 4820); | 8608 | dasm_put(Dst, 4821); |
8594 | switch (vk) { | 8609 | switch (vk) { |
8595 | case 0: | 8610 | case 0: |
8596 | dasm_put(Dst, 4847); | 8611 | dasm_put(Dst, 4848); |
8597 | break; | 8612 | break; |
8598 | case 1: | 8613 | case 1: |
8599 | dasm_put(Dst, 4850); | 8614 | dasm_put(Dst, 4851); |
8600 | break; | 8615 | break; |
8601 | default: | 8616 | default: |
8602 | dasm_put(Dst, 4853); | 8617 | dasm_put(Dst, 4854); |
8603 | break; | 8618 | break; |
8604 | } | 8619 | } |
8605 | dasm_put(Dst, 4856); | 8620 | dasm_put(Dst, 4857); |
8606 | if (vk == 1) { | 8621 | if (vk == 1) { |
8607 | dasm_put(Dst, 4858); | 8622 | dasm_put(Dst, 4859); |
8608 | } else { | 8623 | } else { |
8609 | dasm_put(Dst, 4862); | 8624 | dasm_put(Dst, 4863); |
8610 | } | 8625 | } |
8611 | switch (vk) { | 8626 | switch (vk) { |
8612 | case 0: | 8627 | case 0: |
8613 | dasm_put(Dst, 4866); | 8628 | dasm_put(Dst, 4867); |
8614 | break; | 8629 | break; |
8615 | case 1: | 8630 | case 1: |
8616 | dasm_put(Dst, 4869); | 8631 | dasm_put(Dst, 4870); |
8617 | break; | 8632 | break; |
8618 | default: | 8633 | default: |
8619 | dasm_put(Dst, 4872); | 8634 | dasm_put(Dst, 4873); |
8620 | break; | 8635 | break; |
8621 | } | 8636 | } |
8622 | dasm_put(Dst, 4875); | 8637 | dasm_put(Dst, 4876); |
8623 | } else { | 8638 | } else { |
8624 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8639 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8625 | switch (vk) { | 8640 | switch (vk) { |
8626 | case 0: | 8641 | case 0: |
8627 | dasm_put(Dst, 4882); | 8642 | dasm_put(Dst, 4883); |
8628 | if (LJ_DUALNUM) { | 8643 | if (LJ_DUALNUM) { |
8629 | dasm_put(Dst, 4884); | 8644 | dasm_put(Dst, 4885); |
8630 | } | 8645 | } |
8631 | dasm_put(Dst, 4886); | 8646 | dasm_put(Dst, 4887); |
8632 | if (LJ_DUALNUM) { | 8647 | if (LJ_DUALNUM) { |
8633 | dasm_put(Dst, 4889); | 8648 | dasm_put(Dst, 4890); |
8634 | } else { | 8649 | } else { |
8635 | dasm_put(Dst, 4895); | 8650 | dasm_put(Dst, 4896); |
8636 | } | 8651 | } |
8637 | break; | 8652 | break; |
8638 | case 1: | 8653 | case 1: |
8639 | dasm_put(Dst, 4899); | 8654 | dasm_put(Dst, 4900); |
8640 | if (LJ_DUALNUM) { | 8655 | if (LJ_DUALNUM) { |
8641 | dasm_put(Dst, 4901); | 8656 | dasm_put(Dst, 4902); |
8642 | } | 8657 | } |
8643 | dasm_put(Dst, 4903); | 8658 | dasm_put(Dst, 4904); |
8644 | if (LJ_DUALNUM) { | 8659 | if (LJ_DUALNUM) { |
8645 | dasm_put(Dst, 4906); | 8660 | dasm_put(Dst, 4907); |
8646 | } else { | 8661 | } else { |
8647 | dasm_put(Dst, 4912); | 8662 | dasm_put(Dst, 4913); |
8648 | } | 8663 | } |
8649 | break; | 8664 | break; |
8650 | default: | 8665 | default: |
8651 | dasm_put(Dst, 4916); | 8666 | dasm_put(Dst, 4917); |
8652 | break; | 8667 | break; |
8653 | } | 8668 | } |
8654 | dasm_put(Dst, 4926); | 8669 | dasm_put(Dst, 4927); |
8655 | } | 8670 | } |
8656 | break; | 8671 | break; |
8657 | case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: | 8672 | case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: |
@@ -8659,77 +8674,77 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
8659 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8674 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8660 | switch (vk) { | 8675 | switch (vk) { |
8661 | case 0: | 8676 | case 0: |
8662 | dasm_put(Dst, 4939); | 8677 | dasm_put(Dst, 4940); |
8663 | break; | 8678 | break; |
8664 | case 1: | 8679 | case 1: |
8665 | dasm_put(Dst, 4945); | 8680 | dasm_put(Dst, 4946); |
8666 | break; | 8681 | break; |
8667 | default: | 8682 | default: |
8668 | dasm_put(Dst, 4951); | 8683 | dasm_put(Dst, 4952); |
8669 | break; | 8684 | break; |
8670 | } | 8685 | } |
8671 | dasm_put(Dst, 4957); | 8686 | dasm_put(Dst, 4958); |
8672 | switch (vk) { | 8687 | switch (vk) { |
8673 | case 0: | 8688 | case 0: |
8674 | dasm_put(Dst, 4984); | 8689 | dasm_put(Dst, 4985); |
8675 | break; | 8690 | break; |
8676 | case 1: | 8691 | case 1: |
8677 | dasm_put(Dst, 4987); | 8692 | dasm_put(Dst, 4988); |
8678 | break; | 8693 | break; |
8679 | default: | 8694 | default: |
8680 | dasm_put(Dst, 4990); | 8695 | dasm_put(Dst, 4991); |
8681 | break; | 8696 | break; |
8682 | } | 8697 | } |
8683 | dasm_put(Dst, 4993); | 8698 | dasm_put(Dst, 4994); |
8684 | if (vk == 1) { | 8699 | if (vk == 1) { |
8685 | dasm_put(Dst, 4995); | 8700 | dasm_put(Dst, 4996); |
8686 | } else { | 8701 | } else { |
8687 | dasm_put(Dst, 4999); | 8702 | dasm_put(Dst, 5000); |
8688 | } | 8703 | } |
8689 | switch (vk) { | 8704 | switch (vk) { |
8690 | case 0: | 8705 | case 0: |
8691 | dasm_put(Dst, 5003); | 8706 | dasm_put(Dst, 5004); |
8692 | break; | 8707 | break; |
8693 | case 1: | 8708 | case 1: |
8694 | dasm_put(Dst, 5006); | 8709 | dasm_put(Dst, 5007); |
8695 | break; | 8710 | break; |
8696 | default: | 8711 | default: |
8697 | dasm_put(Dst, 5009); | 8712 | dasm_put(Dst, 5010); |
8698 | break; | 8713 | break; |
8699 | } | 8714 | } |
8700 | dasm_put(Dst, 5012); | 8715 | dasm_put(Dst, 5013); |
8701 | } else { | 8716 | } else { |
8702 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8717 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8703 | switch (vk) { | 8718 | switch (vk) { |
8704 | case 0: | 8719 | case 0: |
8705 | dasm_put(Dst, 5019); | 8720 | dasm_put(Dst, 5020); |
8706 | if (LJ_DUALNUM) { | 8721 | if (LJ_DUALNUM) { |
8707 | dasm_put(Dst, 5021); | 8722 | dasm_put(Dst, 5022); |
8708 | } | 8723 | } |
8709 | dasm_put(Dst, 5023); | 8724 | dasm_put(Dst, 5024); |
8710 | if (LJ_DUALNUM) { | 8725 | if (LJ_DUALNUM) { |
8711 | dasm_put(Dst, 5026); | 8726 | dasm_put(Dst, 5027); |
8712 | } else { | 8727 | } else { |
8713 | dasm_put(Dst, 5032); | 8728 | dasm_put(Dst, 5033); |
8714 | } | 8729 | } |
8715 | break; | 8730 | break; |
8716 | case 1: | 8731 | case 1: |
8717 | dasm_put(Dst, 5036); | 8732 | dasm_put(Dst, 5037); |
8718 | if (LJ_DUALNUM) { | 8733 | if (LJ_DUALNUM) { |
8719 | dasm_put(Dst, 5038); | 8734 | dasm_put(Dst, 5039); |
8720 | } | 8735 | } |
8721 | dasm_put(Dst, 5040); | 8736 | dasm_put(Dst, 5041); |
8722 | if (LJ_DUALNUM) { | 8737 | if (LJ_DUALNUM) { |
8723 | dasm_put(Dst, 5043); | 8738 | dasm_put(Dst, 5044); |
8724 | } else { | 8739 | } else { |
8725 | dasm_put(Dst, 5049); | 8740 | dasm_put(Dst, 5050); |
8726 | } | 8741 | } |
8727 | break; | 8742 | break; |
8728 | default: | 8743 | default: |
8729 | dasm_put(Dst, 5053); | 8744 | dasm_put(Dst, 5054); |
8730 | break; | 8745 | break; |
8731 | } | 8746 | } |
8732 | dasm_put(Dst, 5063); | 8747 | dasm_put(Dst, 5064); |
8733 | } | 8748 | } |
8734 | break; | 8749 | break; |
8735 | case BC_MULVN: case BC_MULNV: case BC_MULVV: | 8750 | case BC_MULVN: case BC_MULNV: case BC_MULVV: |
@@ -8737,188 +8752,188 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
8737 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8752 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8738 | switch (vk) { | 8753 | switch (vk) { |
8739 | case 0: | 8754 | case 0: |
8740 | dasm_put(Dst, 5076); | 8755 | dasm_put(Dst, 5077); |
8741 | break; | 8756 | break; |
8742 | case 1: | 8757 | case 1: |
8743 | dasm_put(Dst, 5082); | 8758 | dasm_put(Dst, 5083); |
8744 | break; | 8759 | break; |
8745 | default: | 8760 | default: |
8746 | dasm_put(Dst, 5088); | 8761 | dasm_put(Dst, 5089); |
8747 | break; | 8762 | break; |
8748 | } | 8763 | } |
8749 | dasm_put(Dst, 5094); | 8764 | dasm_put(Dst, 5095); |
8750 | switch (vk) { | 8765 | switch (vk) { |
8751 | case 0: | 8766 | case 0: |
8752 | dasm_put(Dst, 5121); | 8767 | dasm_put(Dst, 5122); |
8753 | break; | 8768 | break; |
8754 | case 1: | 8769 | case 1: |
8755 | dasm_put(Dst, 5124); | 8770 | dasm_put(Dst, 5125); |
8756 | break; | 8771 | break; |
8757 | default: | 8772 | default: |
8758 | dasm_put(Dst, 5127); | 8773 | dasm_put(Dst, 5128); |
8759 | break; | 8774 | break; |
8760 | } | 8775 | } |
8761 | dasm_put(Dst, 5130); | 8776 | dasm_put(Dst, 5131); |
8762 | if (vk == 1) { | 8777 | if (vk == 1) { |
8763 | dasm_put(Dst, 5132); | 8778 | dasm_put(Dst, 5133); |
8764 | } else { | 8779 | } else { |
8765 | dasm_put(Dst, 5136); | 8780 | dasm_put(Dst, 5137); |
8766 | } | 8781 | } |
8767 | switch (vk) { | 8782 | switch (vk) { |
8768 | case 0: | 8783 | case 0: |
8769 | dasm_put(Dst, 5140); | 8784 | dasm_put(Dst, 5141); |
8770 | break; | 8785 | break; |
8771 | case 1: | 8786 | case 1: |
8772 | dasm_put(Dst, 5143); | 8787 | dasm_put(Dst, 5144); |
8773 | break; | 8788 | break; |
8774 | default: | 8789 | default: |
8775 | dasm_put(Dst, 5146); | 8790 | dasm_put(Dst, 5147); |
8776 | break; | 8791 | break; |
8777 | } | 8792 | } |
8778 | dasm_put(Dst, 5149); | 8793 | dasm_put(Dst, 5150); |
8779 | } else { | 8794 | } else { |
8780 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8795 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8781 | switch (vk) { | 8796 | switch (vk) { |
8782 | case 0: | 8797 | case 0: |
8783 | dasm_put(Dst, 5156); | 8798 | dasm_put(Dst, 5157); |
8784 | if (LJ_DUALNUM) { | 8799 | if (LJ_DUALNUM) { |
8785 | dasm_put(Dst, 5158); | 8800 | dasm_put(Dst, 5159); |
8786 | } | 8801 | } |
8787 | dasm_put(Dst, 5160); | 8802 | dasm_put(Dst, 5161); |
8788 | if (LJ_DUALNUM) { | 8803 | if (LJ_DUALNUM) { |
8789 | dasm_put(Dst, 5163); | 8804 | dasm_put(Dst, 5164); |
8790 | } else { | 8805 | } else { |
8791 | dasm_put(Dst, 5169); | 8806 | dasm_put(Dst, 5170); |
8792 | } | 8807 | } |
8793 | break; | 8808 | break; |
8794 | case 1: | 8809 | case 1: |
8795 | dasm_put(Dst, 5173); | 8810 | dasm_put(Dst, 5174); |
8796 | if (LJ_DUALNUM) { | 8811 | if (LJ_DUALNUM) { |
8797 | dasm_put(Dst, 5175); | 8812 | dasm_put(Dst, 5176); |
8798 | } | 8813 | } |
8799 | dasm_put(Dst, 5177); | 8814 | dasm_put(Dst, 5178); |
8800 | if (LJ_DUALNUM) { | 8815 | if (LJ_DUALNUM) { |
8801 | dasm_put(Dst, 5180); | 8816 | dasm_put(Dst, 5181); |
8802 | } else { | 8817 | } else { |
8803 | dasm_put(Dst, 5186); | 8818 | dasm_put(Dst, 5187); |
8804 | } | 8819 | } |
8805 | break; | 8820 | break; |
8806 | default: | 8821 | default: |
8807 | dasm_put(Dst, 5190); | 8822 | dasm_put(Dst, 5191); |
8808 | break; | 8823 | break; |
8809 | } | 8824 | } |
8810 | dasm_put(Dst, 5200); | 8825 | dasm_put(Dst, 5201); |
8811 | } | 8826 | } |
8812 | break; | 8827 | break; |
8813 | case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: | 8828 | case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: |
8814 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8829 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8815 | switch (vk) { | 8830 | switch (vk) { |
8816 | case 0: | 8831 | case 0: |
8817 | dasm_put(Dst, 5213); | 8832 | dasm_put(Dst, 5214); |
8818 | if (LJ_DUALNUM) { | 8833 | if (LJ_DUALNUM) { |
8819 | dasm_put(Dst, 5215); | 8834 | dasm_put(Dst, 5216); |
8820 | } | 8835 | } |
8821 | dasm_put(Dst, 5217); | 8836 | dasm_put(Dst, 5218); |
8822 | if (LJ_DUALNUM) { | 8837 | if (LJ_DUALNUM) { |
8823 | dasm_put(Dst, 5220); | 8838 | dasm_put(Dst, 5221); |
8824 | } else { | 8839 | } else { |
8825 | dasm_put(Dst, 5226); | 8840 | dasm_put(Dst, 5227); |
8826 | } | 8841 | } |
8827 | break; | 8842 | break; |
8828 | case 1: | 8843 | case 1: |
8829 | dasm_put(Dst, 5230); | 8844 | dasm_put(Dst, 5231); |
8830 | if (LJ_DUALNUM) { | 8845 | if (LJ_DUALNUM) { |
8831 | dasm_put(Dst, 5232); | 8846 | dasm_put(Dst, 5233); |
8832 | } | 8847 | } |
8833 | dasm_put(Dst, 5234); | 8848 | dasm_put(Dst, 5235); |
8834 | if (LJ_DUALNUM) { | 8849 | if (LJ_DUALNUM) { |
8835 | dasm_put(Dst, 5237); | 8850 | dasm_put(Dst, 5238); |
8836 | } else { | 8851 | } else { |
8837 | dasm_put(Dst, 5243); | 8852 | dasm_put(Dst, 5244); |
8838 | } | 8853 | } |
8839 | break; | 8854 | break; |
8840 | default: | 8855 | default: |
8841 | dasm_put(Dst, 5247); | 8856 | dasm_put(Dst, 5248); |
8842 | break; | 8857 | break; |
8843 | } | 8858 | } |
8844 | dasm_put(Dst, 5257); | 8859 | dasm_put(Dst, 5258); |
8845 | break; | 8860 | break; |
8846 | case BC_MODVN: | 8861 | case BC_MODVN: |
8847 | if (LJ_DUALNUM) { | 8862 | if (LJ_DUALNUM) { |
8848 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8863 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8849 | switch (vk) { | 8864 | switch (vk) { |
8850 | case 0: | 8865 | case 0: |
8851 | dasm_put(Dst, 5270); | 8866 | dasm_put(Dst, 5271); |
8852 | break; | 8867 | break; |
8853 | case 1: | 8868 | case 1: |
8854 | dasm_put(Dst, 5276); | 8869 | dasm_put(Dst, 5277); |
8855 | break; | 8870 | break; |
8856 | default: | 8871 | default: |
8857 | dasm_put(Dst, 5282); | 8872 | dasm_put(Dst, 5283); |
8858 | break; | 8873 | break; |
8859 | } | 8874 | } |
8860 | dasm_put(Dst, 5288); | 8875 | dasm_put(Dst, 5289); |
8861 | switch (vk) { | 8876 | switch (vk) { |
8862 | case 0: | 8877 | case 0: |
8863 | dasm_put(Dst, 5316); | 8878 | dasm_put(Dst, 5317); |
8864 | break; | 8879 | break; |
8865 | case 1: | 8880 | case 1: |
8866 | dasm_put(Dst, 5319); | 8881 | dasm_put(Dst, 5320); |
8867 | break; | 8882 | break; |
8868 | default: | 8883 | default: |
8869 | dasm_put(Dst, 5322); | 8884 | dasm_put(Dst, 5323); |
8870 | break; | 8885 | break; |
8871 | } | 8886 | } |
8872 | dasm_put(Dst, 5325); | 8887 | dasm_put(Dst, 5326); |
8873 | if (vk == 1) { | 8888 | if (vk == 1) { |
8874 | dasm_put(Dst, 5327); | 8889 | dasm_put(Dst, 5328); |
8875 | } else { | 8890 | } else { |
8876 | dasm_put(Dst, 5331); | 8891 | dasm_put(Dst, 5332); |
8877 | } | 8892 | } |
8878 | switch (vk) { | 8893 | switch (vk) { |
8879 | case 0: | 8894 | case 0: |
8880 | dasm_put(Dst, 5335); | 8895 | dasm_put(Dst, 5336); |
8881 | break; | 8896 | break; |
8882 | case 1: | 8897 | case 1: |
8883 | dasm_put(Dst, 5338); | 8898 | dasm_put(Dst, 5339); |
8884 | break; | 8899 | break; |
8885 | default: | 8900 | default: |
8886 | dasm_put(Dst, 5341); | 8901 | dasm_put(Dst, 5342); |
8887 | break; | 8902 | break; |
8888 | } | 8903 | } |
8889 | dasm_put(Dst, 5344); | 8904 | dasm_put(Dst, 5345); |
8890 | } else { | 8905 | } else { |
8891 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8906 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8892 | switch (vk) { | 8907 | switch (vk) { |
8893 | case 0: | 8908 | case 0: |
8894 | dasm_put(Dst, 5356); | 8909 | dasm_put(Dst, 5357); |
8895 | if (LJ_DUALNUM) { | 8910 | if (LJ_DUALNUM) { |
8896 | dasm_put(Dst, 5358); | 8911 | dasm_put(Dst, 5359); |
8897 | } | 8912 | } |
8898 | dasm_put(Dst, 5360); | 8913 | dasm_put(Dst, 5361); |
8899 | if (LJ_DUALNUM) { | 8914 | if (LJ_DUALNUM) { |
8900 | dasm_put(Dst, 5363); | 8915 | dasm_put(Dst, 5364); |
8901 | } else { | 8916 | } else { |
8902 | dasm_put(Dst, 5369); | 8917 | dasm_put(Dst, 5370); |
8903 | } | 8918 | } |
8904 | break; | 8919 | break; |
8905 | case 1: | 8920 | case 1: |
8906 | dasm_put(Dst, 5373); | 8921 | dasm_put(Dst, 5374); |
8907 | if (LJ_DUALNUM) { | 8922 | if (LJ_DUALNUM) { |
8908 | dasm_put(Dst, 5375); | 8923 | dasm_put(Dst, 5376); |
8909 | } | 8924 | } |
8910 | dasm_put(Dst, 5377); | 8925 | dasm_put(Dst, 5378); |
8911 | if (LJ_DUALNUM) { | 8926 | if (LJ_DUALNUM) { |
8912 | dasm_put(Dst, 5380); | 8927 | dasm_put(Dst, 5381); |
8913 | } else { | 8928 | } else { |
8914 | dasm_put(Dst, 5386); | 8929 | dasm_put(Dst, 5387); |
8915 | } | 8930 | } |
8916 | break; | 8931 | break; |
8917 | default: | 8932 | default: |
8918 | dasm_put(Dst, 5390); | 8933 | dasm_put(Dst, 5391); |
8919 | break; | 8934 | break; |
8920 | } | 8935 | } |
8921 | dasm_put(Dst, 5400); | 8936 | dasm_put(Dst, 5401); |
8922 | } | 8937 | } |
8923 | break; | 8938 | break; |
8924 | case BC_MODNV: case BC_MODVV: | 8939 | case BC_MODNV: case BC_MODVV: |
@@ -8926,298 +8941,298 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
8926 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8941 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8927 | switch (vk) { | 8942 | switch (vk) { |
8928 | case 0: | 8943 | case 0: |
8929 | dasm_put(Dst, 5418); | 8944 | dasm_put(Dst, 5419); |
8930 | break; | 8945 | break; |
8931 | case 1: | 8946 | case 1: |
8932 | dasm_put(Dst, 5424); | 8947 | dasm_put(Dst, 5425); |
8933 | break; | 8948 | break; |
8934 | default: | 8949 | default: |
8935 | dasm_put(Dst, 5430); | 8950 | dasm_put(Dst, 5431); |
8936 | break; | 8951 | break; |
8937 | } | 8952 | } |
8938 | dasm_put(Dst, 5436); | 8953 | dasm_put(Dst, 5437); |
8939 | switch (vk) { | 8954 | switch (vk) { |
8940 | case 0: | 8955 | case 0: |
8941 | dasm_put(Dst, 5464); | 8956 | dasm_put(Dst, 5465); |
8942 | break; | 8957 | break; |
8943 | case 1: | 8958 | case 1: |
8944 | dasm_put(Dst, 5467); | 8959 | dasm_put(Dst, 5468); |
8945 | break; | 8960 | break; |
8946 | default: | 8961 | default: |
8947 | dasm_put(Dst, 5470); | 8962 | dasm_put(Dst, 5471); |
8948 | break; | 8963 | break; |
8949 | } | 8964 | } |
8950 | dasm_put(Dst, 5473); | 8965 | dasm_put(Dst, 5474); |
8951 | if (vk == 1) { | 8966 | if (vk == 1) { |
8952 | dasm_put(Dst, 5475); | 8967 | dasm_put(Dst, 5476); |
8953 | } else { | 8968 | } else { |
8954 | dasm_put(Dst, 5479); | 8969 | dasm_put(Dst, 5480); |
8955 | } | 8970 | } |
8956 | switch (vk) { | 8971 | switch (vk) { |
8957 | case 0: | 8972 | case 0: |
8958 | dasm_put(Dst, 5483); | 8973 | dasm_put(Dst, 5484); |
8959 | break; | 8974 | break; |
8960 | case 1: | 8975 | case 1: |
8961 | dasm_put(Dst, 5486); | 8976 | dasm_put(Dst, 5487); |
8962 | break; | 8977 | break; |
8963 | default: | 8978 | default: |
8964 | dasm_put(Dst, 5489); | 8979 | dasm_put(Dst, 5490); |
8965 | break; | 8980 | break; |
8966 | } | 8981 | } |
8967 | dasm_put(Dst, 5492); | 8982 | dasm_put(Dst, 5493); |
8968 | } else { | 8983 | } else { |
8969 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 8984 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
8970 | switch (vk) { | 8985 | switch (vk) { |
8971 | case 0: | 8986 | case 0: |
8972 | dasm_put(Dst, 5495); | 8987 | dasm_put(Dst, 5496); |
8973 | if (LJ_DUALNUM) { | 8988 | if (LJ_DUALNUM) { |
8974 | dasm_put(Dst, 5497); | 8989 | dasm_put(Dst, 5498); |
8975 | } | 8990 | } |
8976 | dasm_put(Dst, 5499); | 8991 | dasm_put(Dst, 5500); |
8977 | if (LJ_DUALNUM) { | 8992 | if (LJ_DUALNUM) { |
8978 | dasm_put(Dst, 5502); | 8993 | dasm_put(Dst, 5503); |
8979 | } else { | 8994 | } else { |
8980 | dasm_put(Dst, 5508); | 8995 | dasm_put(Dst, 5509); |
8981 | } | 8996 | } |
8982 | break; | 8997 | break; |
8983 | case 1: | 8998 | case 1: |
8984 | dasm_put(Dst, 5512); | 8999 | dasm_put(Dst, 5513); |
8985 | if (LJ_DUALNUM) { | 9000 | if (LJ_DUALNUM) { |
8986 | dasm_put(Dst, 5514); | 9001 | dasm_put(Dst, 5515); |
8987 | } | 9002 | } |
8988 | dasm_put(Dst, 5516); | 9003 | dasm_put(Dst, 5517); |
8989 | if (LJ_DUALNUM) { | 9004 | if (LJ_DUALNUM) { |
8990 | dasm_put(Dst, 5519); | 9005 | dasm_put(Dst, 5520); |
8991 | } else { | 9006 | } else { |
8992 | dasm_put(Dst, 5525); | 9007 | dasm_put(Dst, 5526); |
8993 | } | 9008 | } |
8994 | break; | 9009 | break; |
8995 | default: | 9010 | default: |
8996 | dasm_put(Dst, 5529); | 9011 | dasm_put(Dst, 5530); |
8997 | break; | 9012 | break; |
8998 | } | 9013 | } |
8999 | dasm_put(Dst, 5539); | 9014 | dasm_put(Dst, 5540); |
9000 | } | 9015 | } |
9001 | break; | 9016 | break; |
9002 | case BC_POW: | 9017 | case BC_POW: |
9003 | dasm_put(Dst, 5542); | 9018 | dasm_put(Dst, 5543); |
9004 | break; | 9019 | break; |
9005 | 9020 | ||
9006 | case BC_CAT: | 9021 | case BC_CAT: |
9007 | dasm_put(Dst, 5565, Dt1(->base), 32-3, Dt1(->base)); | 9022 | dasm_put(Dst, 5566, Dt1(->base), 32-3, Dt1(->base)); |
9008 | break; | 9023 | break; |
9009 | 9024 | ||
9010 | /* -- Constant ops ------------------------------------------------------ */ | 9025 | /* -- Constant ops ------------------------------------------------------ */ |
9011 | 9026 | ||
9012 | case BC_KSTR: | 9027 | case BC_KSTR: |
9013 | dasm_put(Dst, 5595, 32-1, LJ_TSTR); | 9028 | dasm_put(Dst, 5596, 32-1, LJ_TSTR); |
9014 | break; | 9029 | break; |
9015 | case BC_KCDATA: | 9030 | case BC_KCDATA: |
9016 | #if LJ_HASFFI | 9031 | #if LJ_HASFFI |
9017 | dasm_put(Dst, 5614, 32-1, LJ_TCDATA); | 9032 | dasm_put(Dst, 5615, 32-1, LJ_TCDATA); |
9018 | #endif | 9033 | #endif |
9019 | break; | 9034 | break; |
9020 | case BC_KSHORT: | 9035 | case BC_KSHORT: |
9021 | if (LJ_DUALNUM) { | 9036 | if (LJ_DUALNUM) { |
9022 | dasm_put(Dst, 5633, 31-13); | 9037 | dasm_put(Dst, 5634, 31-13); |
9023 | } else { | 9038 | } else { |
9024 | dasm_put(Dst, 5649, 31-13, 31-20); | 9039 | dasm_put(Dst, 5650, 31-13, 31-20); |
9025 | } | 9040 | } |
9026 | break; | 9041 | break; |
9027 | case BC_KNUM: | 9042 | case BC_KNUM: |
9028 | dasm_put(Dst, 5677); | 9043 | dasm_put(Dst, 5678); |
9029 | break; | 9044 | break; |
9030 | case BC_KPRI: | 9045 | case BC_KPRI: |
9031 | dasm_put(Dst, 5690, 32-3); | 9046 | dasm_put(Dst, 5691, 32-3); |
9032 | break; | 9047 | break; |
9033 | case BC_KNIL: | 9048 | case BC_KNIL: |
9034 | dasm_put(Dst, 5705); | 9049 | dasm_put(Dst, 5706); |
9035 | break; | 9050 | break; |
9036 | 9051 | ||
9037 | /* -- Upvalue and function ops ------------------------------------------ */ | 9052 | /* -- Upvalue and function ops ------------------------------------------ */ |
9038 | 9053 | ||
9039 | case BC_UGET: | 9054 | case BC_UGET: |
9040 | dasm_put(Dst, 5724, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); | 9055 | dasm_put(Dst, 5725, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); |
9041 | break; | 9056 | break; |
9042 | case BC_USETV: | 9057 | case BC_USETV: |
9043 | dasm_put(Dst, 5745, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); | 9058 | dasm_put(Dst, 5746, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); |
9044 | break; | 9059 | break; |
9045 | case BC_USETS: | 9060 | case BC_USETS: |
9046 | dasm_put(Dst, 5798, 32-1, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, Dt5(->marked), DtA(->closed), LJ_TSTR, LJ_GC_WHITES, GG_DISP2G); | 9061 | dasm_put(Dst, 5799, 32-1, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, Dt5(->marked), DtA(->closed), LJ_TSTR, LJ_GC_WHITES, GG_DISP2G); |
9047 | break; | 9062 | break; |
9048 | case BC_USETN: | 9063 | case BC_USETN: |
9049 | dasm_put(Dst, 5849, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); | 9064 | dasm_put(Dst, 5850, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); |
9050 | break; | 9065 | break; |
9051 | case BC_USETP: | 9066 | case BC_USETP: |
9052 | dasm_put(Dst, 5870, 32-1, 32-3, offsetof(GCfuncL, uvptr), DtA(->v)); | 9067 | dasm_put(Dst, 5871, 32-1, 32-3, offsetof(GCfuncL, uvptr), DtA(->v)); |
9053 | break; | 9068 | break; |
9054 | 9069 | ||
9055 | case BC_UCLO: | 9070 | case BC_UCLO: |
9056 | dasm_put(Dst, 5893, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base)); | 9071 | dasm_put(Dst, 5894, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base)); |
9057 | break; | 9072 | break; |
9058 | 9073 | ||
9059 | case BC_FNEW: | 9074 | case BC_FNEW: |
9060 | dasm_put(Dst, 5923, 32-1, Dt1(->base), Dt1(->base), LJ_TFUNC); | 9075 | dasm_put(Dst, 5924, 32-1, Dt1(->base), Dt1(->base), LJ_TFUNC); |
9061 | break; | 9076 | break; |
9062 | 9077 | ||
9063 | /* -- Table ops --------------------------------------------------------- */ | 9078 | /* -- Table ops --------------------------------------------------------- */ |
9064 | 9079 | ||
9065 | case BC_TNEW: | 9080 | case BC_TNEW: |
9066 | case BC_TDUP: | 9081 | case BC_TDUP: |
9067 | dasm_put(Dst, 5951, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); | 9082 | dasm_put(Dst, 5952, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); |
9068 | if (op == BC_TNEW) { | 9083 | if (op == BC_TNEW) { |
9069 | dasm_put(Dst, 5964); | 9084 | dasm_put(Dst, 5965); |
9070 | } else { | 9085 | } else { |
9071 | dasm_put(Dst, 5973, 32-1); | 9086 | dasm_put(Dst, 5974, 32-1); |
9072 | } | 9087 | } |
9073 | dasm_put(Dst, 5980, Dt1(->base), LJ_TTAB); | 9088 | dasm_put(Dst, 5981, Dt1(->base), LJ_TTAB); |
9074 | if (op == BC_TNEW) { | 9089 | if (op == BC_TNEW) { |
9075 | dasm_put(Dst, 5997); | 9090 | dasm_put(Dst, 5998); |
9076 | } | 9091 | } |
9077 | dasm_put(Dst, 6002); | 9092 | dasm_put(Dst, 6003); |
9078 | break; | 9093 | break; |
9079 | 9094 | ||
9080 | case BC_GGET: | 9095 | case BC_GGET: |
9081 | case BC_GSET: | 9096 | case BC_GSET: |
9082 | dasm_put(Dst, 6011, 32-1, Dt7(->env)); | 9097 | dasm_put(Dst, 6012, 32-1, Dt7(->env)); |
9083 | if (op == BC_GGET) { | 9098 | if (op == BC_GGET) { |
9084 | dasm_put(Dst, 6019); | 9099 | dasm_put(Dst, 6020); |
9085 | } else { | 9100 | } else { |
9086 | dasm_put(Dst, 6022); | 9101 | dasm_put(Dst, 6023); |
9087 | } | 9102 | } |
9088 | break; | 9103 | break; |
9089 | 9104 | ||
9090 | case BC_TGETV: | 9105 | case BC_TGETV: |
9091 | dasm_put(Dst, 6025); | 9106 | dasm_put(Dst, 6026); |
9092 | if (LJ_DUALNUM) { | 9107 | if (LJ_DUALNUM) { |
9093 | dasm_put(Dst, 6029); | 9108 | dasm_put(Dst, 6030); |
9094 | } else { | 9109 | } else { |
9095 | dasm_put(Dst, 6031); | 9110 | dasm_put(Dst, 6032); |
9096 | } | 9111 | } |
9097 | dasm_put(Dst, 6033, LJ_TTAB); | 9112 | dasm_put(Dst, 6034, LJ_TTAB); |
9098 | if (LJ_DUALNUM) { | 9113 | if (LJ_DUALNUM) { |
9099 | dasm_put(Dst, 6039, Dt6(->asize), Dt6(->array), 31-3); | 9114 | dasm_put(Dst, 6040, Dt6(->asize), Dt6(->array), 31-3); |
9100 | } else { | 9115 | } else { |
9101 | dasm_put(Dst, 6049, Dt6(->asize), Dt6(->array), 31-3); | 9116 | dasm_put(Dst, 6050, Dt6(->asize), Dt6(->array), 31-3); |
9102 | } | 9117 | } |
9103 | dasm_put(Dst, 6066, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TSTR); | 9118 | dasm_put(Dst, 6067, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TSTR); |
9104 | if (!LJ_DUALNUM) { | 9119 | if (!LJ_DUALNUM) { |
9105 | dasm_put(Dst, 6106); | 9120 | dasm_put(Dst, 6107); |
9106 | } | 9121 | } |
9107 | dasm_put(Dst, 6108); | 9122 | dasm_put(Dst, 6109); |
9108 | break; | 9123 | break; |
9109 | case BC_TGETS: | 9124 | case BC_TGETS: |
9110 | dasm_put(Dst, 6111, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL, DtB(->next)); | 9125 | dasm_put(Dst, 6112, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL, DtB(->next)); |
9111 | dasm_put(Dst, 6172, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); | 9126 | dasm_put(Dst, 6173, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); |
9112 | break; | 9127 | break; |
9113 | case BC_TGETB: | 9128 | case BC_TGETB: |
9114 | dasm_put(Dst, 6192, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); | 9129 | dasm_put(Dst, 6193, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); |
9115 | break; | 9130 | break; |
9116 | 9131 | ||
9117 | case BC_TSETV: | 9132 | case BC_TSETV: |
9118 | dasm_put(Dst, 6240); | 9133 | dasm_put(Dst, 6241); |
9119 | if (LJ_DUALNUM) { | 9134 | if (LJ_DUALNUM) { |
9120 | dasm_put(Dst, 6244); | 9135 | dasm_put(Dst, 6245); |
9121 | } else { | 9136 | } else { |
9122 | dasm_put(Dst, 6246); | 9137 | dasm_put(Dst, 6247); |
9123 | } | 9138 | } |
9124 | dasm_put(Dst, 6248, LJ_TTAB); | 9139 | dasm_put(Dst, 6249, LJ_TTAB); |
9125 | if (LJ_DUALNUM) { | 9140 | if (LJ_DUALNUM) { |
9126 | dasm_put(Dst, 6254, Dt6(->asize), Dt6(->array), 31-3); | 9141 | dasm_put(Dst, 6255, Dt6(->asize), Dt6(->array), 31-3); |
9127 | } else { | 9142 | } else { |
9128 | dasm_put(Dst, 6264, Dt6(->asize), Dt6(->array), 31-3); | 9143 | dasm_put(Dst, 6265, Dt6(->asize), Dt6(->array), 31-3); |
9129 | } | 9144 | } |
9130 | dasm_put(Dst, 6281, Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR); | 9145 | dasm_put(Dst, 6282, Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR); |
9131 | if (!LJ_DUALNUM) { | 9146 | if (!LJ_DUALNUM) { |
9132 | dasm_put(Dst, 6328); | 9147 | dasm_put(Dst, 6329); |
9133 | } | 9148 | } |
9134 | dasm_put(Dst, 6330, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); | 9149 | dasm_put(Dst, 6331, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); |
9135 | break; | 9150 | break; |
9136 | dasm_put(Dst, 6345, LJ_TSTR, LJ_TNIL); | 9151 | dasm_put(Dst, 6346, LJ_TSTR, LJ_TNIL); |
9137 | case BC_TSETS: | 9152 | case BC_TSETS: |
9138 | dasm_put(Dst, 6371, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), 31-5, 31-3, Dt6(->marked), DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL); | 9153 | dasm_put(Dst, 6372, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), 31-5, 31-3, Dt6(->marked), DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL); |
9139 | dasm_put(Dst, 6422, LJ_GC_BLACK, DtB(->val), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next), Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<<MM_newindex); | 9154 | dasm_put(Dst, 6423, LJ_GC_BLACK, DtB(->val), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next), Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<<MM_newindex); |
9140 | dasm_put(Dst, 6478, LJ_TSTR, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); | 9155 | dasm_put(Dst, 6479, LJ_TSTR, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); |
9141 | break; | 9156 | break; |
9142 | case BC_TSETB: | 9157 | case BC_TSETB: |
9143 | dasm_put(Dst, 6503, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain)); | 9158 | dasm_put(Dst, 6504, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain)); |
9144 | dasm_put(Dst, 6561, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); | 9159 | dasm_put(Dst, 6562, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); |
9145 | break; | 9160 | break; |
9146 | 9161 | ||
9147 | case BC_TSETM: | 9162 | case BC_TSETM: |
9148 | dasm_put(Dst, 6571, 32-3, Dt6(->asize), 31-3, Dt6(->marked), Dt6(->array), LJ_GC_BLACK, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); | 9163 | dasm_put(Dst, 6572, 32-3, Dt6(->asize), 31-3, Dt6(->marked), Dt6(->array), LJ_GC_BLACK, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); |
9149 | dasm_put(Dst, 6640); | 9164 | dasm_put(Dst, 6641); |
9150 | break; | 9165 | break; |
9151 | 9166 | ||
9152 | /* -- Calls and vararg handling ----------------------------------------- */ | 9167 | /* -- Calls and vararg handling ----------------------------------------- */ |
9153 | 9168 | ||
9154 | case BC_CALLM: | 9169 | case BC_CALLM: |
9155 | dasm_put(Dst, 6643); | 9170 | dasm_put(Dst, 6644); |
9156 | break; | 9171 | break; |
9157 | case BC_CALL: | 9172 | case BC_CALL: |
9158 | dasm_put(Dst, 6645, LJ_TFUNC, Dt7(->pc)); | 9173 | dasm_put(Dst, 6646, LJ_TFUNC, Dt7(->pc)); |
9159 | break; | 9174 | break; |
9160 | 9175 | ||
9161 | case BC_CALLMT: | 9176 | case BC_CALLMT: |
9162 | dasm_put(Dst, 6666); | 9177 | dasm_put(Dst, 6667); |
9163 | break; | 9178 | break; |
9164 | case BC_CALLT: | 9179 | case BC_CALLT: |
9165 | dasm_put(Dst, 6668, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); | 9180 | dasm_put(Dst, 6669, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); |
9166 | dasm_put(Dst, 6732, FRAME_TYPE); | 9181 | dasm_put(Dst, 6733, FRAME_TYPE); |
9167 | break; | 9182 | break; |
9168 | 9183 | ||
9169 | case BC_ITERC: | 9184 | case BC_ITERC: |
9170 | dasm_put(Dst, 6741, LJ_TFUNC, Dt7(->pc)); | 9185 | dasm_put(Dst, 6742, LJ_TFUNC, Dt7(->pc)); |
9171 | break; | 9186 | break; |
9172 | 9187 | ||
9173 | case BC_ITERN: | 9188 | case BC_ITERN: |
9174 | #if LJ_HASJIT | 9189 | #if LJ_HASJIT |
9175 | #endif | 9190 | #endif |
9176 | dasm_put(Dst, 6768, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL); | 9191 | dasm_put(Dst, 6769, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL); |
9177 | if (LJ_DUALNUM) { | 9192 | if (LJ_DUALNUM) { |
9178 | dasm_put(Dst, 6790); | 9193 | dasm_put(Dst, 6791); |
9179 | } else { | 9194 | } else { |
9180 | dasm_put(Dst, 6793); | 9195 | dasm_put(Dst, 6794); |
9181 | } | 9196 | } |
9182 | dasm_put(Dst, 6797, -(BCBIAS_J*4 >> 16)); | 9197 | dasm_put(Dst, 6798, -(BCBIAS_J*4 >> 16)); |
9183 | if (!LJ_DUALNUM) { | 9198 | if (!LJ_DUALNUM) { |
9184 | dasm_put(Dst, 6805); | 9199 | dasm_put(Dst, 6806); |
9185 | } | 9200 | } |
9186 | dasm_put(Dst, 6807, Dt6(->hmask), Dt6(->node), 31-5, 31-3, LJ_TNIL, DtB(->key), -(BCBIAS_J*4 >> 16)); | 9201 | dasm_put(Dst, 6808, Dt6(->hmask), Dt6(->node), 31-5, 31-3, LJ_TNIL, DtB(->key), -(BCBIAS_J*4 >> 16)); |
9187 | break; | 9202 | break; |
9188 | 9203 | ||
9189 | case BC_ISNEXT: | 9204 | case BC_ISNEXT: |
9190 | dasm_put(Dst, 6863, LJ_TTAB, LJ_TFUNC, LJ_TNIL, Dt8(->ffid), FF_next_N, 32-1, -(BCBIAS_J*4 >> 16), BC_JMP, BC_ITERC, -(BCBIAS_J*4 >> 16)); | 9205 | dasm_put(Dst, 6864, LJ_TTAB, LJ_TFUNC, LJ_TNIL, Dt8(->ffid), FF_next_N, 32-1, -(BCBIAS_J*4 >> 16), BC_JMP, BC_ITERC, -(BCBIAS_J*4 >> 16)); |
9191 | break; | 9206 | break; |
9192 | 9207 | ||
9193 | case BC_VARG: | 9208 | case BC_VARG: |
9194 | dasm_put(Dst, 6913, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); | 9209 | dasm_put(Dst, 6914, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); |
9195 | dasm_put(Dst, 6993); | 9210 | dasm_put(Dst, 6994); |
9196 | break; | 9211 | break; |
9197 | 9212 | ||
9198 | /* -- Returns ----------------------------------------------------------- */ | 9213 | /* -- Returns ----------------------------------------------------------- */ |
9199 | 9214 | ||
9200 | case BC_RETM: | 9215 | case BC_RETM: |
9201 | dasm_put(Dst, 6999); | 9216 | dasm_put(Dst, 7000); |
9202 | break; | 9217 | break; |
9203 | 9218 | ||
9204 | case BC_RET: | 9219 | case BC_RET: |
9205 | dasm_put(Dst, 7001, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); | 9220 | dasm_put(Dst, 7002, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); |
9206 | break; | 9221 | break; |
9207 | 9222 | ||
9208 | case BC_RET0: case BC_RET1: | 9223 | case BC_RET0: case BC_RET1: |
9209 | dasm_put(Dst, 7071, FRAME_TYPE, FRAME_VARG); | 9224 | dasm_put(Dst, 7072, FRAME_TYPE, FRAME_VARG); |
9210 | if (op == BC_RET1) { | 9225 | if (op == BC_RET1) { |
9211 | dasm_put(Dst, 7084); | 9226 | dasm_put(Dst, 7085); |
9212 | } | 9227 | } |
9213 | dasm_put(Dst, 7087, Dt7(->pc), PC2PROTO(k)); | 9228 | dasm_put(Dst, 7088, Dt7(->pc), PC2PROTO(k)); |
9214 | break; | 9229 | break; |
9215 | 9230 | ||
9216 | /* -- Loops and branches ------------------------------------------------ */ | 9231 | /* -- Loops and branches ------------------------------------------------ */ |
9217 | 9232 | ||
9218 | case BC_FORL: | 9233 | case BC_FORL: |
9219 | #if LJ_HASJIT | 9234 | #if LJ_HASJIT |
9220 | dasm_put(Dst, 7115, GG_DISP2HOT, -HOTCOUNT_LOOP); | 9235 | dasm_put(Dst, 7116, GG_DISP2HOT, -HOTCOUNT_LOOP); |
9221 | #endif | 9236 | #endif |
9222 | break; | 9237 | break; |
9223 | 9238 | ||
@@ -9230,93 +9245,100 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
9230 | case BC_IFORL: | 9245 | case BC_IFORL: |
9231 | vk = (op == BC_IFORL || op == BC_JFORL); | 9246 | vk = (op == BC_IFORL || op == BC_JFORL); |
9232 | if (LJ_DUALNUM) { | 9247 | if (LJ_DUALNUM) { |
9233 | dasm_put(Dst, 7125, FORL_IDX*8+4); | 9248 | dasm_put(Dst, 7126, FORL_IDX*8+4); |
9234 | if (vk) { | 9249 | if (vk) { |
9235 | dasm_put(Dst, 7130, FORL_STEP*8+4, FORL_STOP*8+4, FORL_IDX*8+4); | 9250 | dasm_put(Dst, 7131, FORL_STEP*8+4, FORL_STOP*8+4, FORL_IDX*8+4); |
9236 | } else { | 9251 | } else { |
9237 | dasm_put(Dst, 7144, FORL_STEP*8, FORL_STEP*8+4, FORL_STOP*8, FORL_STOP*8+4); | 9252 | dasm_put(Dst, 7145, FORL_STEP*8, FORL_STEP*8+4, FORL_STOP*8, FORL_STOP*8+4); |
9238 | } | 9253 | } |
9239 | dasm_put(Dst, 7160, FORL_EXT*8); | 9254 | dasm_put(Dst, 7161, FORL_EXT*8); |
9240 | if (op != BC_JFORL) { | 9255 | if (op != BC_JFORL) { |
9241 | dasm_put(Dst, 7167, 32-1); | 9256 | dasm_put(Dst, 7168, 32-1); |
9242 | } | 9257 | } |
9243 | dasm_put(Dst, 7170, FORL_EXT*8+4); | 9258 | dasm_put(Dst, 7171, FORL_EXT*8+4); |
9244 | if (op != BC_JFORL) { | 9259 | if (op != BC_JFORL) { |
9245 | dasm_put(Dst, 7173); | 9260 | dasm_put(Dst, 7174); |
9246 | } | 9261 | } |
9247 | if (op == BC_FORI) { | 9262 | if (op == BC_FORI) { |
9248 | dasm_put(Dst, 7175); | 9263 | dasm_put(Dst, 7176); |
9249 | } else if (op == BC_JFORI) { | 9264 | } else if (op == BC_JFORI) { |
9250 | dasm_put(Dst, 7178, -(BCBIAS_J*4 >> 16), BC_JLOOP); | 9265 | dasm_put(Dst, 7179, -(BCBIAS_J*4 >> 16)); |
9251 | } else if (op == BC_IFORL) { | 9266 | } else if (op == BC_IFORL) { |
9252 | dasm_put(Dst, 7183, -(BCBIAS_J*4 >> 16)); | 9267 | dasm_put(Dst, 7184, -(BCBIAS_J*4 >> 16)); |
9253 | } else { | 9268 | } else { |
9254 | dasm_put(Dst, 7188, BC_JLOOP); | 9269 | dasm_put(Dst, 7189, BC_JLOOP); |
9255 | } | 9270 | } |
9256 | dasm_put(Dst, 7191); | 9271 | dasm_put(Dst, 7192); |
9257 | if (vk) { | 9272 | if (vk) { |
9258 | dasm_put(Dst, 7207); | 9273 | dasm_put(Dst, 7208); |
9259 | } | 9274 | } |
9260 | } | 9275 | } |
9261 | if (vk) { | 9276 | if (vk) { |
9262 | if (LJ_DUALNUM) { | 9277 | if (LJ_DUALNUM) { |
9263 | dasm_put(Dst, 7214, FORL_IDX*8); | 9278 | dasm_put(Dst, 7215, FORL_IDX*8); |
9264 | } else { | 9279 | } else { |
9265 | dasm_put(Dst, 7218); | 9280 | dasm_put(Dst, 7219); |
9266 | } | 9281 | } |
9267 | dasm_put(Dst, 7220, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8, FORL_IDX*8); | 9282 | dasm_put(Dst, 7221, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8, FORL_IDX*8); |
9268 | } else { | 9283 | } else { |
9269 | if (LJ_DUALNUM) { | 9284 | if (LJ_DUALNUM) { |
9270 | dasm_put(Dst, 7230); | 9285 | dasm_put(Dst, 7231); |
9271 | } else { | 9286 | } else { |
9272 | dasm_put(Dst, 7232, FORL_STEP*8, FORL_STOP*8); | 9287 | dasm_put(Dst, 7233, FORL_STEP*8, FORL_STOP*8); |
9273 | } | 9288 | } |
9274 | dasm_put(Dst, 7241, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8); | 9289 | dasm_put(Dst, 7242, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8); |
9275 | } | 9290 | } |
9276 | dasm_put(Dst, 7252); | 9291 | dasm_put(Dst, 7253); |
9277 | if (op != BC_JFORL) { | 9292 | if (op != BC_JFORL) { |
9278 | dasm_put(Dst, 7254, 32-1); | 9293 | dasm_put(Dst, 7255, 32-1); |
9279 | } | 9294 | } |
9280 | dasm_put(Dst, 7257, FORL_EXT*8); | 9295 | dasm_put(Dst, 7258, FORL_EXT*8); |
9281 | if (op != BC_JFORL) { | 9296 | if (op != BC_JFORL) { |
9282 | dasm_put(Dst, 7260); | 9297 | dasm_put(Dst, 7261); |
9283 | } | 9298 | } |
9284 | dasm_put(Dst, 7262); | 9299 | dasm_put(Dst, 7263); |
9285 | if (op == BC_JFORI) { | 9300 | if (op == BC_JFORI) { |
9286 | dasm_put(Dst, 7264, -(BCBIAS_J*4 >> 16)); | 9301 | dasm_put(Dst, 7265, -(BCBIAS_J*4 >> 16)); |
9287 | } | 9302 | } |
9288 | dasm_put(Dst, 7267); | 9303 | dasm_put(Dst, 7268); |
9289 | if (op == BC_FORI) { | 9304 | if (op == BC_FORI) { |
9290 | dasm_put(Dst, 7270); | 9305 | dasm_put(Dst, 7271); |
9291 | } else if (op == BC_IFORL) { | 9306 | } else if (op == BC_IFORL) { |
9292 | if (LJ_DUALNUM) { | 9307 | if (LJ_DUALNUM) { |
9293 | dasm_put(Dst, 7273); | 9308 | dasm_put(Dst, 7274); |
9294 | } else { | 9309 | } else { |
9295 | dasm_put(Dst, 7276); | 9310 | dasm_put(Dst, 7277); |
9296 | } | 9311 | } |
9297 | dasm_put(Dst, 7279, -(BCBIAS_J*4 >> 16)); | 9312 | dasm_put(Dst, 7280, -(BCBIAS_J*4 >> 16)); |
9313 | } else if (op == BC_JFORI) { | ||
9314 | dasm_put(Dst, 7284); | ||
9298 | } else { | 9315 | } else { |
9299 | dasm_put(Dst, 7283, BC_JLOOP); | 9316 | dasm_put(Dst, 7287, BC_JLOOP); |
9300 | } | 9317 | } |
9301 | if (LJ_DUALNUM) { | 9318 | if (LJ_DUALNUM) { |
9302 | dasm_put(Dst, 7286); | 9319 | dasm_put(Dst, 7290); |
9303 | } else { | 9320 | } else { |
9304 | dasm_put(Dst, 7289); | 9321 | dasm_put(Dst, 7293); |
9305 | } | 9322 | } |
9306 | dasm_put(Dst, 7301); | 9323 | dasm_put(Dst, 7305); |
9307 | if (op == BC_FORI) { | 9324 | if (op == BC_FORI) { |
9308 | dasm_put(Dst, 7303, -(BCBIAS_J*4 >> 16)); | 9325 | dasm_put(Dst, 7307, -(BCBIAS_J*4 >> 16)); |
9309 | } else if (op == BC_IFORL) { | 9326 | } else if (op == BC_IFORL) { |
9310 | dasm_put(Dst, 7309); | 9327 | dasm_put(Dst, 7313); |
9328 | } else if (op == BC_JFORI) { | ||
9329 | dasm_put(Dst, 7316); | ||
9311 | } else { | 9330 | } else { |
9312 | dasm_put(Dst, 7312, BC_JLOOP); | 9331 | dasm_put(Dst, 7319, BC_JLOOP); |
9332 | } | ||
9333 | dasm_put(Dst, 7322); | ||
9334 | if (op == BC_JFORI) { | ||
9335 | dasm_put(Dst, 7325, BC_JLOOP); | ||
9313 | } | 9336 | } |
9314 | dasm_put(Dst, 7315); | ||
9315 | break; | 9337 | break; |
9316 | 9338 | ||
9317 | case BC_ITERL: | 9339 | case BC_ITERL: |
9318 | #if LJ_HASJIT | 9340 | #if LJ_HASJIT |
9319 | dasm_put(Dst, 7318, GG_DISP2HOT, -HOTCOUNT_LOOP); | 9341 | dasm_put(Dst, 7331, GG_DISP2HOT, -HOTCOUNT_LOOP); |
9320 | #endif | 9342 | #endif |
9321 | break; | 9343 | break; |
9322 | 9344 | ||
@@ -9325,40 +9347,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
9325 | break; | 9347 | break; |
9326 | #endif | 9348 | #endif |
9327 | case BC_IITERL: | 9349 | case BC_IITERL: |
9328 | dasm_put(Dst, 7328, LJ_TNIL); | 9350 | dasm_put(Dst, 7341, LJ_TNIL); |
9329 | if (op == BC_JITERL) { | 9351 | if (op == BC_JITERL) { |
9330 | dasm_put(Dst, 7335, BC_JLOOP); | 9352 | dasm_put(Dst, 7348, BC_JLOOP); |
9331 | } else { | 9353 | } else { |
9332 | dasm_put(Dst, 7340, 32-1, -(BCBIAS_J*4 >> 16)); | 9354 | dasm_put(Dst, 7353, 32-1, -(BCBIAS_J*4 >> 16)); |
9333 | } | 9355 | } |
9334 | dasm_put(Dst, 7348); | 9356 | dasm_put(Dst, 7361); |
9335 | break; | 9357 | break; |
9336 | 9358 | ||
9337 | case BC_LOOP: | 9359 | case BC_LOOP: |
9338 | #if LJ_HASJIT | 9360 | #if LJ_HASJIT |
9339 | dasm_put(Dst, 7360, GG_DISP2HOT, -HOTCOUNT_LOOP); | 9361 | dasm_put(Dst, 7373, GG_DISP2HOT, -HOTCOUNT_LOOP); |
9340 | #endif | 9362 | #endif |
9341 | break; | 9363 | break; |
9342 | 9364 | ||
9343 | case BC_ILOOP: | 9365 | case BC_ILOOP: |
9344 | dasm_put(Dst, 7370); | 9366 | dasm_put(Dst, 7383); |
9345 | break; | 9367 | break; |
9346 | 9368 | ||
9347 | case BC_JLOOP: | 9369 | case BC_JLOOP: |
9348 | #if LJ_HASJIT | 9370 | #if LJ_HASJIT |
9349 | dasm_put(Dst, 7381, DISPATCH_J(trace), 32-1, DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), GG_DISP2G+32768); | 9371 | dasm_put(Dst, 7394, DISPATCH_J(trace), 32-1, DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), GG_DISP2G+32768); |
9350 | #endif | 9372 | #endif |
9351 | break; | 9373 | break; |
9352 | 9374 | ||
9353 | case BC_JMP: | 9375 | case BC_JMP: |
9354 | dasm_put(Dst, 7398, 32-1, -(BCBIAS_J*4 >> 16)); | 9376 | dasm_put(Dst, 7413, 32-1, -(BCBIAS_J*4 >> 16)); |
9355 | break; | 9377 | break; |
9356 | 9378 | ||
9357 | /* -- Function headers -------------------------------------------------- */ | 9379 | /* -- Function headers -------------------------------------------------- */ |
9358 | 9380 | ||
9359 | case BC_FUNCF: | 9381 | case BC_FUNCF: |
9360 | #if LJ_HASJIT | 9382 | #if LJ_HASJIT |
9361 | dasm_put(Dst, 7414, GG_DISP2HOT, -HOTCOUNT_CALL); | 9383 | dasm_put(Dst, 7429, GG_DISP2HOT, -HOTCOUNT_CALL); |
9362 | #endif | 9384 | #endif |
9363 | case BC_FUNCV: /* NYI: compiled vararg functions. */ | 9385 | case BC_FUNCV: /* NYI: compiled vararg functions. */ |
9364 | break; | 9386 | break; |
@@ -9368,42 +9390,42 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
9368 | break; | 9390 | break; |
9369 | #endif | 9391 | #endif |
9370 | case BC_IFUNCF: | 9392 | case BC_IFUNCF: |
9371 | dasm_put(Dst, 7424, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); | 9393 | dasm_put(Dst, 7439, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); |
9372 | if (op != BC_JFUNCF) { | 9394 | if (op != BC_JFUNCF) { |
9373 | dasm_put(Dst, 7436); | 9395 | dasm_put(Dst, 7451); |
9374 | } | 9396 | } |
9375 | dasm_put(Dst, 7439); | 9397 | dasm_put(Dst, 7454); |
9376 | if (op == BC_JFUNCF) { | 9398 | if (op == BC_JFUNCF) { |
9377 | dasm_put(Dst, 7444, BC_JLOOP); | 9399 | dasm_put(Dst, 7459, BC_JLOOP); |
9378 | } else { | 9400 | } else { |
9379 | dasm_put(Dst, 7448); | 9401 | dasm_put(Dst, 7463); |
9380 | } | 9402 | } |
9381 | dasm_put(Dst, 7457); | 9403 | dasm_put(Dst, 7472); |
9382 | break; | 9404 | break; |
9383 | 9405 | ||
9384 | case BC_JFUNCV: | 9406 | case BC_JFUNCV: |
9385 | #if !LJ_HASJIT | 9407 | #if !LJ_HASJIT |
9386 | break; | 9408 | break; |
9387 | #endif | 9409 | #endif |
9388 | dasm_put(Dst, 7463); | 9410 | dasm_put(Dst, 7478); |
9389 | break; /* NYI: compiled vararg functions. */ | 9411 | break; /* NYI: compiled vararg functions. */ |
9390 | 9412 | ||
9391 | case BC_IFUNCV: | 9413 | case BC_IFUNCV: |
9392 | dasm_put(Dst, 7465, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), LJ_TNIL); | 9414 | dasm_put(Dst, 7480, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), LJ_TNIL); |
9393 | break; | 9415 | break; |
9394 | 9416 | ||
9395 | case BC_FUNCC: | 9417 | case BC_FUNCC: |
9396 | case BC_FUNCCW: | 9418 | case BC_FUNCCW: |
9397 | if (op == BC_FUNCC) { | 9419 | if (op == BC_FUNCC) { |
9398 | dasm_put(Dst, 7518, Dt8(->f)); | 9420 | dasm_put(Dst, 7533, Dt8(->f)); |
9399 | } else { | 9421 | } else { |
9400 | dasm_put(Dst, 7521, DISPATCH_GL(wrapf)); | 9422 | dasm_put(Dst, 7536, DISPATCH_GL(wrapf)); |
9401 | } | 9423 | } |
9402 | dasm_put(Dst, 7524, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); | 9424 | dasm_put(Dst, 7539, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); |
9403 | if (op == BC_FUNCCW) { | 9425 | if (op == BC_FUNCCW) { |
9404 | dasm_put(Dst, 7537, Dt8(->f)); | 9426 | dasm_put(Dst, 7552, Dt8(->f)); |
9405 | } | 9427 | } |
9406 | dasm_put(Dst, 7540, DISPATCH_GL(vmstate), Dt1(->base), 31-3, Dt1(->top), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); | 9428 | dasm_put(Dst, 7555, DISPATCH_GL(vmstate), Dt1(->base), 31-3, Dt1(->top), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); |
9407 | break; | 9429 | break; |
9408 | 9430 | ||
9409 | /* ---------------------------------------------------------------------- */ | 9431 | /* ---------------------------------------------------------------------- */ |
@@ -9423,7 +9445,7 @@ static int build_backend(BuildCtx *ctx) | |||
9423 | 9445 | ||
9424 | build_subroutines(ctx); | 9446 | build_subroutines(ctx); |
9425 | 9447 | ||
9426 | dasm_put(Dst, 7561); | 9448 | dasm_put(Dst, 7576); |
9427 | for (op = 0; op < BC__MAX; op++) | 9449 | for (op = 0; op < BC__MAX; op++) |
9428 | build_ins(ctx, (BCOp)op, op); | 9450 | build_ins(ctx, (BCOp)op, op); |
9429 | 9451 | ||