diff options
| -rw-r--r-- | clang/include/clang/Basic/arm_neon.td | 4 | ||||
| -rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 4 | ||||
| -rw-r--r-- | clang/test/CodeGen/aarch64-neon-intrinsics.c | 6 | 
3 files changed, 14 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/arm_neon.td b/clang/include/clang/Basic/arm_neon.td index bc989cde671..56b7e9c15b4 100644 --- a/clang/include/clang/Basic/arm_neon.td +++ b/clang/include/clang/Basic/arm_neon.td @@ -864,6 +864,10 @@ def SCALAR_ABS : SInst<"vabs", "ss", "Sl">;  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/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 74ff2dd4639..36829391e53 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/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/clang/test/CodeGen/aarch64-neon-intrinsics.c b/clang/test/CodeGen/aarch64-neon-intrinsics.c index 37fb3775c3e..d3fd0cd585e 100644 --- a/clang/test/CodeGen/aarch64-neon-intrinsics.c +++ b/clang/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]+}}  | 

