]> granicus.if.org Git - clang/commitdiff
Add -m16 option for using x86-*-*-code16 triple
authorDavid Woodhouse <dwmw2@infradead.org>
Tue, 21 Jan 2014 17:19:44 +0000 (17:19 +0000)
committerDavid Woodhouse <dwmw2@infradead.org>
Tue, 21 Jan 2014 17:19:44 +0000 (17:19 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199754 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/Options.td
lib/Driver/Driver.cpp
test/Driver/x86_m16.c [new file with mode: 0644]

index 6682039e7efc30ae18d0896dc6f241e6dc91bf1a..5e8a3b89e2afc73c679c166071d7024ff40a605d 100644 (file)
@@ -951,6 +951,7 @@ def lazy__framework : Separate<["-"], "lazy_framework">, Flags<[LinkerInput]>;
 def lazy__library : Separate<["-"], "lazy_library">, Flags<[LinkerInput]>;
 def EL : Flag<["-"], "EL">, Flags<[DriverOption]>;
 def EB : Flag<["-"], "EB">, Flags<[DriverOption]>;
+def m16 : Flag<["-"], "m16">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
 def m32 : Flag<["-"], "m32">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
 def mqdsp6_compat : Flag<["-"], "mqdsp6-compat">, Group<m_Group>, Flags<[DriverOption,CC1Option]>,
   HelpText<"Enable hexagon-qdsp6 backward compatibility">;
index ad938b8bd8212afdf13caf08be9be8edd55a877b..17e6bfd2ccb6655d4a6a6b71ae62ff6201d78756 100644 (file)
@@ -1900,13 +1900,22 @@ static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple,
       Target.getOS() == llvm::Triple::Minix)
     return Target;
 
-  // Handle pseudo-target flags '-m32' and '-m64'.
-  if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) {
+  // Handle pseudo-target flags '-m64', '-m32' and '-m16'.
+  if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_m32,
+                               options::OPT_m16)) {
     llvm::Triple::ArchType AT;
-    if (A->getOption().matches(options::OPT_m32))
-      AT = Target.get32BitArchVariant().getArch();
-    else
+    if (A->getOption().matches(options::OPT_m64))
       AT = Target.get64BitArchVariant().getArch();
+    else if (A->getOption().matches(options::OPT_m32))
+      AT = Target.get32BitArchVariant().getArch();
+    else if (A->getOption().matches(options::OPT_m16)) {
+      AT = Target.get32BitArchVariant().getArch();
+      if (AT == llvm::Triple::x86)
+        Target.setEnvironment(llvm::Triple::CODE16);
+      else
+        AT = llvm::Triple::UnknownArch;
+    }
+
     if (AT != llvm::Triple::UnknownArch)
       Target.setArch(AT);
   }
diff --git a/test/Driver/x86_m16.c b/test/Driver/x86_m16.c
new file mode 100644 (file)
index 0000000..be15ff5
--- /dev/null
@@ -0,0 +1,4 @@
+// RUN: %clang -target i386 -m16 -### -c %s 2>&1 | FileCheck %s
+
+// CHECK: Target: i386-{{.*}}-{{.*}}-code16
+