aboutsummaryrefslogtreecommitdiff
path: root/src/lj_trace.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_trace.c')
-rw-r--r--src/lj_trace.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/lj_trace.c b/src/lj_trace.c
index 7970aba6..0d54c0af 100644
--- a/src/lj_trace.c
+++ b/src/lj_trace.c
@@ -297,13 +297,35 @@ void lj_trace_initstate(global_State *g)
297{ 297{
298 jit_State *J = G2J(g); 298 jit_State *J = G2J(g);
299 TValue *tv; 299 TValue *tv;
300 /* Initialize SIMD constants. */ 300
301 /* Initialize aligned SIMD constants. */
301 tv = LJ_KSIMD(J, LJ_KSIMD_ABS); 302 tv = LJ_KSIMD(J, LJ_KSIMD_ABS);
302 tv[0].u64 = U64x(7fffffff,ffffffff); 303 tv[0].u64 = U64x(7fffffff,ffffffff);
303 tv[1].u64 = U64x(7fffffff,ffffffff); 304 tv[1].u64 = U64x(7fffffff,ffffffff);
304 tv = LJ_KSIMD(J, LJ_KSIMD_NEG); 305 tv = LJ_KSIMD(J, LJ_KSIMD_NEG);
305 tv[0].u64 = U64x(80000000,00000000); 306 tv[0].u64 = U64x(80000000,00000000);
306 tv[1].u64 = U64x(80000000,00000000); 307 tv[1].u64 = U64x(80000000,00000000);
308
309 /* Initialize 32/64 bit constants. */
310#if LJ_TARGET_X86ORX64
311 J->k64[LJ_K64_TOBIT].u64 = U64x(43380000,00000000);
312 J->k64[LJ_K64_2P64].u64 = U64x(43f00000,00000000);
313 J->k64[LJ_K64_M2P64].u64 = U64x(c3f00000,00000000);
314#if LJ_32
315 J->k64[LJ_K64_M2P64_31].u64 = U64x(c1e00000,00000000);
316#endif
317 J->k32[LJ_K32_M2P64_31] = LJ_64 ? 0xdf800000 : 0xcf000000;
318#endif
319#if LJ_TARGET_PPC
320 J->k32[LJ_K32_2P52_2P31] = 0x59800004;
321 J->k32[LJ_K32_2P52] = 0x59800000;
322#endif
323#if LJ_TARGET_PPC || LJ_TARGET_MIPS
324 J->k32[LJ_K32_2P31] = 0x4f000000;
325#endif
326#if LJ_TARGET_MIPS
327 J->k64[LJ_K64_2P31].u64 = U64x(41e00000,00000000);
328#endif
307} 329}
308 330
309/* Free everything associated with the JIT compiler state. */ 331/* Free everything associated with the JIT compiler state. */