Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPat Pannuto <pat.pannuto@gmail.com>2017-01-12 07:50:18 +0300
committerCorinna Vinschen <corinna@vinschen.de>2017-01-25 15:32:09 +0300
commitb219285f873cc79361355938bd2a994957b4a6ef (patch)
tree2d21ad13233499e757cf6c43ad344f0eb5bae2d9 /newlib/libc/machine
parente7332409cc15a0fc7c91b0bb9fd1f24348f9f720 (diff)
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
Diffstat (limited to 'newlib/libc/machine')
-rw-r--r--newlib/libc/machine/arm/arm_asm.h13
-rw-r--r--newlib/libc/machine/arm/strcpy.c8
-rw-r--r--newlib/libc/machine/arm/strlen-stub.c8
3 files changed, 11 insertions, 18 deletions
diff --git a/newlib/libc/machine/arm/arm_asm.h b/newlib/libc/machine/arm/arm_asm.h
index 1bb5edb23..bf18c0a03 100644
--- a/newlib/libc/machine/arm/arm_asm.h
+++ b/newlib/libc/machine/arm/arm_asm.h
@@ -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 */
diff --git a/newlib/libc/machine/arm/strcpy.c b/newlib/libc/machine/arm/strcpy.c
index b2e3f5177..b90d5cf73 100644
--- a/newlib/libc/machine/arm/strcpy.c
+++ b/newlib/libc/machine/arm/strcpy.c
@@ -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"
diff --git a/newlib/libc/machine/arm/strlen-stub.c b/newlib/libc/machine/arm/strlen-stub.c
index ea45a3789..69cfa3df0 100644
--- a/newlib/libc/machine/arm/strlen-stub.c
+++ b/newlib/libc/machine/arm/strlen-stub.c
@@ -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"