summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuIC Gerrit Code Review <gerrit@quicinc.com>2009-12-14 00:01:46 -0800
committerQuIC Gerrit Code Review <gerrit@quicinc.com>2009-12-14 00:01:46 -0800
commit4ebbea8c6da01a220303388ab4c68c13a5ffbfc1 (patch)
tree6dd41f74b1e31fd44f6e9611ce3d0c89f18e861b
parentdfc37ee5aa586d4cb96d6638506c9be0263aab3b (diff)
parentaa9d1bebc8c5c6f782603f3958a8b26a4fd1509c (diff)
downloadbionic-4ebbea8c6da01a220303388ab4c68c13a5ffbfc1.zip
bionic-4ebbea8c6da01a220303388ab4c68c13a5ffbfc1.tar.gz
bionic-4ebbea8c6da01a220303388ab4c68c13a5ffbfc1.tar.bz2
Merge change Iaa9d1beb into eclair
* changes: bionic: remove V5 instruction for V6 targets
-rw-r--r--libc/arch-arm/bionic/memcpy.S11
1 files changed, 11 insertions, 0 deletions
diff --git a/libc/arch-arm/bionic/memcpy.S b/libc/arch-arm/bionic/memcpy.S
index 024d885..ef4b399 100644
--- a/libc/arch-arm/bionic/memcpy.S
+++ b/libc/arch-arm/bionic/memcpy.S
@@ -260,20 +260,31 @@ cached_aligned32:
*
*/
+#if __ARM_ARCH__ == 5
// Align the preload register to a cache-line because the cpu does
// "critical word first" (the first word requested is loaded first).
bic r12, r1, #0x1F
add r12, r12, #64
+#endif
1: ldmia r1!, { r4-r11 }
+
+#if __ARM_ARCH__ == 5
PLD (r12, #64)
+#else
+ PLD (r1, #64)
+#endif
+
subs r2, r2, #32
+#if __ARM_ARCH__ == 5
// NOTE: if r12 is more than 64 ahead of r1, the following ldrhi
// for ARM9 preload will not be safely guarded by the preceding subs.
// When it is safely guarded the only possibility to have SIGSEGV here
// is because the caller overstates the length.
ldrhi r3, [r12], #32 /* cheap ARM9 preload */
+#endif
+
stmia r0!, { r4-r11 }
bhs 1b