diff options
Diffstat (limited to 'src/buildvm_mips.h')
-rw-r--r-- | src/buildvm_mips.h | 409 |
1 files changed, 205 insertions, 204 deletions
diff --git a/src/buildvm_mips.h b/src/buildvm_mips.h index 7c0f90bf..bab93343 100644 --- a/src/buildvm_mips.h +++ b/src/buildvm_mips.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[6323] = { | 15 | static const unsigned int build_actionlist[6324] = { |
16 | 0xff010001, | 16 | 0xff010001, |
17 | 0xff060014, | 17 | 0xff060014, |
18 | 0x32410000, | 18 | 0x32410000, |
@@ -2930,6 +2930,7 @@ static const unsigned int build_actionlist[6323] = { | |||
2930 | 0x924d0000, | 2930 | 0x924d0000, |
2931 | 0xff098200, | 2931 | 0xff098200, |
2932 | 0x000d68c0, | 2932 | 0x000d68c0, |
2933 | 0x25ad0008, | ||
2933 | 0xff06000d, | 2934 | 0xff06000d, |
2934 | 0x10000000, | 2935 | 0x10000000, |
2935 | 0xff050824, | 2936 | 0xff050824, |
@@ -6736,51 +6737,51 @@ static void build_subroutines(BuildCtx *ctx) | |||
6736 | dasm_put(Dst, 2719, 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0)); | 6737 | dasm_put(Dst, 2719, 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0)); |
6737 | dasm_put(Dst, 2790, 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, Dt8(->f)); | 6738 | dasm_put(Dst, 2790, 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, Dt8(->f)); |
6738 | dasm_put(Dst, 2863, LJ_ENDIAN_SELECT(-4,-8), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), FRAME_TYPE, LJ_ENDIAN_SELECT(1,2), DISPATCH_GOT(lj_state_growstack), LUA_MINSTACK, Dt1(->base)); | 6739 | dasm_put(Dst, 2863, LJ_ENDIAN_SELECT(-4,-8), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), FRAME_TYPE, LJ_ENDIAN_SELECT(1,2), DISPATCH_GOT(lj_state_growstack), LUA_MINSTACK, Dt1(->base)); |
6739 | dasm_put(Dst, 2931, DISPATCH_GOT(lj_gc_step), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4)); | 6740 | dasm_put(Dst, 2932, DISPATCH_GOT(lj_gc_step), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4)); |
6740 | #if LJ_HASJIT | 6741 | #if LJ_HASJIT |
6741 | dasm_put(Dst, 2957, DISPATCH_GL(hookmask), HOOK_VMEVENT, DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); | 6742 | dasm_put(Dst, 2958, DISPATCH_GL(hookmask), HOOK_VMEVENT, DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); |
6742 | #endif | 6743 | #endif |
6743 | dasm_put(Dst, 2980, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, DISPATCH_GOT(lj_dispatch_ins), Dt1(->base), Dt1(->base)); | 6744 | dasm_put(Dst, 2981, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, DISPATCH_GOT(lj_dispatch_ins), Dt1(->base), Dt1(->base)); |
6744 | dasm_put(Dst, 3028, GG_DISP2STATIC, -24+LJ_ENDIAN_SELECT(0,4)); | 6745 | dasm_put(Dst, 3029, GG_DISP2STATIC, -24+LJ_ENDIAN_SELECT(0,4)); |
6745 | #if LJ_HASJIT | 6746 | #if LJ_HASJIT |
6746 | dasm_put(Dst, 3047, LJ_ENDIAN_SELECT(-8,-4), GG_DISP2J, Dt7(->pc), DISPATCH_J(L), PC2PROTO(framesize), DISPATCH_GOT(lj_trace_hot), Dt1(->base), Dt1(->top)); | 6747 | dasm_put(Dst, 3048, LJ_ENDIAN_SELECT(-8,-4), GG_DISP2J, Dt7(->pc), DISPATCH_J(L), PC2PROTO(framesize), DISPATCH_GOT(lj_trace_hot), Dt1(->base), Dt1(->top)); |
6747 | #endif | 6748 | #endif |
6748 | dasm_put(Dst, 3072); | 6749 | dasm_put(Dst, 3073); |
6749 | #if LJ_HASJIT | 6750 | #if LJ_HASJIT |
6750 | dasm_put(Dst, 3074); | 6751 | dasm_put(Dst, 3075); |
6751 | #endif | 6752 | #endif |
6752 | dasm_put(Dst, 3077); | 6753 | dasm_put(Dst, 3078); |
6753 | #if LJ_HASJIT | 6754 | #if LJ_HASJIT |
6754 | dasm_put(Dst, 3080); | 6755 | dasm_put(Dst, 3081); |
6755 | #endif | 6756 | #endif |
6756 | dasm_put(Dst, 3083, DISPATCH_GOT(lj_dispatch_call), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4)); | 6757 | dasm_put(Dst, 3084, DISPATCH_GOT(lj_dispatch_call), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4)); |
6757 | #if LJ_HASJIT | 6758 | #if LJ_HASJIT |
6758 | dasm_put(Dst, 3107, -(16+32*8+32*4), 16+0*8, 16+32*8+0*4, 16+32*8+1*4, 16+2*8, 16+32*8+2*4, 16+32*8+3*4, 16+4*8, 16+32*8+4*4, 16+32*8+5*4, 16+6*8, 16+32*8+6*4, 16+32*8+7*4, 16+8*8, 16+32*8+8*4, 16+32*8+9*4, 16+10*8, 16+32*8+10*4, 16+32*8+11*4, 16+12*8, 16+32*8+12*4, 16+32*8+13*4, 16+14*8); | 6759 | dasm_put(Dst, 3108, -(16+32*8+32*4), 16+0*8, 16+32*8+0*4, 16+32*8+1*4, 16+2*8, 16+32*8+2*4, 16+32*8+3*4, 16+4*8, 16+32*8+4*4, 16+32*8+5*4, 16+6*8, 16+32*8+6*4, 16+32*8+7*4, 16+8*8, 16+32*8+8*4, 16+32*8+9*4, 16+10*8, 16+32*8+10*4, 16+32*8+11*4, 16+12*8, 16+32*8+12*4, 16+32*8+13*4, 16+14*8); |
6759 | dasm_put(Dst, 3154, 16+32*8+14*4, 16+32*8+15*4, 16+16*8, 16+32*8+16*4, 16+32*8+17*4, 16+18*8, 16+32*8+18*4, 16+32*8+19*4, 16+20*8, 16+32*8+20*4, 16+32*8+21*4, 16+22*8, 16+32*8+22*4, 16+32*8+23*4, 16+24*8, 16+32*8+24*4, 16+32*8+25*4, 16+26*8, 16+32*8+26*4, 16+32*8+27*4, 16+28*8, 16+32*8+28*4, 16+30*8); | 6760 | dasm_put(Dst, 3155, 16+32*8+14*4, 16+32*8+15*4, 16+16*8, 16+32*8+16*4, 16+32*8+17*4, 16+18*8, 16+32*8+18*4, 16+32*8+19*4, 16+20*8, 16+32*8+20*4, 16+32*8+21*4, 16+22*8, 16+32*8+22*4, 16+32*8+23*4, 16+24*8, 16+32*8+24*4, 16+32*8+25*4, 16+26*8, 16+32*8+26*4, 16+32*8+27*4, 16+28*8, 16+32*8+28*4, 16+30*8); |
6760 | dasm_put(Dst, 3201, 16+32*8+30*4, 16+32*8+31*4, ~LJ_VMST_EXIT, 16+32*8+32*4, -GG_DISP2G-32768, DISPATCH_GL(vmstate), 16+32*8+29*4, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_GOT(lj_trace_exit), DISPATCH_J(L), DISPATCH_J(parent), DISPATCH_J(exitno), GG_DISP2J, Dt1(->base), Dt1(->cframe), Dt1(->base)); | 6761 | dasm_put(Dst, 3202, 16+32*8+30*4, 16+32*8+31*4, ~LJ_VMST_EXIT, 16+32*8+32*4, -GG_DISP2G-32768, DISPATCH_GL(vmstate), 16+32*8+29*4, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_GOT(lj_trace_exit), DISPATCH_J(L), DISPATCH_J(parent), DISPATCH_J(exitno), GG_DISP2J, Dt1(->base), Dt1(->cframe), Dt1(->base)); |
6761 | #endif | 6762 | #endif |
6762 | dasm_put(Dst, 3245); | 6763 | dasm_put(Dst, 3246); |
6763 | #if LJ_HASJIT | 6764 | #if LJ_HASJIT |
6764 | dasm_put(Dst, 3247, -GG_DISP2G-32768, LJ_ENDIAN_SELECT(-8,-4), LJ_TNIL, Dt7(->pc), DISPATCH_GL(jit_L), PC2PROTO(k), DISPATCH_GL(vmstate), BC_FUNCF*4, DISPATCH_GOT(lj_err_throw)); | 6765 | dasm_put(Dst, 3248, -GG_DISP2G-32768, LJ_ENDIAN_SELECT(-8,-4), LJ_TNIL, Dt7(->pc), DISPATCH_GL(jit_L), PC2PROTO(k), DISPATCH_GL(vmstate), BC_FUNCF*4, DISPATCH_GOT(lj_err_throw)); |
6765 | #endif | 6766 | #endif |
6766 | dasm_put(Dst, 3296); | 6767 | dasm_put(Dst, 3297); |
6767 | #if LJ_HASJIT | 6768 | #if LJ_HASJIT |
6768 | dasm_put(Dst, 3344); | 6769 | dasm_put(Dst, 3345); |
6769 | #endif | 6770 | #endif |
6770 | dasm_put(Dst, 3367); | 6771 | dasm_put(Dst, 3368); |
6771 | #if LJ_HASFFI | 6772 | #if LJ_HASFFI |
6772 | #define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V) | 6773 | #define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V) |
6773 | dasm_put(Dst, 3369, 72+9*4, 72+8*4, 24+5*8, 72+7*4, 72+6*4, 24+4*8, 72+5*4, 72+4*4, 24+3*8, 72+3*4, 72+2*4, 24+2*8, 72+1*4, 72+0*4, 24+1*8, 24+0*8, Dt2(->ctype_state), GG_G2DISP, DISPATCH_GOT(lj_ccallback_enter), DtE(->cb.slot), DtE(->cb.gpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[0])); | 6774 | dasm_put(Dst, 3370, 72+9*4, 72+8*4, 24+5*8, 72+7*4, 72+6*4, 24+4*8, 72+5*4, 72+4*4, 24+3*8, 72+3*4, 72+2*4, 24+2*8, 72+1*4, 72+0*4, 24+1*8, 24+0*8, Dt2(->ctype_state), GG_G2DISP, DISPATCH_GOT(lj_ccallback_enter), DtE(->cb.slot), DtE(->cb.gpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[0])); |
6774 | dasm_put(Dst, 3417, DtE(->cb.gpr[2]), DtE(->cb.gpr[3]), DtE(->cb.fpr[1]), 112+16, DtE(->cb.stack), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4), ~LJ_VMST_INTERP, LJ_TNIL, DISPATCH_GL(vmstate), Dt7(->pc)); | 6775 | dasm_put(Dst, 3418, DtE(->cb.gpr[2]), DtE(->cb.gpr[3]), DtE(->cb.fpr[1]), 112+16, DtE(->cb.stack), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4), ~LJ_VMST_INTERP, LJ_TNIL, DISPATCH_GL(vmstate), Dt7(->pc)); |
6775 | #endif | 6776 | #endif |
6776 | dasm_put(Dst, 3461); | 6777 | dasm_put(Dst, 3462); |
6777 | #if LJ_HASFFI | 6778 | #if LJ_HASFFI |
6778 | dasm_put(Dst, 3463, DISPATCH_GOT(lj_ccallback_leave), DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[1])); | 6779 | dasm_put(Dst, 3464, DISPATCH_GOT(lj_ccallback_leave), DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[1])); |
6779 | #endif | 6780 | #endif |
6780 | dasm_put(Dst, 3487); | 6781 | dasm_put(Dst, 3488); |
6781 | #if LJ_HASFFI | 6782 | #if LJ_HASFFI |
6782 | #define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) | 6783 | #define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) |
6783 | dasm_put(Dst, 3489, DtF(->spadj), DtF(->nsp), offsetof(CCallState, stack), DtF(->func), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3]), DtF(->fpr[0]), DtF(->fpr[1]), DtF(->gpr[0]), DtF(->gpr[0]), DtF(->gpr[1]), DtF(->fpr[0]), DtF(->fpr[1])); | 6784 | dasm_put(Dst, 3490, DtF(->spadj), DtF(->nsp), offsetof(CCallState, stack), DtF(->func), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3]), DtF(->fpr[0]), DtF(->fpr[1]), DtF(->gpr[0]), DtF(->gpr[0]), DtF(->gpr[1]), DtF(->fpr[0]), DtF(->fpr[1])); |
6784 | #endif | 6785 | #endif |
6785 | } | 6786 | } |
6786 | 6787 | ||
@@ -6788,7 +6789,7 @@ static void build_subroutines(BuildCtx *ctx) | |||
6788 | static void build_ins(BuildCtx *ctx, BCOp op, int defop) | 6789 | static void build_ins(BuildCtx *ctx, BCOp op, int defop) |
6789 | { | 6790 | { |
6790 | int vk = 0; | 6791 | int vk = 0; |
6791 | dasm_put(Dst, 3545, defop); | 6792 | dasm_put(Dst, 3546, defop); |
6792 | 6793 | ||
6793 | switch (op) { | 6794 | switch (op) { |
6794 | 6795 | ||
@@ -6797,138 +6798,138 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
6797 | /* Remember: all ops branch for a true comparison, fall through otherwise. */ | 6798 | /* Remember: all ops branch for a true comparison, fall through otherwise. */ |
6798 | 6799 | ||
6799 | case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: | 6800 | case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: |
6800 | dasm_put(Dst, 3547, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535)); | 6801 | dasm_put(Dst, 3548, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535)); |
6801 | if (op == BC_ISLT || op == BC_ISGE) { | 6802 | if (op == BC_ISLT || op == BC_ISGE) { |
6802 | dasm_put(Dst, 3570); | 6803 | dasm_put(Dst, 3571); |
6803 | } else { | 6804 | } else { |
6804 | dasm_put(Dst, 3572); | 6805 | dasm_put(Dst, 3573); |
6805 | } | 6806 | } |
6806 | if (op == BC_ISLT || op == BC_ISLE) { | 6807 | if (op == BC_ISLT || op == BC_ISLE) { |
6807 | dasm_put(Dst, 3574); | 6808 | dasm_put(Dst, 3575); |
6808 | } else { | 6809 | } else { |
6809 | dasm_put(Dst, 3576); | 6810 | dasm_put(Dst, 3577); |
6810 | } | 6811 | } |
6811 | dasm_put(Dst, 3578); | 6812 | dasm_put(Dst, 3579); |
6812 | break; | 6813 | break; |
6813 | 6814 | ||
6814 | case BC_ISEQV: case BC_ISNEV: | 6815 | case BC_ISEQV: case BC_ISNEV: |
6815 | vk = op == BC_ISEQV; | 6816 | vk = op == BC_ISEQV; |
6816 | dasm_put(Dst, 3592, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM, LJ_TISNUM); | 6817 | dasm_put(Dst, 3593, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM, LJ_TISNUM); |
6817 | if (vk) { | 6818 | if (vk) { |
6818 | dasm_put(Dst, 3616); | 6819 | dasm_put(Dst, 3617); |
6819 | } else { | 6820 | } else { |
6820 | dasm_put(Dst, 3618); | 6821 | dasm_put(Dst, 3619); |
6821 | } | 6822 | } |
6822 | dasm_put(Dst, 3620, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4)); | 6823 | dasm_put(Dst, 3621, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4)); |
6823 | if (LJ_HASFFI) { | 6824 | if (LJ_HASFFI) { |
6824 | dasm_put(Dst, 3639, LJ_TCDATA); | 6825 | dasm_put(Dst, 3640, LJ_TCDATA); |
6825 | } | 6826 | } |
6826 | dasm_put(Dst, 3644, LJ_TISPRI); | 6827 | dasm_put(Dst, 3645, LJ_TISPRI); |
6827 | if (LJ_HASFFI) { | 6828 | if (LJ_HASFFI) { |
6828 | dasm_put(Dst, 3647); | 6829 | dasm_put(Dst, 3648); |
6829 | } | 6830 | } |
6830 | dasm_put(Dst, 3650, LJ_TISTABUD+1); | 6831 | dasm_put(Dst, 3651, LJ_TISTABUD+1); |
6831 | if (vk) { | 6832 | if (vk) { |
6832 | dasm_put(Dst, 3661); | 6833 | dasm_put(Dst, 3662); |
6833 | } else { | 6834 | } else { |
6834 | dasm_put(Dst, 3663); | 6835 | dasm_put(Dst, 3664); |
6835 | } | 6836 | } |
6836 | dasm_put(Dst, 3665, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq, 1-vk); | 6837 | dasm_put(Dst, 3666, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq, 1-vk); |
6837 | break; | 6838 | break; |
6838 | 6839 | ||
6839 | case BC_ISEQS: case BC_ISNES: | 6840 | case BC_ISEQS: case BC_ISNES: |
6840 | vk = op == BC_ISEQS; | 6841 | vk = op == BC_ISEQS; |
6841 | dasm_put(Dst, 3682, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), -4+LJ_ENDIAN_SELECT(2,0)); | 6842 | dasm_put(Dst, 3683, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), -4+LJ_ENDIAN_SELECT(2,0)); |
6842 | if (LJ_HASFFI) { | 6843 | if (LJ_HASFFI) { |
6843 | dasm_put(Dst, 3693, LJ_TCDATA); | 6844 | dasm_put(Dst, 3694, LJ_TCDATA); |
6844 | } | 6845 | } |
6845 | dasm_put(Dst, 3698, -LJ_TSTR, (-(BCBIAS_J*4 >> 16) & 65535)); | 6846 | dasm_put(Dst, 3699, -LJ_TSTR, (-(BCBIAS_J*4 >> 16) & 65535)); |
6846 | if (vk) { | 6847 | if (vk) { |
6847 | dasm_put(Dst, 3708); | 6848 | dasm_put(Dst, 3709); |
6848 | } else { | 6849 | } else { |
6849 | dasm_put(Dst, 3710); | 6850 | dasm_put(Dst, 3711); |
6850 | } | 6851 | } |
6851 | dasm_put(Dst, 3712); | 6852 | dasm_put(Dst, 3713); |
6852 | break; | 6853 | break; |
6853 | 6854 | ||
6854 | case BC_ISEQN: case BC_ISNEN: | 6855 | case BC_ISEQN: case BC_ISNEN: |
6855 | vk = op == BC_ISEQN; | 6856 | vk = op == BC_ISEQN; |
6856 | dasm_put(Dst, 3725, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM); | 6857 | dasm_put(Dst, 3726, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM); |
6857 | if (LJ_HASFFI) { | 6858 | if (LJ_HASFFI) { |
6858 | dasm_put(Dst, 3740); | 6859 | dasm_put(Dst, 3741); |
6859 | } else { | 6860 | } else { |
6860 | dasm_put(Dst, 3743); | 6861 | dasm_put(Dst, 3744); |
6861 | } | 6862 | } |
6862 | dasm_put(Dst, 3746); | 6863 | dasm_put(Dst, 3747); |
6863 | if (vk) { | 6864 | if (vk) { |
6864 | dasm_put(Dst, 3749); | 6865 | dasm_put(Dst, 3750); |
6865 | } else { | 6866 | } else { |
6866 | dasm_put(Dst, 3753); | 6867 | dasm_put(Dst, 3754); |
6867 | } | 6868 | } |
6868 | dasm_put(Dst, 3757); | 6869 | dasm_put(Dst, 3758); |
6869 | if (LJ_HASFFI) { | 6870 | if (LJ_HASFFI) { |
6870 | dasm_put(Dst, 3769, LJ_TCDATA); | 6871 | dasm_put(Dst, 3770, LJ_TCDATA); |
6871 | } | 6872 | } |
6872 | break; | 6873 | break; |
6873 | 6874 | ||
6874 | case BC_ISEQP: case BC_ISNEP: | 6875 | case BC_ISEQP: case BC_ISNEP: |
6875 | vk = op == BC_ISEQP; | 6876 | vk = op == BC_ISEQP; |
6876 | dasm_put(Dst, 3779, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(2,0)); | 6877 | dasm_put(Dst, 3780, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(2,0)); |
6877 | if (LJ_HASFFI) { | 6878 | if (LJ_HASFFI) { |
6878 | dasm_put(Dst, 3788, LJ_TCDATA); | 6879 | dasm_put(Dst, 3789, LJ_TCDATA); |
6879 | } | 6880 | } |
6880 | dasm_put(Dst, 3793, (-(BCBIAS_J*4 >> 16) & 65535)); | 6881 | dasm_put(Dst, 3794, (-(BCBIAS_J*4 >> 16) & 65535)); |
6881 | if (vk) { | 6882 | if (vk) { |
6882 | dasm_put(Dst, 3799); | 6883 | dasm_put(Dst, 3800); |
6883 | } else { | 6884 | } else { |
6884 | dasm_put(Dst, 3801); | 6885 | dasm_put(Dst, 3802); |
6885 | } | 6886 | } |
6886 | dasm_put(Dst, 3803); | 6887 | dasm_put(Dst, 3804); |
6887 | break; | 6888 | break; |
6888 | 6889 | ||
6889 | /* -- Unary test and copy ops ------------------------------------------- */ | 6890 | /* -- Unary test and copy ops ------------------------------------------- */ |
6890 | 6891 | ||
6891 | case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: | 6892 | case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: |
6892 | dasm_put(Dst, 3816, LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0)); | 6893 | dasm_put(Dst, 3817, LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0)); |
6893 | if (op == BC_IST || op == BC_ISF) { | 6894 | if (op == BC_IST || op == BC_ISF) { |
6894 | dasm_put(Dst, 3823, LJ_TISTRUECOND, (-(BCBIAS_J*4 >> 16) & 65535)); | 6895 | dasm_put(Dst, 3824, LJ_TISTRUECOND, (-(BCBIAS_J*4 >> 16) & 65535)); |
6895 | if (op == BC_IST) { | 6896 | if (op == BC_IST) { |
6896 | dasm_put(Dst, 3830); | 6897 | dasm_put(Dst, 3831); |
6897 | } else { | 6898 | } else { |
6898 | dasm_put(Dst, 3832); | 6899 | dasm_put(Dst, 3833); |
6899 | } | 6900 | } |
6900 | dasm_put(Dst, 3834); | 6901 | dasm_put(Dst, 3835); |
6901 | } else { | 6902 | } else { |
6902 | dasm_put(Dst, 3836, LJ_TISTRUECOND); | 6903 | dasm_put(Dst, 3837, LJ_TISTRUECOND); |
6903 | if (op == BC_ISTC) { | 6904 | if (op == BC_ISTC) { |
6904 | dasm_put(Dst, 3840); | 6905 | dasm_put(Dst, 3841); |
6905 | } else { | 6906 | } else { |
6906 | dasm_put(Dst, 3843); | 6907 | dasm_put(Dst, 3844); |
6907 | } | 6908 | } |
6908 | dasm_put(Dst, 3846, (-(BCBIAS_J*4 >> 16) & 65535)); | 6909 | dasm_put(Dst, 3847, (-(BCBIAS_J*4 >> 16) & 65535)); |
6909 | } | 6910 | } |
6910 | dasm_put(Dst, 3855); | 6911 | dasm_put(Dst, 3856); |
6911 | break; | 6912 | break; |
6912 | 6913 | ||
6913 | /* -- Unary ops --------------------------------------------------------- */ | 6914 | /* -- Unary ops --------------------------------------------------------- */ |
6914 | 6915 | ||
6915 | case BC_MOV: | 6916 | case BC_MOV: |
6916 | dasm_put(Dst, 3867); | 6917 | dasm_put(Dst, 3868); |
6917 | break; | 6918 | break; |
6918 | case BC_NOT: | 6919 | case BC_NOT: |
6919 | dasm_put(Dst, 3883, LJ_ENDIAN_SELECT(4,0), LJ_TFALSE, LJ_TISTRUECOND, LJ_TTRUE, LJ_ENDIAN_SELECT(4,0)); | 6920 | dasm_put(Dst, 3884, LJ_ENDIAN_SELECT(4,0), LJ_TFALSE, LJ_TISTRUECOND, LJ_TTRUE, LJ_ENDIAN_SELECT(4,0)); |
6920 | break; | 6921 | break; |
6921 | case BC_UNM: | 6922 | case BC_UNM: |
6922 | dasm_put(Dst, 3907, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); | 6923 | dasm_put(Dst, 3908, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); |
6923 | break; | 6924 | break; |
6924 | case BC_LEN: | 6925 | case BC_LEN: |
6925 | dasm_put(Dst, 3930, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TSTR, LJ_TTAB, Dt5(->len)); | 6926 | dasm_put(Dst, 3931, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TSTR, LJ_TTAB, Dt5(->len)); |
6926 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | 6927 | #ifdef LUAJIT_ENABLE_LUA52COMPAT |
6927 | dasm_put(Dst, 3964, Dt6(->metatable)); | 6928 | dasm_put(Dst, 3965, Dt6(->metatable)); |
6928 | #endif | 6929 | #endif |
6929 | dasm_put(Dst, 3971, DISPATCH_GOT(lj_tab_len)); | 6930 | dasm_put(Dst, 3972, DISPATCH_GOT(lj_tab_len)); |
6930 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | 6931 | #ifdef LUAJIT_ENABLE_LUA52COMPAT |
6931 | dasm_put(Dst, 3980, Dt6(->nomm), 1<<MM_len); | 6932 | dasm_put(Dst, 3981, Dt6(->nomm), 1<<MM_len); |
6932 | #endif | 6933 | #endif |
6933 | break; | 6934 | break; |
6934 | 6935 | ||
@@ -6937,273 +6938,273 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
6937 | 6938 | ||
6938 | case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: | 6939 | case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: |
6939 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 6940 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
6940 | dasm_put(Dst, 3992); | 6941 | dasm_put(Dst, 3993); |
6941 | switch (vk) { | 6942 | switch (vk) { |
6942 | case 0: | 6943 | case 0: |
6943 | dasm_put(Dst, 3996, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); | 6944 | dasm_put(Dst, 3997, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); |
6944 | break; | 6945 | break; |
6945 | case 1: | 6946 | case 1: |
6946 | dasm_put(Dst, 4005, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); | 6947 | dasm_put(Dst, 4006, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); |
6947 | break; | 6948 | break; |
6948 | default: | 6949 | default: |
6949 | dasm_put(Dst, 4014, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); | 6950 | dasm_put(Dst, 4015, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); |
6950 | break; | 6951 | break; |
6951 | } | 6952 | } |
6952 | dasm_put(Dst, 4028); | 6953 | dasm_put(Dst, 4029); |
6953 | break; | 6954 | break; |
6954 | case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: | 6955 | case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: |
6955 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 6956 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
6956 | dasm_put(Dst, 4045); | 6957 | dasm_put(Dst, 4046); |
6957 | switch (vk) { | 6958 | switch (vk) { |
6958 | case 0: | 6959 | case 0: |
6959 | dasm_put(Dst, 4049, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); | 6960 | dasm_put(Dst, 4050, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); |
6960 | break; | 6961 | break; |
6961 | case 1: | 6962 | case 1: |
6962 | dasm_put(Dst, 4058, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); | 6963 | dasm_put(Dst, 4059, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); |
6963 | break; | 6964 | break; |
6964 | default: | 6965 | default: |
6965 | dasm_put(Dst, 4067, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); | 6966 | dasm_put(Dst, 4068, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); |
6966 | break; | 6967 | break; |
6967 | } | 6968 | } |
6968 | dasm_put(Dst, 4081); | 6969 | dasm_put(Dst, 4082); |
6969 | break; | 6970 | break; |
6970 | case BC_MULVN: case BC_MULNV: case BC_MULVV: | 6971 | case BC_MULVN: case BC_MULNV: case BC_MULVV: |
6971 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 6972 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
6972 | dasm_put(Dst, 4098); | 6973 | dasm_put(Dst, 4099); |
6973 | switch (vk) { | 6974 | switch (vk) { |
6974 | case 0: | 6975 | case 0: |
6975 | dasm_put(Dst, 4102, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); | 6976 | dasm_put(Dst, 4103, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); |
6976 | break; | 6977 | break; |
6977 | case 1: | 6978 | case 1: |
6978 | dasm_put(Dst, 4111, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); | 6979 | dasm_put(Dst, 4112, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); |
6979 | break; | 6980 | break; |
6980 | default: | 6981 | default: |
6981 | dasm_put(Dst, 4120, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); | 6982 | dasm_put(Dst, 4121, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); |
6982 | break; | 6983 | break; |
6983 | } | 6984 | } |
6984 | dasm_put(Dst, 4134); | 6985 | dasm_put(Dst, 4135); |
6985 | break; | 6986 | break; |
6986 | case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: | 6987 | case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: |
6987 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 6988 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
6988 | dasm_put(Dst, 4151); | 6989 | dasm_put(Dst, 4152); |
6989 | switch (vk) { | 6990 | switch (vk) { |
6990 | case 0: | 6991 | case 0: |
6991 | dasm_put(Dst, 4155, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); | 6992 | dasm_put(Dst, 4156, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); |
6992 | break; | 6993 | break; |
6993 | case 1: | 6994 | case 1: |
6994 | dasm_put(Dst, 4164, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); | 6995 | dasm_put(Dst, 4165, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); |
6995 | break; | 6996 | break; |
6996 | default: | 6997 | default: |
6997 | dasm_put(Dst, 4173, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); | 6998 | dasm_put(Dst, 4174, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); |
6998 | break; | 6999 | break; |
6999 | } | 7000 | } |
7000 | dasm_put(Dst, 4187); | 7001 | dasm_put(Dst, 4188); |
7001 | break; | 7002 | break; |
7002 | case BC_MODVN: | 7003 | case BC_MODVN: |
7003 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 7004 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
7004 | dasm_put(Dst, 4204); | 7005 | dasm_put(Dst, 4205); |
7005 | switch (vk) { | 7006 | switch (vk) { |
7006 | case 0: | 7007 | case 0: |
7007 | dasm_put(Dst, 4208, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); | 7008 | dasm_put(Dst, 4209, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); |
7008 | break; | 7009 | break; |
7009 | case 1: | 7010 | case 1: |
7010 | dasm_put(Dst, 4217, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); | 7011 | dasm_put(Dst, 4218, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); |
7011 | break; | 7012 | break; |
7012 | default: | 7013 | default: |
7013 | dasm_put(Dst, 4226, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); | 7014 | dasm_put(Dst, 4227, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); |
7014 | break; | 7015 | break; |
7015 | } | 7016 | } |
7016 | dasm_put(Dst, 4240); | 7017 | dasm_put(Dst, 4241); |
7017 | break; | 7018 | break; |
7018 | case BC_MODNV: case BC_MODVV: | 7019 | case BC_MODNV: case BC_MODVV: |
7019 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); | 7020 | vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); |
7020 | dasm_put(Dst, 4262); | 7021 | dasm_put(Dst, 4263); |
7021 | switch (vk) { | 7022 | switch (vk) { |
7022 | case 0: | 7023 | case 0: |
7023 | dasm_put(Dst, 4266, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); | 7024 | dasm_put(Dst, 4267, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); |
7024 | break; | 7025 | break; |
7025 | case 1: | 7026 | case 1: |
7026 | dasm_put(Dst, 4275, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); | 7027 | dasm_put(Dst, 4276, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); |
7027 | break; | 7028 | break; |
7028 | default: | 7029 | default: |
7029 | dasm_put(Dst, 4284, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); | 7030 | dasm_put(Dst, 4285, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); |
7030 | break; | 7031 | break; |
7031 | } | 7032 | } |
7032 | dasm_put(Dst, 4298); | 7033 | dasm_put(Dst, 4299); |
7033 | break; | 7034 | break; |
7034 | case BC_POW: | 7035 | case BC_POW: |
7035 | dasm_put(Dst, 4305, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, DISPATCH_GOT(pow)); | 7036 | dasm_put(Dst, 4306, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, DISPATCH_GOT(pow)); |
7036 | break; | 7037 | break; |
7037 | 7038 | ||
7038 | case BC_CAT: | 7039 | case BC_CAT: |
7039 | dasm_put(Dst, 4341, Dt1(->base), DISPATCH_GOT(lj_meta_cat), Dt1(->base)); | 7040 | dasm_put(Dst, 4342, Dt1(->base), DISPATCH_GOT(lj_meta_cat), Dt1(->base)); |
7040 | break; | 7041 | break; |
7041 | 7042 | ||
7042 | /* -- Constant ops ------------------------------------------------------ */ | 7043 | /* -- Constant ops ------------------------------------------------------ */ |
7043 | 7044 | ||
7044 | case BC_KSTR: | 7045 | case BC_KSTR: |
7045 | dasm_put(Dst, 4376, LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0)); | 7046 | dasm_put(Dst, 4377, LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0)); |
7046 | break; | 7047 | break; |
7047 | case BC_KCDATA: | 7048 | case BC_KCDATA: |
7048 | #if LJ_HASFFI | 7049 | #if LJ_HASFFI |
7049 | dasm_put(Dst, 4398, LJ_TCDATA, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0)); | 7050 | dasm_put(Dst, 4399, LJ_TCDATA, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0)); |
7050 | #endif | 7051 | #endif |
7051 | break; | 7052 | break; |
7052 | case BC_KSHORT: | 7053 | case BC_KSHORT: |
7053 | dasm_put(Dst, 4420); | 7054 | dasm_put(Dst, 4421); |
7054 | break; | 7055 | break; |
7055 | case BC_KNUM: | 7056 | case BC_KNUM: |
7056 | dasm_put(Dst, 4437); | 7057 | dasm_put(Dst, 4438); |
7057 | break; | 7058 | break; |
7058 | case BC_KPRI: | 7059 | case BC_KPRI: |
7059 | dasm_put(Dst, 4453, LJ_ENDIAN_SELECT(4,0)); | 7060 | dasm_put(Dst, 4454, LJ_ENDIAN_SELECT(4,0)); |
7060 | break; | 7061 | break; |
7061 | case BC_KNIL: | 7062 | case BC_KNIL: |
7062 | dasm_put(Dst, 4470, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0)); | 7063 | dasm_put(Dst, 4471, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0)); |
7063 | break; | 7064 | break; |
7064 | 7065 | ||
7065 | /* -- Upvalue and function ops ------------------------------------------ */ | 7066 | /* -- Upvalue and function ops ------------------------------------------ */ |
7066 | 7067 | ||
7067 | case BC_UGET: | 7068 | case BC_UGET: |
7068 | dasm_put(Dst, 4494, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v)); | 7069 | dasm_put(Dst, 4495, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v)); |
7069 | break; | 7070 | break; |
7070 | case BC_USETV: | 7071 | case BC_USETV: |
7071 | dasm_put(Dst, 4517, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), LJ_ENDIAN_SELECT(4,0), LJ_GC_BLACK|1, -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), LJ_ENDIAN_SELECT(0,4), Dt4(->gch.marked), LJ_GC_WHITES, DISPATCH_GOT(lj_gc_barrieruv), GG_DISP2G); | 7072 | dasm_put(Dst, 4518, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), LJ_ENDIAN_SELECT(4,0), LJ_GC_BLACK|1, -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), LJ_ENDIAN_SELECT(0,4), Dt4(->gch.marked), LJ_GC_WHITES, DISPATCH_GOT(lj_gc_barrieruv), GG_DISP2G); |
7072 | break; | 7073 | break; |
7073 | case BC_USETS: | 7074 | case BC_USETS: |
7074 | dasm_put(Dst, 4577, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->marked), DtA(->v), Dt5(->marked), LJ_GC_BLACK, DtA(->closed), LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_GC_WHITES, DISPATCH_GOT(lj_gc_barrieruv), GG_DISP2G); | 7075 | dasm_put(Dst, 4578, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->marked), DtA(->v), Dt5(->marked), LJ_GC_BLACK, DtA(->closed), LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_GC_WHITES, DISPATCH_GOT(lj_gc_barrieruv), GG_DISP2G); |
7075 | break; | 7076 | break; |
7076 | case BC_USETN: | 7077 | case BC_USETN: |
7077 | dasm_put(Dst, 4632, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v)); | 7078 | dasm_put(Dst, 4633, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v)); |
7078 | break; | 7079 | break; |
7079 | case BC_USETP: | 7080 | case BC_USETP: |
7080 | dasm_put(Dst, 4655, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v), LJ_ENDIAN_SELECT(4,0)); | 7081 | dasm_put(Dst, 4656, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v), LJ_ENDIAN_SELECT(4,0)); |
7081 | break; | 7082 | break; |
7082 | 7083 | ||
7083 | case BC_UCLO: | 7084 | case BC_UCLO: |
7084 | dasm_put(Dst, 4679, Dt1(->openupval), (-(BCBIAS_J*4 >> 16) & 65535), DISPATCH_GOT(lj_func_closeuv), Dt1(->base), Dt1(->base)); | 7085 | dasm_put(Dst, 4680, Dt1(->openupval), (-(BCBIAS_J*4 >> 16) & 65535), DISPATCH_GOT(lj_func_closeuv), Dt1(->base), Dt1(->base)); |
7085 | break; | 7086 | break; |
7086 | 7087 | ||
7087 | case BC_FNEW: | 7088 | case BC_FNEW: |
7088 | dasm_put(Dst, 4710, DISPATCH_GOT(lj_func_newL_gc), LJ_ENDIAN_SELECT(-8,-4), Dt1(->base), Dt1(->base), LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); | 7089 | dasm_put(Dst, 4711, DISPATCH_GOT(lj_func_newL_gc), LJ_ENDIAN_SELECT(-8,-4), Dt1(->base), Dt1(->base), LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); |
7089 | break; | 7090 | break; |
7090 | 7091 | ||
7091 | /* -- Table ops --------------------------------------------------------- */ | 7092 | /* -- Table ops --------------------------------------------------------- */ |
7092 | 7093 | ||
7093 | case BC_TNEW: | 7094 | case BC_TNEW: |
7094 | case BC_TDUP: | 7095 | case BC_TDUP: |
7095 | dasm_put(Dst, 4743, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); | 7096 | dasm_put(Dst, 4744, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); |
7096 | if (op == BC_TNEW) { | 7097 | if (op == BC_TNEW) { |
7097 | dasm_put(Dst, 4755, DISPATCH_GOT(lj_tab_new)); | 7098 | dasm_put(Dst, 4756, DISPATCH_GOT(lj_tab_new)); |
7098 | } else { | 7099 | } else { |
7099 | dasm_put(Dst, 4766, DISPATCH_GOT(lj_tab_dup)); | 7100 | dasm_put(Dst, 4767, DISPATCH_GOT(lj_tab_dup)); |
7100 | } | 7101 | } |
7101 | dasm_put(Dst, 4774, Dt1(->base), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), DISPATCH_GOT(lj_gc_step_fixtop)); | 7102 | dasm_put(Dst, 4775, Dt1(->base), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), DISPATCH_GOT(lj_gc_step_fixtop)); |
7102 | break; | 7103 | break; |
7103 | 7104 | ||
7104 | case BC_GGET: | 7105 | case BC_GGET: |
7105 | case BC_GSET: | 7106 | case BC_GSET: |
7106 | dasm_put(Dst, 4804, LJ_ENDIAN_SELECT(-8,-4), Dt7(->env)); | 7107 | dasm_put(Dst, 4805, LJ_ENDIAN_SELECT(-8,-4), Dt7(->env)); |
7107 | if (op == BC_GGET) { | 7108 | if (op == BC_GGET) { |
7108 | dasm_put(Dst, 4812); | 7109 | dasm_put(Dst, 4813); |
7109 | } else { | 7110 | } else { |
7110 | dasm_put(Dst, 4815); | 7111 | dasm_put(Dst, 4816); |
7111 | } | 7112 | } |
7112 | dasm_put(Dst, 4818); | 7113 | dasm_put(Dst, 4819); |
7113 | break; | 7114 | break; |
7114 | 7115 | ||
7115 | case BC_TGETV: | 7116 | case BC_TGETV: |
7116 | dasm_put(Dst, 4820, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TTAB, LJ_TISNUM, LJ_TSTR, Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->metatable), Dt6(->nomm), 1<<MM_index); | 7117 | dasm_put(Dst, 4821, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TTAB, LJ_TISNUM, LJ_TSTR, Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->metatable), Dt6(->nomm), 1<<MM_index); |
7117 | dasm_put(Dst, 4895, LJ_ENDIAN_SELECT(0,4)); | 7118 | dasm_put(Dst, 4896, LJ_ENDIAN_SELECT(0,4)); |
7118 | break; | 7119 | break; |
7119 | case BC_TGETS: | 7120 | case BC_TGETS: |
7120 | dasm_put(Dst, 4901, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt5(->hash), Dt6(->node), offsetof(Node, key)+LJ_ENDIAN_SELECT(4,0), offsetof(Node, key)+LJ_ENDIAN_SELECT(0,4), DtB(->next), offsetof(Node, val)+LJ_ENDIAN_SELECT(4,0), -LJ_TSTR, Dt6(->metatable), offsetof(Node, val)+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); | 7121 | dasm_put(Dst, 4902, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt5(->hash), Dt6(->node), offsetof(Node, key)+LJ_ENDIAN_SELECT(4,0), offsetof(Node, key)+LJ_ENDIAN_SELECT(0,4), DtB(->next), offsetof(Node, val)+LJ_ENDIAN_SELECT(4,0), -LJ_TSTR, Dt6(->metatable), offsetof(Node, val)+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); |
7121 | dasm_put(Dst, 4970, LJ_TNIL, Dt6(->nomm), 1<<MM_index); | 7122 | dasm_put(Dst, 4971, LJ_TNIL, Dt6(->nomm), 1<<MM_index); |
7122 | break; | 7123 | break; |
7123 | case BC_TGETB: | 7124 | case BC_TGETB: |
7124 | dasm_put(Dst, 4987, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->metatable), Dt6(->nomm), 1<<MM_index); | 7125 | dasm_put(Dst, 4988, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->metatable), Dt6(->nomm), 1<<MM_index); |
7125 | break; | 7126 | break; |
7126 | 7127 | ||
7127 | case BC_TSETV: | 7128 | case BC_TSETV: |
7128 | dasm_put(Dst, 5044, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TTAB, LJ_TISNUM, LJ_TSTR, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_ENDIAN_SELECT(4,0), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex); | 7129 | dasm_put(Dst, 5045, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TTAB, LJ_TISNUM, LJ_TSTR, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_ENDIAN_SELECT(4,0), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex); |
7129 | dasm_put(Dst, 5117, LJ_ENDIAN_SELECT(0,4), DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); | 7130 | dasm_put(Dst, 5118, LJ_ENDIAN_SELECT(0,4), DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); |
7130 | break; | 7131 | break; |
7131 | case BC_TSETS: | 7132 | case BC_TSETS: |
7132 | dasm_put(Dst, 5145, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), offsetof(Node, key)+LJ_ENDIAN_SELECT(4,0), offsetof(Node, key)+LJ_ENDIAN_SELECT(0,4), LJ_TSTR, DtB(->next), offsetof(Node, val)+LJ_ENDIAN_SELECT(4,0), Dt6(->marked), Dt6(->metatable), LJ_GC_BLACK); | 7133 | dasm_put(Dst, 5146, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), offsetof(Node, key)+LJ_ENDIAN_SELECT(4,0), offsetof(Node, key)+LJ_ENDIAN_SELECT(0,4), LJ_TSTR, DtB(->next), offsetof(Node, val)+LJ_ENDIAN_SELECT(4,0), Dt6(->marked), Dt6(->metatable), LJ_GC_BLACK); |
7133 | dasm_put(Dst, 5203, DtB(->val), Dt6(->nomm), 1<<MM_newindex, Dt6(->metatable), DISPATCH_GL(tmptv), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, DISPATCH_GOT(lj_tab_newkey), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), Dt1(->base), Dt1(->base)); | 7134 | dasm_put(Dst, 5204, DtB(->val), Dt6(->nomm), 1<<MM_newindex, Dt6(->metatable), DISPATCH_GL(tmptv), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, DISPATCH_GOT(lj_tab_newkey), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), Dt1(->base), Dt1(->base)); |
7134 | dasm_put(Dst, 5265, DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); | 7135 | dasm_put(Dst, 5266, DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); |
7135 | break; | 7136 | break; |
7136 | case BC_TSETB: | 7137 | case BC_TSETB: |
7137 | dasm_put(Dst, 5282, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain)); | 7138 | dasm_put(Dst, 5283, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain)); |
7138 | dasm_put(Dst, 5349, ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); | 7139 | dasm_put(Dst, 5350, ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); |
7139 | break; | 7140 | break; |
7140 | 7141 | ||
7141 | case BC_TSETM: | 7142 | case BC_TSETM: |
7142 | dasm_put(Dst, 5360, -8+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->marked), Dt6(->array), LJ_GC_BLACK, DISPATCH_GOT(lj_tab_reasize), Dt1(->base), Dt1(->base), DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked)); | 7143 | dasm_put(Dst, 5361, -8+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->marked), Dt6(->array), LJ_GC_BLACK, DISPATCH_GOT(lj_tab_reasize), Dt1(->base), Dt1(->base), DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked)); |
7143 | dasm_put(Dst, 5433, Dt6(->gclist)); | 7144 | dasm_put(Dst, 5434, Dt6(->gclist)); |
7144 | break; | 7145 | break; |
7145 | 7146 | ||
7146 | /* -- Calls and vararg handling ----------------------------------------- */ | 7147 | /* -- Calls and vararg handling ----------------------------------------- */ |
7147 | 7148 | ||
7148 | case BC_CALLM: | 7149 | case BC_CALLM: |
7149 | dasm_put(Dst, 5438); | 7150 | dasm_put(Dst, 5439); |
7150 | break; | 7151 | break; |
7151 | case BC_CALL: | 7152 | case BC_CALL: |
7152 | dasm_put(Dst, 5443, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc)); | 7153 | dasm_put(Dst, 5444, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc)); |
7153 | break; | 7154 | break; |
7154 | 7155 | ||
7155 | case BC_CALLMT: | 7156 | case BC_CALLMT: |
7156 | dasm_put(Dst, 5472); | 7157 | dasm_put(Dst, 5473); |
7157 | break; | 7158 | break; |
7158 | case BC_CALLT: | 7159 | case BC_CALLT: |
7159 | dasm_put(Dst, 5474, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, Dt7(->ffid), FRAME_VARG, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), -8+LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc)); | 7160 | dasm_put(Dst, 5475, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, Dt7(->ffid), FRAME_VARG, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), -8+LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc)); |
7160 | dasm_put(Dst, 5543, PC2PROTO(k), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE); | 7161 | dasm_put(Dst, 5544, PC2PROTO(k), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE); |
7161 | break; | 7162 | break; |
7162 | 7163 | ||
7163 | case BC_ITERC: | 7164 | case BC_ITERC: |
7164 | dasm_put(Dst, 5559, LJ_TFUNC, -24+LJ_ENDIAN_SELECT(4,0), -24+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc)); | 7165 | dasm_put(Dst, 5560, LJ_TFUNC, -24+LJ_ENDIAN_SELECT(4,0), -24+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc)); |
7165 | break; | 7166 | break; |
7166 | 7167 | ||
7167 | case BC_ITERN: | 7168 | case BC_ITERN: |
7168 | #if LJ_HASJIT | 7169 | #if LJ_HASJIT |
7169 | #endif | 7170 | #endif |
7170 | dasm_put(Dst, 5594, -16+LJ_ENDIAN_SELECT(0,4), -8+LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt6(->node), LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), DtB(->key), (-(BCBIAS_J*4 >> 16) & 65535)); | 7171 | dasm_put(Dst, 5595, -16+LJ_ENDIAN_SELECT(0,4), -8+LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt6(->node), LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), DtB(->key), (-(BCBIAS_J*4 >> 16) & 65535)); |
7171 | dasm_put(Dst, 5676, -8+LJ_ENDIAN_SELECT(0,4)); | 7172 | dasm_put(Dst, 5677, -8+LJ_ENDIAN_SELECT(0,4)); |
7172 | break; | 7173 | break; |
7173 | 7174 | ||
7174 | case BC_ISNEXT: | 7175 | case BC_ISNEXT: |
7175 | dasm_put(Dst, 5679, -24+LJ_ENDIAN_SELECT(4,0), -24+LJ_ENDIAN_SELECT(0,4), -16+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(4,0), LJ_TFUNC, -LJ_TTAB, Dt8(->ffid), -LJ_TNIL, -FF_next_N, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(0,4), BC_JMP, BC_ITERC, -4+LJ_ENDIAN_SELECT(0,3), LJ_ENDIAN_SELECT(0,3)); | 7176 | dasm_put(Dst, 5680, -24+LJ_ENDIAN_SELECT(4,0), -24+LJ_ENDIAN_SELECT(0,4), -16+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(4,0), LJ_TFUNC, -LJ_TTAB, Dt8(->ffid), -LJ_TNIL, -FF_next_N, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(0,4), BC_JMP, BC_ITERC, -4+LJ_ENDIAN_SELECT(0,3), LJ_ENDIAN_SELECT(0,3)); |
7176 | break; | 7177 | break; |
7177 | 7178 | ||
7178 | case BC_VARG: | 7179 | case BC_VARG: |
7179 | dasm_put(Dst, 5736, LJ_ENDIAN_SELECT(-4,-8), FRAME_VARG, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), Dt1(->maxstack), DISPATCH_GOT(lj_state_growstack), Dt1(->top), Dt1(->base), Dt1(->base)); | 7180 | dasm_put(Dst, 5737, LJ_ENDIAN_SELECT(-4,-8), FRAME_VARG, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), Dt1(->maxstack), DISPATCH_GOT(lj_state_growstack), Dt1(->top), Dt1(->base), Dt1(->base)); |
7180 | dasm_put(Dst, 5823); | 7181 | dasm_put(Dst, 5824); |
7181 | break; | 7182 | break; |
7182 | 7183 | ||
7183 | /* -- Returns ----------------------------------------------------------- */ | 7184 | /* -- Returns ----------------------------------------------------------- */ |
7184 | 7185 | ||
7185 | case BC_RETM: | 7186 | case BC_RETM: |
7186 | dasm_put(Dst, 5825); | 7187 | dasm_put(Dst, 5826); |
7187 | break; | 7188 | break; |
7188 | 7189 | ||
7189 | case BC_RET: | 7190 | case BC_RET: |
7190 | dasm_put(Dst, 5827, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k), LJ_ENDIAN_SELECT(4,0), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8)); | 7191 | dasm_put(Dst, 5828, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k), LJ_ENDIAN_SELECT(4,0), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8)); |
7191 | break; | 7192 | break; |
7192 | 7193 | ||
7193 | case BC_RET0: case BC_RET1: | 7194 | case BC_RET0: case BC_RET1: |
7194 | dasm_put(Dst, 5899, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG); | 7195 | dasm_put(Dst, 5900, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG); |
7195 | if (op == BC_RET1) { | 7196 | if (op == BC_RET1) { |
7196 | dasm_put(Dst, 5912); | 7197 | dasm_put(Dst, 5913); |
7197 | } | 7198 | } |
7198 | dasm_put(Dst, 5914); | 7199 | dasm_put(Dst, 5915); |
7199 | if (op == BC_RET1) { | 7200 | if (op == BC_RET1) { |
7200 | dasm_put(Dst, 5919); | 7201 | dasm_put(Dst, 5920); |
7201 | } | 7202 | } |
7202 | dasm_put(Dst, 5921, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k)); | 7203 | dasm_put(Dst, 5922, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k)); |
7203 | if (op == BC_RET1) { | 7204 | if (op == BC_RET1) { |
7204 | dasm_put(Dst, 5949, LJ_ENDIAN_SELECT(4,0)); | 7205 | dasm_put(Dst, 5950, LJ_ENDIAN_SELECT(4,0)); |
7205 | } else { | 7206 | } else { |
7206 | dasm_put(Dst, 5952, -8+LJ_ENDIAN_SELECT(4,0)); | 7207 | dasm_put(Dst, 5953, -8+LJ_ENDIAN_SELECT(4,0)); |
7207 | } | 7208 | } |
7208 | break; | 7209 | break; |
7209 | 7210 | ||
@@ -7211,7 +7212,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
7211 | 7212 | ||
7212 | case BC_FORL: | 7213 | case BC_FORL: |
7213 | #if LJ_HASJIT | 7214 | #if LJ_HASJIT |
7214 | dasm_put(Dst, 5955, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT); | 7215 | dasm_put(Dst, 5956, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT); |
7215 | #endif | 7216 | #endif |
7216 | break; | 7217 | break; |
7217 | 7218 | ||
@@ -7223,35 +7224,35 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
7223 | case BC_FORI: | 7224 | case BC_FORI: |
7224 | case BC_IFORL: | 7225 | case BC_IFORL: |
7225 | vk = (op == BC_IFORL || op == BC_JFORL); | 7226 | vk = (op == BC_IFORL || op == BC_JFORL); |
7226 | dasm_put(Dst, 5967); | 7227 | dasm_put(Dst, 5968); |
7227 | if (vk) { | 7228 | if (vk) { |
7228 | dasm_put(Dst, 5969, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8+LJ_ENDIAN_SELECT(4,0), FORL_IDX*8); | 7229 | dasm_put(Dst, 5970, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8+LJ_ENDIAN_SELECT(4,0), FORL_IDX*8); |
7229 | } else { | 7230 | } else { |
7230 | dasm_put(Dst, 5981, FORL_IDX*8+LJ_ENDIAN_SELECT(4,0), FORL_STEP*8+LJ_ENDIAN_SELECT(4,0), FORL_STOP*8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_TISNUM, FORL_IDX*8, FORL_STOP*8); | 7231 | dasm_put(Dst, 5982, FORL_IDX*8+LJ_ENDIAN_SELECT(4,0), FORL_STEP*8+LJ_ENDIAN_SELECT(4,0), FORL_STOP*8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_TISNUM, FORL_IDX*8, FORL_STOP*8); |
7231 | } | 7232 | } |
7232 | if (op != BC_JFORL) { | 7233 | if (op != BC_JFORL) { |
7233 | dasm_put(Dst, 6002, (-(BCBIAS_J*4 >> 16) & 65535)); | 7234 | dasm_put(Dst, 6003, (-(BCBIAS_J*4 >> 16) & 65535)); |
7234 | } | 7235 | } |
7235 | dasm_put(Dst, 6006, FORL_EXT*8); | 7236 | dasm_put(Dst, 6007, FORL_EXT*8); |
7236 | if (op == BC_JFORI) { | 7237 | if (op == BC_JFORI) { |
7237 | dasm_put(Dst, 6011, -4+LJ_ENDIAN_SELECT(2,0), BC_JLOOP); | 7238 | dasm_put(Dst, 6012, -4+LJ_ENDIAN_SELECT(2,0), BC_JLOOP); |
7238 | } else if (op == BC_JFORL) { | 7239 | } else if (op == BC_JFORL) { |
7239 | dasm_put(Dst, 6025, BC_JLOOP); | 7240 | dasm_put(Dst, 6026, BC_JLOOP); |
7240 | } else { | 7241 | } else { |
7241 | dasm_put(Dst, 6035); | 7242 | dasm_put(Dst, 6036); |
7242 | if (op == BC_FORI) { | 7243 | if (op == BC_FORI) { |
7243 | dasm_put(Dst, 6039); | 7244 | dasm_put(Dst, 6040); |
7244 | } else { | 7245 | } else { |
7245 | dasm_put(Dst, 6042); | 7246 | dasm_put(Dst, 6043); |
7246 | } | 7247 | } |
7247 | dasm_put(Dst, 6045); | 7248 | dasm_put(Dst, 6046); |
7248 | } | 7249 | } |
7249 | dasm_put(Dst, 6048); | 7250 | dasm_put(Dst, 6049); |
7250 | break; | 7251 | break; |
7251 | 7252 | ||
7252 | case BC_ITERL: | 7253 | case BC_ITERL: |
7253 | #if LJ_HASJIT | 7254 | #if LJ_HASJIT |
7254 | dasm_put(Dst, 6060, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT); | 7255 | dasm_put(Dst, 6061, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT); |
7255 | #endif | 7256 | #endif |
7256 | break; | 7257 | break; |
7257 | 7258 | ||
@@ -7260,40 +7261,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
7260 | break; | 7261 | break; |
7261 | #endif | 7262 | #endif |
7262 | case BC_IITERL: | 7263 | case BC_IITERL: |
7263 | dasm_put(Dst, 6072, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); | 7264 | dasm_put(Dst, 6073, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); |
7264 | if (op == BC_JITERL) { | 7265 | if (op == BC_JITERL) { |
7265 | dasm_put(Dst, 6080, -8+LJ_ENDIAN_SELECT(4,0), BC_JLOOP, -8+LJ_ENDIAN_SELECT(0,4)); | 7266 | dasm_put(Dst, 6081, -8+LJ_ENDIAN_SELECT(4,0), BC_JLOOP, -8+LJ_ENDIAN_SELECT(0,4)); |
7266 | } else { | 7267 | } else { |
7267 | dasm_put(Dst, 6087, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(0,4)); | 7268 | dasm_put(Dst, 6088, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(0,4)); |
7268 | } | 7269 | } |
7269 | dasm_put(Dst, 6097); | 7270 | dasm_put(Dst, 6098); |
7270 | break; | 7271 | break; |
7271 | 7272 | ||
7272 | case BC_LOOP: | 7273 | case BC_LOOP: |
7273 | #if LJ_HASJIT | 7274 | #if LJ_HASJIT |
7274 | dasm_put(Dst, 6110, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT); | 7275 | dasm_put(Dst, 6111, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT); |
7275 | #endif | 7276 | #endif |
7276 | break; | 7277 | break; |
7277 | 7278 | ||
7278 | case BC_ILOOP: | 7279 | case BC_ILOOP: |
7279 | dasm_put(Dst, 6122); | 7280 | dasm_put(Dst, 6123); |
7280 | break; | 7281 | break; |
7281 | 7282 | ||
7282 | case BC_JLOOP: | 7283 | case BC_JLOOP: |
7283 | #if LJ_HASJIT | 7284 | #if LJ_HASJIT |
7284 | dasm_put(Dst, 6134, DISPATCH_J(trace), DISPATCH_GL(vmstate), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), DtD(->mcode), GG_DISP2G+32768); | 7285 | dasm_put(Dst, 6135, DISPATCH_J(trace), DISPATCH_GL(vmstate), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), DtD(->mcode), GG_DISP2G+32768); |
7285 | #endif | 7286 | #endif |
7286 | break; | 7287 | break; |
7287 | 7288 | ||
7288 | case BC_JMP: | 7289 | case BC_JMP: |
7289 | dasm_put(Dst, 6152, (-(BCBIAS_J*4 >> 16) & 65535)); | 7290 | dasm_put(Dst, 6153, (-(BCBIAS_J*4 >> 16) & 65535)); |
7290 | break; | 7291 | break; |
7291 | 7292 | ||
7292 | /* -- Function headers -------------------------------------------------- */ | 7293 | /* -- Function headers -------------------------------------------------- */ |
7293 | 7294 | ||
7294 | case BC_FUNCF: | 7295 | case BC_FUNCF: |
7295 | #if LJ_HASJIT | 7296 | #if LJ_HASJIT |
7296 | dasm_put(Dst, 6169, GG_DISP2HOT, -HOTCOUNT_CALL, GG_DISP2HOT); | 7297 | dasm_put(Dst, 6170, GG_DISP2HOT, -HOTCOUNT_CALL, GG_DISP2HOT); |
7297 | #endif | 7298 | #endif |
7298 | case BC_FUNCV: /* NYI: compiled vararg functions. */ | 7299 | case BC_FUNCV: /* NYI: compiled vararg functions. */ |
7299 | break; | 7300 | break; |
@@ -7303,42 +7304,42 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
7303 | break; | 7304 | break; |
7304 | #endif | 7305 | #endif |
7305 | case BC_IFUNCF: | 7306 | case BC_IFUNCF: |
7306 | dasm_put(Dst, 6181, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k)); | 7307 | dasm_put(Dst, 6182, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k)); |
7307 | if (op != BC_JFUNCF) { | 7308 | if (op != BC_JFUNCF) { |
7308 | dasm_put(Dst, 6192); | 7309 | dasm_put(Dst, 6193); |
7309 | } | 7310 | } |
7310 | dasm_put(Dst, 6195); | 7311 | dasm_put(Dst, 6196); |
7311 | if (op == BC_JFUNCF) { | 7312 | if (op == BC_JFUNCF) { |
7312 | dasm_put(Dst, 6201, BC_JLOOP); | 7313 | dasm_put(Dst, 6202, BC_JLOOP); |
7313 | } else { | 7314 | } else { |
7314 | dasm_put(Dst, 6206); | 7315 | dasm_put(Dst, 6207); |
7315 | } | 7316 | } |
7316 | dasm_put(Dst, 6216, LJ_ENDIAN_SELECT(4,0)); | 7317 | dasm_put(Dst, 6217, LJ_ENDIAN_SELECT(4,0)); |
7317 | break; | 7318 | break; |
7318 | 7319 | ||
7319 | case BC_JFUNCV: | 7320 | case BC_JFUNCV: |
7320 | #if !LJ_HASJIT | 7321 | #if !LJ_HASJIT |
7321 | break; | 7322 | break; |
7322 | #endif | 7323 | #endif |
7323 | dasm_put(Dst, 6223); | 7324 | dasm_put(Dst, 6224); |
7324 | break; /* NYI: compiled vararg functions. */ | 7325 | break; /* NYI: compiled vararg functions. */ |
7325 | 7326 | ||
7326 | case BC_IFUNCV: | 7327 | case BC_IFUNCV: |
7327 | dasm_put(Dst, 6225, Dt1(->maxstack), LJ_ENDIAN_SELECT(0,4), 8+FRAME_VARG, -4+PC2PROTO(k), LJ_ENDIAN_SELECT(4,0), -4+PC2PROTO(numparams), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), 8+LJ_ENDIAN_SELECT(0,4), 8+LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0)); | 7328 | dasm_put(Dst, 6226, Dt1(->maxstack), LJ_ENDIAN_SELECT(0,4), 8+FRAME_VARG, -4+PC2PROTO(k), LJ_ENDIAN_SELECT(4,0), -4+PC2PROTO(numparams), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), 8+LJ_ENDIAN_SELECT(0,4), 8+LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0)); |
7328 | break; | 7329 | break; |
7329 | 7330 | ||
7330 | case BC_FUNCC: | 7331 | case BC_FUNCC: |
7331 | case BC_FUNCCW: | 7332 | case BC_FUNCCW: |
7332 | if (op == BC_FUNCC) { | 7333 | if (op == BC_FUNCC) { |
7333 | dasm_put(Dst, 6280, Dt8(->f)); | 7334 | dasm_put(Dst, 6281, Dt8(->f)); |
7334 | } else { | 7335 | } else { |
7335 | dasm_put(Dst, 6283, DISPATCH_GL(wrapf)); | 7336 | dasm_put(Dst, 6284, DISPATCH_GL(wrapf)); |
7336 | } | 7337 | } |
7337 | dasm_put(Dst, 6286, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); | 7338 | dasm_put(Dst, 6287, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); |
7338 | if (op == BC_FUNCCW) { | 7339 | if (op == BC_FUNCCW) { |
7339 | dasm_put(Dst, 6298, Dt8(->f)); | 7340 | dasm_put(Dst, 6299, Dt8(->f)); |
7340 | } | 7341 | } |
7341 | dasm_put(Dst, 6301, DISPATCH_GL(vmstate), Dt1(->base), Dt1(->top), ~LJ_VMST_INTERP, LJ_ENDIAN_SELECT(-4,-8), DISPATCH_GL(vmstate)); | 7342 | dasm_put(Dst, 6302, DISPATCH_GL(vmstate), Dt1(->base), Dt1(->top), ~LJ_VMST_INTERP, LJ_ENDIAN_SELECT(-4,-8), DISPATCH_GL(vmstate)); |
7342 | break; | 7343 | break; |
7343 | 7344 | ||
7344 | /* ---------------------------------------------------------------------- */ | 7345 | /* ---------------------------------------------------------------------- */ |
@@ -7358,7 +7359,7 @@ static int build_backend(BuildCtx *ctx) | |||
7358 | 7359 | ||
7359 | build_subroutines(ctx); | 7360 | build_subroutines(ctx); |
7360 | 7361 | ||
7361 | dasm_put(Dst, 6322); | 7362 | dasm_put(Dst, 6323); |
7362 | for (op = 0; op < BC__MAX; op++) | 7363 | for (op = 0; op < BC__MAX; op++) |
7363 | build_ins(ctx, (BCOp)op, op); | 7364 | build_ins(ctx, (BCOp)op, op); |
7364 | 7365 | ||