mirror of https://github.com/microsoft/clang.git
Support -masm= flag for x86 assembly targets.
For assembly files without .intel_syntax or .att_syntax directives, allow the -masm= flag to supply a default assembly dialect. For example, C:\TMP> type intel.s .text mov al,0 C:\TMP> clang -masm=intel -c intel.s Without this patch, one would need to pass an "-mllvm -x86-asm-syntax=" flag directly to the backend. C:\TMP> clang -mllvm --x86-asm-syntax=intel -c intel.s Differentials Review: http://reviews.llvm.org/D22285 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@275877 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
05b45f1569
commit
cfabff3f46
|
@ -6460,6 +6460,20 @@ void ClangAs::AddMIPSTargetArgs(const ArgList &Args,
|
|||
CmdArgs.push_back(ABIName.data());
|
||||
}
|
||||
|
||||
void ClangAs::AddX86TargetArgs(const ArgList &Args,
|
||||
ArgStringList &CmdArgs) const {
|
||||
if (Arg *A = Args.getLastArg(options::OPT_masm_EQ)) {
|
||||
StringRef Value = A->getValue();
|
||||
if (Value == "intel" || Value == "att") {
|
||||
CmdArgs.push_back("-mllvm");
|
||||
CmdArgs.push_back(Args.MakeArgString("-x86-asm-syntax=" + Value));
|
||||
} else {
|
||||
getToolChain().getDriver().Diag(diag::err_drv_unsupported_option_argument)
|
||||
<< A->getOption().getName() << Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
const InputInfo &Output, const InputInfoList &Inputs,
|
||||
const ArgList &Args,
|
||||
|
@ -6607,6 +6621,11 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
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
|
||||
|
|
|
@ -125,6 +125,8 @@ public:
|
|||
: 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; }
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
// RUN: %clang -target i386-unknown-linux -masm=intel -c %s -### 2>&1 | FileCheck --check-prefix=CHECK-INTEL %s
|
||||
// RUN: %clang -target i386-unknown-linux -masm=att -c %s -### 2>&1 | FileCheck --check-prefix=CHECK-ATT %s
|
||||
// RUN: %clang -target i386-unknown-linux -c -masm=somerequired %s -### 2>&1 | FileCheck --check-prefix=CHECK-SOMEREQUIRED %s
|
||||
// RUN: %clang -target arm-unknown-eabi -c -masm=intel %s -### 2>&1 | FileCheck --check-prefix=CHECK-ARM %s
|
||||
|
||||
// CHECK-INTEL: -x86-asm-syntax=intel
|
||||
// CHECK-ATT: -x86-asm-syntax=att
|
||||
// CHECK-SOMEREQUIRED: error: unsupported argument 'somerequired' to option 'masm='
|
||||
// CHECK-ARM: warning: argument unused during compilation: '-masm=intel'
|
||||
.text
|
||||
mov al, 0
|
Loading…
Reference in New Issue