summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorYi Kong <Yi.Kong@arm.com>2014-07-17 10:52:06 +0000
committerYi Kong <Yi.Kong@arm.com>2014-07-17 10:52:06 +0000
commit19a29ac0d0fbd5fcbc616a2666a7427a5cd336f9 (patch)
tree757996dc073737eb19b6f465c65f8e93ceb02e94 /clang/lib/Sema
parent6dbcbac98b41df8e08ba4fdea2a835617cf9e8b8 (diff)
downloadbcm5719-llvm-19a29ac0d0fbd5fcbc616a2666a7427a5cd336f9.tar.gz
bcm5719-llvm-19a29ac0d0fbd5fcbc616a2666a7427a5cd336f9.zip
Port memory barriers intrinsics to AArch64
Memory barrier __builtin_arm_[dmb, dsb, isb] intrinsics are required to implement their corresponding ACLE and MSVC intrinsics. This patch ports ARM dmb, dsb, isb intrinsic to AArch64. Requires LLVM r213247. Differential Revision: http://reviews.llvm.org/D4521 llvm-svn: 213250
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r--clang/lib/Sema/SemaChecking.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 976f3a696df..7a23797d477 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -645,7 +645,18 @@ bool Sema::CheckAArch64BuiltinFunctionCall(unsigned BuiltinID,
if (CheckNeonBuiltinFunctionCall(BuiltinID, TheCall))
return true;
- return false;
+ // For intrinsics which take an immediate value as part of the instruction,
+ // range check them here.
+ unsigned i = 0, l = 0, u = 0;
+ switch (BuiltinID) {
+ default: return false;
+ case AArch64::BI__builtin_arm_dmb:
+ case AArch64::BI__builtin_arm_dsb:
+ case AArch64::BI__builtin_arm_isb: l = 0; u = 15; break;
+ }
+
+ // FIXME: VFP Intrinsics should error if VFP not present.
+ return SemaBuiltinConstantArgRange(TheCall, i, l, u + l);
}
bool Sema::CheckMipsBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
OpenPOWER on IntegriCloud