aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2011-08-01 18:59:16 +0200
committerMike Pall <mike>2011-08-01 18:59:16 +0200
commit4008b351f477d528ec950760689823f8ab785849 (patch)
treed6217942bc5168d3f016abd3c93ffe32f050df01 /src
parent26106759d422438b1b3e974c43fd9f38ea055bdf (diff)
downloadluajit-4008b351f477d528ec950760689823f8ab785849.tar.gz
luajit-4008b351f477d528ec950760689823f8ab785849.tar.bz2
luajit-4008b351f477d528ec950760689823f8ab785849.zip
PPC: Add machine-specific part of FFI.
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_ppc.dasc103
-rw-r--r--src/buildvm_ppc.h880
-rw-r--r--src/lj_arch.h1
-rw-r--r--src/lj_ccall.c53
-rw-r--r--src/lj_ccall.h19
5 files changed, 673 insertions, 383 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index 90163e9d..892dccbf 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -2382,7 +2382,62 @@ static void build_subroutines(BuildCtx *ctx)
2382 | 2382 |
2383 |->vm_ffi_call: 2383 |->vm_ffi_call:
2384#if LJ_HASFFI 2384#if LJ_HASFFI
2385 | NYI 2385 | .type CCSTATE, CCallState, CARG1
2386 | lwz TMP1, CCSTATE->spadj
2387 | mflr TMP0
2388 | lbz CARG2, CCSTATE->nsp
2389 | lbz CARG3, CCSTATE->nfpr
2390 | neg TMP1, TMP1
2391 | stw TMP0, 4(sp)
2392 | cmpwi cr1, CARG3, 0
2393 | mr TMP2, sp
2394 | addic. CARG2, CARG2, -1
2395 | stwux sp, sp, TMP1
2396 | crnot 4*cr1+eq, 4*cr1+eq // For vararg calls.
2397 | stw CCSTATE, -4(TMP2)
2398 | li TMP3, 0
2399 | la TMP1, CCSTATE->stack
2400 | slwi CARG2, CARG2, 2
2401 | blt >2
2402 | la TMP2, 8(sp)
2403 |1:
2404 | lwzx TMP0, TMP1, CARG2
2405 | stwx TMP0, TMP2, CARG2
2406 | addic. CARG2, CARG2, -4
2407 | bge <1
2408 |2:
2409 | bne cr1, >3
2410 | lfd f1, CCSTATE->fpr[0]
2411 | lfd f2, CCSTATE->fpr[1]
2412 | lfd f3, CCSTATE->fpr[2]
2413 | lfd f4, CCSTATE->fpr[3]
2414 | lfd f5, CCSTATE->fpr[4]
2415 | lfd f6, CCSTATE->fpr[5]
2416 | lfd f7, CCSTATE->fpr[6]
2417 | lfd f8, CCSTATE->fpr[7]
2418 |3:
2419 | lwz TMP0, CCSTATE->func
2420 | lwz CARG2, CCSTATE->gpr[1]
2421 | lwz CARG3, CCSTATE->gpr[2]
2422 | lwz CARG4, CCSTATE->gpr[3]
2423 | lwz CARG5, CCSTATE->gpr[4]
2424 | mtctr TMP0
2425 | lwz r8, CCSTATE->gpr[5]
2426 | lwz r9, CCSTATE->gpr[6]
2427 | lwz r10, CCSTATE->gpr[7]
2428 | lwz CARG1, CCSTATE->gpr[0] // Do this last, since CCSTATE is CARG1.
2429 | bctrl
2430 | lwz TMP2, 0(sp)
2431 | lwz CCSTATE:TMP1, -4(TMP2)
2432 | lwz TMP0, 4(TMP2)
2433 | stw CARG1, CCSTATE:TMP1->gpr[0]
2434 | stfd FARG1, CCSTATE:TMP1->fpr[0]
2435 | stw CARG2, CCSTATE:TMP1->gpr[1]
2436 | mtlr TMP0
2437 | stw CARG3, CCSTATE:TMP1->gpr[2]
2438 | mr sp, TMP2
2439 | stw CARG4, CCSTATE:TMP1->gpr[3]
2440 | blr
2386#endif 2441#endif
2387 | 2442 |
2388 |//----------------------------------------------------------------------- 2443 |//-----------------------------------------------------------------------
@@ -2440,7 +2495,9 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2440 | tonum_i f1, CARG3 2495 | tonum_i f1, CARG3
2441 | b >5 2496 | b >5
2442 | 2497 |
2443 |8: // RA is an integer, RD is a number. 2498 |8: // RA is an integer, RD is not an integer.
2499 | bgt cr1, ->vmeta_comp
2500 | // RA is an integer, RD is a number.
2444 | tonum_i f0, CARG2 2501 | tonum_i f0, CARG2
2445 |4: 2502 |4:
2446 | lfd f1, 0(RD) 2503 | lfd f1, 0(RD)
@@ -2498,9 +2555,9 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2498 | lwz CARG2, 4(RA) 2555 | lwz CARG2, 4(RA)
2499 | lwzux TMP1, RD, BASE 2556 | lwzux TMP1, RD, BASE
2500 | checknum cr0, TMP0 2557 | checknum cr0, TMP0
2501 | lwz INS, -4(PC) 2558 | lwz TMP2, -4(PC)
2502 | checknum cr1, TMP1 2559 | checknum cr1, TMP1
2503 | decode_RD4 TMP2, INS 2560 | decode_RD4 TMP2, TMP2
2504 | lwz CARG3, 4(RD) 2561 | lwz CARG3, 4(RD)
2505 | cror 4*cr7+gt, 4*cr0+gt, 4*cr1+gt 2562 | cror 4*cr7+gt, 4*cr0+gt, 4*cr1+gt
2506 | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) 2563 | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16)
@@ -2538,10 +2595,20 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2538 | lwz CARG2, 4(RA) 2595 | lwz CARG2, 4(RA)
2539 | lwz CARG3, 4(RD) 2596 | lwz CARG3, 4(RD)
2540 } 2597 }
2598 if (LJ_HASFFI) {
2599 | cmpwi cr7, TMP0, LJ_TCDATA
2600 | cmpwi cr5, TMP1, LJ_TCDATA
2601 }
2541 | not TMP3, TMP0 2602 | not TMP3, TMP0
2542 | cmplw TMP0, TMP1 2603 | cmplw TMP0, TMP1
2543 | cmplwi cr1, TMP3, ~LJ_TISPRI // Primitive? 2604 | cmplwi cr1, TMP3, ~LJ_TISPRI // Primitive?
2605 if (LJ_HASFFI) {
2606 | cror 4*cr7+eq, 4*cr7+eq, 4*cr5+eq
2607 }
2544 | cmplwi cr6, TMP3, ~LJ_TISTABUD // Table or userdata? 2608 | cmplwi cr6, TMP3, ~LJ_TISTABUD // Table or userdata?
2609 if (LJ_HASFFI) {
2610 | beq cr7, ->vmeta_equal_cd
2611 }
2545 | cmplw cr5, CARG2, CARG3 2612 | cmplw cr5, CARG2, CARG3
2546 | crandc 4*cr0+gt, 4*cr0+eq, 4*cr1+gt // 2: Same type and primitive. 2613 | crandc 4*cr0+gt, 4*cr0+eq, 4*cr1+gt // 2: Same type and primitive.
2547 | crorc 4*cr0+lt, 4*cr5+eq, 4*cr0+eq // 1: Same tv or different type. 2614 | crorc 4*cr0+lt, 4*cr5+eq, 4*cr0+eq // 1: Same tv or different type.
@@ -2587,14 +2654,20 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2587 | lwzux TMP0, RA, BASE 2654 | lwzux TMP0, RA, BASE
2588 | srwi RD, RD, 1 2655 | srwi RD, RD, 1
2589 | lwz STR:TMP3, 4(RA) 2656 | lwz STR:TMP3, 4(RA)
2590 | lwz INS, 0(PC) 2657 | lwz TMP2, 0(PC)
2591 | subfic RD, RD, -4 2658 | subfic RD, RD, -4
2592 | addi PC, PC, 4 2659 | addi PC, PC, 4
2660 if (LJ_HASFFI) {
2661 | cmpwi TMP0, LJ_TCDATA
2662 }
2593 | lwzx STR:TMP1, KBASE, RD // KBASE-4-str_const*4 2663 | lwzx STR:TMP1, KBASE, RD // KBASE-4-str_const*4
2594 | subfic TMP0, TMP0, LJ_TSTR 2664 | subfic TMP0, TMP0, LJ_TSTR
2665 if (LJ_HASFFI) {
2666 | beq ->vmeta_equal_cd
2667 }
2595 | sub TMP1, STR:TMP1, STR:TMP3 2668 | sub TMP1, STR:TMP1, STR:TMP3
2596 | or TMP0, TMP0, TMP1 2669 | or TMP0, TMP0, TMP1
2597 | decode_RD4 TMP2, INS 2670 | decode_RD4 TMP2, TMP2
2598 | subfic TMP0, TMP0, 0 2671 | subfic TMP0, TMP0, 0
2599 | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) 2672 | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16)
2600 | subfe TMP1, TMP1, TMP1 2673 | subfe TMP1, TMP1, TMP1
@@ -2616,9 +2689,9 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2616 | lwz CARG2, 4(RA) 2689 | lwz CARG2, 4(RA)
2617 | lwzux TMP1, RD, KBASE 2690 | lwzux TMP1, RD, KBASE
2618 | checknum cr0, TMP0 2691 | checknum cr0, TMP0
2619 | lwz INS, -4(PC) 2692 | lwz TMP2, -4(PC)
2620 | checknum cr1, TMP1 2693 | checknum cr1, TMP1
2621 | decode_RD4 TMP2, INS 2694 | decode_RD4 TMP2, TMP2
2622 | lwz CARG3, 4(RD) 2695 | lwz CARG3, 4(RD)
2623 | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) 2696 | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16)
2624 if (vk) { 2697 if (vk) {
@@ -2639,9 +2712,9 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2639 | lwzx TMP0, BASE, RA 2712 | lwzx TMP0, BASE, RA
2640 | addi PC, PC, 4 2713 | addi PC, PC, 4
2641 | lfdx f0, BASE, RA 2714 | lfdx f0, BASE, RA
2642 | lwz INS, -4(PC) 2715 | lwz TMP2, -4(PC)
2643 | lfdx f1, KBASE, RD 2716 | lfdx f1, KBASE, RD
2644 | decode_RD4 TMP2, INS 2717 | decode_RD4 TMP2, TMP2
2645 | checknum TMP0 2718 | checknum TMP0
2646 | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) 2719 | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16)
2647 | bge >3 2720 | bge >3
@@ -2695,11 +2768,17 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2695 | // RA = src*8, RD = primitive_type*8 (~), JMP with RD = target 2768 | // RA = src*8, RD = primitive_type*8 (~), JMP with RD = target
2696 | lwzx TMP0, BASE, RA 2769 | lwzx TMP0, BASE, RA
2697 | srwi TMP1, RD, 3 2770 | srwi TMP1, RD, 3
2698 | lwz INS, 0(PC) 2771 | lwz TMP2, 0(PC)
2699 | not TMP1, TMP1 2772 | not TMP1, TMP1
2700 | addi PC, PC, 4 2773 | addi PC, PC, 4
2774 if (LJ_HASFFI) {
2775 | cmpwi TMP0, LJ_TCDATA
2776 }
2701 | sub TMP0, TMP0, TMP1 2777 | sub TMP0, TMP0, TMP1
2702 | decode_RD4 TMP2, INS 2778 if (LJ_HASFFI) {
2779 | beq ->vmeta_equal_cd
2780 }
2781 | decode_RD4 TMP2, TMP2
2703 | addic TMP0, TMP0, -1 2782 | addic TMP0, TMP0, -1
2704 | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) 2783 | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16)
2705 | subfe TMP1, TMP1, TMP1 2784 | subfe TMP1, TMP1, TMP1
diff --git a/src/buildvm_ppc.h b/src/buildvm_ppc.h
index fbe943ed..82f90aae 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[7103] = { 15static const unsigned int build_actionlist[7218] = {
160x00010001, 160x00010001,
170x00060014, 170x00060014,
180x72000000, 180x72000000,
@@ -3846,7 +3846,92 @@ static const unsigned int build_actionlist[7103] = {
38460x7c810808, 38460x7c810808,
38470x0006009f, 38470x0006009f,
38480x00000000, 38480x00000000,
38490x7c810808, 38490x81030000,
38500x00098200,
38510x7c0802a6,
38520x88830000,
38530x00098200,
38540x88a30000,
38550x00098200,
38560x7d0800d0,
38570x90010004,
38580x2c850000,
38590x7c290b78,
38600x3484ffff,
38610x7c21416e,
38620x4cc63042,
38630x9069fffc,
38640x38c00000,
38650x39030000,
38660x00098200,
38670x54841000,
38680x000900a1,
38690x41800000,
38700x00050802,
38710x39210008,
38720x0006000b,
38730x7c08202e,
38740x7c09212e,
38750x3484fffc,
38760x40800000,
38770x0005080b,
38780x0006000c,
38790x40860000,
38800x00050803,
38810xc8230000,
38820x00098200,
38830xc8430000,
38840x00098200,
38850xc8630000,
38860x00098200,
38870xc8830000,
38880x00098200,
38890xc8a30000,
38900x00098200,
38910xc8c30000,
38920x00098200,
38930xc8e30000,
38940x00098200,
38950xc9030000,
38960x00098200,
38970x0006000d,
38980x80030000,
38990x00098200,
39000x80830000,
39010x00098200,
39020x80a30000,
39030x00098200,
39040x00000000,
39050x80c30000,
39060x00098200,
39070x80e30000,
39080x00098200,
39090x7c0903a6,
39100x81030000,
39110x00098200,
39120x81230000,
39130x00098200,
39140x81430000,
39150x00098200,
39160x80630000,
39170x00098200,
39180x4e800421,
39190x81210000,
39200x8109fffc,
39210x80090004,
39220x90680000,
39230x00098200,
39240xd8280000,
39250x00098200,
39260x90880000,
39270x00098200,
39280x7c0803a6,
39290x90a80000,
39300x00098200,
39310x7d214b78,
39320x90c80000,
39330x00098200,
39340x4e800020,
38500x00000000, 39350x00000000,
38510x00080000, 39360x00080000,
38520x00000000, 39370x00000000,
@@ -3907,6 +3992,8 @@ static const unsigned int build_actionlist[7103] = {
39070x48000000, 39920x48000000,
39080x00050005, 39930x00050005,
39090x00060012, 39940x00060012,
39950x41850000,
39960x00050834,
39100x6c848000, 39970x6c848000,
39110x90810024, 39980x90810024,
39120xc8010020, 39990xc8010020,
@@ -3982,9 +4069,9 @@ static const unsigned int build_actionlist[7103] = {
39820x80940004, 40690x80940004,
39830x7d0c706e, 40700x7d0c706e,
39840x7c00b040, 40710x7c00b040,
39850x80f0fffc, 40720x8130fffc,
39860x7c88b040, 40730x7c88b040,
39870x54e993ba, 40740x552993ba,
39880x80ac0004, 40750x80ac0004,
39890x4fa12b82, 40760x4fa12b82,
39900x3d290000, 40770x3d290000,
@@ -4038,12 +4125,24 @@ static const unsigned int build_actionlist[7103] = {
40380x80940004, 41250x80940004,
40390x80ac0004, 41260x80ac0004,
40400x00000000, 41270x00000000,
41280x2f800000,
41290x00098200,
41300x2e880000,
41310x00098200,
41320x00000000,
40410x7c0600f8, 41330x7c0600f8,
40420x7c004040, 41340x7c004040,
40430x28860000, 41350x28860000,
40440x00090200, 41360x00090200,
41370x00000000,
41380x4fdeb382,
41390x00000000,
40450x2b060000, 41400x2b060000,
40460x00090200, 41410x00090200,
41420x00000000,
41430x419e0000,
41440x0005083a,
41450x00000000,
40470x7e842840, 41460x7e842840,
40480x4c222902, 41470x4c222902,
40490x4c161342, 41480x4c161342,
@@ -4103,15 +4202,23 @@ static const unsigned int build_actionlist[7103] = {
41030x558c007e, 42020x558c007e,
41040x000900ab, 42030x000900ab,
41050x80d40004, 42040x80d40004,
41060x80f00000, 42050x81300000,
41070x218cfffc, 42060x218cfffc,
41080x3a100004, 42070x3a100004,
42080x00000000,
42090x2c000000,
42100x00098200,
42110x00000000,
41090x7d0f602e, 42120x7d0f602e,
41100x20000000, 42130x20000000,
41110x00098200, 42140x00098200,
42150x00000000,
42160x41820000,
42170x0005083a,
42180x00000000,
41120x7d064050, 42190x7d064050,
41130x7c004378, 42200x7c004378,
41140x54e993ba, 42210x552993ba,
41150x20000000, 42220x20000000,
41160x3d290000, 42230x3d290000,
41170x00098200, 42240x00098200,
@@ -4138,9 +4245,9 @@ static const unsigned int build_actionlist[7103] = {
41380x80940004, 42450x80940004,
41390x7d0c786e, 42460x7d0c786e,
41400x7c00b040, 42470x7c00b040,
41410x80f0fffc, 42480x8130fffc,
41420x7c88b040, 42490x7c88b040,
41430x54e993ba, 42500x552993ba,
41440x80ac0004, 42510x80ac0004,
41450x3d290000, 42520x3d290000,
41460x00098200, 42530x00098200,
@@ -4163,9 +4270,9 @@ static const unsigned int build_actionlist[7103] = {
41630x7c0ea02e, 42700x7c0ea02e,
41640x3a100004, 42710x3a100004,
41650x7c0ea4ae, 42720x7c0ea4ae,
41660x80f0fffc, 42730x8130fffc,
41670x7c2f64ae, 42740x7c2f64ae,
41680x54e993ba, 42750x552993ba,
41690x7c00b040, 42760x7c00b040,
41700x3d290000, 42770x3d290000,
41710x00098200, 42780x00098200,
@@ -4235,11 +4342,19 @@ static const unsigned int build_actionlist[7103] = {
42350x7c0ea02e, 43420x7c0ea02e,
42360x558800fe, 43430x558800fe,
42370x000900ab, 43440x000900ab,
42380x80f00000, 43450x81300000,
42390x7d0840f8, 43460x7d0840f8,
42400x3a100004, 43470x3a100004,
43480x00000000,
43490x2c000000,
43500x00098200,
43510x00000000,
42410x7c080050, 43520x7c080050,
42420x54e993ba, 43530x00000000,
43540x41820000,
43550x0005083a,
43560x00000000,
43570x552993ba,
42430x3000ffff, 43580x3000ffff,
42440x3d290000, 43590x3d290000,
42450x00098200, 43600x00098200,
@@ -7876,7 +7991,9 @@ static void build_subroutines(BuildCtx *ctx)
7876#endif 7991#endif
7877 dasm_put(Dst, 3769); 7992 dasm_put(Dst, 3769);
7878#if LJ_HASFFI 7993#if LJ_HASFFI
7879 dasm_put(Dst, 3833); 7994#define DtE(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
7995 dasm_put(Dst, 3833, 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]));
7996 dasm_put(Dst, 3889, 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]));
7880#endif 7997#endif
7881} 7998}
7882 7999
@@ -7884,7 +8001,7 @@ static void build_subroutines(BuildCtx *ctx)
7884static void build_ins(BuildCtx *ctx, BCOp op, int defop) 8001static void build_ins(BuildCtx *ctx, BCOp op, int defop)
7885{ 8002{
7886 int vk = 0; 8003 int vk = 0;
7887 dasm_put(Dst, 3835, defop); 8004 dasm_put(Dst, 3920, defop);
7888 8005
7889 switch (op) { 8006 switch (op) {
7890 8007
@@ -7894,197 +8011,224 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
7894 8011
7895 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: 8012 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
7896 if (LJ_DUALNUM) { 8013 if (LJ_DUALNUM) {
7897 dasm_put(Dst, 3837, -(BCBIAS_J*4 >> 16)); 8014 dasm_put(Dst, 3922, -(BCBIAS_J*4 >> 16));
7898 if (op == BC_ISLT) { 8015 if (op == BC_ISLT) {
7899 dasm_put(Dst, 3854); 8016 dasm_put(Dst, 3939);
7900 } else if (op == BC_ISGE) { 8017 } else if (op == BC_ISGE) {
7901 dasm_put(Dst, 3857); 8018 dasm_put(Dst, 3942);
7902 } else if (op == BC_ISLE) { 8019 } else if (op == BC_ISLE) {
7903 dasm_put(Dst, 3860); 8020 dasm_put(Dst, 3945);
7904 } else { 8021 } else {
7905 dasm_put(Dst, 3863); 8022 dasm_put(Dst, 3948);
7906 } 8023 }
7907 dasm_put(Dst, 3866); 8024 dasm_put(Dst, 3951);
7908 if (op == BC_ISLT) { 8025 if (op == BC_ISLT) {
7909 dasm_put(Dst, 3903); 8026 dasm_put(Dst, 3990);
7910 } else if (op == BC_ISGE) { 8027 } else if (op == BC_ISGE) {
7911 dasm_put(Dst, 3906); 8028 dasm_put(Dst, 3993);
7912 } else if (op == BC_ISLE) { 8029 } else if (op == BC_ISLE) {
7913 dasm_put(Dst, 3909); 8030 dasm_put(Dst, 3996);
7914 } else { 8031 } else {
7915 dasm_put(Dst, 3913); 8032 dasm_put(Dst, 4000);
7916 } 8033 }
7917 dasm_put(Dst, 3917); 8034 dasm_put(Dst, 4004);
7918 } else { 8035 } else {
7919 dasm_put(Dst, 3920, -(BCBIAS_J*4 >> 16)); 8036 dasm_put(Dst, 4007, -(BCBIAS_J*4 >> 16));
7920 if (op == BC_ISLT) { 8037 if (op == BC_ISLT) {
7921 dasm_put(Dst, 3937); 8038 dasm_put(Dst, 4024);
7922 } else if (op == BC_ISGE) { 8039 } else if (op == BC_ISGE) {
7923 dasm_put(Dst, 3940); 8040 dasm_put(Dst, 4027);
7924 } else if (op == BC_ISLE) { 8041 } else if (op == BC_ISLE) {
7925 dasm_put(Dst, 3943); 8042 dasm_put(Dst, 4030);
7926 } else { 8043 } else {
7927 dasm_put(Dst, 3947); 8044 dasm_put(Dst, 4034);
7928 } 8045 }
7929 dasm_put(Dst, 3951); 8046 dasm_put(Dst, 4038);
7930 } 8047 }
7931 break; 8048 break;
7932 8049
7933 case BC_ISEQV: case BC_ISNEV: 8050 case BC_ISEQV: case BC_ISNEV:
7934 vk = op == BC_ISEQV; 8051 vk = op == BC_ISEQV;
7935 if (LJ_DUALNUM) { 8052 if (LJ_DUALNUM) {
7936 dasm_put(Dst, 3964, -(BCBIAS_J*4 >> 16)); 8053 dasm_put(Dst, 4051, -(BCBIAS_J*4 >> 16));
7937 if (vk) { 8054 if (vk) {
7938 dasm_put(Dst, 3977); 8055 dasm_put(Dst, 4064);
7939 } else { 8056 } else {
7940 dasm_put(Dst, 3980); 8057 dasm_put(Dst, 4067);
7941 } 8058 }
7942 } else { 8059 } else {
7943 dasm_put(Dst, 3983, -(BCBIAS_J*4 >> 16)); 8060 dasm_put(Dst, 4070, -(BCBIAS_J*4 >> 16));
7944 if (vk) { 8061 if (vk) {
7945 dasm_put(Dst, 4000); 8062 dasm_put(Dst, 4087);
7946 } else { 8063 } else {
7947 dasm_put(Dst, 4004); 8064 dasm_put(Dst, 4091);
7948 } 8065 }
7949 dasm_put(Dst, 4008); 8066 dasm_put(Dst, 4095);
7950 } 8067 }
7951 dasm_put(Dst, 4020); 8068 dasm_put(Dst, 4107);
7952 if (!LJ_DUALNUM) { 8069 if (!LJ_DUALNUM) {
7953 dasm_put(Dst, 4022); 8070 dasm_put(Dst, 4109);
8071 }
8072 if (LJ_HASFFI) {
8073 dasm_put(Dst, 4112, LJ_TCDATA, LJ_TCDATA);
7954 } 8074 }
7955 dasm_put(Dst, 4025, ~LJ_TISPRI, ~LJ_TISTABUD); 8075 dasm_put(Dst, 4117, ~LJ_TISPRI);
8076 if (LJ_HASFFI) {
8077 dasm_put(Dst, 4122);
8078 }
8079 dasm_put(Dst, 4124, ~LJ_TISTABUD);
8080 if (LJ_HASFFI) {
8081 dasm_put(Dst, 4127);
8082 }
8083 dasm_put(Dst, 4130);
7956 if (vk) { 8084 if (vk) {
7957 dasm_put(Dst, 4039); 8085 dasm_put(Dst, 4138);
7958 } else { 8086 } else {
7959 dasm_put(Dst, 4044); 8087 dasm_put(Dst, 4143);
7960 } 8088 }
7961 if (LJ_DUALNUM) { 8089 if (LJ_DUALNUM) {
7962 dasm_put(Dst, 4049); 8090 dasm_put(Dst, 4148);
7963 } else { 8091 } else {
7964 dasm_put(Dst, 4064); 8092 dasm_put(Dst, 4163);
7965 } 8093 }
7966 dasm_put(Dst, 4067, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq); 8094 dasm_put(Dst, 4166, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq);
7967 break; 8095 break;
7968 8096
7969 case BC_ISEQS: case BC_ISNES: 8097 case BC_ISEQS: case BC_ISNES:
7970 vk = op == BC_ISEQS; 8098 vk = op == BC_ISEQS;
7971 dasm_put(Dst, 4086, 32-1, LJ_TSTR, -(BCBIAS_J*4 >> 16)); 8099 dasm_put(Dst, 4185, 32-1);
8100 if (LJ_HASFFI) {
8101 dasm_put(Dst, 4193, LJ_TCDATA);
8102 }
8103 dasm_put(Dst, 4196, LJ_TSTR);
8104 if (LJ_HASFFI) {
8105 dasm_put(Dst, 4200);
8106 }
8107 dasm_put(Dst, 4203, -(BCBIAS_J*4 >> 16));
7972 if (vk) { 8108 if (vk) {
7973 dasm_put(Dst, 4104); 8109 dasm_put(Dst, 4211);
7974 } else { 8110 } else {
7975 dasm_put(Dst, 4106); 8111 dasm_put(Dst, 4213);
7976 } 8112 }
7977 dasm_put(Dst, 4108); 8113 dasm_put(Dst, 4215);
7978 break; 8114 break;
7979 8115
7980 case BC_ISEQN: case BC_ISNEN: 8116 case BC_ISEQN: case BC_ISNEN:
7981 vk = op == BC_ISEQN; 8117 vk = op == BC_ISEQN;
7982 if (LJ_DUALNUM) { 8118 if (LJ_DUALNUM) {
7983 dasm_put(Dst, 4120, -(BCBIAS_J*4 >> 16)); 8119 dasm_put(Dst, 4227, -(BCBIAS_J*4 >> 16));
7984 if (vk) { 8120 if (vk) {
7985 dasm_put(Dst, 4132); 8121 dasm_put(Dst, 4239);
7986 } else { 8122 } else {
7987 dasm_put(Dst, 4134); 8123 dasm_put(Dst, 4241);
7988 } 8124 }
7989 dasm_put(Dst, 4136); 8125 dasm_put(Dst, 4243);
7990 } else { 8126 } else {
7991 if (vk) { 8127 if (vk) {
7992 dasm_put(Dst, 4143); 8128 dasm_put(Dst, 4250);
7993 } else { 8129 } else {
7994 dasm_put(Dst, 4145); 8130 dasm_put(Dst, 4252);
7995 } 8131 }
7996 dasm_put(Dst, 4147, -(BCBIAS_J*4 >> 16)); 8132 dasm_put(Dst, 4254, -(BCBIAS_J*4 >> 16));
7997 } 8133 }
7998 if (vk) { 8134 if (vk) {
7999 dasm_put(Dst, 4160); 8135 dasm_put(Dst, 4267);
8000 if (!LJ_HASFFI) { 8136 if (!LJ_HASFFI) {
8001 dasm_put(Dst, 4165); 8137 dasm_put(Dst, 4272);
8002 } 8138 }
8003 } else { 8139 } else {
8004 dasm_put(Dst, 4167); 8140 dasm_put(Dst, 4274);
8005 if (!LJ_HASFFI) { 8141 if (!LJ_HASFFI) {
8006 dasm_put(Dst, 4171); 8142 dasm_put(Dst, 4278);
8007 } 8143 }
8008 dasm_put(Dst, 4173); 8144 dasm_put(Dst, 4280);
8009 } 8145 }
8010 dasm_put(Dst, 4176); 8146 dasm_put(Dst, 4283);
8011 if (LJ_HASFFI) { 8147 if (LJ_HASFFI) {
8012 dasm_put(Dst, 4187, LJ_TCDATA); 8148 dasm_put(Dst, 4294, LJ_TCDATA);
8013 } 8149 }
8014 if (LJ_DUALNUM) { 8150 if (LJ_DUALNUM) {
8015 dasm_put(Dst, 4195); 8151 dasm_put(Dst, 4302);
8016 } 8152 }
8017 break; 8153 break;
8018 8154
8019 case BC_ISEQP: case BC_ISNEP: 8155 case BC_ISEQP: case BC_ISNEP:
8020 vk = op == BC_ISEQP; 8156 vk = op == BC_ISEQP;
8021 dasm_put(Dst, 4219, 32-3, -(BCBIAS_J*4 >> 16)); 8157 dasm_put(Dst, 4326, 32-3);
8158 if (LJ_HASFFI) {
8159 dasm_put(Dst, 4333, LJ_TCDATA);
8160 }
8161 dasm_put(Dst, 4336);
8162 if (LJ_HASFFI) {
8163 dasm_put(Dst, 4338);
8164 }
8165 dasm_put(Dst, 4341, -(BCBIAS_J*4 >> 16));
8022 if (vk) { 8166 if (vk) {
8023 dasm_put(Dst, 4232); 8167 dasm_put(Dst, 4347);
8024 } else { 8168 } else {
8025 dasm_put(Dst, 4234); 8169 dasm_put(Dst, 4349);
8026 } 8170 }
8027 dasm_put(Dst, 4236); 8171 dasm_put(Dst, 4351);
8028 break; 8172 break;
8029 8173
8030 /* -- Unary test and copy ops ------------------------------------------- */ 8174 /* -- Unary test and copy ops ------------------------------------------- */
8031 8175
8032 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: 8176 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
8033 dasm_put(Dst, 4248); 8177 dasm_put(Dst, 4363);
8034 if (op == BC_IST || op == BC_ISF) { 8178 if (op == BC_IST || op == BC_ISF) {
8035 dasm_put(Dst, 4252, LJ_TTRUE, -(BCBIAS_J*4 >> 16)); 8179 dasm_put(Dst, 4367, LJ_TTRUE, -(BCBIAS_J*4 >> 16));
8036 if (op == BC_IST) { 8180 if (op == BC_IST) {
8037 dasm_put(Dst, 4259); 8181 dasm_put(Dst, 4374);
8038 } else { 8182 } else {
8039 dasm_put(Dst, 4261); 8183 dasm_put(Dst, 4376);
8040 } 8184 }
8041 dasm_put(Dst, 4263); 8185 dasm_put(Dst, 4378);
8042 } else { 8186 } else {
8043 dasm_put(Dst, 4265, LJ_TFALSE); 8187 dasm_put(Dst, 4380, LJ_TFALSE);
8044 if (op == BC_ISTC) { 8188 if (op == BC_ISTC) {
8045 dasm_put(Dst, 4270); 8189 dasm_put(Dst, 4385);
8046 } else { 8190 } else {
8047 dasm_put(Dst, 4273); 8191 dasm_put(Dst, 4388);
8048 } 8192 }
8049 dasm_put(Dst, 4276, -(BCBIAS_J*4 >> 16)); 8193 dasm_put(Dst, 4391, -(BCBIAS_J*4 >> 16));
8050 } 8194 }
8051 dasm_put(Dst, 4283); 8195 dasm_put(Dst, 4398);
8052 break; 8196 break;
8053 8197
8054 /* -- Unary ops --------------------------------------------------------- */ 8198 /* -- Unary ops --------------------------------------------------------- */
8055 8199
8056 case BC_MOV: 8200 case BC_MOV:
8057 dasm_put(Dst, 4294); 8201 dasm_put(Dst, 4409);
8058 break; 8202 break;
8059 case BC_NOT: 8203 case BC_NOT:
8060 dasm_put(Dst, 4307, LJ_TTRUE); 8204 dasm_put(Dst, 4422, LJ_TTRUE);
8061 break; 8205 break;
8062 case BC_UNM: 8206 case BC_UNM:
8063 dasm_put(Dst, 4323); 8207 dasm_put(Dst, 4438);
8064 if (LJ_DUALNUM) { 8208 if (LJ_DUALNUM) {
8065 dasm_put(Dst, 4327); 8209 dasm_put(Dst, 4442);
8066 } 8210 }
8067 dasm_put(Dst, 4355); 8211 dasm_put(Dst, 4470);
8068 if (LJ_DUALNUM) { 8212 if (LJ_DUALNUM) {
8069 dasm_put(Dst, 4365); 8213 dasm_put(Dst, 4480);
8070 } else { 8214 } else {
8071 dasm_put(Dst, 4368); 8215 dasm_put(Dst, 4483);
8072 } 8216 }
8073 break; 8217 break;
8074 case BC_LEN: 8218 case BC_LEN:
8075 dasm_put(Dst, 4377, LJ_TSTR, Dt5(->len)); 8219 dasm_put(Dst, 4492, LJ_TSTR, Dt5(->len));
8076 if (LJ_DUALNUM) { 8220 if (LJ_DUALNUM) {
8077 dasm_put(Dst, 4387); 8221 dasm_put(Dst, 4502);
8078 } else { 8222 } else {
8079 dasm_put(Dst, 4392); 8223 dasm_put(Dst, 4507);
8080 } 8224 }
8081 dasm_put(Dst, 4399, LJ_TTAB); 8225 dasm_put(Dst, 4514, LJ_TTAB);
8082#ifdef LUAJIT_ENABLE_LUA52COMPAT 8226#ifdef LUAJIT_ENABLE_LUA52COMPAT
8083 dasm_put(Dst, 4413, Dt6(->metatable)); 8227 dasm_put(Dst, 4528, Dt6(->metatable));
8084#endif 8228#endif
8085 dasm_put(Dst, 4420); 8229 dasm_put(Dst, 4535);
8086#ifdef LUAJIT_ENABLE_LUA52COMPAT 8230#ifdef LUAJIT_ENABLE_LUA52COMPAT
8087 dasm_put(Dst, 4426, Dt6(->nomm), 1<<MM_len); 8231 dasm_put(Dst, 4541, Dt6(->nomm), 1<<MM_len);
8088#endif 8232#endif
8089 break; 8233 break;
8090 8234
@@ -8096,77 +8240,77 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8096 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8240 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8097 switch (vk) { 8241 switch (vk) {
8098 case 0: 8242 case 0:
8099 dasm_put(Dst, 4436); 8243 dasm_put(Dst, 4551);
8100 break; 8244 break;
8101 case 1: 8245 case 1:
8102 dasm_put(Dst, 4442); 8246 dasm_put(Dst, 4557);
8103 break; 8247 break;
8104 default: 8248 default:
8105 dasm_put(Dst, 4448); 8249 dasm_put(Dst, 4563);
8106 break; 8250 break;
8107 } 8251 }
8108 dasm_put(Dst, 4454); 8252 dasm_put(Dst, 4569);
8109 switch (vk) { 8253 switch (vk) {
8110 case 0: 8254 case 0:
8111 dasm_put(Dst, 4480); 8255 dasm_put(Dst, 4595);
8112 break; 8256 break;
8113 case 1: 8257 case 1:
8114 dasm_put(Dst, 4483); 8258 dasm_put(Dst, 4598);
8115 break; 8259 break;
8116 default: 8260 default:
8117 dasm_put(Dst, 4486); 8261 dasm_put(Dst, 4601);
8118 break; 8262 break;
8119 } 8263 }
8120 dasm_put(Dst, 4489); 8264 dasm_put(Dst, 4604);
8121 if (vk == 1) { 8265 if (vk == 1) {
8122 dasm_put(Dst, 4491); 8266 dasm_put(Dst, 4606);
8123 } else { 8267 } else {
8124 dasm_put(Dst, 4495); 8268 dasm_put(Dst, 4610);
8125 } 8269 }
8126 switch (vk) { 8270 switch (vk) {
8127 case 0: 8271 case 0:
8128 dasm_put(Dst, 4499); 8272 dasm_put(Dst, 4614);
8129 break; 8273 break;
8130 case 1: 8274 case 1:
8131 dasm_put(Dst, 4502); 8275 dasm_put(Dst, 4617);
8132 break; 8276 break;
8133 default: 8277 default:
8134 dasm_put(Dst, 4505); 8278 dasm_put(Dst, 4620);
8135 break; 8279 break;
8136 } 8280 }
8137 dasm_put(Dst, 4508); 8281 dasm_put(Dst, 4623);
8138 } else { 8282 } else {
8139 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8283 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8140 switch (vk) { 8284 switch (vk) {
8141 case 0: 8285 case 0:
8142 dasm_put(Dst, 4515); 8286 dasm_put(Dst, 4630);
8143 if (LJ_DUALNUM) { 8287 if (LJ_DUALNUM) {
8144 dasm_put(Dst, 4517); 8288 dasm_put(Dst, 4632);
8145 } 8289 }
8146 dasm_put(Dst, 4519); 8290 dasm_put(Dst, 4634);
8147 if (LJ_DUALNUM) { 8291 if (LJ_DUALNUM) {
8148 dasm_put(Dst, 4522); 8292 dasm_put(Dst, 4637);
8149 } else { 8293 } else {
8150 dasm_put(Dst, 4528); 8294 dasm_put(Dst, 4643);
8151 } 8295 }
8152 break; 8296 break;
8153 case 1: 8297 case 1:
8154 dasm_put(Dst, 4532); 8298 dasm_put(Dst, 4647);
8155 if (LJ_DUALNUM) { 8299 if (LJ_DUALNUM) {
8156 dasm_put(Dst, 4534); 8300 dasm_put(Dst, 4649);
8157 } 8301 }
8158 dasm_put(Dst, 4536); 8302 dasm_put(Dst, 4651);
8159 if (LJ_DUALNUM) { 8303 if (LJ_DUALNUM) {
8160 dasm_put(Dst, 4539); 8304 dasm_put(Dst, 4654);
8161 } else { 8305 } else {
8162 dasm_put(Dst, 4545); 8306 dasm_put(Dst, 4660);
8163 } 8307 }
8164 break; 8308 break;
8165 default: 8309 default:
8166 dasm_put(Dst, 4549); 8310 dasm_put(Dst, 4664);
8167 break; 8311 break;
8168 } 8312 }
8169 dasm_put(Dst, 4559); 8313 dasm_put(Dst, 4674);
8170 } 8314 }
8171 break; 8315 break;
8172 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: 8316 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
@@ -8174,77 +8318,77 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8174 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8318 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8175 switch (vk) { 8319 switch (vk) {
8176 case 0: 8320 case 0:
8177 dasm_put(Dst, 4572); 8321 dasm_put(Dst, 4687);
8178 break; 8322 break;
8179 case 1: 8323 case 1:
8180 dasm_put(Dst, 4578); 8324 dasm_put(Dst, 4693);
8181 break; 8325 break;
8182 default: 8326 default:
8183 dasm_put(Dst, 4584); 8327 dasm_put(Dst, 4699);
8184 break; 8328 break;
8185 } 8329 }
8186 dasm_put(Dst, 4590); 8330 dasm_put(Dst, 4705);
8187 switch (vk) { 8331 switch (vk) {
8188 case 0: 8332 case 0:
8189 dasm_put(Dst, 4616); 8333 dasm_put(Dst, 4731);
8190 break; 8334 break;
8191 case 1: 8335 case 1:
8192 dasm_put(Dst, 4619); 8336 dasm_put(Dst, 4734);
8193 break; 8337 break;
8194 default: 8338 default:
8195 dasm_put(Dst, 4622); 8339 dasm_put(Dst, 4737);
8196 break; 8340 break;
8197 } 8341 }
8198 dasm_put(Dst, 4625); 8342 dasm_put(Dst, 4740);
8199 if (vk == 1) { 8343 if (vk == 1) {
8200 dasm_put(Dst, 4627); 8344 dasm_put(Dst, 4742);
8201 } else { 8345 } else {
8202 dasm_put(Dst, 4631); 8346 dasm_put(Dst, 4746);
8203 } 8347 }
8204 switch (vk) { 8348 switch (vk) {
8205 case 0: 8349 case 0:
8206 dasm_put(Dst, 4635); 8350 dasm_put(Dst, 4750);
8207 break; 8351 break;
8208 case 1: 8352 case 1:
8209 dasm_put(Dst, 4638); 8353 dasm_put(Dst, 4753);
8210 break; 8354 break;
8211 default: 8355 default:
8212 dasm_put(Dst, 4641); 8356 dasm_put(Dst, 4756);
8213 break; 8357 break;
8214 } 8358 }
8215 dasm_put(Dst, 4644); 8359 dasm_put(Dst, 4759);
8216 } else { 8360 } else {
8217 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8361 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8218 switch (vk) { 8362 switch (vk) {
8219 case 0: 8363 case 0:
8220 dasm_put(Dst, 4651); 8364 dasm_put(Dst, 4766);
8221 if (LJ_DUALNUM) { 8365 if (LJ_DUALNUM) {
8222 dasm_put(Dst, 4653); 8366 dasm_put(Dst, 4768);
8223 } 8367 }
8224 dasm_put(Dst, 4655); 8368 dasm_put(Dst, 4770);
8225 if (LJ_DUALNUM) { 8369 if (LJ_DUALNUM) {
8226 dasm_put(Dst, 4658); 8370 dasm_put(Dst, 4773);
8227 } else { 8371 } else {
8228 dasm_put(Dst, 4664); 8372 dasm_put(Dst, 4779);
8229 } 8373 }
8230 break; 8374 break;
8231 case 1: 8375 case 1:
8232 dasm_put(Dst, 4668); 8376 dasm_put(Dst, 4783);
8233 if (LJ_DUALNUM) { 8377 if (LJ_DUALNUM) {
8234 dasm_put(Dst, 4670); 8378 dasm_put(Dst, 4785);
8235 } 8379 }
8236 dasm_put(Dst, 4672); 8380 dasm_put(Dst, 4787);
8237 if (LJ_DUALNUM) { 8381 if (LJ_DUALNUM) {
8238 dasm_put(Dst, 4675); 8382 dasm_put(Dst, 4790);
8239 } else { 8383 } else {
8240 dasm_put(Dst, 4681); 8384 dasm_put(Dst, 4796);
8241 } 8385 }
8242 break; 8386 break;
8243 default: 8387 default:
8244 dasm_put(Dst, 4685); 8388 dasm_put(Dst, 4800);
8245 break; 8389 break;
8246 } 8390 }
8247 dasm_put(Dst, 4695); 8391 dasm_put(Dst, 4810);
8248 } 8392 }
8249 break; 8393 break;
8250 case BC_MULVN: case BC_MULNV: case BC_MULVV: 8394 case BC_MULVN: case BC_MULNV: case BC_MULVV:
@@ -8252,194 +8396,194 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8252 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8396 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8253 switch (vk) { 8397 switch (vk) {
8254 case 0: 8398 case 0:
8255 dasm_put(Dst, 4708); 8399 dasm_put(Dst, 4823);
8256 break; 8400 break;
8257 case 1: 8401 case 1:
8258 dasm_put(Dst, 4714); 8402 dasm_put(Dst, 4829);
8259 break; 8403 break;
8260 default: 8404 default:
8261 dasm_put(Dst, 4720); 8405 dasm_put(Dst, 4835);
8262 break; 8406 break;
8263 } 8407 }
8264 dasm_put(Dst, 4726); 8408 dasm_put(Dst, 4841);
8265 switch (vk) { 8409 switch (vk) {
8266 case 0: 8410 case 0:
8267 dasm_put(Dst, 4752); 8411 dasm_put(Dst, 4867);
8268 break; 8412 break;
8269 case 1: 8413 case 1:
8270 dasm_put(Dst, 4755); 8414 dasm_put(Dst, 4870);
8271 break; 8415 break;
8272 default: 8416 default:
8273 dasm_put(Dst, 4758); 8417 dasm_put(Dst, 4873);
8274 break; 8418 break;
8275 } 8419 }
8276 dasm_put(Dst, 4761); 8420 dasm_put(Dst, 4876);
8277 if (vk == 1) { 8421 if (vk == 1) {
8278 dasm_put(Dst, 4763); 8422 dasm_put(Dst, 4878);
8279 } else { 8423 } else {
8280 dasm_put(Dst, 4767); 8424 dasm_put(Dst, 4882);
8281 } 8425 }
8282 switch (vk) { 8426 switch (vk) {
8283 case 0: 8427 case 0:
8284 dasm_put(Dst, 4771); 8428 dasm_put(Dst, 4886);
8285 break; 8429 break;
8286 case 1: 8430 case 1:
8287 dasm_put(Dst, 4774); 8431 dasm_put(Dst, 4889);
8288 break; 8432 break;
8289 default: 8433 default:
8290 dasm_put(Dst, 4777); 8434 dasm_put(Dst, 4892);
8291 break; 8435 break;
8292 } 8436 }
8293 dasm_put(Dst, 4780); 8437 dasm_put(Dst, 4895);
8294 } else { 8438 } else {
8295 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8439 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8296 switch (vk) { 8440 switch (vk) {
8297 case 0: 8441 case 0:
8298 dasm_put(Dst, 4787); 8442 dasm_put(Dst, 4902);
8299 if (LJ_DUALNUM) { 8443 if (LJ_DUALNUM) {
8300 dasm_put(Dst, 4789); 8444 dasm_put(Dst, 4904);
8301 } 8445 }
8302 dasm_put(Dst, 4791); 8446 dasm_put(Dst, 4906);
8303 if (LJ_DUALNUM) { 8447 if (LJ_DUALNUM) {
8304 dasm_put(Dst, 4794); 8448 dasm_put(Dst, 4909);
8305 } else { 8449 } else {
8306 dasm_put(Dst, 4800); 8450 dasm_put(Dst, 4915);
8307 } 8451 }
8308 break; 8452 break;
8309 case 1: 8453 case 1:
8310 dasm_put(Dst, 4804); 8454 dasm_put(Dst, 4919);
8311 if (LJ_DUALNUM) { 8455 if (LJ_DUALNUM) {
8312 dasm_put(Dst, 4806); 8456 dasm_put(Dst, 4921);
8313 } 8457 }
8314 dasm_put(Dst, 4808); 8458 dasm_put(Dst, 4923);
8315 if (LJ_DUALNUM) { 8459 if (LJ_DUALNUM) {
8316 dasm_put(Dst, 4811); 8460 dasm_put(Dst, 4926);
8317 } else { 8461 } else {
8318 dasm_put(Dst, 4817); 8462 dasm_put(Dst, 4932);
8319 } 8463 }
8320 break; 8464 break;
8321 default: 8465 default:
8322 dasm_put(Dst, 4821); 8466 dasm_put(Dst, 4936);
8323 break; 8467 break;
8324 } 8468 }
8325 dasm_put(Dst, 4831); 8469 dasm_put(Dst, 4946);
8326 } 8470 }
8327 break; 8471 break;
8328 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: 8472 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
8329 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8473 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8330 switch (vk) { 8474 switch (vk) {
8331 case 0: 8475 case 0:
8332 dasm_put(Dst, 4844); 8476 dasm_put(Dst, 4959);
8333 if (LJ_DUALNUM) { 8477 if (LJ_DUALNUM) {
8334 dasm_put(Dst, 4846); 8478 dasm_put(Dst, 4961);
8335 } 8479 }
8336 dasm_put(Dst, 4848); 8480 dasm_put(Dst, 4963);
8337 if (LJ_DUALNUM) { 8481 if (LJ_DUALNUM) {
8338 dasm_put(Dst, 4851); 8482 dasm_put(Dst, 4966);
8339 } else { 8483 } else {
8340 dasm_put(Dst, 4857); 8484 dasm_put(Dst, 4972);
8341 } 8485 }
8342 break; 8486 break;
8343 case 1: 8487 case 1:
8344 dasm_put(Dst, 4861); 8488 dasm_put(Dst, 4976);
8345 if (LJ_DUALNUM) { 8489 if (LJ_DUALNUM) {
8346 dasm_put(Dst, 4863); 8490 dasm_put(Dst, 4978);
8347 } 8491 }
8348 dasm_put(Dst, 4865); 8492 dasm_put(Dst, 4980);
8349 if (LJ_DUALNUM) { 8493 if (LJ_DUALNUM) {
8350 dasm_put(Dst, 4868); 8494 dasm_put(Dst, 4983);
8351 } else { 8495 } else {
8352 dasm_put(Dst, 4874); 8496 dasm_put(Dst, 4989);
8353 } 8497 }
8354 break; 8498 break;
8355 default: 8499 default:
8356 dasm_put(Dst, 4878); 8500 dasm_put(Dst, 4993);
8357 break; 8501 break;
8358 } 8502 }
8359 dasm_put(Dst, 4888); 8503 dasm_put(Dst, 5003);
8360 break; 8504 break;
8361 case BC_MODVN: 8505 case BC_MODVN:
8362 if (LJ_DUALNUM) { 8506 if (LJ_DUALNUM) {
8363 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8507 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8364 switch (vk) { 8508 switch (vk) {
8365 case 0: 8509 case 0:
8366 dasm_put(Dst, 4901); 8510 dasm_put(Dst, 5016);
8367 break; 8511 break;
8368 case 1: 8512 case 1:
8369 dasm_put(Dst, 4907); 8513 dasm_put(Dst, 5022);
8370 break; 8514 break;
8371 default: 8515 default:
8372 dasm_put(Dst, 4913); 8516 dasm_put(Dst, 5028);
8373 break; 8517 break;
8374 } 8518 }
8375 dasm_put(Dst, 4919); 8519 dasm_put(Dst, 5034);
8376 switch (vk) { 8520 switch (vk) {
8377 case 0: 8521 case 0:
8378 dasm_put(Dst, 4947); 8522 dasm_put(Dst, 5062);
8379 break; 8523 break;
8380 case 1: 8524 case 1:
8381 dasm_put(Dst, 4950); 8525 dasm_put(Dst, 5065);
8382 break; 8526 break;
8383 default: 8527 default:
8384 dasm_put(Dst, 4953); 8528 dasm_put(Dst, 5068);
8385 break; 8529 break;
8386 } 8530 }
8387 dasm_put(Dst, 4956); 8531 dasm_put(Dst, 5071);
8388 if (vk == 1) { 8532 if (vk == 1) {
8389 dasm_put(Dst, 4958); 8533 dasm_put(Dst, 5073);
8390 } else { 8534 } else {
8391 dasm_put(Dst, 4962); 8535 dasm_put(Dst, 5077);
8392 } 8536 }
8393 switch (vk) { 8537 switch (vk) {
8394 case 0: 8538 case 0:
8395 dasm_put(Dst, 4966); 8539 dasm_put(Dst, 5081);
8396 break; 8540 break;
8397 case 1: 8541 case 1:
8398 dasm_put(Dst, 4969); 8542 dasm_put(Dst, 5084);
8399 break; 8543 break;
8400 default: 8544 default:
8401 dasm_put(Dst, 4972); 8545 dasm_put(Dst, 5087);
8402 break; 8546 break;
8403 } 8547 }
8404 if (!LJ_DUALNUM) { 8548 if (!LJ_DUALNUM) {
8405 dasm_put(Dst, 4975); 8549 dasm_put(Dst, 5090);
8406 } 8550 }
8407 dasm_put(Dst, 4977); 8551 dasm_put(Dst, 5092);
8408 } else { 8552 } else {
8409 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8553 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8410 switch (vk) { 8554 switch (vk) {
8411 case 0: 8555 case 0:
8412 dasm_put(Dst, 4989); 8556 dasm_put(Dst, 5104);
8413 if (LJ_DUALNUM) { 8557 if (LJ_DUALNUM) {
8414 dasm_put(Dst, 4991); 8558 dasm_put(Dst, 5106);
8415 } 8559 }
8416 dasm_put(Dst, 4993); 8560 dasm_put(Dst, 5108);
8417 if (LJ_DUALNUM) { 8561 if (LJ_DUALNUM) {
8418 dasm_put(Dst, 4996); 8562 dasm_put(Dst, 5111);
8419 } else { 8563 } else {
8420 dasm_put(Dst, 5002); 8564 dasm_put(Dst, 5117);
8421 } 8565 }
8422 break; 8566 break;
8423 case 1: 8567 case 1:
8424 dasm_put(Dst, 5006); 8568 dasm_put(Dst, 5121);
8425 if (LJ_DUALNUM) { 8569 if (LJ_DUALNUM) {
8426 dasm_put(Dst, 5008); 8570 dasm_put(Dst, 5123);
8427 } 8571 }
8428 dasm_put(Dst, 5010); 8572 dasm_put(Dst, 5125);
8429 if (LJ_DUALNUM) { 8573 if (LJ_DUALNUM) {
8430 dasm_put(Dst, 5013); 8574 dasm_put(Dst, 5128);
8431 } else { 8575 } else {
8432 dasm_put(Dst, 5019); 8576 dasm_put(Dst, 5134);
8433 } 8577 }
8434 break; 8578 break;
8435 default: 8579 default:
8436 dasm_put(Dst, 5023); 8580 dasm_put(Dst, 5138);
8437 break; 8581 break;
8438 } 8582 }
8439 if (!LJ_DUALNUM) { 8583 if (!LJ_DUALNUM) {
8440 dasm_put(Dst, 5033); 8584 dasm_put(Dst, 5148);
8441 } 8585 }
8442 dasm_put(Dst, 5035); 8586 dasm_put(Dst, 5150);
8443 } 8587 }
8444 break; 8588 break;
8445 case BC_MODNV: case BC_MODVV: 8589 case BC_MODNV: case BC_MODVV:
@@ -8447,286 +8591,286 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8447 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8591 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8448 switch (vk) { 8592 switch (vk) {
8449 case 0: 8593 case 0:
8450 dasm_put(Dst, 5053); 8594 dasm_put(Dst, 5168);
8451 break; 8595 break;
8452 case 1: 8596 case 1:
8453 dasm_put(Dst, 5059); 8597 dasm_put(Dst, 5174);
8454 break; 8598 break;
8455 default: 8599 default:
8456 dasm_put(Dst, 5065); 8600 dasm_put(Dst, 5180);
8457 break; 8601 break;
8458 } 8602 }
8459 dasm_put(Dst, 5071); 8603 dasm_put(Dst, 5186);
8460 if (vk == 1) { 8604 if (vk == 1) {
8461 dasm_put(Dst, 5079); 8605 dasm_put(Dst, 5194);
8462 } else { 8606 } else {
8463 dasm_put(Dst, 5083); 8607 dasm_put(Dst, 5198);
8464 } 8608 }
8465 switch (vk) { 8609 switch (vk) {
8466 case 0: 8610 case 0:
8467 dasm_put(Dst, 5087); 8611 dasm_put(Dst, 5202);
8468 break; 8612 break;
8469 case 1: 8613 case 1:
8470 dasm_put(Dst, 5090); 8614 dasm_put(Dst, 5205);
8471 break; 8615 break;
8472 default: 8616 default:
8473 dasm_put(Dst, 5093); 8617 dasm_put(Dst, 5208);
8474 break; 8618 break;
8475 } 8619 }
8476 dasm_put(Dst, 5096); 8620 dasm_put(Dst, 5211);
8477 } else { 8621 } else {
8478 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8622 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8479 switch (vk) { 8623 switch (vk) {
8480 case 0: 8624 case 0:
8481 dasm_put(Dst, 5099); 8625 dasm_put(Dst, 5214);
8482 if (LJ_DUALNUM) { 8626 if (LJ_DUALNUM) {
8483 dasm_put(Dst, 5101); 8627 dasm_put(Dst, 5216);
8484 } 8628 }
8485 dasm_put(Dst, 5103); 8629 dasm_put(Dst, 5218);
8486 if (LJ_DUALNUM) { 8630 if (LJ_DUALNUM) {
8487 dasm_put(Dst, 5106); 8631 dasm_put(Dst, 5221);
8488 } else { 8632 } else {
8489 dasm_put(Dst, 5112); 8633 dasm_put(Dst, 5227);
8490 } 8634 }
8491 break; 8635 break;
8492 case 1: 8636 case 1:
8493 dasm_put(Dst, 5116); 8637 dasm_put(Dst, 5231);
8494 if (LJ_DUALNUM) { 8638 if (LJ_DUALNUM) {
8495 dasm_put(Dst, 5118); 8639 dasm_put(Dst, 5233);
8496 } 8640 }
8497 dasm_put(Dst, 5120); 8641 dasm_put(Dst, 5235);
8498 if (LJ_DUALNUM) { 8642 if (LJ_DUALNUM) {
8499 dasm_put(Dst, 5123); 8643 dasm_put(Dst, 5238);
8500 } else { 8644 } else {
8501 dasm_put(Dst, 5129); 8645 dasm_put(Dst, 5244);
8502 } 8646 }
8503 break; 8647 break;
8504 default: 8648 default:
8505 dasm_put(Dst, 5133); 8649 dasm_put(Dst, 5248);
8506 break; 8650 break;
8507 } 8651 }
8508 dasm_put(Dst, 5143); 8652 dasm_put(Dst, 5258);
8509 } 8653 }
8510 break; 8654 break;
8511 case BC_POW: 8655 case BC_POW:
8512 dasm_put(Dst, 5146); 8656 dasm_put(Dst, 5261);
8513 break; 8657 break;
8514 8658
8515 case BC_CAT: 8659 case BC_CAT:
8516 dasm_put(Dst, 5169, Dt1(->base), 32-3, Dt1(->base)); 8660 dasm_put(Dst, 5284, Dt1(->base), 32-3, Dt1(->base));
8517 break; 8661 break;
8518 8662
8519 /* -- Constant ops ------------------------------------------------------ */ 8663 /* -- Constant ops ------------------------------------------------------ */
8520 8664
8521 case BC_KSTR: 8665 case BC_KSTR:
8522 dasm_put(Dst, 5199, 32-1, LJ_TSTR); 8666 dasm_put(Dst, 5314, 32-1, LJ_TSTR);
8523 break; 8667 break;
8524 case BC_KCDATA: 8668 case BC_KCDATA:
8525#if LJ_HASFFI 8669#if LJ_HASFFI
8526 dasm_put(Dst, 5218, 32-1, LJ_TCDATA); 8670 dasm_put(Dst, 5333, 32-1, LJ_TCDATA);
8527#endif 8671#endif
8528 break; 8672 break;
8529 case BC_KSHORT: 8673 case BC_KSHORT:
8530 if (LJ_DUALNUM) { 8674 if (LJ_DUALNUM) {
8531 dasm_put(Dst, 5237, 31-13); 8675 dasm_put(Dst, 5352, 31-13);
8532 } else { 8676 } else {
8533 dasm_put(Dst, 5253, 31-13); 8677 dasm_put(Dst, 5368, 31-13);
8534 } 8678 }
8535 break; 8679 break;
8536 case BC_KNUM: 8680 case BC_KNUM:
8537 dasm_put(Dst, 5272); 8681 dasm_put(Dst, 5387);
8538 break; 8682 break;
8539 case BC_KPRI: 8683 case BC_KPRI:
8540 dasm_put(Dst, 5285, 32-3); 8684 dasm_put(Dst, 5400, 32-3);
8541 break; 8685 break;
8542 case BC_KNIL: 8686 case BC_KNIL:
8543 dasm_put(Dst, 5300); 8687 dasm_put(Dst, 5415);
8544 break; 8688 break;
8545 8689
8546 /* -- Upvalue and function ops ------------------------------------------ */ 8690 /* -- Upvalue and function ops ------------------------------------------ */
8547 8691
8548 case BC_UGET: 8692 case BC_UGET:
8549 dasm_put(Dst, 5319, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); 8693 dasm_put(Dst, 5434, 32-1, offsetof(GCfuncL, uvptr), DtA(->v));
8550 break; 8694 break;
8551 case BC_USETV: 8695 case BC_USETV:
8552 dasm_put(Dst, 5340, 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); 8696 dasm_put(Dst, 5455, 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);
8553 break; 8697 break;
8554 case BC_USETS: 8698 case BC_USETS:
8555 dasm_put(Dst, 5393, 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); 8699 dasm_put(Dst, 5508, 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);
8556 break; 8700 break;
8557 case BC_USETN: 8701 case BC_USETN:
8558 dasm_put(Dst, 5444, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); 8702 dasm_put(Dst, 5559, 32-1, offsetof(GCfuncL, uvptr), DtA(->v));
8559 break; 8703 break;
8560 case BC_USETP: 8704 case BC_USETP:
8561 dasm_put(Dst, 5465, 32-1, offsetof(GCfuncL, uvptr), 32-3, DtA(->v)); 8705 dasm_put(Dst, 5580, 32-1, offsetof(GCfuncL, uvptr), 32-3, DtA(->v));
8562 break; 8706 break;
8563 8707
8564 case BC_UCLO: 8708 case BC_UCLO:
8565 dasm_put(Dst, 5488, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base)); 8709 dasm_put(Dst, 5603, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base));
8566 break; 8710 break;
8567 8711
8568 case BC_FNEW: 8712 case BC_FNEW:
8569 dasm_put(Dst, 5518, 32-1, Dt1(->base), Dt1(->base), LJ_TFUNC); 8713 dasm_put(Dst, 5633, 32-1, Dt1(->base), Dt1(->base), LJ_TFUNC);
8570 break; 8714 break;
8571 8715
8572 /* -- Table ops --------------------------------------------------------- */ 8716 /* -- Table ops --------------------------------------------------------- */
8573 8717
8574 case BC_TNEW: 8718 case BC_TNEW:
8575 case BC_TDUP: 8719 case BC_TDUP:
8576 dasm_put(Dst, 5546, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); 8720 dasm_put(Dst, 5661, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base));
8577 if (op == BC_TNEW) { 8721 if (op == BC_TNEW) {
8578 dasm_put(Dst, 5559); 8722 dasm_put(Dst, 5674);
8579 } else { 8723 } else {
8580 dasm_put(Dst, 5568, 32-1); 8724 dasm_put(Dst, 5683, 32-1);
8581 } 8725 }
8582 dasm_put(Dst, 5575, Dt1(->base), LJ_TTAB); 8726 dasm_put(Dst, 5690, Dt1(->base), LJ_TTAB);
8583 if (op == BC_TNEW) { 8727 if (op == BC_TNEW) {
8584 dasm_put(Dst, 5592); 8728 dasm_put(Dst, 5707);
8585 } 8729 }
8586 dasm_put(Dst, 5597); 8730 dasm_put(Dst, 5712);
8587 break; 8731 break;
8588 8732
8589 case BC_GGET: 8733 case BC_GGET:
8590 case BC_GSET: 8734 case BC_GSET:
8591 dasm_put(Dst, 5606, 32-1, Dt7(->env)); 8735 dasm_put(Dst, 5721, 32-1, Dt7(->env));
8592 if (op == BC_GGET) { 8736 if (op == BC_GGET) {
8593 dasm_put(Dst, 5614); 8737 dasm_put(Dst, 5729);
8594 } else { 8738 } else {
8595 dasm_put(Dst, 5617); 8739 dasm_put(Dst, 5732);
8596 } 8740 }
8597 break; 8741 break;
8598 8742
8599 case BC_TGETV: 8743 case BC_TGETV:
8600 dasm_put(Dst, 5620); 8744 dasm_put(Dst, 5735);
8601 if (LJ_DUALNUM) { 8745 if (LJ_DUALNUM) {
8602 dasm_put(Dst, 5624); 8746 dasm_put(Dst, 5739);
8603 } else { 8747 } else {
8604 dasm_put(Dst, 5626); 8748 dasm_put(Dst, 5741);
8605 } 8749 }
8606 dasm_put(Dst, 5628, LJ_TTAB); 8750 dasm_put(Dst, 5743, LJ_TTAB);
8607 if (LJ_DUALNUM) { 8751 if (LJ_DUALNUM) {
8608 dasm_put(Dst, 5634, Dt6(->asize), Dt6(->array), 31-3); 8752 dasm_put(Dst, 5749, Dt6(->asize), Dt6(->array), 31-3);
8609 } else { 8753 } else {
8610 dasm_put(Dst, 5644, Dt6(->asize), Dt6(->array), 31-3); 8754 dasm_put(Dst, 5759, Dt6(->asize), Dt6(->array), 31-3);
8611 } 8755 }
8612 dasm_put(Dst, 5661, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TSTR); 8756 dasm_put(Dst, 5776, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TSTR);
8613 if (!LJ_DUALNUM) { 8757 if (!LJ_DUALNUM) {
8614 dasm_put(Dst, 5701); 8758 dasm_put(Dst, 5816);
8615 } 8759 }
8616 dasm_put(Dst, 5703); 8760 dasm_put(Dst, 5818);
8617 break; 8761 break;
8618 case BC_TGETS: 8762 case BC_TGETS:
8619 dasm_put(Dst, 5706, 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)); 8763 dasm_put(Dst, 5821, 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));
8620 dasm_put(Dst, 5767, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); 8764 dasm_put(Dst, 5882, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
8621 break; 8765 break;
8622 case BC_TGETB: 8766 case BC_TGETB:
8623 dasm_put(Dst, 5787, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); 8767 dasm_put(Dst, 5902, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
8624 break; 8768 break;
8625 8769
8626 case BC_TSETV: 8770 case BC_TSETV:
8627 dasm_put(Dst, 5835); 8771 dasm_put(Dst, 5950);
8628 if (LJ_DUALNUM) { 8772 if (LJ_DUALNUM) {
8629 dasm_put(Dst, 5839); 8773 dasm_put(Dst, 5954);
8630 } else { 8774 } else {
8631 dasm_put(Dst, 5841); 8775 dasm_put(Dst, 5956);
8632 } 8776 }
8633 dasm_put(Dst, 5843, LJ_TTAB); 8777 dasm_put(Dst, 5958, LJ_TTAB);
8634 if (LJ_DUALNUM) { 8778 if (LJ_DUALNUM) {
8635 dasm_put(Dst, 5849, Dt6(->asize), Dt6(->array), 31-3); 8779 dasm_put(Dst, 5964, Dt6(->asize), Dt6(->array), 31-3);
8636 } else { 8780 } else {
8637 dasm_put(Dst, 5859, Dt6(->asize), Dt6(->array), 31-3); 8781 dasm_put(Dst, 5974, Dt6(->asize), Dt6(->array), 31-3);
8638 } 8782 }
8639 dasm_put(Dst, 5876, Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR); 8783 dasm_put(Dst, 5991, Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR);
8640 if (!LJ_DUALNUM) { 8784 if (!LJ_DUALNUM) {
8641 dasm_put(Dst, 5923); 8785 dasm_put(Dst, 6038);
8642 } 8786 }
8643 dasm_put(Dst, 5925, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 8787 dasm_put(Dst, 6040, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
8644 break; 8788 break;
8645 dasm_put(Dst, 5940, LJ_TSTR, LJ_TNIL); 8789 dasm_put(Dst, 6055, LJ_TSTR, LJ_TNIL);
8646 case BC_TSETS: 8790 case BC_TSETS:
8647 dasm_put(Dst, 5966, 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); 8791 dasm_put(Dst, 6081, 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);
8648 dasm_put(Dst, 6017, 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); 8792 dasm_put(Dst, 6132, 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);
8649 dasm_put(Dst, 6073, LJ_TSTR, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 8793 dasm_put(Dst, 6188, LJ_TSTR, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
8650 break; 8794 break;
8651 case BC_TSETB: 8795 case BC_TSETB:
8652 dasm_put(Dst, 6098, 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)); 8796 dasm_put(Dst, 6213, 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));
8653 dasm_put(Dst, 6156, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 8797 dasm_put(Dst, 6271, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
8654 break; 8798 break;
8655 8799
8656 case BC_TSETM: 8800 case BC_TSETM:
8657 dasm_put(Dst, 6166, 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)); 8801 dasm_put(Dst, 6281, 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));
8658 dasm_put(Dst, 6235); 8802 dasm_put(Dst, 6350);
8659 break; 8803 break;
8660 8804
8661 /* -- Calls and vararg handling ----------------------------------------- */ 8805 /* -- Calls and vararg handling ----------------------------------------- */
8662 8806
8663 case BC_CALLM: 8807 case BC_CALLM:
8664 dasm_put(Dst, 6238); 8808 dasm_put(Dst, 6353);
8665 break; 8809 break;
8666 case BC_CALL: 8810 case BC_CALL:
8667 dasm_put(Dst, 6240, LJ_TFUNC, Dt7(->pc)); 8811 dasm_put(Dst, 6355, LJ_TFUNC, Dt7(->pc));
8668 break; 8812 break;
8669 8813
8670 case BC_CALLMT: 8814 case BC_CALLMT:
8671 dasm_put(Dst, 6261); 8815 dasm_put(Dst, 6376);
8672 break; 8816 break;
8673 case BC_CALLT: 8817 case BC_CALLT:
8674 dasm_put(Dst, 6263, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); 8818 dasm_put(Dst, 6378, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP);
8675 dasm_put(Dst, 6327, FRAME_TYPE); 8819 dasm_put(Dst, 6442, FRAME_TYPE);
8676 break; 8820 break;
8677 8821
8678 case BC_ITERC: 8822 case BC_ITERC:
8679 dasm_put(Dst, 6336, LJ_TFUNC, Dt7(->pc)); 8823 dasm_put(Dst, 6451, LJ_TFUNC, Dt7(->pc));
8680 break; 8824 break;
8681 8825
8682 case BC_ITERN: 8826 case BC_ITERN:
8683#if LJ_HASJIT 8827#if LJ_HASJIT
8684#endif 8828#endif
8685 dasm_put(Dst, 6363, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL); 8829 dasm_put(Dst, 6478, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL);
8686 if (LJ_DUALNUM) { 8830 if (LJ_DUALNUM) {
8687 dasm_put(Dst, 6385); 8831 dasm_put(Dst, 6500);
8688 } else { 8832 } else {
8689 dasm_put(Dst, 6388); 8833 dasm_put(Dst, 6503);
8690 } 8834 }
8691 dasm_put(Dst, 6392, -(BCBIAS_J*4 >> 16)); 8835 dasm_put(Dst, 6507, -(BCBIAS_J*4 >> 16));
8692 if (!LJ_DUALNUM) { 8836 if (!LJ_DUALNUM) {
8693 dasm_put(Dst, 6400); 8837 dasm_put(Dst, 6515);
8694 } 8838 }
8695 dasm_put(Dst, 6402, Dt6(->hmask), Dt6(->node), 31-5, 31-3, LJ_TNIL, DtB(->key), -(BCBIAS_J*4 >> 16)); 8839 dasm_put(Dst, 6517, Dt6(->hmask), Dt6(->node), 31-5, 31-3, LJ_TNIL, DtB(->key), -(BCBIAS_J*4 >> 16));
8696 break; 8840 break;
8697 8841
8698 case BC_ISNEXT: 8842 case BC_ISNEXT:
8699 dasm_put(Dst, 6458, 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)); 8843 dasm_put(Dst, 6573, 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));
8700 break; 8844 break;
8701 8845
8702 case BC_VARG: 8846 case BC_VARG:
8703 dasm_put(Dst, 6508, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); 8847 dasm_put(Dst, 6623, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base));
8704 dasm_put(Dst, 6588); 8848 dasm_put(Dst, 6703);
8705 break; 8849 break;
8706 8850
8707 /* -- Returns ----------------------------------------------------------- */ 8851 /* -- Returns ----------------------------------------------------------- */
8708 8852
8709 case BC_RETM: 8853 case BC_RETM:
8710 dasm_put(Dst, 6594); 8854 dasm_put(Dst, 6709);
8711 break; 8855 break;
8712 8856
8713 case BC_RET: 8857 case BC_RET:
8714 dasm_put(Dst, 6596, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); 8858 dasm_put(Dst, 6711, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP);
8715 break; 8859 break;
8716 8860
8717 case BC_RET0: case BC_RET1: 8861 case BC_RET0: case BC_RET1:
8718 dasm_put(Dst, 6666, FRAME_TYPE, FRAME_VARG); 8862 dasm_put(Dst, 6781, FRAME_TYPE, FRAME_VARG);
8719 if (op == BC_RET1) { 8863 if (op == BC_RET1) {
8720 dasm_put(Dst, 6679); 8864 dasm_put(Dst, 6794);
8721 } 8865 }
8722 dasm_put(Dst, 6682, Dt7(->pc), PC2PROTO(k)); 8866 dasm_put(Dst, 6797, Dt7(->pc), PC2PROTO(k));
8723 break; 8867 break;
8724 8868
8725 /* -- Loops and branches ------------------------------------------------ */ 8869 /* -- Loops and branches ------------------------------------------------ */
8726 8870
8727 case BC_FORL: 8871 case BC_FORL:
8728#if LJ_HASJIT 8872#if LJ_HASJIT
8729 dasm_put(Dst, 6710); 8873 dasm_put(Dst, 6825);
8730#endif 8874#endif
8731 break; 8875 break;
8732 8876
@@ -8739,93 +8883,93 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8739 case BC_IFORL: 8883 case BC_IFORL:
8740 vk = (op == BC_IFORL || op == BC_JFORL); 8884 vk = (op == BC_IFORL || op == BC_JFORL);
8741 if (LJ_DUALNUM) { 8885 if (LJ_DUALNUM) {
8742 dasm_put(Dst, 6712, FORL_IDX*8+4); 8886 dasm_put(Dst, 6827, FORL_IDX*8+4);
8743 if (vk) { 8887 if (vk) {
8744 dasm_put(Dst, 6717, FORL_STEP*8+4, FORL_STOP*8+4, FORL_IDX*8+4); 8888 dasm_put(Dst, 6832, FORL_STEP*8+4, FORL_STOP*8+4, FORL_IDX*8+4);
8745 } else { 8889 } else {
8746 dasm_put(Dst, 6731, FORL_STEP*8, FORL_STEP*8+4, FORL_STOP*8, FORL_STOP*8+4); 8890 dasm_put(Dst, 6846, FORL_STEP*8, FORL_STEP*8+4, FORL_STOP*8, FORL_STOP*8+4);
8747 } 8891 }
8748 dasm_put(Dst, 6747, FORL_EXT*8); 8892 dasm_put(Dst, 6862, FORL_EXT*8);
8749 if (op != BC_JFORL) { 8893 if (op != BC_JFORL) {
8750 dasm_put(Dst, 6754, 32-1); 8894 dasm_put(Dst, 6869, 32-1);
8751 } 8895 }
8752 dasm_put(Dst, 6757, FORL_EXT*8+4); 8896 dasm_put(Dst, 6872, FORL_EXT*8+4);
8753 if (op != BC_JFORL) { 8897 if (op != BC_JFORL) {
8754 dasm_put(Dst, 6760); 8898 dasm_put(Dst, 6875);
8755 } 8899 }
8756 if (op == BC_FORI) { 8900 if (op == BC_FORI) {
8757 dasm_put(Dst, 6762); 8901 dasm_put(Dst, 6877);
8758 } else if (op == BC_JFORI) { 8902 } else if (op == BC_JFORI) {
8759 dasm_put(Dst, 6765, -(BCBIAS_J*4 >> 16), BC_JLOOP); 8903 dasm_put(Dst, 6880, -(BCBIAS_J*4 >> 16), BC_JLOOP);
8760 } else if (op == BC_IFORL) { 8904 } else if (op == BC_IFORL) {
8761 dasm_put(Dst, 6770, -(BCBIAS_J*4 >> 16)); 8905 dasm_put(Dst, 6885, -(BCBIAS_J*4 >> 16));
8762 } else { 8906 } else {
8763 dasm_put(Dst, 6775, BC_JLOOP); 8907 dasm_put(Dst, 6890, BC_JLOOP);
8764 } 8908 }
8765 dasm_put(Dst, 6778); 8909 dasm_put(Dst, 6893);
8766 if (vk) { 8910 if (vk) {
8767 dasm_put(Dst, 6794); 8911 dasm_put(Dst, 6909);
8768 } 8912 }
8769 } 8913 }
8770 if (vk) { 8914 if (vk) {
8771 if (LJ_DUALNUM) { 8915 if (LJ_DUALNUM) {
8772 dasm_put(Dst, 6801, FORL_IDX*8); 8916 dasm_put(Dst, 6916, FORL_IDX*8);
8773 } else { 8917 } else {
8774 dasm_put(Dst, 6805); 8918 dasm_put(Dst, 6920);
8775 } 8919 }
8776 dasm_put(Dst, 6807, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8, FORL_IDX*8); 8920 dasm_put(Dst, 6922, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8, FORL_IDX*8);
8777 } else { 8921 } else {
8778 if (LJ_DUALNUM) { 8922 if (LJ_DUALNUM) {
8779 dasm_put(Dst, 6817); 8923 dasm_put(Dst, 6932);
8780 } else { 8924 } else {
8781 dasm_put(Dst, 6819, FORL_STEP*8, FORL_STOP*8); 8925 dasm_put(Dst, 6934, FORL_STEP*8, FORL_STOP*8);
8782 } 8926 }
8783 dasm_put(Dst, 6828, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8); 8927 dasm_put(Dst, 6943, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8);
8784 } 8928 }
8785 dasm_put(Dst, 6839); 8929 dasm_put(Dst, 6954);
8786 if (op != BC_JFORL) { 8930 if (op != BC_JFORL) {
8787 dasm_put(Dst, 6841, 32-1); 8931 dasm_put(Dst, 6956, 32-1);
8788 } 8932 }
8789 dasm_put(Dst, 6844, FORL_EXT*8); 8933 dasm_put(Dst, 6959, FORL_EXT*8);
8790 if (op != BC_JFORL) { 8934 if (op != BC_JFORL) {
8791 dasm_put(Dst, 6847); 8935 dasm_put(Dst, 6962);
8792 } 8936 }
8793 dasm_put(Dst, 6849); 8937 dasm_put(Dst, 6964);
8794 if (op == BC_JFORI) { 8938 if (op == BC_JFORI) {
8795 dasm_put(Dst, 6851, -(BCBIAS_J*4 >> 16)); 8939 dasm_put(Dst, 6966, -(BCBIAS_J*4 >> 16));
8796 } 8940 }
8797 dasm_put(Dst, 6854); 8941 dasm_put(Dst, 6969);
8798 if (op == BC_FORI) { 8942 if (op == BC_FORI) {
8799 dasm_put(Dst, 6857); 8943 dasm_put(Dst, 6972);
8800 } else if (op == BC_IFORL) { 8944 } else if (op == BC_IFORL) {
8801 if (LJ_DUALNUM) { 8945 if (LJ_DUALNUM) {
8802 dasm_put(Dst, 6860); 8946 dasm_put(Dst, 6975);
8803 } else { 8947 } else {
8804 dasm_put(Dst, 6863); 8948 dasm_put(Dst, 6978);
8805 } 8949 }
8806 dasm_put(Dst, 6866, -(BCBIAS_J*4 >> 16)); 8950 dasm_put(Dst, 6981, -(BCBIAS_J*4 >> 16));
8807 } else { 8951 } else {
8808 dasm_put(Dst, 6870, BC_JLOOP); 8952 dasm_put(Dst, 6985, BC_JLOOP);
8809 } 8953 }
8810 if (LJ_DUALNUM) { 8954 if (LJ_DUALNUM) {
8811 dasm_put(Dst, 6873); 8955 dasm_put(Dst, 6988);
8812 } else { 8956 } else {
8813 dasm_put(Dst, 6876); 8957 dasm_put(Dst, 6991);
8814 } 8958 }
8815 dasm_put(Dst, 6888); 8959 dasm_put(Dst, 7003);
8816 if (op == BC_FORI) { 8960 if (op == BC_FORI) {
8817 dasm_put(Dst, 6890, -(BCBIAS_J*4 >> 16)); 8961 dasm_put(Dst, 7005, -(BCBIAS_J*4 >> 16));
8818 } else if (op == BC_IFORL) { 8962 } else if (op == BC_IFORL) {
8819 dasm_put(Dst, 6896); 8963 dasm_put(Dst, 7011);
8820 } else { 8964 } else {
8821 dasm_put(Dst, 6899, BC_JLOOP); 8965 dasm_put(Dst, 7014, BC_JLOOP);
8822 } 8966 }
8823 dasm_put(Dst, 6902); 8967 dasm_put(Dst, 7017);
8824 break; 8968 break;
8825 8969
8826 case BC_ITERL: 8970 case BC_ITERL:
8827#if LJ_HASJIT 8971#if LJ_HASJIT
8828 dasm_put(Dst, 6905); 8972 dasm_put(Dst, 7020);
8829#endif 8973#endif
8830 break; 8974 break;
8831 8975
@@ -8834,40 +8978,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8834 break; 8978 break;
8835#endif 8979#endif
8836 case BC_IITERL: 8980 case BC_IITERL:
8837 dasm_put(Dst, 6907, LJ_TNIL); 8981 dasm_put(Dst, 7022, LJ_TNIL);
8838 if (op == BC_JITERL) { 8982 if (op == BC_JITERL) {
8839 dasm_put(Dst, 6914); 8983 dasm_put(Dst, 7029);
8840 } else { 8984 } else {
8841 dasm_put(Dst, 6916, 32-1, -(BCBIAS_J*4 >> 16)); 8985 dasm_put(Dst, 7031, 32-1, -(BCBIAS_J*4 >> 16));
8842 } 8986 }
8843 dasm_put(Dst, 6924); 8987 dasm_put(Dst, 7039);
8844 break; 8988 break;
8845 8989
8846 case BC_LOOP: 8990 case BC_LOOP:
8847#if LJ_HASJIT 8991#if LJ_HASJIT
8848 dasm_put(Dst, 6936); 8992 dasm_put(Dst, 7051);
8849#endif 8993#endif
8850 break; 8994 break;
8851 8995
8852 case BC_ILOOP: 8996 case BC_ILOOP:
8853 dasm_put(Dst, 6938); 8997 dasm_put(Dst, 7053);
8854 break; 8998 break;
8855 8999
8856 case BC_JLOOP: 9000 case BC_JLOOP:
8857#if LJ_HASJIT 9001#if LJ_HASJIT
8858 dasm_put(Dst, 6949); 9002 dasm_put(Dst, 7064);
8859#endif 9003#endif
8860 break; 9004 break;
8861 9005
8862 case BC_JMP: 9006 case BC_JMP:
8863 dasm_put(Dst, 6951, 32-1, -(BCBIAS_J*4 >> 16)); 9007 dasm_put(Dst, 7066, 32-1, -(BCBIAS_J*4 >> 16));
8864 break; 9008 break;
8865 9009
8866 /* -- Function headers -------------------------------------------------- */ 9010 /* -- Function headers -------------------------------------------------- */
8867 9011
8868 case BC_FUNCF: 9012 case BC_FUNCF:
8869#if LJ_HASJIT 9013#if LJ_HASJIT
8870 dasm_put(Dst, 6967); 9014 dasm_put(Dst, 7082);
8871#endif 9015#endif
8872 case BC_FUNCV: /* NYI: compiled vararg functions. */ 9016 case BC_FUNCV: /* NYI: compiled vararg functions. */
8873 break; 9017 break;
@@ -8877,38 +9021,38 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8877 break; 9021 break;
8878#endif 9022#endif
8879 case BC_IFUNCF: 9023 case BC_IFUNCF:
8880 dasm_put(Dst, 6969, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); 9024 dasm_put(Dst, 7084, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3);
8881 if (op == BC_JFUNCF) { 9025 if (op == BC_JFUNCF) {
8882 dasm_put(Dst, 6987); 9026 dasm_put(Dst, 7102);
8883 } else { 9027 } else {
8884 dasm_put(Dst, 6989); 9028 dasm_put(Dst, 7104);
8885 } 9029 }
8886 dasm_put(Dst, 6998); 9030 dasm_put(Dst, 7113);
8887 break; 9031 break;
8888 9032
8889 case BC_JFUNCV: 9033 case BC_JFUNCV:
8890#if !LJ_HASJIT 9034#if !LJ_HASJIT
8891 break; 9035 break;
8892#endif 9036#endif
8893 dasm_put(Dst, 7004); 9037 dasm_put(Dst, 7119);
8894 break; /* NYI: compiled vararg functions. */ 9038 break; /* NYI: compiled vararg functions. */
8895 9039
8896 case BC_IFUNCV: 9040 case BC_IFUNCV:
8897 dasm_put(Dst, 7006, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), LJ_TNIL); 9041 dasm_put(Dst, 7121, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), LJ_TNIL);
8898 break; 9042 break;
8899 9043
8900 case BC_FUNCC: 9044 case BC_FUNCC:
8901 case BC_FUNCCW: 9045 case BC_FUNCCW:
8902 if (op == BC_FUNCC) { 9046 if (op == BC_FUNCC) {
8903 dasm_put(Dst, 7059, Dt8(->f)); 9047 dasm_put(Dst, 7174, Dt8(->f));
8904 } else { 9048 } else {
8905 dasm_put(Dst, 7062, DISPATCH_GL(wrapf)); 9049 dasm_put(Dst, 7177, DISPATCH_GL(wrapf));
8906 } 9050 }
8907 dasm_put(Dst, 7065, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); 9051 dasm_put(Dst, 7180, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C);
8908 if (op == BC_FUNCCW) { 9052 if (op == BC_FUNCCW) {
8909 dasm_put(Dst, 7078, Dt8(->f)); 9053 dasm_put(Dst, 7193, Dt8(->f));
8910 } 9054 }
8911 dasm_put(Dst, 7081, DISPATCH_GL(vmstate), Dt1(->top), 31-3, Dt1(->base), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); 9055 dasm_put(Dst, 7196, DISPATCH_GL(vmstate), Dt1(->top), 31-3, Dt1(->base), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate));
8912 break; 9056 break;
8913 9057
8914 /* ---------------------------------------------------------------------- */ 9058 /* ---------------------------------------------------------------------- */
@@ -8928,7 +9072,7 @@ static int build_backend(BuildCtx *ctx)
8928 9072
8929 build_subroutines(ctx); 9073 build_subroutines(ctx);
8930 9074
8931 dasm_put(Dst, 7102); 9075 dasm_put(Dst, 7217);
8932 for (op = 0; op < BC__MAX; op++) 9076 for (op = 0; op < BC__MAX; op++)
8933 build_ins(ctx, (BCOp)op, op); 9077 build_ins(ctx, (BCOp)op, op);
8934 9078
diff --git a/src/lj_arch.h b/src/lj_arch.h
index ceaee6e7..355474fb 100644
--- a/src/lj_arch.h
+++ b/src/lj_arch.h
@@ -163,7 +163,6 @@
163#define LJ_TARGET_MASKROT 1 163#define LJ_TARGET_MASKROT 1
164#define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */ 164#define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */
165#define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL_SINGLE 165#define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL_SINGLE
166#define LJ_ARCH_NOFFI 1 /* NYI: comparisons, calls. */
167#define LJ_ARCH_NOJIT 1 166#define LJ_ARCH_NOJIT 1
168 167
169#elif LUAJIT_TARGET == LUAJIT_ARCH_PPCSPE 168#elif LUAJIT_TARGET == LUAJIT_ARCH_PPCSPE
diff --git a/src/lj_ccall.c b/src/lj_ccall.c
index 6a163b0e..183e471c 100644
--- a/src/lj_ccall.c
+++ b/src/lj_ccall.c
@@ -205,6 +205,54 @@
205 goto done; \ 205 goto done; \
206 } 206 }
207 207
208#elif LJ_TARGET_PPC
209/* -- PPC calling conventions --------------------------------------------- */
210
211#define CCALL_HANDLE_STRUCTRET \
212 cc->retref = 1; /* Return all structs by reference. */ \
213 cc->gpr[ngpr++] = (GPRArg)dp;
214
215#define CCALL_HANDLE_COMPLEXRET \
216 /* Complex values are returned in 2 or 4 GPRs. */ \
217 cc->retref = 0;
218
219#define CCALL_HANDLE_COMPLEXRET2 \
220 memcpy(dp, sp, ctr->size); /* Copy complex from GPRs. */
221
222#define CCALL_HANDLE_STRUCTARG \
223 rp = cdataptr(lj_cdata_new(cts, did, sz)); \
224 sz = CTSIZE_PTR; /* Pass all structs by reference. */
225
226#define CCALL_HANDLE_COMPLEXARG \
227 /* Pass complex by value in 2 or 4 GPRs. */
228
229#define CCALL_HANDLE_REGARG \
230 if (isfp) { /* Try to pass argument in FPRs. */ \
231 if (nfpr + 1 <= CCALL_NARG_FPR) { \
232 dp = &cc->fpr[nfpr]; \
233 nfpr += 1; \
234 d = ctype_get(cts, CTID_DOUBLE); /* FPRs always hold doubles. */ \
235 goto done; \
236 } \
237 } else { /* Try to pass argument in GPRs. */ \
238 if (n > 1) { \
239 lua_assert(n == 2 || n == 4); /* int64_t or complex (float). */ \
240 if (ctype_isinteger(d->info)) \
241 ngpr = (ngpr + 1u) & ~1u; /* Align int64_t to regpair. */ \
242 else if (ngpr + n > maxgpr) \
243 ngpr = maxgpr; /* Prevent reordering. */ \
244 } \
245 if (ngpr + n <= maxgpr) { \
246 dp = &cc->gpr[ngpr]; \
247 ngpr += n; \
248 goto done; \
249 } \
250 }
251
252#define CCALL_HANDLE_RET \
253 if (ctype_isfp(ctr->info) && ctr->size == sizeof(float)) \
254 ctr = ctype_get(cts, CTID_DOUBLE); /* FPRs always hold doubles. */
255
208#elif LJ_TARGET_PPCSPE 256#elif LJ_TARGET_PPCSPE
209/* -- PPC/SPE calling conventions ----------------------------------------- */ 257/* -- PPC/SPE calling conventions ----------------------------------------- */
210 258
@@ -530,7 +578,7 @@ static int ccall_set_args(lua_State *L, CTState *cts, CType *ct,
530 } 578 }
531 if (fid) lj_err_caller(L, LJ_ERR_FFI_NUMARG); /* Too few arguments. */ 579 if (fid) lj_err_caller(L, LJ_ERR_FFI_NUMARG); /* Too few arguments. */
532 580
533#if LJ_TARGET_X64 581#if LJ_TARGET_X64 || LJ_TARGET_PPC || LJ_TARGET_PPCSPE
534 cc->nfpr = nfpr; /* Required for vararg functions. */ 582 cc->nfpr = nfpr; /* Required for vararg functions. */
535#endif 583#endif
536 cc->nsp = nsp; 584 cc->nsp = nsp;
@@ -565,6 +613,9 @@ static int ccall_get_results(lua_State *L, CTState *cts, CType *ct,
565 CCALL_HANDLE_COMPLEXRET2 613 CCALL_HANDLE_COMPLEXRET2
566 return 1; /* One GC step. */ 614 return 1; /* One GC step. */
567 } 615 }
616#ifdef CCALL_HANDLE_RET
617 CCALL_HANDLE_RET
618#endif
568#if CCALL_NUM_FPR 619#if CCALL_NUM_FPR
569 if (ctype_isfp(ctr->info) || ctype_isvector(ctr->info)) 620 if (ctype_isfp(ctr->info) || ctype_isvector(ctr->info))
570 sp = &cc->fpr[0]; 621 sp = &cc->fpr[0];
diff --git a/src/lj_ccall.h b/src/lj_ccall.h
index d0979781..9a927745 100644
--- a/src/lj_ccall.h
+++ b/src/lj_ccall.h
@@ -53,10 +53,22 @@ typedef intptr_t GPRArg;
53#define CCALL_NARG_FPR 0 53#define CCALL_NARG_FPR 0
54#define CCALL_NRET_GPR 2 /* For softfp double. */ 54#define CCALL_NRET_GPR 2 /* For softfp double. */
55#define CCALL_NRET_FPR 0 55#define CCALL_NRET_FPR 0
56#define CCALL_SPS_FREE 0 /* NYI */ 56#define CCALL_SPS_FREE 0
57 57
58typedef intptr_t GPRArg; 58typedef intptr_t GPRArg;
59 59
60#elif LJ_TARGET_PPC
61
62#define CCALL_NARG_GPR 8
63#define CCALL_NARG_FPR 8
64#define CCALL_NRET_GPR 4 /* For complex double. */
65#define CCALL_NRET_FPR 1
66#define CCALL_SPS_EXTRA 3
67#define CCALL_SPS_FREE 1
68
69typedef intptr_t GPRArg;
70typedef double FPRArg;
71
60#elif LJ_TARGET_PPCSPE 72#elif LJ_TARGET_PPCSPE
61 73
62#define CCALL_NARG_GPR 8 74#define CCALL_NARG_GPR 8
@@ -100,8 +112,13 @@ typedef struct CCallState {
100 uint8_t nfpr; /* Number of arguments in FPRs. */ 112 uint8_t nfpr; /* Number of arguments in FPRs. */
101#elif LJ_TARGET_X86 113#elif LJ_TARGET_X86
102 uint8_t resx87; /* Result on x87 stack: 1:float, 2:double. */ 114 uint8_t resx87; /* Result on x87 stack: 1:float, 2:double. */
115#elif LJ_TARGET_PPC || LJ_TARGET_PPCSPE
116 uint8_t nfpr; /* Number of arguments in FPRs. */
103#endif 117#endif
104#if CCALL_NUM_FPR 118#if CCALL_NUM_FPR
119#if LJ_32
120 int32_t align1;
121#endif
105 FPRArg fpr[CCALL_NUM_FPR]; /* Arguments/results in FPRs. */ 122 FPRArg fpr[CCALL_NUM_FPR]; /* Arguments/results in FPRs. */
106#endif 123#endif
107 GPRArg gpr[CCALL_NUM_GPR]; /* Arguments/results in GPRs. */ 124 GPRArg gpr[CCALL_NUM_GPR]; /* Arguments/results in GPRs. */