arm: Commonize BX conditionals

Add BLX macro in addition and use it where appropriate.
This commit is contained in:
Richard Henderson 2013-02-14 21:45:50 -08:00
parent 92cc8e332b
commit 46dede0c00
4 changed files with 21 additions and 30 deletions

View 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.

View file

@ -20,12 +20,6 @@
#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

View file

@ -21,12 +21,6 @@
#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.

View file

@ -33,26 +33,23 @@
#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); \