Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ARM] Support fixup for Thumb2 modified immediate
This change adds a new fixup fixup_t2_so_imm for the t2_so_imm_asmoperand "T2SOImm". The fixup permits code such as: .L1: sub r3, r3, #.L2 - .L1 .L2: to assemble in Thumb2 as well as in ARM state. The operand predicate isT2SOImm() explicitly doesn't match expressions containing :upper16: and :lower16: as expressions with these operators must match the movt and movw instructions. The test mov r0, foo2 in thumb2-diagnostics is moved to a new file as the fixup delays the error message till after the assembler has quit due to the other errors. As the mov instruction shares the t2_so_imm_asmoperand mov instructions with a non constant expression now match t2MOVi rather than t2MOVi16 so the error message is slightly different. Fixes PR28647 Differential Revision: https://reviews.llvm.org/D33492 llvm-svn: 304702
- Loading branch information
Showing
9 changed files
with
123 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
@ PR28647 | ||
@ RUN: not llvm-mc -triple=thumbv7a-linux-gnueabi -filetype=obj < %s 2>&1 | FileCheck %s | ||
.text | ||
.syntax unified | ||
.balign 2 | ||
|
||
@ Error with unencodeable immediate | ||
add r1, r2, sym0 | ||
@ CHECK: error: out of range immediate fixup value | ||
.equ sym0, 0x01abcdef | ||
.L2: | ||
mov r0, .L2 | ||
@ CHECK: error: unsupported relocation on symbol |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
@ PR28647 | ||
@ RUN: not llvm-mc -triple=thumbv7a-linux-gnueabi -filetype=obj < %s 2>&1 | FileCheck %s | ||
.text | ||
.syntax unified | ||
.balign 2 | ||
|
||
@ mov with :upper16: or :lower16: should not match mov with modified immediate | ||
mov r0, :upper16: sym0 | ||
@ CHECK: error: instruction requires: arm-mode | ||
mov r0, :lower16: sym0 | ||
@ CHECK: error: instruction requires: arm-mode | ||
.equ sym0, 0x01abcdef |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
@ PR28647 | ||
@ RUN: llvm-mc < %s -triple=thumbv7a-linux-gnueabi -filetype=obj -o - \ | ||
@ RUN: | llvm-objdump --disassemble -triple=thumbv7a-linux-gnueabi - | FileCheck %s | ||
.text | ||
.syntax unified | ||
.balign 2 | ||
@ Thumb2 modified immediate instructions | ||
add r1,r1, sym0 | ||
sub r1,r2, sym1 | ||
cmp r2, sym2 | ||
and r4,r4, sym3 | ||
orr r8,r9, sym4 | ||
teq r1, sym5 | ||
tst r1, sym6 | ||
sbc r1,r1, sym7 | ||
adc r1,r0, sym8 | ||
@CHECK: add.w r1, r1, #255 | ||
@CHECK: sub.w r1, r2, #16711935 | ||
@CHECK: cmp.w r2, #4278255360 | ||
@CHECK: and r4, r4, #303174162 | ||
@CHECK: orr r8, r9, #2852126720 | ||
@CHECK: teq.w r1, #1426063360 | ||
@CHECK: tst.w r1, #713031680 | ||
@CHECK: sbc r1, r1, #2785280 | ||
@CHECK: adc r1, r0, #340 | ||
|
||
.L1: | ||
sub r3, r3, #.L2 - .L1 | ||
.L2: | ||
@CHECK: sub.w r3, r3, #4 | ||
|
||
@ mov without :upper16: or :lower16: should match mov with modified immediate | ||
mov r1, sym3 | ||
@CHECK: mov.w r1, #303174162 | ||
|
||
@ Modified immediate constants | ||
.equ sym0, 0x000000ff | ||
.equ sym1, 0x00ff00ff | ||
.equ sym2, 0xff00ff00 | ||
.equ sym3, 0x12121212 | ||
.equ sym4, 0xaa000000 | ||
.equ sym5, 0x55000000 | ||
.equ sym6, 0x2a800000 | ||
.equ sym7, 0x002a8000 | ||
.equ sym8, 0x00000154 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters