From 16e47ff42e7ec10b20152f74b98380856c0ad534 Mon Sep 17 00:00:00 2001 From: Akira Hatanaka Date: Fri, 25 Jul 2014 05:12:49 +0000 Subject: [PATCH] [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. llvm-svn: 213924 --- llvm/lib/Target/ARM/ARMAsmPrinter.cpp | 3 +++ llvm/test/CodeGen/ARM/inlineasm-global.ll | 13 +++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 llvm/test/CodeGen/ARM/inlineasm-global.ll diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp index 28d2610..9ad808c 100644 --- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/llvm/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/llvm/test/CodeGen/ARM/inlineasm-global.ll b/llvm/test/CodeGen/ARM/inlineasm-global.ll new file mode 100644 index 0000000..d1a15e3 --- /dev/null +++ b/llvm/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};" -- 2.7.4