]> granicus.if.org Git - clang/commitdiff
[AArch64] Add -mgeneral_regs_only option.
authorAmara Emerson <amara.emerson@arm.com>
Thu, 23 Jan 2014 15:48:30 +0000 (15:48 +0000)
committerAmara Emerson <amara.emerson@arm.com>
Thu, 23 Jan 2014 15:48:30 +0000 (15:48 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199904 91177308-0d34-0410-b5e6-96231b3b80d8

docs/UsersManual.rst
include/clang/Driver/Options.td
lib/Driver/Tools.cpp
test/Driver/aarch64-mfpu.c
test/Driver/aarch64-mgeneral_regs_only.c [new file with mode: 0644]

index d832f99baed0790e364648150f59e2ccb83fb933..15ae86a5641744b1178466ddc93cd43f1927d4df 100644 (file)
@@ -1061,6 +1061,13 @@ are listed below.
 
    CRC instructions are enabled by default on ARMv8.
 
+.. option:: -mgeneral_regs_only
+
+   Generate code which only uses the general purpose registers.
+
+   This option restricts the generated code to use general registers
+   only. This only applies to the AArch64 architecture.
+
 
 Controlling Size of Debug Information
 -------------------------------------
index 85b69bb7a866d528ec5d96884724af46967ffe3c..b40a9f7d39c5bba7818548fdb35decd799802cb8 100644 (file)
@@ -72,6 +72,7 @@ def m_Group               : OptionGroup<"<m group>">, Group<CompileOnly_Group>;
 def m_x86_Features_Group  : OptionGroup<"<m x86 features group>">, Group<m_Group>;
 def m_hexagon_Features_Group  : OptionGroup<"<m hexagon features group>">, Group<m_Group>;
 def m_arm_Features_Group  : OptionGroup<"<m arm features group>">, Group<m_Group>;
+def m_aarch64_Features_Group  : OptionGroup<"<m aarch64 features group>">, Group<m_Group>;
 def m_ppc_Features_Group  : OptionGroup<"<m ppc features group>">, Group<m_Group>;
 def u_Group               : OptionGroup<"<u group>">;
 
@@ -1053,6 +1054,9 @@ def mcrc : Flag<["-"], "mcrc">, Group<m_arm_Features_Group>,
 def mnocrc : Flag<["-"], "mnocrc">, Group<m_arm_Features_Group>,
   HelpText<"Disallow use of CRC instructions (ARM only)">;
 
+def mgeneral_regs_only : Flag<["-"], "mgeneral_regs_only">, Group<m_aarch64_Features_Group>,
+  HelpText<"Generate code which only uses the general purpose registers (AArch64 only)">;
+
 def mvsx : Flag<["-"], "mvsx">, Group<m_ppc_Features_Group>;
 def mno_vsx : Flag<["-"], "mno-vsx">, Group<m_ppc_Features_Group>;
 def mfprnd : Flag<["-"], "mfprnd">, Group<m_ppc_Features_Group>;
index a3a385d1cf13fef3dee8c4855607cf2d6a669dea..3e9ebf8aef1d94e5fb0da07a3e005306c51d42eb 100644 (file)
@@ -515,10 +515,6 @@ static void getAArch64FPUFeatures(const Driver &D, const Arg *A,
     Features.push_back("+crypto");
   } else if (FPU == "neon") {
     Features.push_back("+neon");
-  } else if (FPU == "none") {
-    Features.push_back("-fp-armv8");
-    Features.push_back("-crypto");
-    Features.push_back("-neon");
   } else
     D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args);
 }
@@ -1438,6 +1434,12 @@ static void getAArch64TargetFeatures(const Driver &D, const ArgList &Args,
   // Honor -mfpu=.
   if (const Arg *A = Args.getLastArg(options::OPT_mfpu_EQ))
     getAArch64FPUFeatures(D, A, Args, Features);
+
+  if (Args.getLastArg(options::OPT_mgeneral_regs_only)) {
+    Features.push_back("-fp-armv8");
+    Features.push_back("-crypto");
+    Features.push_back("-neon");
+  }
 }
 
 static void getTargetFeatures(const Driver &D, const llvm::Triple &Triple,
index 234401bcb2110a49d304067ae429ac2f95694975..b62a2e797c411b44f75bbbbf28d6ad8ee057d2a2 100644 (file)
@@ -19,8 +19,3 @@
 // CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+neon"
 // CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+crypto"
 
-// RUN: %clang -target aarch64-linux-eabi -mfpu=none %s -### 2>&1 \
-// RUN:   | FileCheck --check-prefix=CHECK-NO-FP %s
-// CHECK-NO-FP: "-target-feature" "-fp-armv8"
-// CHECK-NO-FP: "-target-feature" "-crypto"
-// CHECK-NO-FP: "-target-feature" "-neon"
diff --git a/test/Driver/aarch64-mgeneral_regs_only.c b/test/Driver/aarch64-mgeneral_regs_only.c
new file mode 100644 (file)
index 0000000..026f98c
--- /dev/null
@@ -0,0 +1,7 @@
+// Test the -mgeneral_regs_only option
+
+// RUN: %clang -target aarch64-linux-eabi -mgeneral_regs_only %s -### 2>&1 \
+// RUN:   | FileCheck --check-prefix=CHECK-NO-FP %s
+// CHECK-NO-FP: "-target-feature" "-fp-armv8"
+// CHECK-NO-FP: "-target-feature" "-crypto"
+// CHECK-NO-FP: "-target-feature" "-neon"