summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2015-04-20 18:25:44 +0000
committerLang Hames <lhames@gmail.com>2015-04-20 18:25:44 +0000
commit67e6e04a1e95e08d63004642dbbbdde277a3dbec (patch)
treea04b73d15de58365899ac3f867cc8a9eaecaee88 /llvm/lib/ExecutionEngine
parent468d6d7fa6ea9f323066f2451ca519d7f5feb2f5 (diff)
downloadbcm5719-llvm-67e6e04a1e95e08d63004642dbbbdde277a3dbec.tar.gz
bcm5719-llvm-67e6e04a1e95e08d63004642dbbbdde277a3dbec.zip
[Orc] Use the 64-bit versions of FXSAVE/FXRSTOR for JIT reentry.
llvm-svn: 235325
Diffstat (limited to 'llvm/lib/ExecutionEngine')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/OrcTargetSupport.cpp32
1 files changed, 16 insertions, 16 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/OrcTargetSupport.cpp b/llvm/lib/ExecutionEngine/Orc/OrcTargetSupport.cpp
index fc56e67b85c..258868aa64f 100644
--- a/llvm/lib/ExecutionEngine/Orc/OrcTargetSupport.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/OrcTargetSupport.cpp
@@ -56,12 +56,12 @@ void OrcX86_64::insertResolverBlock(
// Start the resolver function.
AsmStream << ResolverBlockName << ":\n"
- << " pushq %rbp\n"
- << " movq %rsp, %rbp\n";
+ << " pushq %rbp\n"
+ << " movq %rsp, %rbp\n";
// Store the GPRs.
for (const auto &GPR : GPRs)
- AsmStream << " pushq %" << GPR << "\n";
+ AsmStream << " pushq %" << GPR << "\n";
// Store floating-point state with FXSAVE.
// Note: We need to keep the stack 16-byte aligned, so if we've emitted an odd
@@ -69,30 +69,30 @@ void OrcX86_64::insertResolverBlock(
// an extra 64 bits of padding to the FXSave area.
unsigned Padding = (GPRs.size() + 1) % 2 ? 8 : 0;
unsigned FXSaveSize = 512 + Padding;
- AsmStream << " subq $" << FXSaveSize << ", %rsp\n"
- << " fxsave (%rsp)\n"
+ AsmStream << " subq $" << FXSaveSize << ", %rsp\n"
+ << " fxsave64 (%rsp)\n"
// Load callback manager address, compute trampoline address, call JIT.
- << " lea jit_callback_manager_addr(%rip), %rdi\n"
- << " movq (%rdi), %rdi\n"
- << " movq 0x8(%rbp), %rsi\n"
- << " subq $" << X86_64_TrampolineLength << ", %rsi\n"
- << " movabsq $" << CallbackAddr << ", %rax\n"
- << " callq *%rax\n"
+ << " lea jit_callback_manager_addr(%rip), %rdi\n"
+ << " movq (%rdi), %rdi\n"
+ << " movq 0x8(%rbp), %rsi\n"
+ << " subq $" << X86_64_TrampolineLength << ", %rsi\n"
+ << " movabsq $" << CallbackAddr << ", %rax\n"
+ << " callq *%rax\n"
// Replace the return to the trampoline with the return address of the
// compiled function body.
- << " movq %rax, 0x8(%rbp)\n"
+ << " movq %rax, 0x8(%rbp)\n"
// Restore the floating point state.
- << " fxrstor (%rsp)\n"
- << " addq $" << FXSaveSize << ", %rsp\n";
+ << " fxrstor64 (%rsp)\n"
+ << " addq $" << FXSaveSize << ", %rsp\n";
for (const auto &GPR : make_range(GPRs.rbegin(), GPRs.rend()))
- AsmStream << " popq %" << GPR << "\n";
+ AsmStream << " popq %" << GPR << "\n";
// Restore original RBP and return to compiled function body.
- AsmStream << " popq %rbp\n"
+ AsmStream << " popq %rbp\n"
<< " retq\n";
M.appendModuleInlineAsm(AsmStream.str());
OpenPOWER on IntegriCloud