2015-01-26 21:24:04 +00:00
|
|
|
Pull in r227062 from upstream clang trunk (by Renato Golin):
|
|
|
|
|
|
|
|
Allows Clang to use LLVM's fixes-x18 option
|
|
|
|
|
|
|
|
This patch allows clang to have llvm reserve the x18
|
|
|
|
platform register on AArch64. FreeBSD will use this in the kernel for
|
|
|
|
per-cpu data but has no need to reserve this register in userland so
|
|
|
|
will need this flag to reserve it.
|
|
|
|
|
|
|
|
This uses llvm r226664 to allow this register to be reserved.
|
|
|
|
|
|
|
|
Patch by Andrew Turner.
|
|
|
|
|
|
|
|
Introduced here: http://svnweb.freebsd.org/changeset/base/277775
|
|
|
|
|
|
|
|
Index: tools/clang/include/clang/Driver/Options.td
|
|
|
|
===================================================================
|
|
|
|
--- tools/clang/include/clang/Driver/Options.td
|
|
|
|
+++ tools/clang/include/clang/Driver/Options.td
|
2015-01-26 21:41:54 +00:00
|
|
|
@@ -1209,6 +1209,8 @@ def mfix_cortex_a53_835769 : Flag<["-"], "mfix-cor
|
|
|
|
def mno_fix_cortex_a53_835769 : Flag<["-"], "mno-fix-cortex-a53-835769">,
|
|
|
|
Group<m_aarch64_Features_Group>,
|
|
|
|
HelpText<"Don't workaround Cortex-A53 erratum 835769 (AArch64 only)">;
|
2015-01-26 21:24:04 +00:00
|
|
|
+def ffixed_x18 : Flag<["-"], "ffixed-x18">, Group<m_aarch64_Features_Group>,
|
|
|
|
+ HelpText<"Reserve the x18 register (AArch64 only)">;
|
2015-01-26 21:41:54 +00:00
|
|
|
|
2015-01-26 21:24:04 +00:00
|
|
|
def mvsx : Flag<["-"], "mvsx">, Group<m_ppc_Features_Group>;
|
|
|
|
def mno_vsx : Flag<["-"], "mno-vsx">, Group<m_ppc_Features_Group>;
|
|
|
|
Index: tools/clang/lib/Driver/Tools.cpp
|
|
|
|
===================================================================
|
|
|
|
--- tools/clang/lib/Driver/Tools.cpp
|
|
|
|
+++ tools/clang/lib/Driver/Tools.cpp
|
2015-01-26 21:41:54 +00:00
|
|
|
@@ -958,6 +958,11 @@ void Clang::AddAArch64TargetArgs(const ArgList &Ar
|
2015-01-26 21:24:04 +00:00
|
|
|
if (A->getOption().matches(options::OPT_mno_global_merge))
|
|
|
|
CmdArgs.push_back("-mno-global-merge");
|
|
|
|
}
|
|
|
|
+
|
|
|
|
+ if (Args.hasArg(options::OPT_ffixed_x18)) {
|
|
|
|
+ CmdArgs.push_back("-backend-option");
|
|
|
|
+ CmdArgs.push_back("-aarch64-reserve-x18");
|
|
|
|
+ }
|
|
|
|
}
|
|
|
|
|
|
|
|
// Get CPU and ABI names. They are not independent
|
|
|
|
Index: tools/clang/test/Driver/aarch64-fixed-x18.c
|
|
|
|
===================================================================
|
|
|
|
--- tools/clang/test/Driver/aarch64-fixed-x18.c
|
|
|
|
+++ tools/clang/test/Driver/aarch64-fixed-x18.c
|
|
|
|
@@ -0,0 +1,4 @@
|
|
|
|
+// RUN: %clang -target aarch64-none-gnu -ffixed-x18 -### %s 2> %t
|
|
|
|
+// RUN: FileCheck --check-prefix=CHECK-FIXED-X18 < %t %s
|
|
|
|
+
|
|
|
|
+// CHECK-FIXED-X18: "-backend-option" "-aarch64-reserve-x18"
|