[llvm-commits] [llvm] r106662 -	/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
    Rafael Espindola 
    espindola at google.com
       
    Thu Jun 24 09:54:36 PDT 2010
    
    
  
> The B instruction does not support ARM/Thumb interworking, so if functions f and g are compiled with different instruction sets, the linker would need to insert a stub.  The stub would need to load the address of the target into a register and do a BX to it.  That would certainly negate any advantage from the tail call transformation, although hopefully the common case would not require interworking.  Does the GNU linker do that?
Looks like it does. I renamed f to main, compiled g as a thumb
function and linked. What I got:
000083fc <main>:
    83fc:       e92d4080        push    {r7, lr}
    8400:       e8bd4080        pop     {r7, lr}
    8404:       ea000035        b       84e0 <__f_from_arm>
000084e0 <__f_from_arm>:
    84e0:       e51ff004        ldr     pc, [pc, #-4]   ; 84e4
<__f_from_arm+0x4>
    84e4:       00008409        .word   0x00008409
00008408 <f>:
    8408:       202a            movs    r0, #42 ; 0x2a
    840a:       4770            bx      lr
Cheers,
-- 
Rafael Ávila de Espíndola
    
    
More information about the llvm-commits
mailing list