From: David Woodhouse Date: Tue, 21 Jan 2014 17:19:44 +0000 (+0000) Subject: Add -m16 option for using x86-*-*-code16 triple X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=003a2d7ea5ecc442c52beee41f41e77db120f41c;p=clang Add -m16 option for using x86-*-*-code16 triple git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199754 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 6682039e7e..5e8a3b89e2 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -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, Flags<[DriverOption, CoreOption]>; def m32 : Flag<["-"], "m32">, Group, Flags<[DriverOption, CoreOption]>; def mqdsp6_compat : Flag<["-"], "mqdsp6-compat">, Group, Flags<[DriverOption,CC1Option]>, HelpText<"Enable hexagon-qdsp6 backward compatibility">; diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index ad938b8bd8..17e6bfd2cc 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -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 index 0000000000..be15ff53c2 --- /dev/null +++ b/test/Driver/x86_m16.c @@ -0,0 +1,4 @@ +// RUN: %clang -target i386 -m16 -### -c %s 2>&1 | FileCheck %s + +// CHECK: Target: i386-{{.*}}-{{.*}}-code16 +