llvm-6502/test/MC/ARM
David Peixotto 1edc33b924 ARM integrated assembler generates incorrect nop opcode
This patch fixes a bug in the assembler that was causing bad code to
be emitted.  When switching modes in an assembly file (e.g. arm to
thumb mode) we would always emit the opcode from the original mode.

Consider this small example:

$ cat align.s
.code 16
foo:
  add r0, r0
.align 3
  add r0, r0

$ llvm-mc -triple armv7-none-linux align.s -filetype=obj -o t.o
$ llvm-objdump -triple thumbv7 -d t.o
Disassembly of section .text:
foo:
       0:       00 44         add     r0, r0
       2:       00 f0 20 e3   blx #4195904
       6:       00 00         movs    r0, r0
       8:       00 44         add     r0, r0

This shows that we have actually emitted an arm nop (e320f000)
instead of a thumb nop. Unfortunately, this encodes to a thumb
branch which causes bad things to happen when compiling assembly
code with align directives.

The fix is to notify the ARMAsmBackend when we switch mode. The
MCMachOStreamer was already doing this correctly. This patch makes
the same change for the MCElfStreamer.

There is still a bug in the way nops are emitted for alignment
because the MCAlignment fragment does not store the correct mode.
The ARMAsmBackend will emit nops for the last mode it knew about. In
the example above, we still generate an arm nop if we add a `.code
32` to the end of the file.

PR18019


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195677 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-25 19:11:13 +00:00
..
AlignedBundling [tests] Cleanup initialization of test suffixes. 2013-08-16 00:37:11 +00:00
2010-11-30-reloc-movt.s Convert another llc -filetype=obj test. 2013-10-28 21:12:15 +00:00
2013-03-18-Br-to-label-named-like-reg.s Fix pr13145 - Naming a function like a register name confuses the asm parser. 2013-03-19 23:44:03 +00:00
align_arm_2_thumb.s ARM integrated assembler generates incorrect nop opcode 2013-11-25 19:11:13 +00:00
align_thumb_2_arm.s ARM integrated assembler generates incorrect nop opcode 2013-11-25 19:11:13 +00:00
arm_addrmode2.s revert the test change 2012-12-11 06:25:18 +00:00
arm_addrmode3.s
arm_fixups.s ARM: allow vanilla expressions for movw/movt. 2012-05-01 20:43:21 +00:00
arm_instructions.s Add a special ARM trap encoding for NaCl. 2013-01-30 16:30:19 +00:00
arm_word_directive.s
arm-aliases.s ARM assembler should accept shift-by-zero for any shifted-immediate operand. 2011-12-22 18:04:04 +00:00
arm-arithmetic-aliases.s ARM: 'add Rd, pc, #imm' is an alias for 'adr Rd, #imm'. 2012-09-25 00:08:13 +00:00
arm-it-block.s ARM assemly parsing and validation of IT instruction. 2012-01-25 19:52:01 +00:00
arm-ldrd.s [ARM] Use FileCheck instead of grep for ARM LDRD negative tests. 2013-09-30 17:31:26 +00:00
arm-memory-instructions.s ARM: Teach assembler to enforce constraints for ARM LDRD destination register operands. 2013-09-27 13:28:17 +00:00
arm-shift-encoding.s Fix edge cases of ARM shift operands in arith instructions. 2012-09-22 11:18:19 +00:00
arm-thumb-cpus-default.s Rework r183728, suppress assert(0) for now. Its behavior depends on assertions on win32 hosts. 2013-06-11 10:01:42 +00:00
arm-thumb-cpus.s Prefix failing commands with not to make clear they are expected to fail. 2013-07-03 16:41:29 +00:00
arm-thumb-trustzone.s Prefix failing commands with not to make clear they are expected to fail. 2013-07-03 16:41:29 +00:00
arm-trustzone.s Prefix failing commands with not to make clear they are expected to fail. 2013-07-03 16:41:29 +00:00
basic-arm-instructions-v8.s Test cleanup for v8 instructions 2013-10-29 14:16:09 +00:00
basic-arm-instructions.s [ARM] In ARMAsmParser, MatchCoprocessorOperandName() permitted p10 and p11 as operands for coprocessor instructions, resulting in encodings that clash with FP/NEON instruction encodings 2013-11-08 09:16:31 +00:00
basic-thumb2-instructions-v8.s Test cleanup for v8 instructions 2013-10-29 14:16:09 +00:00
basic-thumb2-instructions.s [ARM] In ARMAsmParser, MatchCoprocessorOperandName() permitted p10 and p11 as operands for coprocessor instructions, resulting in encodings that clash with FP/NEON instruction encodings 2013-11-08 09:16:31 +00:00
basic-thumb-instructions.s This fixes the Thumb2 CPS assembly syntax. 2013-08-09 13:52:32 +00:00
bracket-darwin.s
bracket-exprs.s
crc32-thumb.s ARM: Add subtarget feature for CRC 2013-10-29 09:47:35 +00:00
crc32.s ARM: Add subtarget feature for CRC 2013-10-29 09:47:35 +00:00
cxx-global-constructor.ll Replace coff-/elf-dump with llvm-readobj 2013-04-12 04:06:46 +00:00
data-in-code.ll Fix ARM FastISel tests, as a first step to enabling ARM FastISel 2013-05-14 16:26:38 +00:00
deprecated-v8.s [ARM] Warn on deprecated IT blocks in v8 AArch32 assembly. 2013-10-03 09:31:51 +00:00
diagnostics-noneon.s ARM: mark various aliases with their architecture requirements. 2013-10-24 12:22:58 +00:00
diagnostics.s ARM: diagnose invalid system LDM/STM 2013-11-12 21:32:41 +00:00
directive-cpu.s [arm] Implement eabi_attribute, cpu, and fpu directives. 2013-10-28 17:51:12 +00:00
directive-eabi_attribute.s [arm] Implement eabi_attribute, cpu, and fpu directives. 2013-10-28 17:51:12 +00:00
directive-fpu-multiple.s [arm] Implement eabi_attribute, cpu, and fpu directives. 2013-10-28 17:51:12 +00:00
directive-fpu.s [arm] Implement eabi_attribute, cpu, and fpu directives. 2013-10-28 17:51:12 +00:00
dot-req.s
eh-compact-pr0.s Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
eh-compact-pr1.s Fix ARM EHABI compact model 1 and 2 without handlerdata. 2013-07-02 12:43:27 +00:00
eh-directive-cantunwind-diagnostics.s CEHCK->CHECK typo fix. 2013-07-08 21:47:33 +00:00
eh-directive-cantunwind.s Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
eh-directive-fnend-diagnostics.s Prefix failing commands with not to make clear they are expected to fail. 2013-07-03 16:41:29 +00:00
eh-directive-fnstart-diagnostics.s Prefix failing commands with not to make clear they are expected to fail. 2013-07-03 16:41:29 +00:00
eh-directive-handlerdata.s Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
eh-directive-integrated-test.s Fix ARM unwind opcode assembler in several cases. 2013-06-09 12:22:30 +00:00
eh-directive-multiple-offsets.s Fix ARM unwind opcode assembler in several cases. 2013-06-09 12:22:30 +00:00
eh-directive-pad-diagnostics.s Implement AsmParser for ARM unwind directives. 2013-05-10 16:17:24 +00:00
eh-directive-pad.s Fix ARM unwind opcode assembler in several cases. 2013-06-09 12:22:30 +00:00
eh-directive-personality-diagnostics.s Implement AsmParser for ARM unwind directives. 2013-05-10 16:17:24 +00:00
eh-directive-personality.s Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
eh-directive-save-diagnoatics.s Implement AsmParser for ARM unwind directives. 2013-05-10 16:17:24 +00:00
eh-directive-save.s Fix ARM unwind opcode assembler in several cases. 2013-06-09 12:22:30 +00:00
eh-directive-section-comdat.s Implement AsmParser for ARM unwind directives. 2013-05-10 16:17:24 +00:00
eh-directive-section-multiple-func.s Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
eh-directive-section.s Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
eh-directive-setfp-diagnostics.s Implement AsmParser for ARM unwind directives. 2013-05-10 16:17:24 +00:00
eh-directive-setfp.s Fix ARM unwind opcode assembler in several cases. 2013-06-09 12:22:30 +00:00
eh-directive-text-section-multiple-func.s Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
eh-directive-text-section.s Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
eh-directive-vsave-diagnostics.s Implement AsmParser for ARM unwind directives. 2013-05-10 16:17:24 +00:00
eh-directive-vsave.s Implement AsmParser for ARM unwind directives. 2013-05-10 16:17:24 +00:00
elf-eflags-eabi.s Replace coff-/elf-dump with llvm-readobj 2013-04-12 04:06:46 +00:00
elf-jump24-fixup.s Convert an improper CodeGen test to a MC test. 2012-11-10 04:30:40 +00:00
elf-movt.s Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
elf-reloc-01.ll Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
elf-reloc-02.ll Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
elf-reloc-03.ll Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
elf-reloc-condcall.s Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
elf-thumbfunc-reloc.ll Change how we iterate over relocations on ELF. 2013-05-30 03:05:14 +00:00
elf-thumbfunc-reloc.s ARM: diagnose ARM/Thumb assembly switches on CPUs only supporting one. 2013-06-10 23:20:58 +00:00
elf-thumbfunc.s ARM: allow .thumb_func to be separated from symbol definition 2013-10-25 12:49:50 +00:00
fp-armv8.s [ARM] Add support for MVFR2 which is new in ARMv8 2013-11-11 19:56:13 +00:00
full_line_comment.s
hilo-16bit-relocations.s
idiv.s Add hardware division as a default feature on Cortex-A15. Also add test cases to check this, and change diagnostics for the hwdiv-arm feature to something useful. 2013-10-18 10:18:40 +00:00
invalid-barrier.s Test cleanup for v8 instructions 2013-10-29 14:16:09 +00:00
invalid-crc32.s 'svn add' the test cases. 2013-09-18 09:46:49 +00:00
invalid-fp-armv8.s Add subtarget feature support for Cortex-A53 2013-10-14 13:16:57 +00:00
invalid-hint-arm.s Make ARM hint ranges consistent, and add tests for these ranges 2013-10-23 10:14:40 +00:00
invalid-hint-thumb.s Make ARM hint ranges consistent, and add tests for these ranges 2013-10-23 10:14:40 +00:00
invalid-idiv.s Add hardware division as a default feature on Cortex-A15. Also add test cases to check this, and change diagnostics for the hwdiv-arm feature to something useful. 2013-10-18 10:18:40 +00:00
invalid-neon-v8.s Add subtarget feature support for Cortex-A53 2013-10-14 13:16:57 +00:00
lit.local.cfg [tests] Cleanup initialization of test suffixes. 2013-08-16 00:37:11 +00:00
load-store-acquire-release-v8-thumb.s [ARMv8] 2013-08-28 16:39:20 +00:00
load-store-acquire-release-v8.s [ARMv8] 2013-08-28 16:39:20 +00:00
mapping-within-section.s ARM: diagnose ARM/Thumb assembly switches on CPUs only supporting one. 2013-06-10 23:20:58 +00:00
mode-switch.s
multi-section-mapping.s ARM: diagnose ARM/Thumb assembly switches on CPUs only supporting one. 2013-06-10 23:20:58 +00:00
neon-abs-encoding.s
neon-absdiff-encoding.s
neon-add-encoding.s ARM two-operand forms for vhadd and vhsub instructions. 2012-04-16 23:00:25 +00:00
neon-bitcount-encoding.s
neon-bitwise-encoding.s The ARM NEON vector compare instructions take three arguments. However, the 2013-02-14 23:18:40 +00:00
neon-cmp-encoding.s ARM: Add VACLT and VACLE assembly aliases. 2013-04-15 22:42:50 +00:00
neon-convert-encoding.s Fix ARM vcvt encoding when the number of fractional bits is zero. 2013-08-22 13:16:07 +00:00
neon-crypto.s [ARMv8] Add support for the v8 cryptography extensions. 2013-09-19 11:59:01 +00:00
neon-dup-encoding.s
neon-minmax-encoding.s ARM NEON implied destination aliases for VMAX/VMIN. 2011-12-19 18:57:38 +00:00
neon-mov-encoding.s ARM: Add optional datatype suffix to NEON mvn asm syntax. 2013-06-18 21:49:21 +00:00
neon-mul-accum-encoding.s
neon-mul-encoding.s
neon-neg-encoding.s
neon-pairwise-encoding.s ARM NEON two-operand aliases for VPADD. 2011-12-19 19:51:03 +00:00
neon-reciprocal-encoding.s
neon-reverse-encoding.s
neon-satshift-encoding.s
neon-shift-encoding.s ARM assembly two-operand forms for VRSHL. 2012-04-16 18:03:16 +00:00
neon-shiftaccum-encoding.s ARM: Add testcases for two-operand variants of VSRA/VRSRA/VSRI. 2012-04-23 21:00:47 +00:00
neon-shuffle-encoding.s ARM 'vuzp.32 Dd, Dm' is a pseudo-instruction. 2012-04-11 17:40:18 +00:00
neon-sub-encoding.s ARM: Update NEON assembly two-operand aliases. 2012-04-20 18:12:54 +00:00
neon-table-encoding.s ARM NEON VTBL/VTBX assembly parsing and encoding. 2011-12-15 22:27:11 +00:00
neon-v8.s [ARMv8] Implement the NEON instructions VRINT{N, X, A, Z, M, P}. 2013-07-19 16:34:16 +00:00
neon-vld-encoding.s Make ARMAsmPrinter generate the correct alignment specifier syntax in instructions. 2013-02-22 10:01:33 +00:00
neon-vst-encoding.s Add newlines at end of test files, no functionality change 2013-07-13 22:00:58 +00:00
neon-vswp.s ARM encoding for VSWP got the second operand incorrect. 2012-03-30 18:53:01 +00:00
neont2-abs-encoding.s
neont2-absdiff-encoding.s Specify cpu to unbreak tests. 2012-04-26 01:38:10 +00:00
neont2-add-encoding.s
neont2-bitcount-encoding.s
neont2-bitwise-encoding.s
neont2-cmp-encoding.s
neont2-convert-encoding.s
neont2-dup-encoding.s Specify cpu to unbreak tests. 2012-04-26 01:38:10 +00:00
neont2-minmax-encoding.s ARM NEON implied destination aliases for VMAX/VMIN. 2011-12-19 18:57:38 +00:00
neont2-mov-encoding.s
neont2-mul-accum-encoding.s
neont2-mul-encoding.s Enable and fix a test. 2011-12-20 23:20:00 +00:00
neont2-neg-encoding.s
neont2-pairwise-encoding.s
neont2-reciprocal-encoding.s
neont2-reverse-encoding.s
neont2-satshift-encoding.s
neont2-shift-encoding.s
neont2-shiftaccum-encoding.s ARM: Add testcases for two-operand variants of VSRA/VRSRA/VSRI. 2012-04-23 21:00:47 +00:00
neont2-shuffle-encoding.s
neont2-sub-encoding.s
neont2-table-encoding.s ARM NEON VTBL/VTBX assembly parsing and encoding. 2011-12-15 22:27:11 +00:00
neont2-vld-encoding.s This patch fixes two tests marked as XFAIL among the ARM assembler tests. 2013-05-08 09:41:12 +00:00
neont2-vst-encoding.s This patch fixes two tests marked as XFAIL among the ARM assembler tests. 2013-05-08 09:41:12 +00:00
obsolete-v8.s ARMv8: SWP and SWPB are obsoleted on ARMv8. 2013-08-13 16:40:47 +00:00
pr11877.s Ensure .AliasedSymbol() is called on all uses of getSymbol(). Affects ARM and MIPS ELF backends. 2012-01-28 15:58:32 +00:00
relocated-mapping.s Added Mapping Symbols for ARM ELF 2012-12-07 16:50:23 +00:00
simple-fp-encoding.s This patch adds support for FPINST/FPINST2 as operands to vmsr/vmrs. These are optional registers that may be supported some ARM implementations to aid with resolution of floating point exceptions. The manual pages for vmsr and vmrs do not detail their use. Encodings and other information can be found in ARM Architecture Reference Manual section F, chapter 6, paragraph 3. 2013-06-11 09:39:51 +00:00
single-precision-fp.s ARM: tweak test to pass on all platforms 2013-10-25 07:34:56 +00:00
thumb2-b.w-encodingT4.s Fix assembling of Thumb2 branch instructions. 2013-08-09 10:38:32 +00:00
thumb2-branches.s Fix assembling of Thumb2 branch instructions. 2013-08-09 10:38:32 +00:00
thumb2-diagnostics.s [ARM] Fix Thumb(-2) diagnostic tests. 2013-09-30 18:50:51 +00:00
thumb2-ldrd.s ARM: Teach assembler to enforce constraint for Thumb2 LDRD (literal/immediate) destination register operands. 2013-09-27 10:30:18 +00:00
thumb2-mclass.s Fix the encoding of the armv7m (MClass) for MSR registers other than aspr, 2012-06-15 22:14:44 +00:00
thumb2-narrow-dp.ll Teach the assembler to use the narrow thumb encodings of various three-register dp instructions where permissable. 2012-07-09 16:12:24 +00:00
thumb2-pldw.s This corrects creation of operands for t2PLDW. It also removes the definition of t2PLDWpci, 2013-08-06 16:07:46 +00:00
thumb-diagnostics.s ARM: fix assert on unpredictable POP instruction. 2013-10-24 09:37:18 +00:00
thumb-fp-armv8.s Fix tests for hasFPARMv8 name change (r190692) 2013-09-13 14:37:52 +00:00
thumb-hints.s ARM: permit bare dmb/dsb/isb aliases on Cortex-M0 2013-11-05 21:36:02 +00:00
thumb-invalid-crypto.txt [ARMv8] Add support for the v8 cryptography extensions. 2013-09-19 11:59:01 +00:00
thumb-neon-crypto.s [ARMv8] Add support for the v8 cryptography extensions. 2013-09-19 11:59:01 +00:00
thumb-neon-v8.s [ARMv8] Implement the NEON instructions VRINT{N, X, A, Z, M, P}. 2013-07-19 16:34:16 +00:00
thumb-only-conditionals.s [ARM] In ARMAsmParser, MatchCoprocessorOperandName() permitted p10 and p11 as operands for coprocessor instructions, resulting in encodings that clash with FP/NEON instruction encodings 2013-11-08 09:16:31 +00:00
thumb-shift-encoding.s Fix edge cases of ARM shift operands in arith instructions. 2012-09-22 11:18:19 +00:00
thumb.s ARM: fix thumb1 nop decoding 2013-06-24 09:11:53 +00:00
v8_IT_manual.s [ARM] Handling for coprocessor instructions that are undefined starting from ARMv8 (Thumb encodings) 2013-11-08 16:25:50 +00:00
vfp4.s ARM: Mark double-precision instructions as such 2013-10-24 15:49:39 +00:00
vpush-vpop.s Specify cpu to unbreak tests. 2012-04-26 01:38:10 +00:00
xscale-attributes.ll [ARM] Fix FP ABI attributes with no VFP enabled. 2013-10-11 16:03:43 +00:00