arm: Remove optpld macro

LTO can re-order top-level assembly blocks, which can cause this
macro definition to appear after its use (or not at all), causing
compilation failures. As the macro has very few uses, simply removing
it by inlining is a simple fix.

n.b. one of the macro invocations in strlen-stub.c was already
guarded by the relevant #define, so it is simply converted directly
to a pld
This commit is contained in:
Pat Pannuto 2017-01-11 23:50:18 -05:00 committed by Corinna Vinschen
parent e7332409cc
commit b219285f87
3 changed files with 11 additions and 18 deletions

View File

@ -71,12 +71,6 @@
#endif
.endm
.macro optpld base, offset=#0
#if defined (_ISA_ARM_7)
pld [\base, \offset]
#endif
.endm
#else
asm(".macro RETURN cond=\n\t"
#if defined (_ISA_ARM_4T) || defined (_ISA_THUMB_1)
@ -86,13 +80,6 @@ asm(".macro RETURN cond=\n\t"
#endif
".endm"
);
asm(".macro optpld base, offset=#0\n\t"
#if defined (_ISA_ARM_7)
"pld [\\base, \\offset]\n\t"
#endif
".endm"
);
#endif
#endif /* ARM_ASM__H */

View File

@ -44,7 +44,9 @@ strcpy (char* dst, const char* src)
asm (
#if !(defined(__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED) || \
(defined (__thumb__) && !defined (__thumb2__)))
"optpld r1\n\t"
#ifdef _ISA_ARM_7
"pld r1\n\t"
#endif
"eor r2, r0, r1\n\t"
"mov ip, r0\n\t"
"tst r2, #3\n\t"
@ -75,7 +77,9 @@ strcpy (char* dst, const char* src)
load stalls. */
".p2align 2\n"
"2:\n\t"
"optpld r1, #8\n\t"
#ifdef _ISA_ARM_7
"pld r1, #8\n\t"
#endif
"ldr r4, [r1], #4\n\t"
"sub r2, r3, "magic1(r5)"\n\t"
"bics r2, r2, r3\n\t"

View File

@ -58,7 +58,9 @@ strlen (const char* str)
"data .req r3\n\t"
"addr .req r1\n\t"
"optpld r0\n\t"
#ifdef _ISA_ARM_7
"pld r0\n\t"
#endif
/* Word-align address */
"bic addr, r0, #3\n\t"
/* Get adjustment for start ... */
@ -113,8 +115,8 @@ strlen (const char* str)
"ldreq data, [addr], #4\n\t"
/* and 4 more bytes */
"addeq len, len, #4\n\t"
/* If we have PLD, then unroll the loop a bit. */
"optpld addr, #8\n\t"
/* Unroll the loop a bit. */
"pld addr, #8\n\t"
/* test (data - 0x01010101) */
"ittt eq\n\t"
"subeq r2, data, ip\n\t"