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
path: root/newlib
diff options
context:
space:
mode:
authorMarcus Shawcroft <marcus.shawcroft@arm.com>2015-11-13 16:53:38 +0300
committerMarcus Shawcroft <marcus.shawcroft@arm.com>2015-11-23 18:22:26 +0300
commit8e62ab4ccc637f57c9f3e011eda7f769d78c0c8b (patch)
treed4e24ea36eb2455ab0cad7ca836553cb0cdec7cf /newlib
parentdc38827570d90b048eae55f0a2f21b5c5ca0d79b (diff)
[ARM] Adjust strcmp-armv7.S selection logic.
Reformulate the strcmp-armv7.S selection logic around the architecture features required by the implementation code rather (some) version of the architecture that expose those features.
Diffstat (limited to 'newlib')
-rw-r--r--newlib/ChangeLog5
-rw-r--r--newlib/libc/machine/arm/strlen-armv7.S34
-rw-r--r--newlib/libc/machine/arm/strlen-stub.c2
-rw-r--r--newlib/libc/machine/arm/strlen.S2
4 files changed, 40 insertions, 3 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index 65d4817fd..ed71afd4a 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,5 +1,10 @@
2015-11-23 Marcus Shawcroft <marcus.shawcroft@arm.com>
+ * libc/machine/arm/strlen-stub.c: Adjust strlen-armv7.S selection logic.
+ * libc/machine/arm/strlen.S: Likewise.
+
+2015-11-23 Marcus Shawcroft <marcus.shawcroft@arm.com>
+
* libc/machine/arm/strlen-stub.c: Move T2 -O2 implementation to...
* libc/machine/arm/strlen-thumb2-Os.S: New file.
* libc/machine/arm/strlen.S: Include strlen-thumb2-Os.S.
diff --git a/newlib/libc/machine/arm/strlen-armv7.S b/newlib/libc/machine/arm/strlen-armv7.S
index 4ce01829a..9dce6f2f7 100644
--- a/newlib/libc/machine/arm/strlen-armv7.S
+++ b/newlib/libc/machine/arm/strlen-armv7.S
@@ -29,9 +29,35 @@
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Assumes:
- ARMv6T2, AArch32
+ ARMv6T2 or ARMv7E-M, AArch32
*/
+/* Copyright (c) 2015 ARM Ltd.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the Linaro nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
+
#include "arm_asm.h"
.macro def_fn f p2align=0
@@ -51,6 +77,12 @@
#endif
/* This code requires Thumb. */
+#if __ARM_ARCH_PROFILE == 'M'
+ .arch armv7e-m
+#else
+ .arch armv6t2
+#endif
+ .eabi_attribute Tag_ARM_ISA_use, 0
.thumb
.syntax unified
diff --git a/newlib/libc/machine/arm/strlen-stub.c b/newlib/libc/machine/arm/strlen-stub.c
index 97500e0e8..bcd3d2d46 100644
--- a/newlib/libc/machine/arm/strlen-stub.c
+++ b/newlib/libc/machine/arm/strlen-stub.c
@@ -44,7 +44,7 @@
#if defined __thumb__ && ! defined __thumb2__
#include "../../string/strlen.c"
-#elif (__ARM_ARCH >= 7 && defined __ARM_ARCH_ISA_ARM) || defined __ARM_ARCH_6T2__
+#elif __ARM_ARCH_ISA_THUMB >= 2 && defined __ARM_FEATURE_DSP
/* Implemented in strlen.S. */
#else
diff --git a/newlib/libc/machine/arm/strlen.S b/newlib/libc/machine/arm/strlen.S
index e0dd122b5..57371453a 100644
--- a/newlib/libc/machine/arm/strlen.S
+++ b/newlib/libc/machine/arm/strlen.S
@@ -39,7 +39,7 @@
#if defined __thumb__ && ! defined __thumb2__
/* Implemented in strlen-stub.c. */
-#elif (__ARM_ARCH >= 7 && defined __ARM_ARCH_ISA_ARM) || defined __ARM_ARCH_6T2__
+#elif __ARM_ARCH_ISA_THUMB >= 2 && defined __ARM_FEATURE_DSP
#include "strlen-armv7.S"
#else