[llvm-commits] [llvm] r124694 - /llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp

Bob Wilson bob.wilson at apple.com
Wed Feb 2 09:26:37 PST 2011


On Feb 2, 2011, at 3:14 AM, Renato Golin wrote:

> Hi Bob,
> 
> Two things...
> 
> First, silly comment but, would be good to update the comment just above (all in one pop) to reflect the change.

Sure, I can do that.

> 
> Second, I'm not a JIT expert (nor I know the full context), but does that mix with the requirement of using BX LR (for ARM/Thumb switch)? Or the JOT never mix them up anyway?

Last time I checked (quite a while ago) the JIT only supported ARM.  The "ldr pc" instruction will support interworking in v5T and beyond, and it's no worse in that respect than the ldm instruction used before.

I'm not at all familiar with this code, but as far as I can tell, it is supposed to branch with _all_ of the registers restored to their original values, including LR.  So that pretty much rules out using "bx lr"....

At least this way it will avoid the build failure.

> 
> cheers,
> --renato
> 
> ________________________________________
> From: llvm-commits-bounces at cs.uiuc.edu [llvm-commits-bounces at cs.uiuc.edu] On Behalf Of Bob Wilson [bob.wilson at apple.com]
> Sent: 01 February 2011 22:30
> To: llvm-commits at cs.uiuc.edu
> Subject: [llvm-commits] [llvm] r124694 -        /llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp
> 
> Author: bwilson
> Date: Tue Feb  1 16:30:51 2011
> New Revision: 124694
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=124694&view=rev
> Log:
> 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.
> 
> Modified:
>    llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp
> 
> Modified: llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp?rev=124694&r1=124693&r2=124694&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp Tue Feb  1 16:30:51 2011
> @@ -43,7 +43,7 @@
> #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 @@
>     // 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() {
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> 
> -- IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium.  Thank you.
> 





More information about the llvm-commits mailing list