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 | |
| parent | 26106759d422438b1b3e974c43fd9f38ea055bdf (diff) | |
| download | luajit-4008b351f477d528ec950760689823f8ab785849.tar.gz luajit-4008b351f477d528ec950760689823f8ab785849.tar.bz2 luajit-4008b351f477d528ec950760689823f8ab785849.zip | |
PPC: Add machine-specific part of FFI.
| -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. */ |
