From 55de0addd599e2aae041c2b17236429a0dc469ef Mon Sep 17 00:00:00 2001 From: Jonathan Schleifer Date: Sat, 7 Nov 2015 18:29:50 +0100 Subject: [PATCH] arm/arch_string.S: Only use sane insns for Clang --- .../libroot/posix/string/arch/arm/arch_string.S | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/system/libroot/posix/string/arch/arm/arch_string.S b/src/system/libroot/posix/string/arch/arm/arch_string.S index 7ff32e5ec1..e5918f1c3d 100644 --- a/src/system/libroot/posix/string/arch/arm/arch_string.S +++ b/src/system/libroot/posix/string/arch/arm/arch_string.S @@ -115,6 +115,7 @@ FUNCTION(memcpy): msr CPSR_f, r12 // move into NZCV fields in CPSR // move as many bytes as necessary to get the dst aligned +#ifdef __clang__ ldrbvs r3, [r1], #1 // V set ldrhcs r4, [r1], #2 // C set ldreq r5, [r1], #4 // Z set @@ -125,6 +126,18 @@ FUNCTION(memcpy): ldmiami r1!, {r3-r4} // N set stmiami r0!, {r3-r4} +#else + ldrvsb r3, [r1], #1 // V set + ldrcsh r4, [r1], #2 // C set + ldreq r5, [r1], #4 // Z set + + strvsb r3, [r0], #1 + strcsh r4, [r0], #2 + streq r5, [r0], #4 + + ldmmiia r1!, {r3-r4} // N set + stmmiia r0!, {r3-r4} +#endif // fix the remaining len sub r2, r2, r12, lsr #28