From: Chad Rosier Date: Wed, 16 Oct 2013 21:04:53 +0000 (+0000) Subject: [AArch64] Add support for NEON scalar negate instruction. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cced97c345843a41ff68c9536bf54a0dfb772846;p=clang [AArch64] Add support for NEON scalar negate instruction. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192845 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/arm_neon.td b/include/clang/Basic/arm_neon.td index bc989cde67..56b7e9c15b 100644 --- a/include/clang/Basic/arm_neon.td +++ b/include/clang/Basic/arm_neon.td @@ -863,6 +863,10 @@ def SCALAR_ABS : SInst<"vabs", "ss", "Sl">; // Scalar Signed Saturating Absolute Value def SCALAR_SQABS : SInst<"vqabs", "ss", "ScSsSiSl">; +//////////////////////////////////////////////////////////////////////////////// +// Scalar Negate +def SCALAR_NEG : SInst<"vneg", "ss", "Sl">; + //////////////////////////////////////////////////////////////////////////////// // Scalar Signed Saturating Negate def SCALAR_SQNEG : SInst<"vqneg", "ss", "ScSsSiSl">; diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index 74ff2dd463..36829391e5 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -2085,6 +2085,10 @@ static Value *EmitAArch64ScalarBuiltinExpr(CodeGenFunction &CGF, case AArch64::BI__builtin_neon_vqabsd_s64: Int = Intrinsic::arm_neon_vqabs; s = "vqabs"; OverloadInt = true; break; + // Scalar Negate + case AArch64::BI__builtin_neon_vnegd_s64: + Int = Intrinsic::aarch64_neon_vneg; + s = "vneg"; OverloadInt = false; break; // Scalar Signed Saturating Negate case AArch64::BI__builtin_neon_vqnegb_s8: case AArch64::BI__builtin_neon_vqnegh_s16: diff --git a/test/CodeGen/aarch64-neon-intrinsics.c b/test/CodeGen/aarch64-neon-intrinsics.c index 37fb3775c3..d3fd0cd585 100644 --- a/test/CodeGen/aarch64-neon-intrinsics.c +++ b/test/CodeGen/aarch64-neon-intrinsics.c @@ -7148,6 +7148,12 @@ int64_t test_vqabsd_s64(int64_t a) { return (int64_t)vqabsd_s64(a); } +int64_t test_vnegd_s64(int64_t a) { +// CHECK: test_vnegd_s64 +// CHECK: neg {{d[0-9]+}}, {{d[0-9]+}} + return (int64_t)vnegd_s64(a); +} + int8_t test_vqnegb_s8(int8_t a) { // CHECK: test_vqnegb_s8 // CHECK: sqneg {{b[0-9]+}}, {{b[0-9]+}}