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

llvm-svn: 213924
This commit is contained in:
Akira Hatanaka 2014-07-25 05:12:49 +00:00
parent 98c3c0f38a
commit 16e47ff42e
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};"