From: Chad Rosier Date: Wed, 16 Oct 2013 21:04:49 +0000 (+0000) Subject: [AArch64] Add support for NEON scalar absolute value instruction. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=567fd23e1e108c8b3441ea01dd3e7453ea04acff;p=clang [AArch64] Add support for NEON scalar absolute value instruction. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192844 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/arm_neon.td b/include/clang/Basic/arm_neon.td index c65a99b3c1..bc989cde67 100644 --- a/include/clang/Basic/arm_neon.td +++ b/include/clang/Basic/arm_neon.td @@ -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">; diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index f905595f52..74ff2dd463 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -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: diff --git a/test/CodeGen/aarch64-neon-intrinsics.c b/test/CodeGen/aarch64-neon-intrinsics.c index 54b4e7536a..37fb3775c3 100644 --- a/test/CodeGen/aarch64-neon-intrinsics.c +++ b/test/CodeGen/aarch64-neon-intrinsics.c @@ -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]+}}