summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86JITInfo.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2006-06-24 08:36:10 +0000
committerEvan Cheng <evan.cheng@apple.com>2006-06-24 08:36:10 +0000
commit38c5aee959120cc7d2cf33863dfa892073011f5b (patch)
tree08642bdc15255914ec53f56b464c8a639d6ef00d /llvm/lib/Target/X86/X86JITInfo.cpp
parenta7b2bd5997431ff12c4402bd2f211b5d2b7e5fd3 (diff)
downloadbcm5719-llvm-38c5aee959120cc7d2cf33863dfa892073011f5b.tar.gz
bcm5719-llvm-38c5aee959120cc7d2cf33863dfa892073011f5b.zip
Simplify X86CompilationCallback: always align to 16-byte boundary; don't save EAX/EDX if unnecessary.
llvm-svn: 28910
Diffstat (limited to 'llvm/lib/Target/X86/X86JITInfo.cpp')
-rw-r--r--llvm/lib/Target/X86/X86JITInfo.cpp30
1 files changed, 16 insertions, 14 deletions
diff --git a/llvm/lib/Target/X86/X86JITInfo.cpp b/llvm/lib/Target/X86/X86JITInfo.cpp
index 87fca4381ce..a96b4a67e34 100644
--- a/llvm/lib/Target/X86/X86JITInfo.cpp
+++ b/llvm/lib/Target/X86/X86JITInfo.cpp
@@ -57,26 +57,28 @@ extern "C" {
#endif
"pushl %ebp\n"
"movl %esp, %ebp\n" // Standard prologue
+#if FASTCC_NUM_INT_ARGS_INREGS > 0
"pushl %eax\n"
- "pushl %edx\n" // save EAX/EDX
-#if defined(__CYGWIN__) || defined(__MINGW32__)
- "call _X86CompilationCallback2\n"
-#elif defined(__APPLE__)
- "movl 4(%ebp), %eax\n" // load the address of return address
- "movl $24, %edx\n" // if the opcode of the instruction at the
- "cmpb $-51, (%eax)\n" // return address is our 0xCD marker, then
- "movl $12, %eax\n" // subtract 24 from %esp to realign it to 16
- "cmovne %eax, %edx\n" // bytes after the push of edx, the amount to.
- "subl %edx, %esp\n" // the push of edx to keep it aligned.
- "pushl %edx\n" // subtract. Otherwise, subtract 12 bytes after
+ "pushl %edx\n" // Save EAX/EDX
+#endif
+#if defined(__APPLE__)
+ "andl $-16, %esp\n" // Align ESP on 16-byte boundary
+#endif
+#if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__APPLE__)
"call _X86CompilationCallback2\n"
- "popl %edx\n"
- "addl %edx, %esp\n"
#else
- "call X86CompilationCallback2\n"
+ "call X86CompilationCallback2\n"
+#endif
+#if defined(__APPLE__)
+ "movl %ebp, %esp\n" // Restore ESP
+#endif
+#if FASTCC_NUM_INT_ARGS_INREGS > 0
+#if defined(__APPLE__)
+ "subl $8, %esp\n"
#endif
"popl %edx\n"
"popl %eax\n"
+#endif
"popl %ebp\n"
"ret\n");
#else
OpenPOWER on IntegriCloud