aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2011-10-24 16:23:01 +0200
committerMike Pall <mike>2011-10-24 16:24:47 +0200
commit96d8611d1b3c038d565016c0383e2cb7a8064449 (patch)
treed141413c36917dcb3f8e804228f8e1f14188e6e4 /src
parent167f638f91a4ff186ffa6ef8a8915422ea52f38b (diff)
downloadluajit-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.dasc34
-rw-r--r--src/buildvm_ppc.h820
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
15static const unsigned int build_actionlist[7562] = { 15static const unsigned int build_actionlist[7577] = {
160x00010001, 160x00010001,
170x00060014, 170x00060014,
180x72000000, 180x72000000,
@@ -3793,6 +3793,7 @@ static const unsigned int build_actionlist[7562] = {
37930x7d6e0050, 37930x7d6e0050,
37940x7e8ea214, 37940x7e8ea214,
37950x814efffc, 37950x814efffc,
37960x80f0fffc,
37960x7c6903a6, 37970x7c6903a6,
37970x4e800420, 37980x4e800420,
37980x00060096, 37990x00060096,
@@ -3801,7 +3802,7 @@ static const unsigned int build_actionlist[7562] = {
38010x00098200, 38020x00098200,
38020xbc410000, 38030xbc410000,
38030x00098200, 38040x00098200,
38040x3a3e0000, 38050x3a3f0000,
38050x00098200, 38060x00098200,
38060x38800000, 38070x38800000,
38070x00098200, 38080x00098200,
@@ -3868,7 +3869,7 @@ static const unsigned int build_actionlist[7562] = {
38680x00098200, 38690x00098200,
38690xdae10000, 38700xdae10000,
38700x00098200, 38710x00098200,
38710x80c50000, 38720xa0c50002,
38720xdb010000, 38730xdb010000,
38730x00098200, 38740x00098200,
38740xdb210000, 38750xdb210000,
@@ -3898,7 +3899,8 @@ static const unsigned int build_actionlist[7562] = {
38980x38a5fffe, 38990x38a5fffe,
38990x91110000, 39000x91110000,
39000x00098200, 39010x00098200,
39010x7ca62a14, 39020x90d10000,
39030x00098200,
39020x91d20000, 39040x91d20000,
39030x00098200, 39050x00098200,
39040x38710000, 39060x38710000,
@@ -3906,8 +3908,6 @@ static const unsigned int build_actionlist[7562] = {
39060x90b10000, 39080x90b10000,
39070x00098200, 39090x00098200,
39080x38810010, 39100x38810010,
39090x93f10000,
39100x00098200,
39110x48000001, 39110x48000001,
39120x0003002b, 39120x0003002b,
39130x81120000, 39130x81120000,
@@ -3925,7 +3925,7 @@ static const unsigned int build_actionlist[7562] = {
39250x00060097, 39250x00060097,
39260x00000000, 39260x00000000,
39270x82410024, 39270x82410024,
39280x3a3e0000, 39280x3a3f0000,
39290x00098200, 39290x00098200,
39300x0006000b, 39300x0006000b,
39310x2c030000, 39310x2c030000,
@@ -3963,15 +3963,16 @@ static const unsigned int build_actionlist[7562] = {
39630x54f4dd78, 39630x54f4dd78,
39640x7c11402e, 39640x7c11402e,
39650x7c0903a6, 39650x7c0903a6,
39660x2c080000, 39660x28080000,
39670x00098200, 39670x00090200,
39680x41820000, 39680x40800000,
39690x00050802, 39690x00050802,
39700x54ea5d78, 39700x54ea5d78,
39710x54ec9b78, 39710x54ec9b78,
39720x54eb9d78, 39720x54eb9d78,
39730x4e800420, 39730x4e800420,
39740x0006000c, 39740x0006000c,
39750x3973fff8,
39750x7e947214, 39760x7e947214,
39760x4e800420, 39770x4e800420,
39770x0006000d, 39780x0006000d,
@@ -7193,15 +7194,15 @@ static const unsigned int build_actionlist[7562] = {
71930x00000000, 71940x00000000,
71940x3e0c0000, 71950x3e0c0000,
71950x00098200, 71960x00098200,
71960x40810000, 71970x40a10000,
71970x00070800, 71980x00050807,
71980x00000000, 71990x00000000,
71990x41810000, 72000x41810000,
72000x00050802, 72010x00050802,
72010x3e0c0000, 72020x3e0c0000,
72020x00098200, 72030x00098200,
72030x00000000, 72040x00000000,
72040x40810000, 72050x40a10000,
72050x00070800, 72060x00070800,
72060x00000000, 72070x00000000,
72070x0006000c, 72080x0006000c,
@@ -7296,7 +7297,10 @@ static const unsigned int build_actionlist[7562] = {
72960x3e0c0000, 72970x3e0c0000,
72970x00098200, 72980x00098200,
72980x00000000, 72990x00000000,
72990x40810000, 73000x40a10000,
73010x00050807,
73020x00000000,
73030x40a10000,
73000x00070800, 73040x00070800,
73010x00000000, 73050x00000000,
73020x48000000, 73060x48000000,
@@ -7325,12 +7329,21 @@ static const unsigned int build_actionlist[7562] = {
73250x40a00000, 73290x40a00000,
73260x0005080b, 73300x0005080b,
73270x00000000, 73310x00000000,
73280x40800000, 73320x40a00000,
73330x00050807,
73340x00000000,
73350x40a00000,
73290x00070800, 73360x00070800,
73300x00000000, 73370x00000000,
73310x48000000, 73380x48000000,
73320x0005000c, 73390x0005000c,
73330x00000000, 73400x00000000,
73410x00060011,
73420x80f0fffc,
73430x54ec9b78,
73440x48000000,
73450x00070000,
73460x00000000,
73340x5608fe7c, 73470x5608fe7c,
73350x39080000, 73480x39080000,
73360x00098200, 73490x00098200,
@@ -7398,6 +7411,8 @@ static const unsigned int build_actionlist[7562] = {
73980x00098200, 74110x00098200,
73990x558c007e, 74120x558c007e,
74000x000900ab, 74130x000900ab,
74140x93110000,
74150x00098200,
74010x7d28602e, 74160x7d28602e,
74020x7c000400, 74170x7c000400,
74030x81290000, 74180x81290000,
@@ -7407,7 +7422,7 @@ static const unsigned int build_actionlist[7562] = {
74070x7d2903a6, 74220x7d2903a6,
74080x92510000, 74230x92510000,
74090x00098200, 74240x00098200,
74100x3bd10000, 74250x3bf10000,
74110x00098200, 74260x00098200,
74120x4e800420, 74270x4e800420,
74130x00000000, 74280x00000000,
@@ -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)
8342static void build_ins(BuildCtx *ctx, BCOp op, int defop) 8357static 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