[PATCH] D80028: [AArch64] Support expression results as immediate values in mov

Jian Cai via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu May 28 11:33:25 PDT 2020


jcai19 marked an inline comment as done.
jcai19 added inline comments.


================
Comment at: llvm/test/MC/AArch64/mov-invalid-expression-as-immediate.s:9
+// CHECK: mov x0, 1b - 0b
+// CHECK: ^
----------------
efriedma wrote:
> jcai19 wrote:
> > efriedma wrote:
> > > Please also add a testcase for something like `mov x0, 0b`, where the value can't be resolved in the assembler.
> > This is actually interesting.  GAS assembled the following code 
> > 
> > 0:
> > .skip 4
> > 1:
> > mov x0, 1b
> > 
> > into 
> > 
> > mov	x0, #0x4 
> > 
> > With the proposed change, IAS would calculate the offset (4) correctly but discard it as it considers the expression 1b unresolved, and generate the following code.
> > 
> > mov	x0, #0x0
> > 
> > What's the expected outcome here? Is subtraction between two symbols the only valid expressions we should accept? Thanks.
> Converting the address of a label to constant without a relocation is clearly a bug; we shouldn't try to reproduce that behavior.
> 
> I think I'd prefer to be conservative and forbid expressions that would require a relocation in the object file, at least for now.  (The user can spell it out with movz/movk if the actually want a relocation.)
It seems IAS currently replaces all the labels that it cannot fully resolve with 0, like the following example.

$ cat foo.s
movz x13, #:abs_g0_s:some_label

$ llvm-mc -triple=aarch64 -filetype=obj --debug-only=asm-matcher foo.s -o foo.o
$ aarch64-linux-gnu-objdump -d  foo.o
foo.o:     file format elf64-littleaarch64


Disassembly of section .text:

0000000000000000 <.text>:
   0:	d280000d 	mov	x13, #0x0                   	// #0

Adding the proposed check seemed to break all such cases. Shall we address that in a separate change?



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D80028/new/

https://reviews.llvm.org/D80028





More information about the llvm-commits mailing list