Re: [llvmlinux] [PATCH 3/4] x86: Allow building 16-bit code with-m16 with toolchains that support it

From: Woodhouse, David
Date: Tue Jan 14 2014 - 18:59:22 EST


On Tue, 2014-01-14 at 20:14 +0100, Jan-Simon MÃller wrote:
> Hi David,
>
> what version of clang did you use btw ?

This is LLVM HEAD + extra patches at git://,
http://git.infradead.org/users/dwmw2/llvm.git and the following patch to
clang HEAD:

diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td
index 948b448..9eeace1 100644
--- a/include/clang/Driver/Options.td
+++ b/include/clang/Driver/Options.td
@@ -964,6 +964,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">;
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index 253a083..8248149 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -1911,12 +1911,20 @@ static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple,
return Target;

// Handle pseudo-target flags '-m32' and '-m64'.
- if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) {
+ if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64, options::OPT_m16)) {
llvm::Triple::ArchType AT;
if (A->getOption().matches(options::OPT_m32))
AT = Target.get32BitArchVariant().getArch();
- else
+ else if (A->getOption().matches(options::OPT_m64))
AT = Target.get64BitArchVariant().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);
}
--
1.8.3.1



--
David Woodhouse Open Source Technology Centre
David.Woodhouse@xxxxxxxxx Intel Corporation

Attachment: smime.p7s
Description: S/MIME cryptographic signature