diff options
| author | Yi Kong <Yi.Kong@arm.com> | 2014-07-17 12:45:17 +0000 |
|---|---|---|
| committer | Yi Kong <Yi.Kong@arm.com> | 2014-07-17 12:45:17 +0000 |
| commit | 28d7b026873670ff533bf250a72125bce25af84d (patch) | |
| tree | 204bf8eaa2835880e0310828b2864776a58a7565 | |
| parent | 5c37d70e9ed4e5cd0da0d0f074c9ed76697cad52 (diff) | |
| download | bcm5719-llvm-28d7b026873670ff533bf250a72125bce25af84d.tar.gz bcm5719-llvm-28d7b026873670ff533bf250a72125bce25af84d.zip | |
ARM: Add ACLE memory barrier intrinsic mapping
llvm-svn: 213261
| -rw-r--r-- | clang/lib/Headers/arm_acle.h | 9 | ||||
| -rw-r--r-- | clang/test/CodeGen/arm_acle.c | 24 |
2 files changed, 31 insertions, 2 deletions
diff --git a/clang/lib/Headers/arm_acle.h b/clang/lib/Headers/arm_acle.h index c51a5dcbef2..a0fd6894ab9 100644 --- a/clang/lib/Headers/arm_acle.h +++ b/clang/lib/Headers/arm_acle.h @@ -33,8 +33,15 @@ #if defined(__cplusplus) extern "C" { #endif - + /* 8 SYNCHRONIZATION, BARRIER AND HINT INTRINSICS */ +/* 8.3 Memory barriers */ +#if !defined(_MSC_VER) +#define __dmb(i) __builtin_arm_dmb(i) +#define __dsb(i) __builtin_arm_dsb(i) +#define __isb(i) __builtin_arm_isb(i) +#endif + /* 8.4 Hints */ #if !defined(_MSC_VER) diff --git a/clang/test/CodeGen/arm_acle.c b/clang/test/CodeGen/arm_acle.c index 41ebe1504c5..e4d795a1542 100644 --- a/clang/test/CodeGen/arm_acle.c +++ b/clang/test/CodeGen/arm_acle.c @@ -3,8 +3,30 @@ #include <arm_acle.h> -/* Hints */ +/* 8 SYNCHRONIZATION, BARRIER AND HINT INTRINSICS */ +/* 8.3 Memory Barriers */ +// ARM-LABEL: test_dmb +// AArch32: call void @llvm.arm.dmb(i32 1) +// AArch64: call void @llvm.aarch64.dmb(i32 1) +void test_dmb(void) { + __dmb(1); +} + +// ARM-LABEL: test_dsb +// AArch32: call void @llvm.arm.dsb(i32 2) +// AArch64: call void @llvm.aarch64.dsb(i32 2) +void test_dsb(void) { + __dsb(2); +} + +// ARM-LABEL: test_isb +// AArch32: call void @llvm.arm.isb(i32 3) +// AArch64: call void @llvm.aarch64.isb(i32 3) +void test_isb(void) { + __isb(3); +} +/* 8.4 Hints */ // ARM-LABEL: test_yield // AArch32: call void @llvm.arm.hint(i32 1) // AArch64: call void @llvm.aarch64.hint(i32 1) |

