diff options
author | Oliver Stannard <oliver.stannard@arm.com> | 2014-09-29 10:23:20 +0000 |
---|---|---|
committer | Oliver Stannard <oliver.stannard@arm.com> | 2014-09-29 10:23:20 +0000 |
commit | 8cf642b8dac6eefa2c707a67dea810629aa13e10 (patch) | |
tree | a4f39e15dec99aa71755692a91c90a3f2f557146 /lib | |
parent | 2f794721f44110059fae571430cb89fd64a3ff36 (diff) | |
download | compiler-rt-8cf642b8dac6eefa2c707a67dea810629aa13e10.tar.gz |
[compiler-rt] Do not use ldrexd or strexd on v7M
The ldrexd and strexd instructions are undefined for the ARMv7M
architecture, so we cannot use them to implement the
__sync_fetch_and_*_8 builtins. There is no other way to implement
these without OS support, so this patch #ifdef's these functions out
for M-class architectures.
There are no tests as I cannot find any existing tests for these
builtins.
I used the __ARM_ARCH_PROFILE predefine because __ARM_FEATURE_LDREX is
deprecated and not set by clang.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@218601 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/builtins/arm/sync_fetch_and_add_8.S | 2 | ||||
-rw-r--r-- | lib/builtins/arm/sync_fetch_and_and_8.S | 2 | ||||
-rw-r--r-- | lib/builtins/arm/sync_fetch_and_max_8.S | 2 | ||||
-rw-r--r-- | lib/builtins/arm/sync_fetch_and_min_8.S | 2 | ||||
-rw-r--r-- | lib/builtins/arm/sync_fetch_and_nand_8.S | 2 | ||||
-rw-r--r-- | lib/builtins/arm/sync_fetch_and_or_8.S | 2 | ||||
-rw-r--r-- | lib/builtins/arm/sync_fetch_and_sub_8.S | 2 | ||||
-rw-r--r-- | lib/builtins/arm/sync_fetch_and_umax_8.S | 2 | ||||
-rw-r--r-- | lib/builtins/arm/sync_fetch_and_umin_8.S | 2 | ||||
-rw-r--r-- | lib/builtins/arm/sync_fetch_and_xor_8.S | 2 |
10 files changed, 20 insertions, 0 deletions
diff --git a/lib/builtins/arm/sync_fetch_and_add_8.S b/lib/builtins/arm/sync_fetch_and_add_8.S index db59e055e..5724bb148 100644 --- a/lib/builtins/arm/sync_fetch_and_add_8.S +++ b/lib/builtins/arm/sync_fetch_and_add_8.S @@ -14,9 +14,11 @@ #include "sync-ops.h" +#if __ARM_ARCH_PROFILE != 'M' #define add_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) \ adds rD_LO, rN_LO, rM_LO ; \ adc rD_HI, rN_HI, rM_HI SYNC_OP_8(add_8) +#endif diff --git a/lib/builtins/arm/sync_fetch_and_and_8.S b/lib/builtins/arm/sync_fetch_and_and_8.S index 845c74f35..a74163a86 100644 --- a/lib/builtins/arm/sync_fetch_and_and_8.S +++ b/lib/builtins/arm/sync_fetch_and_and_8.S @@ -14,8 +14,10 @@ #include "sync-ops.h" +#if __ARM_ARCH_PROFILE != 'M' #define and_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) \ and rD_LO, rN_LO, rM_LO ; \ and rD_HI, rN_HI, rM_HI SYNC_OP_8(and_8) +#endif diff --git a/lib/builtins/arm/sync_fetch_and_max_8.S b/lib/builtins/arm/sync_fetch_and_max_8.S index 12dd46cc9..1eef2b223 100644 --- a/lib/builtins/arm/sync_fetch_and_max_8.S +++ b/lib/builtins/arm/sync_fetch_and_max_8.S @@ -14,6 +14,8 @@ #include "sync-ops.h" +#if __ARM_ARCH_PROFILE != 'M' #define max_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) MINMAX_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI, gt) SYNC_OP_8(max_8) +#endif diff --git a/lib/builtins/arm/sync_fetch_and_min_8.S b/lib/builtins/arm/sync_fetch_and_min_8.S index 97af2aa6f..ad5cce075 100644 --- a/lib/builtins/arm/sync_fetch_and_min_8.S +++ b/lib/builtins/arm/sync_fetch_and_min_8.S @@ -14,6 +14,8 @@ #include "sync-ops.h" +#if __ARM_ARCH_PROFILE != 'M' #define min_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) MINMAX_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI, lt) SYNC_OP_8(min_8) +#endif diff --git a/lib/builtins/arm/sync_fetch_and_nand_8.S b/lib/builtins/arm/sync_fetch_and_nand_8.S index 80e8c00f8..a2c17c09c 100644 --- a/lib/builtins/arm/sync_fetch_and_nand_8.S +++ b/lib/builtins/arm/sync_fetch_and_nand_8.S @@ -14,9 +14,11 @@ #include "sync-ops.h" +#if __ARM_ARCH_PROFILE != 'M' #define nand_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) \ bic rD_LO, rN_LO, rM_LO ; \ bic rD_HI, rN_HI, rM_HI SYNC_OP_8(nand_8) +#endif diff --git a/lib/builtins/arm/sync_fetch_and_or_8.S b/lib/builtins/arm/sync_fetch_and_or_8.S index 0f77f02c7..87b940bf6 100644 --- a/lib/builtins/arm/sync_fetch_and_or_8.S +++ b/lib/builtins/arm/sync_fetch_and_or_8.S @@ -14,9 +14,11 @@ #include "sync-ops.h" +#if __ARM_ARCH_PROFILE != 'M' #define or_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) \ orr rD_LO, rN_LO, rM_LO ; \ orr rD_HI, rN_HI, rM_HI SYNC_OP_8(or_8) +#endif diff --git a/lib/builtins/arm/sync_fetch_and_sub_8.S b/lib/builtins/arm/sync_fetch_and_sub_8.S index f4e1c4a60..a8035a276 100644 --- a/lib/builtins/arm/sync_fetch_and_sub_8.S +++ b/lib/builtins/arm/sync_fetch_and_sub_8.S @@ -14,9 +14,11 @@ #include "sync-ops.h" +#if __ARM_ARCH_PROFILE != 'M' #define sub_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) \ subs rD_LO, rN_LO, rM_LO ; \ sbc rD_HI, rN_HI, rM_HI SYNC_OP_8(sub_8) +#endif diff --git a/lib/builtins/arm/sync_fetch_and_umax_8.S b/lib/builtins/arm/sync_fetch_and_umax_8.S index 7716cfe82..d9b7965e5 100644 --- a/lib/builtins/arm/sync_fetch_and_umax_8.S +++ b/lib/builtins/arm/sync_fetch_and_umax_8.S @@ -14,6 +14,8 @@ #include "sync-ops.h" +#if __ARM_ARCH_PROFILE != 'M' #define umax_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) MINMAX_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI, hi) SYNC_OP_8(umax_8) +#endif diff --git a/lib/builtins/arm/sync_fetch_and_umin_8.S b/lib/builtins/arm/sync_fetch_and_umin_8.S index b099726bc..7bf5e2356 100644 --- a/lib/builtins/arm/sync_fetch_and_umin_8.S +++ b/lib/builtins/arm/sync_fetch_and_umin_8.S @@ -14,6 +14,8 @@ #include "sync-ops.h" +#if __ARM_ARCH_PROFILE != 'M' #define umin_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) MINMAX_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI, lo) SYNC_OP_8(umin_8) +#endif diff --git a/lib/builtins/arm/sync_fetch_and_xor_8.S b/lib/builtins/arm/sync_fetch_and_xor_8.S index 91b6a4c08..ea9aa6d4b 100644 --- a/lib/builtins/arm/sync_fetch_and_xor_8.S +++ b/lib/builtins/arm/sync_fetch_and_xor_8.S @@ -14,9 +14,11 @@ #include "sync-ops.h" +#if __ARM_ARCH_PROFILE != 'M' #define xor_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) \ eor rD_LO, rN_LO, rM_LO ; \ eor rD_HI, rN_HI, rM_HI SYNC_OP_8(xor_8) +#endif |