]> granicus.if.org Git - clang/commitdiff
Wire up sema checking for __builtin_arm_usat and __builtin_arm_ssat immediates.
authorNate Begeman <natebegeman@mac.com>
Thu, 29 Jul 2010 22:48:34 +0000 (22:48 +0000)
committerNate Begeman <natebegeman@mac.com>
Thu, 29 Jul 2010 22:48:34 +0000 (22:48 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109814 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/BuiltinsARM.def
lib/CodeGen/CGBuiltin.cpp
lib/Sema/SemaChecking.cpp

index b2ddd9fb69a3c6525f23f97f6f8b548186a55691..9da073d6faec0ee5f138b525f264dd2036f75dae 100644 (file)
 // In libgcc
 BUILTIN(__clear_cache, "v.", "")
 BUILTIN(__builtin_thread_pointer, "v*", "")
+
+// Saturating arithmetic
 BUILTIN(__builtin_arm_qadd, "iii", "nc")
 BUILTIN(__builtin_arm_qsub, "iii", "nc")
+BUILTIN(__builtin_arm_ssat, "iiUi", "nc")
+BUILTIN(__builtin_arm_usat, "UiUiUi", "nc")
 
 // NEON
 #define GET_NEON_BUILTINS
index f3346e7bd71bd62cfe64de6d1dc48e90e3448410..7a14033b0e217e37ceeebf27a4ac438526124f8b 100644 (file)
@@ -1062,7 +1062,7 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
   }
 
   // Determine the type of this overloaded NEON intrinsic.
-  assert(BuiltinID > ARM::BI__builtin_thread_pointer);
+  assert(BuiltinID > ARM::BI__builtin_arm_usat);
 
   llvm::SmallVector<Value*, 4> Ops;
   for (unsigned i = 0, e = E->getNumArgs() - 1; i != e; i++)
index 03ca084dd89714101570e26edb3bcea4c0b76915..d032b3fe0180a9d2e202406721257402ffd33c65 100644 (file)
@@ -298,6 +298,8 @@ bool Sema::CheckARMBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
   unsigned i = 0, l = 0, u = 0;
   switch (BuiltinID) {
   default: return false;
+  case ARM::BI__builtin_arm_ssat: i = 1; l = 1; u = 31; break;
+  case ARM::BI__builtin_arm_usat: i = 1; u = 31; break;
 #define GET_NEON_IMMEDIATE_CHECK
 #include "clang/Basic/arm_neon.inc"
 #undef GET_NEON_IMMEDIATE_CHECK