]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Save all callee-saved x64 integer regs for unwinding.
authorMike Pall <mike>
Tue, 29 Dec 2009 01:04:20 +0000 (02:04 +0100)
committerMike Pall <mike>
Tue, 29 Dec 2009 01:04:20 +0000 (02:04 +0100)
Temporary measure. Does not cover xmm saves on WIN64.
May have to use unwind info or waste another 160 bytes per CFRAME.

src/buildvm_x86.dasc
src/lj_arch.h
src/lj_frame.h

index d2bb80df8e3042aaf563ed63ed9dd250fa4c9394..3b89debbf7be1176ebe33da25de6856890c5ad86 100644 (file)
 |.define CFRAME_SPACE, aword*5                 // Delta for rsp (see <--).
 |.macro saveregs
 |  push rbp; push rdi; push rsi; push rbx
+|  push r15; push r14; push r13; push r12
 |  sub rsp, CFRAME_SPACE
 |.endmacro
 |.macro restoreregs
 |  add rsp, CFRAME_SPACE
+|  pop r12; pop r13; pop r14; pop r15
 |  pop rbx; pop rsi; pop rdi; pop rbp
 |.endmacro
 |
-|.define SAVE_CFRAME,  aword [rsp+aword*13]
-|.define SAVE_PC,      dword [rsp+dword*25]
-|.define SAVE_L,       dword [rsp+dword*24]
-|.define SAVE_ERRF,    dword [rsp+dword*23]
-|.define SAVE_NRES,    dword [rsp+dword*22]
-|.define TMP2,         dword [rsp+dword*21]
-|.define TMP1,         dword [rsp+dword*20]
+|.define SAVE_CFRAME,  aword [rsp+aword*17]
+|.define SAVE_PC,      dword [rsp+dword*33]
+|.define SAVE_L,       dword [rsp+dword*32]
+|.define SAVE_ERRF,    dword [rsp+dword*31]
+|.define SAVE_NRES,    dword [rsp+dword*30]
+|.define TMP2,         dword [rsp+dword*29]
+|.define TMP1,         dword [rsp+dword*28]
 |//----- 16 byte aligned, ^^^ 32 byte register save area, owned by interpreter
-|.define SAVE_RET,     aword [rsp+aword*9]     //<-- rsp entering interpreter.
+|.define SAVE_RET,     aword [rsp+aword*13]    //<-- rsp entering interpreter.
+|.define SAVE_R8,      aword [rsp+aword*12]
+|.define SAVE_R7,      aword [rsp+aword*11]
+|.define SAVE_R6,      aword [rsp+aword*10]
+|.define SAVE_R5,      aword [rsp+aword*9]
 |.define SAVE_R4,      aword [rsp+aword*8]
 |.define SAVE_R3,      aword [rsp+aword*7]
 |.define SAVE_R2,      aword [rsp+aword*6]
 |
 |.define CFRAME_SPACE, aword*5                 // Delta for rsp (see <--).
 |.macro saveregs
-|  push rbp; push r14; push r15; push rbx
+|  push rbp; push rbx; push r15; push r14; push r13; push r12
 |  sub rsp, CFRAME_SPACE
 |.endmacro
 |.macro restoreregs
 |  add rsp, CFRAME_SPACE
-|  pop rbx; pop r15; pop r14; pop rbp
+|  pop r12; pop r13; pop r14; pop r15; pop rbx; pop rbp
 |.endmacro
 |
 |//----- 16 byte aligned,
-|.define SAVE_RET,     aword [rsp+aword*9]     //<-- rsp entering interpreter.
+|.define SAVE_RET,     aword [rsp+aword*11]    //<-- rsp entering interpreter.
+|.define SAVE_R6,      aword [rsp+aword*10]
+|.define SAVE_R5,      aword [rsp+aword*9]
 |.define SAVE_R4,      aword [rsp+aword*8]
 |.define SAVE_R3,      aword [rsp+aword*7]
 |.define SAVE_R2,      aword [rsp+aword*6]
index abdb5af914545777b991824d77859f4677214b4a..0b69e57446d46c5fb42a057a3ace020b6cb90b42 100644 (file)
@@ -48,7 +48,7 @@
 #define LJ_TARGET_X64          1
 #define LJ_TARGET_X86ORX64     1
 #define LJ_PAGESIZE            4096
-#error "No support for x64 architecture (yet)"
+#define LJ_ARCH_NOJIT          1       /* NYI */
 #else
 #error "No target architecture defined"
 #endif
index 14d640cd75282bde161707053a25ee4a857f297d..398ec4e5d47b78cf0f47b49c71900dab4d202386 100644 (file)
@@ -66,19 +66,19 @@ enum {
 #define CFRAME_SIZE            (12*4)
 #elif LJ_TARGET_X64
 #if _WIN64
-#define CFRAME_OFS_ERRF                (23*4)
-#define CFRAME_OFS_NRES                (22*4)
-#define CFRAME_OFS_PREV                (13*8)
-#define CFRAME_OFS_L           (24*4)
-#define CFRAME_OFS_PC          (25*4)
-#define CFRAME_SIZE            (10*8)
+#define CFRAME_OFS_PREV                (17*8)
+#define CFRAME_OFS_PC          (33*4)
+#define CFRAME_OFS_L           (32*4)
+#define CFRAME_OFS_ERRF                (31*4)
+#define CFRAME_OFS_NRES                (30*4)
+#define CFRAME_SIZE            (14*8)
 #else
-#define CFRAME_OFS_ERRF                (3*4)
-#define CFRAME_OFS_NRES                (2*4)
 #define CFRAME_OFS_PREV                (4*8)
-#define CFRAME_OFS_L           (4*4)
 #define CFRAME_OFS_PC          (5*4)
-#define CFRAME_SIZE            (10*8)
+#define CFRAME_OFS_L           (4*4)
+#define CFRAME_OFS_ERRF                (3*4)
+#define CFRAME_OFS_NRES                (2*4)
+#define CFRAME_SIZE            (12*8)
 #endif
 #else
 #error "Missing CFRAME_* definitions for this architecture"