]> granicus.if.org Git - clang/commitdiff
add intrinsics: __builtin_arm_{dmb,dsb} for ARM
authorWeiming Zhao <weimingz@codeaurora.org>
Tue, 12 Nov 2013 21:42:50 +0000 (21:42 +0000)
committerWeiming Zhao <weimingz@codeaurora.org>
Tue, 12 Nov 2013 21:42:50 +0000 (21:42 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194513 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/BuiltinsARM.def
lib/Sema/SemaChecking.cpp
test/CodeGen/builtins-arm.c

index 5a2b573b16342ad295f6ba08ea861a0f8596e1d4..21bb892a8b9b7d75539ca328f418a25c7218b21e 100644 (file)
@@ -61,6 +61,10 @@ BUILTIN(__builtin_arm_crc32cd, "UiUiLLUi", "nc")
 // HINT
 BUILTIN(__builtin_arm_sevl, "v", "")
 
+// Data barrier
+BUILTIN(__builtin_arm_dmb, "vUi", "nc")
+BUILTIN(__builtin_arm_dsb, "vUi", "nc")
+
 // NEON
 #define GET_NEON_BUILTINS
 #include "clang/Basic/arm_neon.inc"
index 5fe2d03d1d19a550d88c7867ed9b42df2559a481..d059001f9bbd0c77b5c914a456b2c316a735c8b7 100644 (file)
@@ -624,6 +624,8 @@ bool Sema::CheckARMBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
   case ARM::BI__builtin_arm_usat: i = 1; u = 31; break;
   case ARM::BI__builtin_arm_vcvtr_f:
   case ARM::BI__builtin_arm_vcvtr_d: i = 1; u = 1; break;
+  case ARM::BI__builtin_arm_dmb:
+  case ARM::BI__builtin_arm_dsb: l = 0; u = 15; break;
 #define GET_NEON_IMMEDIATE_CHECK
 #include "clang/Basic/arm_neon.inc"
 #undef GET_NEON_IMMEDIATE_CHECK
index f8c7f730a9a3191993f6e7cf5ec6af01f3503356..937e1d96259471a26a39ca993b1c775cb49c8112 100644 (file)
@@ -22,5 +22,9 @@ void test_eh_return_data_regno()
 void sevl() {
   __builtin_arm_sevl();
 }
-
 // CHECK: call {{.*}} @llvm.arm.sevl
+
+void test_barrier() {
+  __builtin_arm_dmb(1); //CHECK: call {{.*}} @llvm.arm.dmb(i32 1)
+  __builtin_arm_dsb(2); //CHECK: call {{.*}} @llvm.arm.dsb(i32 2)
+}