aturetsk updated this revision to Diff 41309.
aturetsk added a comment.

Extended to take into account recent MCU related changes


http://reviews.llvm.org/D14146

Files:
  include/clang/Driver/Options.td
  lib/Driver/Tools.cpp
  lib/Driver/Tools.h
  test/Driver/miamcu-opt.c
  test/Driver/miamcu-opt.s

Index: test/Driver/miamcu-opt.s
===================================================================
--- /dev/null
+++ test/Driver/miamcu-opt.s
@@ -0,0 +1,9 @@
+// RUN: %clang -m32 -miamcu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M32
+// RUN: %clang -m64 -miamcu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M64
+
+// M32-NOT: error: unsupported option '-miamcu'
+// M32: "-cc1as"
+// M32: "-triple" "i586-intel-elfiamcu"
+
+// M64: error: unsupported option '-miamcu'
+// M64: "-cc1as"
Index: test/Driver/miamcu-opt.c
===================================================================
--- /dev/null
+++ test/Driver/miamcu-opt.c
@@ -0,0 +1,11 @@
+// RUN: %clang -m32 -miamcu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M32
+// RUN: %clang -m64 -miamcu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M64
+
+// M32-NOT: error: unsupported option '-miamcu'
+// M32: "-cc1"
+// M32: "-triple" "i586-intel-elfiamcu"
+// M32: "-mfloat-abi" "soft"
+// M32: "-mstack-alignment=4"
+
+// M64: error: unsupported option '-miamcu'
+// M64: "-cc1"
Index: lib/Driver/Tools.h
===================================================================
--- lib/Driver/Tools.h
+++ lib/Driver/Tools.h
@@ -122,6 +122,8 @@
       : Tool("clang::as", "clang integrated assembler", TC, RF_Full) {}
   void AddMIPSTargetArgs(const llvm::opt::ArgList &Args,
                          llvm::opt::ArgStringList &CmdArgs) const;
+  void AddX86TargetArgs(const llvm::opt::ArgList &Args,
+                        llvm::opt::ArgStringList &CmdArgs) const;
   bool hasGoodDiagnostics() const override { return true; }
   bool hasIntegratedAssembler() const override { return false; }
   bool hasIntegratedCPP() const override { return false; }
Index: lib/Driver/Tools.cpp
===================================================================
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -1994,6 +1994,18 @@
           << A->getOption().getName() << Value;
     }
   }
+
+  // If -miamcu is set then set flags to support MCU ABI and use MCU triple.
+  if (Args.getLastArg(options::OPT_miamcu)) {
+    if (getToolChain().getArch() != llvm::Triple::x86)
+      getToolChain().getDriver().Diag(diag::err_drv_unsupported_opt)
+          << "-miamcu";
+    CmdArgs.push_back("-triple");
+    CmdArgs.push_back("i586-intel-elfiamcu");
+    CmdArgs.push_back("-mfloat-abi");
+    CmdArgs.push_back("soft");
+    CmdArgs.push_back("-mstack-alignment=4");
+  }
 }
 
 void Clang::AddHexagonTargetArgs(const ArgList &Args,
@@ -5707,6 +5719,18 @@
   CmdArgs.push_back(ABIName.data());
 }
 
+void ClangAs::AddX86TargetArgs(const ArgList &Args,
+                               ArgStringList &CmdArgs) const {
+  // If -miamcu is set then use MCU triple.
+  if (Args.getLastArg(options::OPT_miamcu)) {
+    if (getToolChain().getArch() != llvm::Triple::x86)
+      getToolChain().getDriver().Diag(diag::err_drv_unsupported_opt)
+          << "-miamcu";
+    CmdArgs.push_back("-triple");
+    CmdArgs.push_back("i586-intel-elfiamcu");
+  }
+}
+
 void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
                            const InputInfo &Output, const InputInfoList &Inputs,
                            const ArgList &Args,
@@ -5847,6 +5871,11 @@
   case llvm::Triple::mips64el:
     AddMIPSTargetArgs(Args, CmdArgs);
     break;
+
+  case llvm::Triple::x86:
+  case llvm::Triple::x86_64:
+    AddX86TargetArgs(Args, CmdArgs);
+    break;
   }
 
   // Consume all the warning flags. Usually this would be handled more
Index: include/clang/Driver/Options.td
===================================================================
--- include/clang/Driver/Options.td
+++ include/clang/Driver/Options.td
@@ -1226,6 +1226,8 @@
 def m64 : Flag<["-"], "m64">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
 def mx32 : Flag<["-"], "mx32">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
 def mabi_EQ : Joined<["-"], "mabi=">, Group<m_Group>;
+def miamcu : Flag<["-"], "miamcu">, Group<m_Group>, Flags<[DriverOption, CoreOption]>,
+  HelpText<"Use Intel MCU ABI.">;
 def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group<clang_ignored_m_Group>;
 def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group<clang_ignored_m_Group>;
 def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group<clang_ignored_m_Group>;
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to