From 692df93de427356d3ab7bb0438a3c998f28186ea Mon Sep 17 00:00:00 2001 From: Bob Wilson Date: Tue, 1 Feb 2011 22:30:51 +0000 Subject: [PATCH] PR9081: Split up LDM instruction with deprecated use of both LR and PC. This is completely untested but pretty straightforward, so hopefully I got it right. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124694 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMJITInfo.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/Target/ARM/ARMJITInfo.cpp b/lib/Target/ARM/ARMJITInfo.cpp index 50e6562c79e..61c68ef1379 100644 --- a/lib/Target/ARM/ARMJITInfo.cpp +++ b/lib/Target/ARM/ARMJITInfo.cpp @@ -43,7 +43,7 @@ static TargetJITInfo::JITCompilerFn JITCompilerFunction; #define ASMPREFIX GETASMPREFIX(__USER_LABEL_PREFIX__) // CompilationCallback stub - We can't use a C function with inline assembly in -// it, because we the prolog/epilog inserted by GCC won't work for us (we need +// it, because the prolog/epilog inserted by GCC won't work for us. (We need // to preserve more context and manipulate the stack directly). Instead, // write our own wrapper, which does things our way, so we have complete // control over register saving and restoring. @@ -99,7 +99,8 @@ extern "C" { // The above twiddling of the saved return addresses allows us to // deallocate everything, including the LR the stub saved, all in one // pop instruction. - "ldmia sp!, {r0, r1, r2, r3, lr, pc}\n" + "ldmia sp!, {r0, r1, r2, r3, lr}\n" + "ldr pc, [sp], #4\n" ); #else // Not an ARM host void ARMCompilationCallback() {