diff options
author | Mike Pall <mike> | 2011-08-01 18:59:16 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-08-01 18:59:16 +0200 |
commit | 4008b351f477d528ec950760689823f8ab785849 (patch) | |
tree | d6217942bc5168d3f016abd3c93ffe32f050df01 /src | |
parent | 26106759d422438b1b3e974c43fd9f38ea055bdf (diff) | |
download | luajit-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.dasc | 103 | ||||
-rw-r--r-- | src/buildvm_ppc.h | 880 | ||||
-rw-r--r-- | src/lj_arch.h | 1 | ||||
-rw-r--r-- | src/lj_ccall.c | 53 | ||||
-rw-r--r-- | src/lj_ccall.h | 19 |
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 |
15 | static const unsigned int build_actionlist[7103] = { | 15 | static const unsigned int build_actionlist[7218] = { |
16 | 0x00010001, | 16 | 0x00010001, |
17 | 0x00060014, | 17 | 0x00060014, |
18 | 0x72000000, | 18 | 0x72000000, |
@@ -3846,7 +3846,92 @@ static const unsigned int build_actionlist[7103] = { | |||
3846 | 0x7c810808, | 3846 | 0x7c810808, |
3847 | 0x0006009f, | 3847 | 0x0006009f, |
3848 | 0x00000000, | 3848 | 0x00000000, |
3849 | 0x7c810808, | 3849 | 0x81030000, |
3850 | 0x00098200, | ||
3851 | 0x7c0802a6, | ||
3852 | 0x88830000, | ||
3853 | 0x00098200, | ||
3854 | 0x88a30000, | ||
3855 | 0x00098200, | ||
3856 | 0x7d0800d0, | ||
3857 | 0x90010004, | ||
3858 | 0x2c850000, | ||
3859 | 0x7c290b78, | ||
3860 | 0x3484ffff, | ||
3861 | 0x7c21416e, | ||
3862 | 0x4cc63042, | ||
3863 | 0x9069fffc, | ||
3864 | 0x38c00000, | ||
3865 | 0x39030000, | ||
3866 | 0x00098200, | ||
3867 | 0x54841000, | ||
3868 | 0x000900a1, | ||
3869 | 0x41800000, | ||
3870 | 0x00050802, | ||
3871 | 0x39210008, | ||
3872 | 0x0006000b, | ||
3873 | 0x7c08202e, | ||
3874 | 0x7c09212e, | ||
3875 | 0x3484fffc, | ||
3876 | 0x40800000, | ||
3877 | 0x0005080b, | ||
3878 | 0x0006000c, | ||
3879 | 0x40860000, | ||
3880 | 0x00050803, | ||
3881 | 0xc8230000, | ||
3882 | 0x00098200, | ||
3883 | 0xc8430000, | ||
3884 | 0x00098200, | ||
3885 | 0xc8630000, | ||
3886 | 0x00098200, | ||
3887 | 0xc8830000, | ||
3888 | 0x00098200, | ||
3889 | 0xc8a30000, | ||
3890 | 0x00098200, | ||
3891 | 0xc8c30000, | ||
3892 | 0x00098200, | ||
3893 | 0xc8e30000, | ||
3894 | 0x00098200, | ||
3895 | 0xc9030000, | ||
3896 | 0x00098200, | ||
3897 | 0x0006000d, | ||
3898 | 0x80030000, | ||
3899 | 0x00098200, | ||
3900 | 0x80830000, | ||
3901 | 0x00098200, | ||
3902 | 0x80a30000, | ||
3903 | 0x00098200, | ||
3904 | 0x00000000, | ||
3905 | 0x80c30000, | ||
3906 | 0x00098200, | ||
3907 | 0x80e30000, | ||
3908 | 0x00098200, | ||
3909 | 0x7c0903a6, | ||
3910 | 0x81030000, | ||
3911 | 0x00098200, | ||
3912 | 0x81230000, | ||
3913 | 0x00098200, | ||
3914 | 0x81430000, | ||
3915 | 0x00098200, | ||
3916 | 0x80630000, | ||
3917 | 0x00098200, | ||
3918 | 0x4e800421, | ||
3919 | 0x81210000, | ||
3920 | 0x8109fffc, | ||
3921 | 0x80090004, | ||
3922 | 0x90680000, | ||
3923 | 0x00098200, | ||
3924 | 0xd8280000, | ||
3925 | 0x00098200, | ||
3926 | 0x90880000, | ||
3927 | 0x00098200, | ||
3928 | 0x7c0803a6, | ||
3929 | 0x90a80000, | ||
3930 | 0x00098200, | ||
3931 | 0x7d214b78, | ||
3932 | 0x90c80000, | ||
3933 | 0x00098200, | ||
3934 | 0x4e800020, | ||
3850 | 0x00000000, | 3935 | 0x00000000, |
3851 | 0x00080000, | 3936 | 0x00080000, |
3852 | 0x00000000, | 3937 | 0x00000000, |
@@ -3907,6 +3992,8 @@ static const unsigned int build_actionlist[7103] = { | |||
3907 | 0x48000000, | 3992 | 0x48000000, |
3908 | 0x00050005, | 3993 | 0x00050005, |
3909 | 0x00060012, | 3994 | 0x00060012, |
3995 | 0x41850000, | ||
3996 | 0x00050834, | ||
3910 | 0x6c848000, | 3997 | 0x6c848000, |
3911 | 0x90810024, | 3998 | 0x90810024, |
3912 | 0xc8010020, | 3999 | 0xc8010020, |
@@ -3982,9 +4069,9 @@ static const unsigned int build_actionlist[7103] = { | |||
3982 | 0x80940004, | 4069 | 0x80940004, |
3983 | 0x7d0c706e, | 4070 | 0x7d0c706e, |
3984 | 0x7c00b040, | 4071 | 0x7c00b040, |
3985 | 0x80f0fffc, | 4072 | 0x8130fffc, |
3986 | 0x7c88b040, | 4073 | 0x7c88b040, |
3987 | 0x54e993ba, | 4074 | 0x552993ba, |
3988 | 0x80ac0004, | 4075 | 0x80ac0004, |
3989 | 0x4fa12b82, | 4076 | 0x4fa12b82, |
3990 | 0x3d290000, | 4077 | 0x3d290000, |
@@ -4038,12 +4125,24 @@ static const unsigned int build_actionlist[7103] = { | |||
4038 | 0x80940004, | 4125 | 0x80940004, |
4039 | 0x80ac0004, | 4126 | 0x80ac0004, |
4040 | 0x00000000, | 4127 | 0x00000000, |
4128 | 0x2f800000, | ||
4129 | 0x00098200, | ||
4130 | 0x2e880000, | ||
4131 | 0x00098200, | ||
4132 | 0x00000000, | ||
4041 | 0x7c0600f8, | 4133 | 0x7c0600f8, |
4042 | 0x7c004040, | 4134 | 0x7c004040, |
4043 | 0x28860000, | 4135 | 0x28860000, |
4044 | 0x00090200, | 4136 | 0x00090200, |
4137 | 0x00000000, | ||
4138 | 0x4fdeb382, | ||
4139 | 0x00000000, | ||
4045 | 0x2b060000, | 4140 | 0x2b060000, |
4046 | 0x00090200, | 4141 | 0x00090200, |
4142 | 0x00000000, | ||
4143 | 0x419e0000, | ||
4144 | 0x0005083a, | ||
4145 | 0x00000000, | ||
4047 | 0x7e842840, | 4146 | 0x7e842840, |
4048 | 0x4c222902, | 4147 | 0x4c222902, |
4049 | 0x4c161342, | 4148 | 0x4c161342, |
@@ -4103,15 +4202,23 @@ static const unsigned int build_actionlist[7103] = { | |||
4103 | 0x558c007e, | 4202 | 0x558c007e, |
4104 | 0x000900ab, | 4203 | 0x000900ab, |
4105 | 0x80d40004, | 4204 | 0x80d40004, |
4106 | 0x80f00000, | 4205 | 0x81300000, |
4107 | 0x218cfffc, | 4206 | 0x218cfffc, |
4108 | 0x3a100004, | 4207 | 0x3a100004, |
4208 | 0x00000000, | ||
4209 | 0x2c000000, | ||
4210 | 0x00098200, | ||
4211 | 0x00000000, | ||
4109 | 0x7d0f602e, | 4212 | 0x7d0f602e, |
4110 | 0x20000000, | 4213 | 0x20000000, |
4111 | 0x00098200, | 4214 | 0x00098200, |
4215 | 0x00000000, | ||
4216 | 0x41820000, | ||
4217 | 0x0005083a, | ||
4218 | 0x00000000, | ||
4112 | 0x7d064050, | 4219 | 0x7d064050, |
4113 | 0x7c004378, | 4220 | 0x7c004378, |
4114 | 0x54e993ba, | 4221 | 0x552993ba, |
4115 | 0x20000000, | 4222 | 0x20000000, |
4116 | 0x3d290000, | 4223 | 0x3d290000, |
4117 | 0x00098200, | 4224 | 0x00098200, |
@@ -4138,9 +4245,9 @@ static const unsigned int build_actionlist[7103] = { | |||
4138 | 0x80940004, | 4245 | 0x80940004, |
4139 | 0x7d0c786e, | 4246 | 0x7d0c786e, |
4140 | 0x7c00b040, | 4247 | 0x7c00b040, |
4141 | 0x80f0fffc, | 4248 | 0x8130fffc, |
4142 | 0x7c88b040, | 4249 | 0x7c88b040, |
4143 | 0x54e993ba, | 4250 | 0x552993ba, |
4144 | 0x80ac0004, | 4251 | 0x80ac0004, |
4145 | 0x3d290000, | 4252 | 0x3d290000, |
4146 | 0x00098200, | 4253 | 0x00098200, |
@@ -4163,9 +4270,9 @@ static const unsigned int build_actionlist[7103] = { | |||
4163 | 0x7c0ea02e, | 4270 | 0x7c0ea02e, |
4164 | 0x3a100004, | 4271 | 0x3a100004, |
4165 | 0x7c0ea4ae, | 4272 | 0x7c0ea4ae, |
4166 | 0x80f0fffc, | 4273 | 0x8130fffc, |
4167 | 0x7c2f64ae, | 4274 | 0x7c2f64ae, |
4168 | 0x54e993ba, | 4275 | 0x552993ba, |
4169 | 0x7c00b040, | 4276 | 0x7c00b040, |
4170 | 0x3d290000, | 4277 | 0x3d290000, |
4171 | 0x00098200, | 4278 | 0x00098200, |
@@ -4235,11 +4342,19 @@ static const unsigned int build_actionlist[7103] = { | |||
4235 | 0x7c0ea02e, | 4342 | 0x7c0ea02e, |
4236 | 0x558800fe, | 4343 | 0x558800fe, |
4237 | 0x000900ab, | 4344 | 0x000900ab, |
4238 | 0x80f00000, | 4345 | 0x81300000, |
4239 | 0x7d0840f8, | 4346 | 0x7d0840f8, |
4240 | 0x3a100004, | 4347 | 0x3a100004, |
4348 | 0x00000000, | ||
4349 | 0x2c000000, | ||
4350 | 0x00098200, | ||
4351 | 0x00000000, | ||
4241 | 0x7c080050, | 4352 | 0x7c080050, |
4242 | 0x54e993ba, | 4353 | 0x00000000, |
4354 | 0x41820000, | ||
4355 | 0x0005083a, | ||
4356 | 0x00000000, | ||
4357 | 0x552993ba, | ||
4243 | 0x3000ffff, | 4358 | 0x3000ffff, |
4244 | 0x3d290000, | 4359 | 0x3d290000, |
4245 | 0x00098200, | 4360 | 0x00098200, |
@@ -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) | |||
7884 | static void build_ins(BuildCtx *ctx, BCOp op, int defop) | 8001 | static 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 | ||
58 | typedef intptr_t GPRArg; | 58 | typedef 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 | |||
69 | typedef intptr_t GPRArg; | ||
70 | typedef 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. */ |