diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index b5a5cbe7a035..9c375cb880ba 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -3681,7 +3681,7 @@ public: bool Enabled) const { if (Name == "soft-float" || Name == "soft-float-abi" || Name == "vfp2" || Name == "vfp3" || Name == "vfp4" || Name == "neon" || - Name == "d16" || Name == "neonfp") { + Name == "d16" || Name == "neonfp" || Name == "v8fp") { Features[Name] = Enabled; } else return false; diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 925a18faafd5..7d634f55bc71 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -590,6 +590,14 @@ static void addFPUArgs(const Driver &D, const Arg *A, const ArgList &Args, CmdArgs.push_back("+vfp3"); CmdArgs.push_back("-target-feature"); CmdArgs.push_back("-neon"); + } else if (FPU == "fp-armv8") { + CmdArgs.push_back("-target-feature"); + CmdArgs.push_back("+v8fp"); + } else if (FPU == "neon-fp-armv8") { + CmdArgs.push_back("-target-feature"); + CmdArgs.push_back("+v8fp"); + CmdArgs.push_back("-target-feature"); + CmdArgs.push_back("+neon"); } else if (FPU == "neon") { CmdArgs.push_back("-target-feature"); CmdArgs.push_back("+neon"); diff --git a/clang/test/Driver/arm-mfpu.c b/clang/test/Driver/arm-mfpu.c index f51c41ed3f8a..3e579f10a204 100644 --- a/clang/test/Driver/arm-mfpu.c +++ b/clang/test/Driver/arm-mfpu.c @@ -46,3 +46,12 @@ // RUN: %clang -target arm-linux-eabi -msoft-float %s -### -o %t.o 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-SOFT-FLOAT %s // CHECK-SOFT-FLOAT: "-target-feature" "-neon" + +// RUN: %clang -target armv8-linux-gnueabihf -mfpu=fp-armv8 %s -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-FP-ARMV8 %s +// CHECK-FP-ARMV8: "-target-feature" "+v8fp" + +// RUN: %clang -target armv8-linux-gnueabihf -mfpu=neon-fp-armv8 %s -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-NEON-FP-ARMV8 %s +// CHECK-NEON-FP-ARMV8: "-target-feature" "+v8fp" +// CHECK-NEON-FP-ARMV8: "-target-feature" "+neon"