diff options
author | Mike Pall <mike> | 2012-03-30 01:33:07 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2012-03-30 01:33:38 +0200 |
commit | aaaf0e0f5fe573e7c089ece1bd491a8f8b8b3e9a (patch) | |
tree | 52c8663642acd744fd0682c9249c2836039cfe7e /src | |
parent | 1980ee95b0d5343822d6c92abf9f8feb15ac9764 (diff) | |
download | luajit-aaaf0e0f5fe573e7c089ece1bd491a8f8b8b3e9a.tar.gz luajit-aaaf0e0f5fe573e7c089ece1bd491a8f8b8b3e9a.tar.bz2 luajit-aaaf0e0f5fe573e7c089ece1bd491a8f8b8b3e9a.zip |
MIPS: Interpreter/JIT integration
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_mips.dasc | 127 | ||||
-rw-r--r-- | src/buildvm_mips.h | 669 |
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 |
15 | static const unsigned int build_actionlist[6076] = { | 15 | static const unsigned int build_actionlist[6323] = { |
16 | 0xff010001, | 16 | 0xff010001, |
17 | 0xff060014, | 17 | 0xff060014, |
18 | 0x32410000, | 18 | 0x32410000, |
@@ -3060,7 +3060,30 @@ static const unsigned int build_actionlist[6076] = { | |||
3060 | 0xff098200, | 3060 | 0xff098200, |
3061 | 0xff060090, | 3061 | 0xff060090, |
3062 | 0xff000000, | 3062 | 0xff000000, |
3063 | 0xf0f0f0f0, | 3063 | 0x8e0d0000, |
3064 | 0xff098200, | ||
3065 | 0x26640000, | ||
3066 | 0xff098200, | ||
3067 | 0xafb20014, | ||
3068 | 0x8dad0000, | ||
3069 | 0xff098200, | ||
3070 | 0x02402821, | ||
3071 | 0xae740000, | ||
3072 | 0xff098200, | ||
3073 | 0x91ad0000, | ||
3074 | 0xff098200, | ||
3075 | 0x8e790000, | ||
3076 | 0xff098200, | ||
3077 | 0xae900000, | ||
3078 | 0xff098200, | ||
3079 | 0x000d68c0, | ||
3080 | 0x020d6821, | ||
3081 | 0x0320f809, | ||
3082 | 0xae8d0000, | ||
3083 | 0xff098200, | ||
3084 | 0x10000000, | ||
3085 | 0xff05080d, | ||
3086 | 0x00000000, | ||
3064 | 0xff000000, | 3087 | 0xff000000, |
3065 | 0xff060091, | 3088 | 0xff060091, |
3066 | 0xff000000, | 3089 | 0xff000000, |
@@ -3097,11 +3120,194 @@ static const unsigned int build_actionlist[6076] = { | |||
3097 | 0x8e4bfffc, | 3120 | 0x8e4bfffc, |
3098 | 0xff060093, | 3121 | 0xff060093, |
3099 | 0xff000000, | 3122 | 0xff000000, |
3100 | 0xf0f0f0f0, | 3123 | 0x27bd0000, |
3124 | 0xff098200, | ||
3125 | 0xf7a00000, | ||
3126 | 0xff098200, | ||
3127 | 0xafa00000, | ||
3128 | 0xff098200, | ||
3129 | 0xafa10000, | ||
3130 | 0xff098200, | ||
3131 | 0xf7a20000, | ||
3132 | 0xff098200, | ||
3133 | 0xafa20000, | ||
3134 | 0xff098200, | ||
3135 | 0xafa30000, | ||
3136 | 0xff098200, | ||
3137 | 0xf7a40000, | ||
3138 | 0xff098200, | ||
3139 | 0xafa40000, | ||
3140 | 0xff098200, | ||
3141 | 0xafa50000, | ||
3142 | 0xff098200, | ||
3143 | 0xf7a60000, | ||
3144 | 0xff098200, | ||
3145 | 0xafa60000, | ||
3146 | 0xff098200, | ||
3147 | 0xafa70000, | ||
3148 | 0xff098200, | ||
3149 | 0xf7a80000, | ||
3150 | 0xff098200, | ||
3151 | 0xafa80000, | ||
3152 | 0xff098200, | ||
3153 | 0xafa90000, | ||
3154 | 0xff098200, | ||
3155 | 0xf7aa0000, | ||
3156 | 0xff098200, | ||
3157 | 0xafaa0000, | ||
3158 | 0xff098200, | ||
3159 | 0xafab0000, | ||
3160 | 0xff098200, | ||
3161 | 0xf7ac0000, | ||
3162 | 0xff098200, | ||
3163 | 0xafac0000, | ||
3164 | 0xff098200, | ||
3165 | 0xafad0000, | ||
3166 | 0xff098200, | ||
3167 | 0xf7ae0000, | ||
3168 | 0xff098200, | ||
3169 | 0xff000000, | ||
3170 | 0xafae0000, | ||
3171 | 0xff098200, | ||
3172 | 0xafaf0000, | ||
3173 | 0xff098200, | ||
3174 | 0xf7b00000, | ||
3175 | 0xff098200, | ||
3176 | 0xafb00000, | ||
3177 | 0xff098200, | ||
3178 | 0xafb10000, | ||
3179 | 0xff098200, | ||
3180 | 0xf7b20000, | ||
3181 | 0xff098200, | ||
3182 | 0xafb20000, | ||
3183 | 0xff098200, | ||
3184 | 0xafb30000, | ||
3185 | 0xff098200, | ||
3186 | 0xf7b40000, | ||
3187 | 0xff098200, | ||
3188 | 0xafb40000, | ||
3189 | 0xff098200, | ||
3190 | 0xafb50000, | ||
3191 | 0xff098200, | ||
3192 | 0xf7b60000, | ||
3193 | 0xff098200, | ||
3194 | 0xafb60000, | ||
3195 | 0xff098200, | ||
3196 | 0xafb70000, | ||
3197 | 0xff098200, | ||
3198 | 0xf7b80000, | ||
3199 | 0xff098200, | ||
3200 | 0xafb80000, | ||
3201 | 0xff098200, | ||
3202 | 0xafb90000, | ||
3203 | 0xff098200, | ||
3204 | 0xf7ba0000, | ||
3205 | 0xff098200, | ||
3206 | 0xafba0000, | ||
3207 | 0xff098200, | ||
3208 | 0xafbb0000, | ||
3209 | 0xff098200, | ||
3210 | 0xf7bc0000, | ||
3211 | 0xff098200, | ||
3212 | 0xafbc0000, | ||
3213 | 0xff098200, | ||
3214 | 0xf7be0000, | ||
3215 | 0xff098200, | ||
3216 | 0xff000000, | ||
3217 | 0xafbe0000, | ||
3218 | 0xff098200, | ||
3219 | 0xafa00000, | ||
3220 | 0xff098200, | ||
3221 | 0x240c0000, | ||
3222 | 0xff098200, | ||
3223 | 0x27ae0000, | ||
3224 | 0xff098200, | ||
3225 | 0x27d30000, | ||
3226 | 0xff098200, | ||
3227 | 0x8dcd0000, | ||
3228 | 0xae6c0000, | ||
3229 | 0xff098200, | ||
3230 | 0xafae0000, | ||
3231 | 0xff098200, | ||
3232 | 0x8e740000, | ||
3233 | 0xff098200, | ||
3234 | 0x8e700000, | ||
3235 | 0xff098200, | ||
3236 | 0x8e790000, | ||
3237 | 0xff098200, | ||
3238 | 0xae740000, | ||
3239 | 0xff098200, | ||
3240 | 0xae7f0000, | ||
3241 | 0xff098200, | ||
3242 | 0xae6d0000, | ||
3243 | 0xff098200, | ||
3244 | 0x26640000, | ||
3245 | 0xff098200, | ||
3246 | 0xae900000, | ||
3247 | 0xff098200, | ||
3248 | 0x0320f809, | ||
3249 | 0x27a50010, | ||
3250 | 0x8e8d0000, | ||
3251 | 0xff098200, | ||
3252 | 0x2401fffc, | ||
3253 | 0x8e900000, | ||
3254 | 0xff098200, | ||
3255 | 0x01a1e824, | ||
3256 | 0x8fb20014, | ||
3257 | 0x10000000, | ||
3258 | 0xff050801, | ||
3259 | 0xafb40070, | ||
3101 | 0xff000000, | 3260 | 0xff000000, |
3102 | 0xff060094, | 3261 | 0xff060094, |
3103 | 0xff000000, | 3262 | 0xff000000, |
3104 | 0xf0f0f0f0, | 3263 | 0x8fb40070, |
3264 | 0x27d30000, | ||
3265 | 0xff098200, | ||
3266 | 0xff06000b, | ||
3267 | 0x04400000, | ||
3268 | 0xff050803, | ||
3269 | 0x8e0d0000, | ||
3270 | 0xff098200, | ||
3271 | 0x3c0f59c0, | ||
3272 | 0x0002a8c0, | ||
3273 | 0x241e0000, | ||
3274 | 0xff098200, | ||
3275 | 0xafb50010, | ||
3276 | 0x448ff000, | ||
3277 | 0x8dad0000, | ||
3278 | 0xff098200, | ||
3279 | 0xae600000, | ||
3280 | 0xff098200, | ||
3281 | 0x8db10000, | ||
3282 | 0xff098200, | ||
3283 | 0x4600f7a1, | ||
3284 | 0x8e4b0000, | ||
3285 | 0x26520004, | ||
3286 | 0xae7e0000, | ||
3287 | 0xff098200, | ||
3288 | 0x316d00ff, | ||
3289 | 0x000d6880, | ||
3290 | 0x2dae0000, | ||
3291 | 0xff098200, | ||
3292 | 0x026d6021, | ||
3293 | 0x000b5402, | ||
3294 | 0x8d810000, | ||
3295 | 0x000bb942, | ||
3296 | 0x11c00000, | ||
3297 | 0xff050802, | ||
3298 | 0x32f707f8, | ||
3299 | 0x00200008, | ||
3300 | 0x000a50c0, | ||
3301 | 0xff06000c, | ||
3302 | 0x26a9fff8, | ||
3303 | 0x00200008, | ||
3304 | 0x02f0b820, | ||
3305 | 0xff06000d, | ||
3306 | 0x8e790000, | ||
3307 | 0xff098200, | ||
3308 | 0x00022823, | ||
3309 | 0x0320f809, | ||
3310 | 0x02802021, | ||
3105 | 0xff000000, | 3311 | 0xff000000, |
3106 | 0xff06005b, | 3312 | 0xff06005b, |
3107 | 0x3c0c4330, | 3313 | 0x3c0c4330, |
@@ -5762,7 +5968,17 @@ static const unsigned int build_actionlist[6076] = { | |||
5762 | 0xadde0000, | 5968 | 0xadde0000, |
5763 | 0xff098200, | 5969 | 0xff098200, |
5764 | 0xff000000, | 5970 | 0xff000000, |
5765 | 0xf0f0f0f0, | 5971 | 0x00126842, |
5972 | 0x31ad007e, | ||
5973 | 0x01b36821, | ||
5974 | 0x95ae0000, | ||
5975 | 0xff098200, | ||
5976 | 0x25ce0000, | ||
5977 | 0xff098200, | ||
5978 | 0x05c00000, | ||
5979 | 0xff050890, | ||
5980 | 0xa5ae0000, | ||
5981 | 0xff098200, | ||
5766 | 0xff000000, | 5982 | 0xff000000, |
5767 | 0x0217b821, | 5983 | 0x0217b821, |
5768 | 0xff000000, | 5984 | 0xff000000, |
@@ -5810,13 +6026,14 @@ static const unsigned int build_actionlist[6076] = { | |||
5810 | 0xff000000, | 6026 | 0xff000000, |
5811 | 0x240d0001, | 6027 | 0x240d0001, |
5812 | 0x240e0001, | 6028 | 0x240e0001, |
5813 | 0x8e4bfffc, | 6029 | 0x014c6021, |
5814 | 0x01e0782a, | 6030 | 0x01e0782a, |
5815 | 0x00016801, | 6031 | 0x00006801, |
5816 | 0x00057001, | 6032 | 0x024c9021, |
5817 | 0x014c9021, | 6033 | 0x00047001, |
6034 | 0x964a0000, | ||
6035 | 0xff098200, | ||
5818 | 0x01cf680b, | 6036 | 0x01cf680b, |
5819 | 0x000b5402, | ||
5820 | 0x15a00000, | 6037 | 0x15a00000, |
5821 | 0xff070800, | 6038 | 0xff070800, |
5822 | 0x000a50c0, | 6039 | 0x000a50c0, |
@@ -5856,7 +6073,17 @@ static const unsigned int build_actionlist[6076] = { | |||
5856 | 0x00200008, | 6073 | 0x00200008, |
5857 | 0x32f707f8, | 6074 | 0x32f707f8, |
5858 | 0xff000000, | 6075 | 0xff000000, |
5859 | 0xf0f0f0f0, | 6076 | 0x00126842, |
6077 | 0x31ad007e, | ||
6078 | 0x01b36821, | ||
6079 | 0x95ae0000, | ||
6080 | 0xff098200, | ||
6081 | 0x25ce0000, | ||
6082 | 0xff098200, | ||
6083 | 0x05c00000, | ||
6084 | 0xff050890, | ||
6085 | 0xa5ae0000, | ||
6086 | 0xff098200, | ||
5860 | 0xff000000, | 6087 | 0xff000000, |
5861 | 0x0217b821, | 6088 | 0x0217b821, |
5862 | 0x8eed0000, | 6089 | 0x8eed0000, |
@@ -5896,7 +6123,17 @@ static const unsigned int build_actionlist[6076] = { | |||
5896 | 0x00200008, | 6123 | 0x00200008, |
5897 | 0x32f707f8, | 6124 | 0x32f707f8, |
5898 | 0xff000000, | 6125 | 0xff000000, |
5899 | 0xf0f0f0f0, | 6126 | 0x00126842, |
6127 | 0x31ad007e, | ||
6128 | 0x01b36821, | ||
6129 | 0x95ae0000, | ||
6130 | 0xff098200, | ||
6131 | 0x25ce0000, | ||
6132 | 0xff098200, | ||
6133 | 0x05c00000, | ||
6134 | 0xff050890, | ||
6135 | 0xa5ae0000, | ||
6136 | 0xff098200, | ||
5900 | 0xff000000, | 6137 | 0xff000000, |
5901 | 0x8e4b0000, | 6138 | 0x8e4b0000, |
5902 | 0x26520004, | 6139 | 0x26520004, |
@@ -5945,7 +6182,17 @@ static const unsigned int build_actionlist[6076] = { | |||
5945 | 0x00200008, | 6182 | 0x00200008, |
5946 | 0x32f707f8, | 6183 | 0x32f707f8, |
5947 | 0xff000000, | 6184 | 0xff000000, |
5948 | 0xf0f0f0f0, | 6185 | 0x00126842, |
6186 | 0x31ad007e, | ||
6187 | 0x01b36821, | ||
6188 | 0x95ae0000, | ||
6189 | 0xff098200, | ||
6190 | 0x25ce0000, | ||
6191 | 0xff098200, | ||
6192 | 0x05c00000, | ||
6193 | 0xff050892, | ||
6194 | 0xa5ae0000, | ||
6195 | 0xff098200, | ||
5949 | 0xff000000, | 6196 | 0xff000000, |
5950 | 0x8e8e0000, | 6197 | 0x8e8e0000, |
5951 | 0xff098200, | 6198 | 0xff098200, |
@@ -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) | |||
6539 | static void build_ins(BuildCtx *ctx, BCOp op, int defop) | 6788 | static 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 | ||