mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
arm: Commonize BX conditionals
Add BLX macro in addition and use it where appropriate.
This commit is contained in:
parent
92cc8e332b
commit
46dede0c00
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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); \
|
||||
|
Loading…
Reference in New Issue
Block a user