arm: Commonize BX conditionals
authorRichard Henderson <rth@twiddle.net>
Fri, 15 Feb 2013 05:45:50 +0000 (21:45 -0800)
committerRichard Henderson <rth@twiddle.net>
Wed, 6 Mar 2013 15:46:46 +0000 (07:46 -0800)
Add BLX macro in addition and use it where appropriate.

ports/ChangeLog.arm
ports/sysdeps/arm/dl-tlsdesc.S
ports/sysdeps/arm/dl-trampoline.S
ports/sysdeps/arm/sysdep.h

index 2276ec5..7acde01 100644 (file)
@@ -1,5 +1,12 @@
 2013-03-06  Richard Henderson <rth@redhat.com>
 
+       * sysdeps/arm/sysdep.h (BX, BXC, BLX): New macros.
+       (DO_RET): Use BX.
+       (RETINSTR): Use BXC.
+       * sysdeps/arm/dl-tlsdesc.S (BX): Remove.
+       * sysdeps/arm/dl-trampoline.S (BX): Remove.
+       (_dl_runtime_profile): Use BLX.
+
        * sysdeps/arm/__longjmp.S (__longjmp): Use ldmia insn directly.
        * sysdeps/arm/sysdep.h (LOADREGS): Remove.
 
index 718d5fd..62a7e43 100644 (file)
 #include <tls.h>
 #include "tlsdesc.h"
 
-#ifdef __USE_BX__
-  #define BX(x)        bx x
-#else
-  #define BX(x)        mov pc, x
-#endif
-
        .text
        @ emit debug information with cfi
        @ use arm-specific pseudos for unwinding itself
index f2d1679..9366976 100644 (file)
 #include <sysdep.h>
 #include <libc-symbols.h>
 
-#if defined(__USE_BX__)
-#define BX(x) bx       x
-#else
-#define BX(x) mov      pc, x
-#endif
-
        .text
        .globl _dl_runtime_resolve
        .type _dl_runtime_resolve, #function
@@ -192,8 +186,7 @@ _dl_runtime_profile:
        add     ip, r7, #72
        ldmia   ip, {r0-r3}
        ldr     ip, [r7, #264]
-       mov     lr, pc
-       BX(ip)
+       BLX(ip)
        stmia   r7, {r0-r3}
 
        @ Call pltexit.
index 5f6c3f2..84313fe 100644 (file)
 
 #define PLTJMP(_x)     _x##(PLT)
 
-/* APCS-32 doesn't preserve the condition codes across function call. */
-#ifdef __APCS_32__
 #ifdef __USE_BX__
-#define RETINSTR(cond, reg)    \
-       bx##cond        reg
-#define DO_RET(_reg)           \
-       bx _reg
+# define BX(R)         bx      R
+# define BXC(C, R)     bx##C   R
+# ifdef __ARM_ARCH_4T__
+#  define BLX(R)       mov     lr, pc; bx R
+# else
+#  define BLX(R)       blx     R
+# endif
 #else
-#define RETINSTR(cond, reg)    \
-       mov##cond       pc, reg
-#define DO_RET(_reg)           \
-       mov pc, _reg
-#endif
-#else  /* APCS-26 */
-#define RETINSTR(cond, reg)    \
-       mov##cond##s    pc, reg
-#define DO_RET(_reg)           \
-       movs pc, _reg
+# define BX(R)         mov     pc, R
+# define BXC(C, R)     mov##C  pc, R
+# define BLX(R)                mov     lr, pc; mov pc, R
 #endif
 
+#define DO_RET(R)      BX(R)
+#define RETINSTR(C, R) BXC(C, R)
+
 /* Define an entry point visible from C.  */
 #define        ENTRY(name)                                     \
        .globl  C_SYMBOL_NAME(name);                    \