diff options
author | Mike Pall <mike> | 2010-02-24 07:09:34 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-02-24 07:09:34 +0100 |
commit | 4c9f71be5d4449b717870092839c47a1d5db0dca (patch) | |
tree | ace2d0a3cf4756cc5ac7607c21304f7f7baffd09 /src/lj_target_x86.h | |
parent | e46f4c8a11bcb2ba76d445e34030ab04ba12668d (diff) | |
download | luajit-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.h | 26 |
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. |
100 | enum { | 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 | ||