aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2012-03-30 01:33:07 +0200
committerMike Pall <mike>2012-03-30 01:33:38 +0200
commitaaaf0e0f5fe573e7c089ece1bd491a8f8b8b3e9a (patch)
tree52c8663642acd744fd0682c9249c2836039cfe7e /src
parent1980ee95b0d5343822d6c92abf9f8feb15ac9764 (diff)
downloadluajit-aaaf0e0f5fe573e7c089ece1bd491a8f8b8b3e9a.tar.gz
luajit-aaaf0e0f5fe573e7c089ece1bd491a8f8b8b3e9a.tar.bz2
luajit-aaaf0e0f5fe573e7c089ece1bd491a8f8b8b3e9a.zip
MIPS: Interpreter/JIT integration
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_mips.dasc127
-rw-r--r--src/buildvm_mips.h669
2 files changed, 577 insertions, 219 deletions
diff --git a/src/buildvm_mips.dasc b/src/buildvm_mips.dasc
index 6b3103dd..9e984189 100644
--- a/src/buildvm_mips.dasc
+++ b/src/buildvm_mips.dasc
@@ -270,7 +270,13 @@
270|.macro jmp_extern; jr CFUNCADDR; .endmacro 270|.macro jmp_extern; jr CFUNCADDR; .endmacro
271| 271|
272|.macro hotcheck, delta, target 272|.macro hotcheck, delta, target
273|NYI 273| srl TMP1, PC, 1
274| andi TMP1, TMP1, 126
275| addu TMP1, TMP1, DISPATCH
276| lhu TMP2, GG_DISP2HOT(TMP1)
277| addiu TMP2, TMP2, -delta
278| bltz TMP2, target
279|. sh TMP2, GG_DISP2HOT(TMP1)
274|.endmacro 280|.endmacro
275| 281|
276|.macro hotloop 282|.macro hotloop
@@ -1995,7 +2001,21 @@ static void build_subroutines(BuildCtx *ctx)
1995 | 2001 |
1996 |->vm_hotloop: // Hot loop counter underflow. 2002 |->vm_hotloop: // Hot loop counter underflow.
1997#if LJ_HASJIT 2003#if LJ_HASJIT
1998 |NYI 2004 | lw LFUNC:TMP1, FRAME_FUNC(BASE)
2005 | addiu CARG1, DISPATCH, GG_DISP2J
2006 | sw PC, SAVE_PC
2007 | lw TMP1, LFUNC:TMP1->pc
2008 | move CARG2, PC
2009 | sw L, DISPATCH_J(L)(DISPATCH)
2010 | lbu TMP1, PC2PROTO(framesize)(TMP1)
2011 | load_got lj_trace_hot
2012 | sw BASE, L->base
2013 | sll TMP1, TMP1, 3
2014 | addu TMP1, BASE, TMP1
2015 | call_intern lj_trace_hot // (jit_State *J, const BCIns *pc)
2016 |. sw TMP1, L->top
2017 | b <3
2018 |. nop
1999#endif 2019#endif
2000 | 2020 |
2001 |->vm_callhook: // Dispatch target for call hooks. 2021 |->vm_callhook: // Dispatch target for call hooks.
@@ -2031,13 +2051,102 @@ static void build_subroutines(BuildCtx *ctx)
2031 |//-- Trace exit handler ------------------------------------------------- 2051 |//-- Trace exit handler -------------------------------------------------
2032 |//----------------------------------------------------------------------- 2052 |//-----------------------------------------------------------------------
2033 | 2053 |
2054 |.macro savex_, a, b
2055 | sdc1 f..a, 16+a*8(sp)
2056 | sw r..a, 16+32*8+a*4(sp)
2057 | sw r..b, 16+32*8+b*4(sp)
2058 |.endmacro
2059 |
2034 |->vm_exit_handler: 2060 |->vm_exit_handler:
2035#if LJ_HASJIT 2061#if LJ_HASJIT
2036 |NYI 2062 | addiu sp, sp, -(16+32*8+32*4)
2063 | savex_ 0, 1
2064 | savex_ 2, 3
2065 | savex_ 4, 5
2066 | savex_ 6, 7
2067 | savex_ 8, 9
2068 | savex_ 10, 11
2069 | savex_ 12, 13
2070 | savex_ 14, 15
2071 | savex_ 16, 17
2072 | savex_ 18, 19
2073 | savex_ 20, 21
2074 | savex_ 22, 23
2075 | savex_ 24, 25
2076 | savex_ 26, 27
2077 | sdc1 f28, 16+28*8(sp)
2078 | sw r28, 16+32*8+28*4(sp)
2079 | sdc1 f30, 16+30*8(sp)
2080 | sw r30, 16+32*8+30*4(sp)
2081 | sw r0, 16+32*8+31*4(sp) // Clear RID_TMP.
2082 | li_vmstate EXIT
2083 | addiu TMP2, sp, 16+32*8+32*4 // Recompute original value of sp.
2084 | addiu DISPATCH, JGL, -GG_DISP2G-32768
2085 | lw TMP1, 0(TMP2) // Load exit number.
2086 | st_vmstate
2087 | sw TMP2, 16+32*8+29*4(sp) // Store sp in RID_SP.
2088 | lw L, DISPATCH_GL(jit_L)(DISPATCH)
2089 | lw BASE, DISPATCH_GL(jit_base)(DISPATCH)
2090 | load_got lj_trace_exit
2091 | sw L, DISPATCH_J(L)(DISPATCH)
2092 | sw ra, DISPATCH_J(parent)(DISPATCH) // Store trace number.
2093 | sw TMP1, DISPATCH_J(exitno)(DISPATCH) // Store exit number.
2094 | addiu CARG1, DISPATCH, GG_DISP2J
2095 | sw BASE, L->base
2096 | call_intern lj_trace_exit // (jit_State *J, ExitState *ex)
2097 |. addiu CARG2, sp, 16
2098 | // Returns MULTRES (unscaled) or negated error code.
2099 | lw TMP1, L->cframe
2100 | li AT, -4
2101 | lw BASE, L->base
2102 | and sp, TMP1, AT
2103 | lw PC, SAVE_PC // Get SAVE_PC.
2104 | b >1
2105 |. sw L, SAVE_L // Set SAVE_L (on-trace resume/yield).
2037#endif 2106#endif
2038 |->vm_exit_interp: 2107 |->vm_exit_interp:
2039#if LJ_HASJIT 2108#if LJ_HASJIT
2040 |NYI 2109 | // CRET1 = MULTRES or negated error code, BASE, PC and JGL set.
2110 | lw L, SAVE_L
2111 | addiu DISPATCH, JGL, -GG_DISP2G-32768
2112 |1:
2113 | bltz CRET1, >3 // Check for error from exit.
2114 |. lw LFUNC:TMP1, FRAME_FUNC(BASE)
2115 | lui TMP3, 0x59c0 // TOBIT = 2^52 + 2^51 (float).
2116 | sll MULTRES, CRET1, 3
2117 | li TISNIL, LJ_TNIL
2118 | sw MULTRES, SAVE_MULTRES
2119 | mtc1 TMP3, TOBIT
2120 | lw TMP1, LFUNC:TMP1->pc
2121 | sw r0, DISPATCH_GL(jit_L)(DISPATCH)
2122 | lw KBASE, PC2PROTO(k)(TMP1)
2123 | cvt.d.s TOBIT, TOBIT
2124 | // Modified copy of ins_next which handles function header dispatch, too.
2125 | lw INS, 0(PC)
2126 | addiu PC, PC, 4
2127 | // Assumes TISNIL == ~LJ_VMST_INTERP == -1
2128 | sw TISNIL, DISPATCH_GL(vmstate)(DISPATCH)
2129 | decode_OP4a TMP1, INS
2130 | decode_OP4b TMP1
2131 | sltiu TMP2, TMP1, BC_FUNCF*4 // Function header?
2132 | addu TMP0, DISPATCH, TMP1
2133 | decode_RD8a RD, INS
2134 | lw AT, 0(TMP0)
2135 | decode_RA8a RA, INS
2136 | beqz TMP2, >2
2137 |. decode_RA8b RA
2138 | jr AT
2139 |. decode_RD8b RD
2140 |2:
2141 | addiu RC, MULTRES, -8
2142 | jr AT
2143 |. add RA, RA, BASE
2144 |
2145 |3: // Rethrow error from the right C frame.
2146 | load_got lj_err_throw
2147 | negu CARG2, CRET1
2148 | call_intern lj_err_throw // (lua_State *L, int errcode)
2149 |. move CARG1, L
2041#endif 2150#endif
2042 | 2151 |
2043 |//----------------------------------------------------------------------- 2152 |//-----------------------------------------------------------------------
@@ -3739,13 +3848,13 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
3739 if (op == BC_JFORI) { 3848 if (op == BC_JFORI) {
3740 | li TMP1, 1 3849 | li TMP1, 1
3741 | li TMP2, 1 3850 | li TMP2, 1
3742 | lw INS, -4(PC) 3851 | addu TMP0, RD, TMP0
3743 | slt TMP3, TMP3, r0 3852 | slt TMP3, TMP3, r0
3744 | movt TMP1, r0, 0 3853 | movf TMP1, r0, 0
3745 | movt TMP2, r0, 1 3854 | addu PC, PC, TMP0
3746 | addu PC, RD, TMP0 3855 | movf TMP2, r0, 1
3856 | lhu RD, -4+OFS_RD(PC)
3747 | movn TMP1, TMP2, TMP3 3857 | movn TMP1, TMP2, TMP3
3748 | decode_RD8a RD, INS
3749 | bnez TMP1, =>BC_JLOOP 3858 | bnez TMP1, =>BC_JLOOP
3750 |. decode_RD8b RD 3859 |. decode_RD8b RD
3751 } else if (op == BC_JFORL) { 3860 } else if (op == BC_JFORL) {
diff --git a/src/buildvm_mips.h b/src/buildvm_mips.h
index 948f7d49..7c0f90bf 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
15static const unsigned int build_actionlist[6076] = { 15static const unsigned int build_actionlist[6323] = {
160xff010001, 160xff010001,
170xff060014, 170xff060014,
180x32410000, 180x32410000,
@@ -3060,7 +3060,30 @@ static const unsigned int build_actionlist[6076] = {
30600xff098200, 30600xff098200,
30610xff060090, 30610xff060090,
30620xff000000, 30620xff000000,
30630xf0f0f0f0, 30630x8e0d0000,
30640xff098200,
30650x26640000,
30660xff098200,
30670xafb20014,
30680x8dad0000,
30690xff098200,
30700x02402821,
30710xae740000,
30720xff098200,
30730x91ad0000,
30740xff098200,
30750x8e790000,
30760xff098200,
30770xae900000,
30780xff098200,
30790x000d68c0,
30800x020d6821,
30810x0320f809,
30820xae8d0000,
30830xff098200,
30840x10000000,
30850xff05080d,
30860x00000000,
30640xff000000, 30870xff000000,
30650xff060091, 30880xff060091,
30660xff000000, 30890xff000000,
@@ -3097,11 +3120,194 @@ static const unsigned int build_actionlist[6076] = {
30970x8e4bfffc, 31200x8e4bfffc,
30980xff060093, 31210xff060093,
30990xff000000, 31220xff000000,
31000xf0f0f0f0, 31230x27bd0000,
31240xff098200,
31250xf7a00000,
31260xff098200,
31270xafa00000,
31280xff098200,
31290xafa10000,
31300xff098200,
31310xf7a20000,
31320xff098200,
31330xafa20000,
31340xff098200,
31350xafa30000,
31360xff098200,
31370xf7a40000,
31380xff098200,
31390xafa40000,
31400xff098200,
31410xafa50000,
31420xff098200,
31430xf7a60000,
31440xff098200,
31450xafa60000,
31460xff098200,
31470xafa70000,
31480xff098200,
31490xf7a80000,
31500xff098200,
31510xafa80000,
31520xff098200,
31530xafa90000,
31540xff098200,
31550xf7aa0000,
31560xff098200,
31570xafaa0000,
31580xff098200,
31590xafab0000,
31600xff098200,
31610xf7ac0000,
31620xff098200,
31630xafac0000,
31640xff098200,
31650xafad0000,
31660xff098200,
31670xf7ae0000,
31680xff098200,
31690xff000000,
31700xafae0000,
31710xff098200,
31720xafaf0000,
31730xff098200,
31740xf7b00000,
31750xff098200,
31760xafb00000,
31770xff098200,
31780xafb10000,
31790xff098200,
31800xf7b20000,
31810xff098200,
31820xafb20000,
31830xff098200,
31840xafb30000,
31850xff098200,
31860xf7b40000,
31870xff098200,
31880xafb40000,
31890xff098200,
31900xafb50000,
31910xff098200,
31920xf7b60000,
31930xff098200,
31940xafb60000,
31950xff098200,
31960xafb70000,
31970xff098200,
31980xf7b80000,
31990xff098200,
32000xafb80000,
32010xff098200,
32020xafb90000,
32030xff098200,
32040xf7ba0000,
32050xff098200,
32060xafba0000,
32070xff098200,
32080xafbb0000,
32090xff098200,
32100xf7bc0000,
32110xff098200,
32120xafbc0000,
32130xff098200,
32140xf7be0000,
32150xff098200,
32160xff000000,
32170xafbe0000,
32180xff098200,
32190xafa00000,
32200xff098200,
32210x240c0000,
32220xff098200,
32230x27ae0000,
32240xff098200,
32250x27d30000,
32260xff098200,
32270x8dcd0000,
32280xae6c0000,
32290xff098200,
32300xafae0000,
32310xff098200,
32320x8e740000,
32330xff098200,
32340x8e700000,
32350xff098200,
32360x8e790000,
32370xff098200,
32380xae740000,
32390xff098200,
32400xae7f0000,
32410xff098200,
32420xae6d0000,
32430xff098200,
32440x26640000,
32450xff098200,
32460xae900000,
32470xff098200,
32480x0320f809,
32490x27a50010,
32500x8e8d0000,
32510xff098200,
32520x2401fffc,
32530x8e900000,
32540xff098200,
32550x01a1e824,
32560x8fb20014,
32570x10000000,
32580xff050801,
32590xafb40070,
31010xff000000, 32600xff000000,
31020xff060094, 32610xff060094,
31030xff000000, 32620xff000000,
31040xf0f0f0f0, 32630x8fb40070,
32640x27d30000,
32650xff098200,
32660xff06000b,
32670x04400000,
32680xff050803,
32690x8e0d0000,
32700xff098200,
32710x3c0f59c0,
32720x0002a8c0,
32730x241e0000,
32740xff098200,
32750xafb50010,
32760x448ff000,
32770x8dad0000,
32780xff098200,
32790xae600000,
32800xff098200,
32810x8db10000,
32820xff098200,
32830x4600f7a1,
32840x8e4b0000,
32850x26520004,
32860xae7e0000,
32870xff098200,
32880x316d00ff,
32890x000d6880,
32900x2dae0000,
32910xff098200,
32920x026d6021,
32930x000b5402,
32940x8d810000,
32950x000bb942,
32960x11c00000,
32970xff050802,
32980x32f707f8,
32990x00200008,
33000x000a50c0,
33010xff06000c,
33020x26a9fff8,
33030x00200008,
33040x02f0b820,
33050xff06000d,
33060x8e790000,
33070xff098200,
33080x00022823,
33090x0320f809,
33100x02802021,
31050xff000000, 33110xff000000,
31060xff06005b, 33120xff06005b,
31070x3c0c4330, 33130x3c0c4330,
@@ -5762,7 +5968,17 @@ static const unsigned int build_actionlist[6076] = {
57620xadde0000, 59680xadde0000,
57630xff098200, 59690xff098200,
57640xff000000, 59700xff000000,
57650xf0f0f0f0, 59710x00126842,
59720x31ad007e,
59730x01b36821,
59740x95ae0000,
59750xff098200,
59760x25ce0000,
59770xff098200,
59780x05c00000,
59790xff050890,
59800xa5ae0000,
59810xff098200,
57660xff000000, 59820xff000000,
57670x0217b821, 59830x0217b821,
57680xff000000, 59840xff000000,
@@ -5810,13 +6026,14 @@ static const unsigned int build_actionlist[6076] = {
58100xff000000, 60260xff000000,
58110x240d0001, 60270x240d0001,
58120x240e0001, 60280x240e0001,
58130x8e4bfffc, 60290x014c6021,
58140x01e0782a, 60300x01e0782a,
58150x00016801, 60310x00006801,
58160x00057001, 60320x024c9021,
58170x014c9021, 60330x00047001,
60340x964a0000,
60350xff098200,
58180x01cf680b, 60360x01cf680b,
58190x000b5402,
58200x15a00000, 60370x15a00000,
58210xff070800, 60380xff070800,
58220x000a50c0, 60390x000a50c0,
@@ -5856,7 +6073,17 @@ static const unsigned int build_actionlist[6076] = {
58560x00200008, 60730x00200008,
58570x32f707f8, 60740x32f707f8,
58580xff000000, 60750xff000000,
58590xf0f0f0f0, 60760x00126842,
60770x31ad007e,
60780x01b36821,
60790x95ae0000,
60800xff098200,
60810x25ce0000,
60820xff098200,
60830x05c00000,
60840xff050890,
60850xa5ae0000,
60860xff098200,
58600xff000000, 60870xff000000,
58610x0217b821, 60880x0217b821,
58620x8eed0000, 60890x8eed0000,
@@ -5896,7 +6123,17 @@ static const unsigned int build_actionlist[6076] = {
58960x00200008, 61230x00200008,
58970x32f707f8, 61240x32f707f8,
58980xff000000, 61250xff000000,
58990xf0f0f0f0, 61260x00126842,
61270x31ad007e,
61280x01b36821,
61290x95ae0000,
61300xff098200,
61310x25ce0000,
61320xff098200,
61330x05c00000,
61340xff050890,
61350xa5ae0000,
61360xff098200,
59000xff000000, 61370xff000000,
59010x8e4b0000, 61380x8e4b0000,
59020x26520004, 61390x26520004,
@@ -5945,7 +6182,17 @@ static const unsigned int build_actionlist[6076] = {
59450x00200008, 61820x00200008,
59460x32f707f8, 61830x32f707f8,
59470xff000000, 61840xff000000,
59480xf0f0f0f0, 61850x00126842,
61860x31ad007e,
61870x01b36821,
61880x95ae0000,
61890xff098200,
61900x25ce0000,
61910xff098200,
61920x05c00000,
61930xff050892,
61940xa5ae0000,
61950xff098200,
59490xff000000, 61960xff000000,
59500x8e8e0000, 61970x8e8e0000,
59510xff098200, 61980xff098200,
@@ -6496,42 +6743,44 @@ static void build_subroutines(BuildCtx *ctx)
6496 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)); 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));
6497 dasm_put(Dst, 3028, GG_DISP2STATIC, -24+LJ_ENDIAN_SELECT(0,4)); 6744 dasm_put(Dst, 3028, GG_DISP2STATIC, -24+LJ_ENDIAN_SELECT(0,4));
6498#if LJ_HASJIT 6745#if LJ_HASJIT
6499 dasm_put(Dst, 3047); 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));
6500#endif 6747#endif
6501 dasm_put(Dst, 3049); 6748 dasm_put(Dst, 3072);
6502#if LJ_HASJIT 6749#if LJ_HASJIT
6503 dasm_put(Dst, 3051); 6750 dasm_put(Dst, 3074);
6504#endif 6751#endif
6505 dasm_put(Dst, 3054); 6752 dasm_put(Dst, 3077);
6506#if LJ_HASJIT 6753#if LJ_HASJIT
6507 dasm_put(Dst, 3057); 6754 dasm_put(Dst, 3080);
6508#endif 6755#endif
6509 dasm_put(Dst, 3060, DISPATCH_GOT(lj_dispatch_call), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4)); 6756 dasm_put(Dst, 3083, DISPATCH_GOT(lj_dispatch_call), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4));
6510#if LJ_HASJIT 6757#if LJ_HASJIT
6511 dasm_put(Dst, 3084); 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, 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, 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));
6512#endif 6761#endif
6513 dasm_put(Dst, 3086); 6762 dasm_put(Dst, 3245);
6514#if LJ_HASJIT 6763#if LJ_HASJIT
6515 dasm_put(Dst, 3088); 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));
6516#endif 6765#endif
6517 dasm_put(Dst, 3090); 6766 dasm_put(Dst, 3296);
6518#if LJ_HASJIT 6767#if LJ_HASJIT
6519 dasm_put(Dst, 3138); 6768 dasm_put(Dst, 3344);
6520#endif 6769#endif
6521 dasm_put(Dst, 3161); 6770 dasm_put(Dst, 3367);
6522#if LJ_HASFFI 6771#if LJ_HASFFI
6523#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V) 6772#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V)
6524 dasm_put(Dst, 3163, 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])); 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]));
6525 dasm_put(Dst, 3211, 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)); 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));
6526#endif 6775#endif
6527 dasm_put(Dst, 3255); 6776 dasm_put(Dst, 3461);
6528#if LJ_HASFFI 6777#if LJ_HASFFI
6529 dasm_put(Dst, 3257, 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])); 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]));
6530#endif 6779#endif
6531 dasm_put(Dst, 3281); 6780 dasm_put(Dst, 3487);
6532#if LJ_HASFFI 6781#if LJ_HASFFI
6533#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) 6782#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
6534 dasm_put(Dst, 3283, 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])); 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]));
6535#endif 6784#endif
6536} 6785}
6537 6786
@@ -6539,7 +6788,7 @@ static void build_subroutines(BuildCtx *ctx)
6539static void build_ins(BuildCtx *ctx, BCOp op, int defop) 6788static void build_ins(BuildCtx *ctx, BCOp op, int defop)
6540{ 6789{
6541 int vk = 0; 6790 int vk = 0;
6542 dasm_put(Dst, 3339, defop); 6791 dasm_put(Dst, 3545, defop);
6543 6792
6544 switch (op) { 6793 switch (op) {
6545 6794
@@ -6548,138 +6797,138 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
6548 /* Remember: all ops branch for a true comparison, fall through otherwise. */ 6797 /* Remember: all ops branch for a true comparison, fall through otherwise. */
6549 6798
6550 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: 6799 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
6551 dasm_put(Dst, 3341, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535)); 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));
6552 if (op == BC_ISLT || op == BC_ISGE) { 6801 if (op == BC_ISLT || op == BC_ISGE) {
6553 dasm_put(Dst, 3364); 6802 dasm_put(Dst, 3570);
6554 } else { 6803 } else {
6555 dasm_put(Dst, 3366); 6804 dasm_put(Dst, 3572);
6556 } 6805 }
6557 if (op == BC_ISLT || op == BC_ISLE) { 6806 if (op == BC_ISLT || op == BC_ISLE) {
6558 dasm_put(Dst, 3368); 6807 dasm_put(Dst, 3574);
6559 } else { 6808 } else {
6560 dasm_put(Dst, 3370); 6809 dasm_put(Dst, 3576);
6561 } 6810 }
6562 dasm_put(Dst, 3372); 6811 dasm_put(Dst, 3578);
6563 break; 6812 break;
6564 6813
6565 case BC_ISEQV: case BC_ISNEV: 6814 case BC_ISEQV: case BC_ISNEV:
6566 vk = op == BC_ISEQV; 6815 vk = op == BC_ISEQV;
6567 dasm_put(Dst, 3386, 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); 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);
6568 if (vk) { 6817 if (vk) {
6569 dasm_put(Dst, 3410); 6818 dasm_put(Dst, 3616);
6570 } else { 6819 } else {
6571 dasm_put(Dst, 3412); 6820 dasm_put(Dst, 3618);
6572 } 6821 }
6573 dasm_put(Dst, 3414, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4)); 6822 dasm_put(Dst, 3620, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4));
6574 if (LJ_HASFFI) { 6823 if (LJ_HASFFI) {
6575 dasm_put(Dst, 3433, LJ_TCDATA); 6824 dasm_put(Dst, 3639, LJ_TCDATA);
6576 } 6825 }
6577 dasm_put(Dst, 3438, LJ_TISPRI); 6826 dasm_put(Dst, 3644, LJ_TISPRI);
6578 if (LJ_HASFFI) { 6827 if (LJ_HASFFI) {
6579 dasm_put(Dst, 3441); 6828 dasm_put(Dst, 3647);
6580 } 6829 }
6581 dasm_put(Dst, 3444, LJ_TISTABUD+1); 6830 dasm_put(Dst, 3650, LJ_TISTABUD+1);
6582 if (vk) { 6831 if (vk) {
6583 dasm_put(Dst, 3455); 6832 dasm_put(Dst, 3661);
6584 } else { 6833 } else {
6585 dasm_put(Dst, 3457); 6834 dasm_put(Dst, 3663);
6586 } 6835 }
6587 dasm_put(Dst, 3459, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq, 1-vk); 6836 dasm_put(Dst, 3665, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq, 1-vk);
6588 break; 6837 break;
6589 6838
6590 case BC_ISEQS: case BC_ISNES: 6839 case BC_ISEQS: case BC_ISNES:
6591 vk = op == BC_ISEQS; 6840 vk = op == BC_ISEQS;
6592 dasm_put(Dst, 3476, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), -4+LJ_ENDIAN_SELECT(2,0)); 6841 dasm_put(Dst, 3682, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), -4+LJ_ENDIAN_SELECT(2,0));
6593 if (LJ_HASFFI) { 6842 if (LJ_HASFFI) {
6594 dasm_put(Dst, 3487, LJ_TCDATA); 6843 dasm_put(Dst, 3693, LJ_TCDATA);
6595 } 6844 }
6596 dasm_put(Dst, 3492, -LJ_TSTR, (-(BCBIAS_J*4 >> 16) & 65535)); 6845 dasm_put(Dst, 3698, -LJ_TSTR, (-(BCBIAS_J*4 >> 16) & 65535));
6597 if (vk) { 6846 if (vk) {
6598 dasm_put(Dst, 3502); 6847 dasm_put(Dst, 3708);
6599 } else { 6848 } else {
6600 dasm_put(Dst, 3504); 6849 dasm_put(Dst, 3710);
6601 } 6850 }
6602 dasm_put(Dst, 3506); 6851 dasm_put(Dst, 3712);
6603 break; 6852 break;
6604 6853
6605 case BC_ISEQN: case BC_ISNEN: 6854 case BC_ISEQN: case BC_ISNEN:
6606 vk = op == BC_ISEQN; 6855 vk = op == BC_ISEQN;
6607 dasm_put(Dst, 3519, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM); 6856 dasm_put(Dst, 3725, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM);
6608 if (LJ_HASFFI) { 6857 if (LJ_HASFFI) {
6609 dasm_put(Dst, 3534); 6858 dasm_put(Dst, 3740);
6610 } else { 6859 } else {
6611 dasm_put(Dst, 3537); 6860 dasm_put(Dst, 3743);
6612 } 6861 }
6613 dasm_put(Dst, 3540); 6862 dasm_put(Dst, 3746);
6614 if (vk) { 6863 if (vk) {
6615 dasm_put(Dst, 3543); 6864 dasm_put(Dst, 3749);
6616 } else { 6865 } else {
6617 dasm_put(Dst, 3547); 6866 dasm_put(Dst, 3753);
6618 } 6867 }
6619 dasm_put(Dst, 3551); 6868 dasm_put(Dst, 3757);
6620 if (LJ_HASFFI) { 6869 if (LJ_HASFFI) {
6621 dasm_put(Dst, 3563, LJ_TCDATA); 6870 dasm_put(Dst, 3769, LJ_TCDATA);
6622 } 6871 }
6623 break; 6872 break;
6624 6873
6625 case BC_ISEQP: case BC_ISNEP: 6874 case BC_ISEQP: case BC_ISNEP:
6626 vk = op == BC_ISEQP; 6875 vk = op == BC_ISEQP;
6627 dasm_put(Dst, 3573, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(2,0)); 6876 dasm_put(Dst, 3779, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(2,0));
6628 if (LJ_HASFFI) { 6877 if (LJ_HASFFI) {
6629 dasm_put(Dst, 3582, LJ_TCDATA); 6878 dasm_put(Dst, 3788, LJ_TCDATA);
6630 } 6879 }
6631 dasm_put(Dst, 3587, (-(BCBIAS_J*4 >> 16) & 65535)); 6880 dasm_put(Dst, 3793, (-(BCBIAS_J*4 >> 16) & 65535));
6632 if (vk) { 6881 if (vk) {
6633 dasm_put(Dst, 3593); 6882 dasm_put(Dst, 3799);
6634 } else { 6883 } else {
6635 dasm_put(Dst, 3595); 6884 dasm_put(Dst, 3801);
6636 } 6885 }
6637 dasm_put(Dst, 3597); 6886 dasm_put(Dst, 3803);
6638 break; 6887 break;
6639 6888
6640 /* -- Unary test and copy ops ------------------------------------------- */ 6889 /* -- Unary test and copy ops ------------------------------------------- */
6641 6890
6642 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: 6891 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
6643 dasm_put(Dst, 3610, LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0)); 6892 dasm_put(Dst, 3816, LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0));
6644 if (op == BC_IST || op == BC_ISF) { 6893 if (op == BC_IST || op == BC_ISF) {
6645 dasm_put(Dst, 3617, LJ_TISTRUECOND, (-(BCBIAS_J*4 >> 16) & 65535)); 6894 dasm_put(Dst, 3823, LJ_TISTRUECOND, (-(BCBIAS_J*4 >> 16) & 65535));
6646 if (op == BC_IST) { 6895 if (op == BC_IST) {
6647 dasm_put(Dst, 3624); 6896 dasm_put(Dst, 3830);
6648 } else { 6897 } else {
6649 dasm_put(Dst, 3626); 6898 dasm_put(Dst, 3832);
6650 } 6899 }
6651 dasm_put(Dst, 3628); 6900 dasm_put(Dst, 3834);
6652 } else { 6901 } else {
6653 dasm_put(Dst, 3630, LJ_TISTRUECOND); 6902 dasm_put(Dst, 3836, LJ_TISTRUECOND);
6654 if (op == BC_ISTC) { 6903 if (op == BC_ISTC) {
6655 dasm_put(Dst, 3634); 6904 dasm_put(Dst, 3840);
6656 } else { 6905 } else {
6657 dasm_put(Dst, 3637); 6906 dasm_put(Dst, 3843);
6658 } 6907 }
6659 dasm_put(Dst, 3640, (-(BCBIAS_J*4 >> 16) & 65535)); 6908 dasm_put(Dst, 3846, (-(BCBIAS_J*4 >> 16) & 65535));
6660 } 6909 }
6661 dasm_put(Dst, 3649); 6910 dasm_put(Dst, 3855);
6662 break; 6911 break;
6663 6912
6664 /* -- Unary ops --------------------------------------------------------- */ 6913 /* -- Unary ops --------------------------------------------------------- */
6665 6914
6666 case BC_MOV: 6915 case BC_MOV:
6667 dasm_put(Dst, 3661); 6916 dasm_put(Dst, 3867);
6668 break; 6917 break;
6669 case BC_NOT: 6918 case BC_NOT:
6670 dasm_put(Dst, 3677, LJ_ENDIAN_SELECT(4,0), LJ_TFALSE, LJ_TISTRUECOND, LJ_TTRUE, LJ_ENDIAN_SELECT(4,0)); 6919 dasm_put(Dst, 3883, LJ_ENDIAN_SELECT(4,0), LJ_TFALSE, LJ_TISTRUECOND, LJ_TTRUE, LJ_ENDIAN_SELECT(4,0));
6671 break; 6920 break;
6672 case BC_UNM: 6921 case BC_UNM:
6673 dasm_put(Dst, 3701, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6922 dasm_put(Dst, 3907, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6674 break; 6923 break;
6675 case BC_LEN: 6924 case BC_LEN:
6676 dasm_put(Dst, 3724, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TSTR, LJ_TTAB, Dt5(->len)); 6925 dasm_put(Dst, 3930, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TSTR, LJ_TTAB, Dt5(->len));
6677#ifdef LUAJIT_ENABLE_LUA52COMPAT 6926#ifdef LUAJIT_ENABLE_LUA52COMPAT
6678 dasm_put(Dst, 3758, Dt6(->metatable)); 6927 dasm_put(Dst, 3964, Dt6(->metatable));
6679#endif 6928#endif
6680 dasm_put(Dst, 3765, DISPATCH_GOT(lj_tab_len)); 6929 dasm_put(Dst, 3971, DISPATCH_GOT(lj_tab_len));
6681#ifdef LUAJIT_ENABLE_LUA52COMPAT 6930#ifdef LUAJIT_ENABLE_LUA52COMPAT
6682 dasm_put(Dst, 3774, Dt6(->nomm), 1<<MM_len); 6931 dasm_put(Dst, 3980, Dt6(->nomm), 1<<MM_len);
6683#endif 6932#endif
6684 break; 6933 break;
6685 6934
@@ -6688,273 +6937,273 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
6688 6937
6689 case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: 6938 case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
6690 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 6939 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6691 dasm_put(Dst, 3786); 6940 dasm_put(Dst, 3992);
6692 switch (vk) { 6941 switch (vk) {
6693 case 0: 6942 case 0:
6694 dasm_put(Dst, 3790, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6943 dasm_put(Dst, 3996, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6695 break; 6944 break;
6696 case 1: 6945 case 1:
6697 dasm_put(Dst, 3799, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6946 dasm_put(Dst, 4005, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6698 break; 6947 break;
6699 default: 6948 default:
6700 dasm_put(Dst, 3808, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); 6949 dasm_put(Dst, 4014, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM);
6701 break; 6950 break;
6702 } 6951 }
6703 dasm_put(Dst, 3822); 6952 dasm_put(Dst, 4028);
6704 break; 6953 break;
6705 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: 6954 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
6706 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 6955 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6707 dasm_put(Dst, 3839); 6956 dasm_put(Dst, 4045);
6708 switch (vk) { 6957 switch (vk) {
6709 case 0: 6958 case 0:
6710 dasm_put(Dst, 3843, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6959 dasm_put(Dst, 4049, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6711 break; 6960 break;
6712 case 1: 6961 case 1:
6713 dasm_put(Dst, 3852, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6962 dasm_put(Dst, 4058, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6714 break; 6963 break;
6715 default: 6964 default:
6716 dasm_put(Dst, 3861, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); 6965 dasm_put(Dst, 4067, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM);
6717 break; 6966 break;
6718 } 6967 }
6719 dasm_put(Dst, 3875); 6968 dasm_put(Dst, 4081);
6720 break; 6969 break;
6721 case BC_MULVN: case BC_MULNV: case BC_MULVV: 6970 case BC_MULVN: case BC_MULNV: case BC_MULVV:
6722 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 6971 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6723 dasm_put(Dst, 3892); 6972 dasm_put(Dst, 4098);
6724 switch (vk) { 6973 switch (vk) {
6725 case 0: 6974 case 0:
6726 dasm_put(Dst, 3896, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6975 dasm_put(Dst, 4102, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6727 break; 6976 break;
6728 case 1: 6977 case 1:
6729 dasm_put(Dst, 3905, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6978 dasm_put(Dst, 4111, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6730 break; 6979 break;
6731 default: 6980 default:
6732 dasm_put(Dst, 3914, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); 6981 dasm_put(Dst, 4120, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM);
6733 break; 6982 break;
6734 } 6983 }
6735 dasm_put(Dst, 3928); 6984 dasm_put(Dst, 4134);
6736 break; 6985 break;
6737 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: 6986 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
6738 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 6987 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6739 dasm_put(Dst, 3945); 6988 dasm_put(Dst, 4151);
6740 switch (vk) { 6989 switch (vk) {
6741 case 0: 6990 case 0:
6742 dasm_put(Dst, 3949, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6991 dasm_put(Dst, 4155, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6743 break; 6992 break;
6744 case 1: 6993 case 1:
6745 dasm_put(Dst, 3958, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6994 dasm_put(Dst, 4164, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6746 break; 6995 break;
6747 default: 6996 default:
6748 dasm_put(Dst, 3967, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); 6997 dasm_put(Dst, 4173, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM);
6749 break; 6998 break;
6750 } 6999 }
6751 dasm_put(Dst, 3981); 7000 dasm_put(Dst, 4187);
6752 break; 7001 break;
6753 case BC_MODVN: 7002 case BC_MODVN:
6754 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 7003 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6755 dasm_put(Dst, 3998); 7004 dasm_put(Dst, 4204);
6756 switch (vk) { 7005 switch (vk) {
6757 case 0: 7006 case 0:
6758 dasm_put(Dst, 4002, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 7007 dasm_put(Dst, 4208, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6759 break; 7008 break;
6760 case 1: 7009 case 1:
6761 dasm_put(Dst, 4011, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 7010 dasm_put(Dst, 4217, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6762 break; 7011 break;
6763 default: 7012 default:
6764 dasm_put(Dst, 4020, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); 7013 dasm_put(Dst, 4226, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM);
6765 break; 7014 break;
6766 } 7015 }
6767 dasm_put(Dst, 4034); 7016 dasm_put(Dst, 4240);
6768 break; 7017 break;
6769 case BC_MODNV: case BC_MODVV: 7018 case BC_MODNV: case BC_MODVV:
6770 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 7019 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6771 dasm_put(Dst, 4056); 7020 dasm_put(Dst, 4262);
6772 switch (vk) { 7021 switch (vk) {
6773 case 0: 7022 case 0:
6774 dasm_put(Dst, 4060, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 7023 dasm_put(Dst, 4266, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6775 break; 7024 break;
6776 case 1: 7025 case 1:
6777 dasm_put(Dst, 4069, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 7026 dasm_put(Dst, 4275, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6778 break; 7027 break;
6779 default: 7028 default:
6780 dasm_put(Dst, 4078, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); 7029 dasm_put(Dst, 4284, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM);
6781 break; 7030 break;
6782 } 7031 }
6783 dasm_put(Dst, 4092); 7032 dasm_put(Dst, 4298);
6784 break; 7033 break;
6785 case BC_POW: 7034 case BC_POW:
6786 dasm_put(Dst, 4099, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, DISPATCH_GOT(pow)); 7035 dasm_put(Dst, 4305, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, DISPATCH_GOT(pow));
6787 break; 7036 break;
6788 7037
6789 case BC_CAT: 7038 case BC_CAT:
6790 dasm_put(Dst, 4135, Dt1(->base), DISPATCH_GOT(lj_meta_cat), Dt1(->base)); 7039 dasm_put(Dst, 4341, Dt1(->base), DISPATCH_GOT(lj_meta_cat), Dt1(->base));
6791 break; 7040 break;
6792 7041
6793 /* -- Constant ops ------------------------------------------------------ */ 7042 /* -- Constant ops ------------------------------------------------------ */
6794 7043
6795 case BC_KSTR: 7044 case BC_KSTR:
6796 dasm_put(Dst, 4170, LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0)); 7045 dasm_put(Dst, 4376, LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0));
6797 break; 7046 break;
6798 case BC_KCDATA: 7047 case BC_KCDATA:
6799#if LJ_HASFFI 7048#if LJ_HASFFI
6800 dasm_put(Dst, 4192, LJ_TCDATA, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0)); 7049 dasm_put(Dst, 4398, LJ_TCDATA, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0));
6801#endif 7050#endif
6802 break; 7051 break;
6803 case BC_KSHORT: 7052 case BC_KSHORT:
6804 dasm_put(Dst, 4214); 7053 dasm_put(Dst, 4420);
6805 break; 7054 break;
6806 case BC_KNUM: 7055 case BC_KNUM:
6807 dasm_put(Dst, 4231); 7056 dasm_put(Dst, 4437);
6808 break; 7057 break;
6809 case BC_KPRI: 7058 case BC_KPRI:
6810 dasm_put(Dst, 4247, LJ_ENDIAN_SELECT(4,0)); 7059 dasm_put(Dst, 4453, LJ_ENDIAN_SELECT(4,0));
6811 break; 7060 break;
6812 case BC_KNIL: 7061 case BC_KNIL:
6813 dasm_put(Dst, 4264, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0)); 7062 dasm_put(Dst, 4470, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0));
6814 break; 7063 break;
6815 7064
6816 /* -- Upvalue and function ops ------------------------------------------ */ 7065 /* -- Upvalue and function ops ------------------------------------------ */
6817 7066
6818 case BC_UGET: 7067 case BC_UGET:
6819 dasm_put(Dst, 4288, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v)); 7068 dasm_put(Dst, 4494, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v));
6820 break; 7069 break;
6821 case BC_USETV: 7070 case BC_USETV:
6822 dasm_put(Dst, 4311, 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); 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);
6823 break; 7072 break;
6824 case BC_USETS: 7073 case BC_USETS:
6825 dasm_put(Dst, 4371, 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); 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);
6826 break; 7075 break;
6827 case BC_USETN: 7076 case BC_USETN:
6828 dasm_put(Dst, 4426, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v)); 7077 dasm_put(Dst, 4632, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v));
6829 break; 7078 break;
6830 case BC_USETP: 7079 case BC_USETP:
6831 dasm_put(Dst, 4449, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v), LJ_ENDIAN_SELECT(4,0)); 7080 dasm_put(Dst, 4655, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v), LJ_ENDIAN_SELECT(4,0));
6832 break; 7081 break;
6833 7082
6834 case BC_UCLO: 7083 case BC_UCLO:
6835 dasm_put(Dst, 4473, Dt1(->openupval), (-(BCBIAS_J*4 >> 16) & 65535), DISPATCH_GOT(lj_func_closeuv), Dt1(->base), Dt1(->base)); 7084 dasm_put(Dst, 4679, Dt1(->openupval), (-(BCBIAS_J*4 >> 16) & 65535), DISPATCH_GOT(lj_func_closeuv), Dt1(->base), Dt1(->base));
6836 break; 7085 break;
6837 7086
6838 case BC_FNEW: 7087 case BC_FNEW:
6839 dasm_put(Dst, 4504, 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)); 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));
6840 break; 7089 break;
6841 7090
6842 /* -- Table ops --------------------------------------------------------- */ 7091 /* -- Table ops --------------------------------------------------------- */
6843 7092
6844 case BC_TNEW: 7093 case BC_TNEW:
6845 case BC_TDUP: 7094 case BC_TDUP:
6846 dasm_put(Dst, 4537, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); 7095 dasm_put(Dst, 4743, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base));
6847 if (op == BC_TNEW) { 7096 if (op == BC_TNEW) {
6848 dasm_put(Dst, 4549, DISPATCH_GOT(lj_tab_new)); 7097 dasm_put(Dst, 4755, DISPATCH_GOT(lj_tab_new));
6849 } else { 7098 } else {
6850 dasm_put(Dst, 4560, DISPATCH_GOT(lj_tab_dup)); 7099 dasm_put(Dst, 4766, DISPATCH_GOT(lj_tab_dup));
6851 } 7100 }
6852 dasm_put(Dst, 4568, Dt1(->base), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), DISPATCH_GOT(lj_gc_step_fixtop)); 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));
6853 break; 7102 break;
6854 7103
6855 case BC_GGET: 7104 case BC_GGET:
6856 case BC_GSET: 7105 case BC_GSET:
6857 dasm_put(Dst, 4598, LJ_ENDIAN_SELECT(-8,-4), Dt7(->env)); 7106 dasm_put(Dst, 4804, LJ_ENDIAN_SELECT(-8,-4), Dt7(->env));
6858 if (op == BC_GGET) { 7107 if (op == BC_GGET) {
6859 dasm_put(Dst, 4606); 7108 dasm_put(Dst, 4812);
6860 } else { 7109 } else {
6861 dasm_put(Dst, 4609); 7110 dasm_put(Dst, 4815);
6862 } 7111 }
6863 dasm_put(Dst, 4612); 7112 dasm_put(Dst, 4818);
6864 break; 7113 break;
6865 7114
6866 case BC_TGETV: 7115 case BC_TGETV:
6867 dasm_put(Dst, 4614, 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); 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);
6868 dasm_put(Dst, 4689, LJ_ENDIAN_SELECT(0,4)); 7117 dasm_put(Dst, 4895, LJ_ENDIAN_SELECT(0,4));
6869 break; 7118 break;
6870 case BC_TGETS: 7119 case BC_TGETS:
6871 dasm_put(Dst, 4695, 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)); 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));
6872 dasm_put(Dst, 4764, LJ_TNIL, Dt6(->nomm), 1<<MM_index); 7121 dasm_put(Dst, 4970, LJ_TNIL, Dt6(->nomm), 1<<MM_index);
6873 break; 7122 break;
6874 case BC_TGETB: 7123 case BC_TGETB:
6875 dasm_put(Dst, 4781, 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); 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);
6876 break; 7125 break;
6877 7126
6878 case BC_TSETV: 7127 case BC_TSETV:
6879 dasm_put(Dst, 4838, 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); 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);
6880 dasm_put(Dst, 4911, LJ_ENDIAN_SELECT(0,4), DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 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));
6881 break; 7130 break;
6882 case BC_TSETS: 7131 case BC_TSETS:
6883 dasm_put(Dst, 4939, 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); 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);
6884 dasm_put(Dst, 4997, 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)); 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));
6885 dasm_put(Dst, 5059, DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 7134 dasm_put(Dst, 5265, DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
6886 break; 7135 break;
6887 case BC_TSETB: 7136 case BC_TSETB:
6888 dasm_put(Dst, 5076, 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)); 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));
6889 dasm_put(Dst, 5143, ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 7138 dasm_put(Dst, 5349, ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
6890 break; 7139 break;
6891 7140
6892 case BC_TSETM: 7141 case BC_TSETM:
6893 dasm_put(Dst, 5154, -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)); 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));
6894 dasm_put(Dst, 5227, Dt6(->gclist)); 7143 dasm_put(Dst, 5433, Dt6(->gclist));
6895 break; 7144 break;
6896 7145
6897 /* -- Calls and vararg handling ----------------------------------------- */ 7146 /* -- Calls and vararg handling ----------------------------------------- */
6898 7147
6899 case BC_CALLM: 7148 case BC_CALLM:
6900 dasm_put(Dst, 5232); 7149 dasm_put(Dst, 5438);
6901 break; 7150 break;
6902 case BC_CALL: 7151 case BC_CALL:
6903 dasm_put(Dst, 5237, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc)); 7152 dasm_put(Dst, 5443, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc));
6904 break; 7153 break;
6905 7154
6906 case BC_CALLMT: 7155 case BC_CALLMT:
6907 dasm_put(Dst, 5266); 7156 dasm_put(Dst, 5472);
6908 break; 7157 break;
6909 case BC_CALLT: 7158 case BC_CALLT:
6910 dasm_put(Dst, 5268, 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)); 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));
6911 dasm_put(Dst, 5337, PC2PROTO(k), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE); 7160 dasm_put(Dst, 5543, PC2PROTO(k), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE);
6912 break; 7161 break;
6913 7162
6914 case BC_ITERC: 7163 case BC_ITERC:
6915 dasm_put(Dst, 5353, 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)); 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));
6916 break; 7165 break;
6917 7166
6918 case BC_ITERN: 7167 case BC_ITERN:
6919#if LJ_HASJIT 7168#if LJ_HASJIT
6920#endif 7169#endif
6921 dasm_put(Dst, 5388, -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)); 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));
6922 dasm_put(Dst, 5470, -8+LJ_ENDIAN_SELECT(0,4)); 7171 dasm_put(Dst, 5676, -8+LJ_ENDIAN_SELECT(0,4));
6923 break; 7172 break;
6924 7173
6925 case BC_ISNEXT: 7174 case BC_ISNEXT:
6926 dasm_put(Dst, 5473, -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)); 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));
6927 break; 7176 break;
6928 7177
6929 case BC_VARG: 7178 case BC_VARG:
6930 dasm_put(Dst, 5530, 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)); 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));
6931 dasm_put(Dst, 5617); 7180 dasm_put(Dst, 5823);
6932 break; 7181 break;
6933 7182
6934 /* -- Returns ----------------------------------------------------------- */ 7183 /* -- Returns ----------------------------------------------------------- */
6935 7184
6936 case BC_RETM: 7185 case BC_RETM:
6937 dasm_put(Dst, 5619); 7186 dasm_put(Dst, 5825);
6938 break; 7187 break;
6939 7188
6940 case BC_RET: 7189 case BC_RET:
6941 dasm_put(Dst, 5621, 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)); 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));
6942 break; 7191 break;
6943 7192
6944 case BC_RET0: case BC_RET1: 7193 case BC_RET0: case BC_RET1:
6945 dasm_put(Dst, 5693, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG); 7194 dasm_put(Dst, 5899, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG);
6946 if (op == BC_RET1) { 7195 if (op == BC_RET1) {
6947 dasm_put(Dst, 5706); 7196 dasm_put(Dst, 5912);
6948 } 7197 }
6949 dasm_put(Dst, 5708); 7198 dasm_put(Dst, 5914);
6950 if (op == BC_RET1) { 7199 if (op == BC_RET1) {
6951 dasm_put(Dst, 5713); 7200 dasm_put(Dst, 5919);
6952 } 7201 }
6953 dasm_put(Dst, 5715, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k)); 7202 dasm_put(Dst, 5921, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k));
6954 if (op == BC_RET1) { 7203 if (op == BC_RET1) {
6955 dasm_put(Dst, 5743, LJ_ENDIAN_SELECT(4,0)); 7204 dasm_put(Dst, 5949, LJ_ENDIAN_SELECT(4,0));
6956 } else { 7205 } else {
6957 dasm_put(Dst, 5746, -8+LJ_ENDIAN_SELECT(4,0)); 7206 dasm_put(Dst, 5952, -8+LJ_ENDIAN_SELECT(4,0));
6958 } 7207 }
6959 break; 7208 break;
6960 7209
@@ -6962,7 +7211,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
6962 7211
6963 case BC_FORL: 7212 case BC_FORL:
6964#if LJ_HASJIT 7213#if LJ_HASJIT
6965 dasm_put(Dst, 5749); 7214 dasm_put(Dst, 5955, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT);
6966#endif 7215#endif
6967 break; 7216 break;
6968 7217
@@ -6974,35 +7223,35 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
6974 case BC_FORI: 7223 case BC_FORI:
6975 case BC_IFORL: 7224 case BC_IFORL:
6976 vk = (op == BC_IFORL || op == BC_JFORL); 7225 vk = (op == BC_IFORL || op == BC_JFORL);
6977 dasm_put(Dst, 5751); 7226 dasm_put(Dst, 5967);
6978 if (vk) { 7227 if (vk) {
6979 dasm_put(Dst, 5753, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8+LJ_ENDIAN_SELECT(4,0), FORL_IDX*8); 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);
6980 } else { 7229 } else {
6981 dasm_put(Dst, 5765, 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); 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);
6982 } 7231 }
6983 if (op != BC_JFORL) { 7232 if (op != BC_JFORL) {
6984 dasm_put(Dst, 5786, (-(BCBIAS_J*4 >> 16) & 65535)); 7233 dasm_put(Dst, 6002, (-(BCBIAS_J*4 >> 16) & 65535));
6985 } 7234 }
6986 dasm_put(Dst, 5790, FORL_EXT*8); 7235 dasm_put(Dst, 6006, FORL_EXT*8);
6987 if (op == BC_JFORI) { 7236 if (op == BC_JFORI) {
6988 dasm_put(Dst, 5795, BC_JLOOP); 7237 dasm_put(Dst, 6011, -4+LJ_ENDIAN_SELECT(2,0), BC_JLOOP);
6989 } else if (op == BC_JFORL) { 7238 } else if (op == BC_JFORL) {
6990 dasm_put(Dst, 5808, BC_JLOOP); 7239 dasm_put(Dst, 6025, BC_JLOOP);
6991 } else { 7240 } else {
6992 dasm_put(Dst, 5818); 7241 dasm_put(Dst, 6035);
6993 if (op == BC_FORI) { 7242 if (op == BC_FORI) {
6994 dasm_put(Dst, 5822); 7243 dasm_put(Dst, 6039);
6995 } else { 7244 } else {
6996 dasm_put(Dst, 5825); 7245 dasm_put(Dst, 6042);
6997 } 7246 }
6998 dasm_put(Dst, 5828); 7247 dasm_put(Dst, 6045);
6999 } 7248 }
7000 dasm_put(Dst, 5831); 7249 dasm_put(Dst, 6048);
7001 break; 7250 break;
7002 7251
7003 case BC_ITERL: 7252 case BC_ITERL:
7004#if LJ_HASJIT 7253#if LJ_HASJIT
7005 dasm_put(Dst, 5843); 7254 dasm_put(Dst, 6060, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT);
7006#endif 7255#endif
7007 break; 7256 break;
7008 7257
@@ -7011,40 +7260,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
7011 break; 7260 break;
7012#endif 7261#endif
7013 case BC_IITERL: 7262 case BC_IITERL:
7014 dasm_put(Dst, 5845, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); 7263 dasm_put(Dst, 6072, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4));
7015 if (op == BC_JITERL) { 7264 if (op == BC_JITERL) {
7016 dasm_put(Dst, 5853, -8+LJ_ENDIAN_SELECT(4,0), BC_JLOOP, -8+LJ_ENDIAN_SELECT(0,4)); 7265 dasm_put(Dst, 6080, -8+LJ_ENDIAN_SELECT(4,0), BC_JLOOP, -8+LJ_ENDIAN_SELECT(0,4));
7017 } else { 7266 } else {
7018 dasm_put(Dst, 5860, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(0,4)); 7267 dasm_put(Dst, 6087, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(0,4));
7019 } 7268 }
7020 dasm_put(Dst, 5870); 7269 dasm_put(Dst, 6097);
7021 break; 7270 break;
7022 7271
7023 case BC_LOOP: 7272 case BC_LOOP:
7024#if LJ_HASJIT 7273#if LJ_HASJIT
7025 dasm_put(Dst, 5883); 7274 dasm_put(Dst, 6110, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT);
7026#endif 7275#endif
7027 break; 7276 break;
7028 7277
7029 case BC_ILOOP: 7278 case BC_ILOOP:
7030 dasm_put(Dst, 5885); 7279 dasm_put(Dst, 6122);
7031 break; 7280 break;
7032 7281
7033 case BC_JLOOP: 7282 case BC_JLOOP:
7034#if LJ_HASJIT 7283#if LJ_HASJIT
7035 dasm_put(Dst, 5897, DISPATCH_J(trace), DISPATCH_GL(vmstate), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), DtD(->mcode), GG_DISP2G+32768); 7284 dasm_put(Dst, 6134, DISPATCH_J(trace), DISPATCH_GL(vmstate), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), DtD(->mcode), GG_DISP2G+32768);
7036#endif 7285#endif
7037 break; 7286 break;
7038 7287
7039 case BC_JMP: 7288 case BC_JMP:
7040 dasm_put(Dst, 5915, (-(BCBIAS_J*4 >> 16) & 65535)); 7289 dasm_put(Dst, 6152, (-(BCBIAS_J*4 >> 16) & 65535));
7041 break; 7290 break;
7042 7291
7043 /* -- Function headers -------------------------------------------------- */ 7292 /* -- Function headers -------------------------------------------------- */
7044 7293
7045 case BC_FUNCF: 7294 case BC_FUNCF:
7046#if LJ_HASJIT 7295#if LJ_HASJIT
7047 dasm_put(Dst, 5932); 7296 dasm_put(Dst, 6169, GG_DISP2HOT, -HOTCOUNT_CALL, GG_DISP2HOT);
7048#endif 7297#endif
7049 case BC_FUNCV: /* NYI: compiled vararg functions. */ 7298 case BC_FUNCV: /* NYI: compiled vararg functions. */
7050 break; 7299 break;
@@ -7054,42 +7303,42 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
7054 break; 7303 break;
7055#endif 7304#endif
7056 case BC_IFUNCF: 7305 case BC_IFUNCF:
7057 dasm_put(Dst, 5934, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k)); 7306 dasm_put(Dst, 6181, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k));
7058 if (op != BC_JFUNCF) { 7307 if (op != BC_JFUNCF) {
7059 dasm_put(Dst, 5945); 7308 dasm_put(Dst, 6192);
7060 } 7309 }
7061 dasm_put(Dst, 5948); 7310 dasm_put(Dst, 6195);
7062 if (op == BC_JFUNCF) { 7311 if (op == BC_JFUNCF) {
7063 dasm_put(Dst, 5954, BC_JLOOP); 7312 dasm_put(Dst, 6201, BC_JLOOP);
7064 } else { 7313 } else {
7065 dasm_put(Dst, 5959); 7314 dasm_put(Dst, 6206);
7066 } 7315 }
7067 dasm_put(Dst, 5969, LJ_ENDIAN_SELECT(4,0)); 7316 dasm_put(Dst, 6216, LJ_ENDIAN_SELECT(4,0));
7068 break; 7317 break;
7069 7318
7070 case BC_JFUNCV: 7319 case BC_JFUNCV:
7071#if !LJ_HASJIT 7320#if !LJ_HASJIT
7072 break; 7321 break;
7073#endif 7322#endif
7074 dasm_put(Dst, 5976); 7323 dasm_put(Dst, 6223);
7075 break; /* NYI: compiled vararg functions. */ 7324 break; /* NYI: compiled vararg functions. */
7076 7325
7077 case BC_IFUNCV: 7326 case BC_IFUNCV:
7078 dasm_put(Dst, 5978, 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)); 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));
7079 break; 7328 break;
7080 7329
7081 case BC_FUNCC: 7330 case BC_FUNCC:
7082 case BC_FUNCCW: 7331 case BC_FUNCCW:
7083 if (op == BC_FUNCC) { 7332 if (op == BC_FUNCC) {
7084 dasm_put(Dst, 6033, Dt8(->f)); 7333 dasm_put(Dst, 6280, Dt8(->f));
7085 } else { 7334 } else {
7086 dasm_put(Dst, 6036, DISPATCH_GL(wrapf)); 7335 dasm_put(Dst, 6283, DISPATCH_GL(wrapf));
7087 } 7336 }
7088 dasm_put(Dst, 6039, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); 7337 dasm_put(Dst, 6286, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C);
7089 if (op == BC_FUNCCW) { 7338 if (op == BC_FUNCCW) {
7090 dasm_put(Dst, 6051, Dt8(->f)); 7339 dasm_put(Dst, 6298, Dt8(->f));
7091 } 7340 }
7092 dasm_put(Dst, 6054, DISPATCH_GL(vmstate), Dt1(->base), Dt1(->top), ~LJ_VMST_INTERP, LJ_ENDIAN_SELECT(-4,-8), DISPATCH_GL(vmstate)); 7341 dasm_put(Dst, 6301, DISPATCH_GL(vmstate), Dt1(->base), Dt1(->top), ~LJ_VMST_INTERP, LJ_ENDIAN_SELECT(-4,-8), DISPATCH_GL(vmstate));
7093 break; 7342 break;
7094 7343
7095 /* ---------------------------------------------------------------------- */ 7344 /* ---------------------------------------------------------------------- */
@@ -7109,7 +7358,7 @@ static int build_backend(BuildCtx *ctx)
7109 7358
7110 build_subroutines(ctx); 7359 build_subroutines(ctx);
7111 7360
7112 dasm_put(Dst, 6075); 7361 dasm_put(Dst, 6322);
7113 for (op = 0; op < BC__MAX; op++) 7362 for (op = 0; op < BC__MAX; op++)
7114 build_ins(ctx, (BCOp)op, op); 7363 build_ins(ctx, (BCOp)op, op);
7115 7364