]> granicus.if.org Git - clang/commitdiff
ARM: Support for __builtin_arm_rbit() intrinsic.
authorJim Grosbach <grosbach@apple.com>
Mon, 16 Jun 2014 21:55:58 +0000 (21:55 +0000)
committerJim Grosbach <grosbach@apple.com>
Mon, 16 Jun 2014 21:55:58 +0000 (21:55 +0000)
Reverse the bits in a word. Maps to the RBIT instruction.

rdar://9283021

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211059 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 9f650cc4154586c383e527e6127551a6b910d2e5..00cd2c1de41c968470e89b588e0a11e8ba0ebf6c 100644 (file)
@@ -24,6 +24,9 @@ BUILTIN(__builtin_arm_qsub, "iii", "nc")
 BUILTIN(__builtin_arm_ssat, "iiUi", "nc")
 BUILTIN(__builtin_arm_usat, "UiUiUi", "nc")
 
+// Bit manipulation
+BUILTIN(__builtin_arm_rbit, "UiUi", "nc")
+
 // Store and load exclusive
 BUILTIN(__builtin_arm_ldrexd, "LLUiv*", "")
 BUILTIN(__builtin_arm_strexd, "iLLUiv*", "")
index 47245cf2d8302e7a68cc4d88439ac4911f0f67ed..f4e11509a9d61d7c90ea78086a81eb48b37d2d7a 100644 (file)
@@ -3054,6 +3054,12 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
     return Builder.CreateCall(F, llvm::ConstantInt::get(Int32Ty, HintID));
   }
 
+  if (BuiltinID == ARM::BI__builtin_arm_rbit) {
+    return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_rbit),
+                                               EmitScalarExpr(E->getArg(0)),
+                              "rbit");
+  }
+
   if (BuiltinID == ARM::BI__clear_cache) {
     assert(E->getNumArgs() == 2 && "__clear_cache takes 2 arguments");
     const FunctionDecl *FD = E->getDirectCallee();
index c5e487aafd6c3347a2fc2b26d948b3362a9c81d1..13ffc607849dfb86d8a087cf705620745da14464 100644 (file)
@@ -52,3 +52,9 @@ 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)
 }
+
+// CHECK: call {{.*}} @llvm.arm.rbit(i32 %a)
+
+unsigned rbit(unsigned a) {
+  return __builtin_arm_rbit(a);
+}