]> granicus.if.org Git - clang/commitdiff
[AArch64] Add support for NEON scalar absolute value instruction.
authorChad Rosier <mcrosier@codeaurora.org>
Wed, 16 Oct 2013 21:04:49 +0000 (21:04 +0000)
committerChad Rosier <mcrosier@codeaurora.org>
Wed, 16 Oct 2013 21:04:49 +0000 (21:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192844 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/arm_neon.td
lib/CodeGen/CGBuiltin.cpp
test/CodeGen/aarch64-neon-intrinsics.c

index c65a99b3c1eefb7a8d5b082f8cd38add9f81b13a..bc989cde6718c7617f1905a4a2a83adae4353932 100644 (file)
@@ -855,6 +855,10 @@ def SCALAR_CMGTZ : SInst<"vcgtz", "ss", "Sl">;
 def SCALAR_CMHI : SInst<"vcgt", "sss", "SUl">;
 def SCALAR_CMTST : SInst<"vtst", "sss", "SlSUl">;
 
+////////////////////////////////////////////////////////////////////////////////
+// Scalar Absolute Value
+def SCALAR_ABS : SInst<"vabs", "ss", "Sl">;
+
 ////////////////////////////////////////////////////////////////////////////////
 // Scalar Signed Saturating Absolute Value
 def SCALAR_SQABS : SInst<"vqabs", "ss", "ScSsSiSl">;
index f905595f52034d5f1be586e77bce23bac0c22d1b..74ff2dd46399897ea4d7a95d0b32126e4cc22c28 100644 (file)
@@ -2074,6 +2074,10 @@ static Value *EmitAArch64ScalarBuiltinExpr(CodeGenFunction &CGF,
   case AArch64::BI__builtin_neon_vtstd_u64:
     Int = Intrinsic::aarch64_neon_vtstd; s = "vtst";
     OverloadInt = false; break;
+  // Scalar Absolute Value
+  case AArch64::BI__builtin_neon_vabsd_s64:
+    Int = Intrinsic::aarch64_neon_vabs;
+    s = "vabs"; OverloadInt = false; break;
   // Scalar Signed Saturating Absolute Value
   case AArch64::BI__builtin_neon_vqabsb_s8:
   case AArch64::BI__builtin_neon_vqabsh_s16:
index 54b4e7536afbb744dd732493c1b0bfc50fbf4171..37fb3775c3ef8ff38f7e2b1d239df0875b22ac0b 100644 (file)
@@ -7118,6 +7118,12 @@ uint64_t test_vtstd_u64(uint64_t a, uint64_t b) {
   return (uint64_t)vtstd_u64(a, b);
 }
 
+int64_t test_vabsd_s64(int64_t a) {
+// CHECK: test_vabsd_s64
+// CHECK: abs {{d[0-9]+}}, {{d[0-9]+}}
+  return (int64_t)vabsd_s64(a);
+}
+
 int8_t test_vqabsb_s8(int8_t a) {
 // CHECK: test_vqabsb_s8
 // CHECK: sqabs {{b[0-9]+}}, {{b[0-9]+}}