summaryrefslogtreecommitdiff
path: root/src/lj_target_x86.h
diff options
context:
space:
mode:
authorMike Pall <mike>2010-02-24 07:09:34 +0100
committerMike Pall <mike>2010-02-24 07:09:34 +0100
commit4c9f71be5d4449b717870092839c47a1d5db0dca (patch)
treeace2d0a3cf4756cc5ac7607c21304f7f7baffd09 /src/lj_target_x86.h
parente46f4c8a11bcb2ba76d445e34030ab04ba12668d (diff)
downloadluajit-4c9f71be5d4449b717870092839c47a1d5db0dca.tar.gz
luajit-4c9f71be5d4449b717870092839c47a1d5db0dca.tar.bz2
luajit-4c9f71be5d4449b717870092839c47a1d5db0dca.zip
Major 32/64 bit cleanups in assembler and exit handling.
Add 64 bit lightuserdata handling. Keep the tagged 64 bit value. Allocate/save/restore 64 bit spill slots for 64 bit lightuserdata. Fix code generation for 64 bit loads/stores/moves/compares. Fix code generation for stack pointer adjustments. Add fixed spill slot definitions for x64. Reduce reserved spill slots. Disable STRREF + ADD fusion in 64 bit mode (avoid negative 32 bit ofs).
Diffstat (limited to '')
-rw-r--r--src/lj_target_x86.h26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/lj_target_x86.h b/src/lj_target_x86.h
index cb1892d5..8e9a8788 100644
--- a/src/lj_target_x86.h
+++ b/src/lj_target_x86.h
@@ -96,20 +96,24 @@ enum {
96 96
97/* -- Spill slots --------------------------------------------------------- */ 97/* -- Spill slots --------------------------------------------------------- */
98 98
99/* Stack layout for the compiled machine code (after stack adjustment). */ 99/* Available fixed spill slots in interpreter frame.
100enum { 100** This definition must match with the *.dasc file(s).
101 SPS_TEMP1, /* Temps (3*dword) for calls and asm_x87load. */ 101*/
102 SPS_TEMP2, 102#if LJ_64
103 SPS_TEMP3, 103#ifdef _WIN64
104 SPS_FIRST, /* First spill slot for general use. */ 104#define SPS_FIXED (5*2)
105#else
106#define SPS_FIXED 2
107#endif
108#else
109#define SPS_FIXED 6
110#endif
105 111
106 /* This definition must match with the *.dasc file(s). */ 112/* First spill slot for general use. Reserve one 64 bit slot. */
107 SPS_FIXED = 6 /* Available fixed spill slots in interpreter frame. */ 113#define SPS_FIRST 2
108};
109 114
110/* Spill slots are 32 bit wide. An even/odd pair is used for FPRs. */ 115/* Spill slots are 32 bit wide. An even/odd pair is used for FPRs. */
111#define sps_scale(slot) (4 * (int32_t)(slot)) 116#define sps_scale(slot) (4 * (int32_t)(slot))
112#define sps_adjust(slot) (sps_scale(((slot)-SPS_FIXED+3)&~3))
113 117
114/* -- Exit state ---------------------------------------------------------- */ 118/* -- Exit state ---------------------------------------------------------- */
115 119
@@ -241,6 +245,8 @@ typedef uint32_t x86Group;
241 245
242#define XG_(i8, i, g) ((x86Group)(((i8) << 16) + ((i) << 8) + (g))) 246#define XG_(i8, i, g) ((x86Group)(((i8) << 16) + ((i) << 8) + (g)))
243#define XG_ARITHi(g) XG_(XI_ARITHi8, XI_ARITHi, g) 247#define XG_ARITHi(g) XG_(XI_ARITHi8, XI_ARITHi, g)
248#define XG_TOXOi(xg) ((x86Op)(0x000000fe + (((xg)<<16) & 0xff000000)))
249#define XG_TOXOi8(xg) ((x86Op)(0x000000fe + (((xg)<<8) & 0xff000000)))
244 250
245#define XO_ARITH(a) ((x86Op)(0x030000fe + ((a)<<27))) 251#define XO_ARITH(a) ((x86Op)(0x030000fe + ((a)<<27)))
246 252