Unbreak win64 compilation callback.
authorAnton Korobeynikov <asl@math.spbu.ru>
Mon, 3 Aug 2009 08:43:36 +0000 (08:43 +0000)
committerAnton Korobeynikov <asl@math.spbu.ru>
Mon, 3 Aug 2009 08:43:36 +0000 (08:43 +0000)
Since we're generating stubs by hands we don't follow the ABI and don't
create a register spill area.
Don't use this area in compilation callback!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77968 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86CompilationCallback_Win64.asm

index a11c5c3ce431305445e06375212870901e4ff77a..f321778db24bbfeca4735ad1369caaf91c6fd323 100644 (file)
@@ -15,17 +15,18 @@ extrn X86CompilationCallback2: PROC
 
 .code
 X86CompilationCallback proc
-    ; Save all int arg registers into register spill area.
-    mov     [rsp+ 8], rcx
-    mov     [rsp+16], rdx
-    mov     [rsp+24], r8
-    mov     [rsp+32], r9
-
     push    rbp
 
     ; Save RSP.
     mov     rbp, rsp
 
+    ; Save all int arg registers
+    ; WARNING: We cannot use register spill area - we're generating stubs by hands!
+    push    rcx
+    push    rdx
+    push    r8
+    push    r9
+
     ; Align stack on 16-byte boundary.
     and     rsp, -16
 
@@ -52,15 +53,15 @@ X86CompilationCallback proc
     ; Restore RSP.
     mov     rsp, rbp
 
+    ; Restore all int arg registers
+    sub     rsp, 32
+    pop     r9
+    pop     r8
+    pop     rdx
+    pop     rcx
+
     ; Restore RBP.
     pop     rbp
-
-    ; Restore all int arg registers.
-    mov     r9,  [rsp+32]
-    mov     r8,  [rsp+24]
-    mov     rdx, [rsp+16]
-    mov     rcx, [rsp+ 8]
-
     ret
 X86CompilationCallback endp