[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.

<rdar://problem/17757232>



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213924 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Akira Hatanaka 2014-07-25 05:12:49 +00:00
parent b64f8426f2
commit 642c8bef19
2 changed files with 16 additions and 0 deletions

View File

@ -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

View File

@ -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};"