From: Akira Hatanaka Date: Fri, 25 Jul 2014 05:12:49 +0000 (+0000) Subject: [ARM] In thumb mode, emit directive ".code 16" before file level inline X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=642c8bef1931cfc05f6d23a9b25d7d182cc48c01;p=oota-llvm.git [ARM] In thumb mode, emit directive ".code 16" before file level inline assembly instructions. This is necessary to ensure ARM assembler switches to Thumb mode before it starts assembling the file level inline assembly instructions at the beginning of a .s file. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213924 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/ARM/ARMAsmPrinter.cpp b/lib/Target/ARM/ARMAsmPrinter.cpp index 28d2610c390..9ad808c00e7 100644 --- a/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/lib/Target/ARM/ARMAsmPrinter.cpp @@ -478,6 +478,9 @@ void ARMAsmPrinter::EmitStartOfAsmFile(Module &M) { // Emit ARM Build Attributes if (Subtarget->isTargetELF()) emitAttributes(); + + if (!M.getModuleInlineAsm().empty() && Subtarget->isThumb()) + OutStreamer.EmitAssemblerFlag(MCAF_Code16); } static void diff --git a/test/CodeGen/ARM/inlineasm-global.ll b/test/CodeGen/ARM/inlineasm-global.ll new file mode 100644 index 00000000000..d1a15e393a1 --- /dev/null +++ b/test/CodeGen/ARM/inlineasm-global.ll @@ -0,0 +1,13 @@ +; RUN: llc -march thumb -no-integrated-as %s -o - | FileCheck %s --check-prefix=THUMB +; RUN: llc -march arm -no-integrated-as %s -o - | FileCheck %s --check-prefix=ARM + +; In thumb mode, emit ".code 16" before global inline-asm instructions. + +; THUMB: .code 16 +; THUMB: stmib +; THUMB: .code 16 + +; ARM-NOT: .code 16 +; ARM: stmib + +module asm "stmib sp, {r0-r14};"