This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [Patch, AArch64][v2] Disassemble MOVZ, MOVN and ORR as MOV
- From: Yufeng Zhang <Yufeng dot Zhang at arm dot com>
- To: binutils at sourceware dot org
- Cc: Richard Earnshaw <Richard dot Earnshaw at arm dot com>
- Date: Mon, 10 Dec 2012 17:54:25 +0000
- Subject: Re: [Patch, AArch64][v2] Disassemble MOVZ, MOVN and ORR as MOV
- References: <50A5365C.4030901@arm.com>
Hi,
Please find the updated patches.
During some offline discussion, it's been suggested to always print MOV
immediate values in hex with decimal in comment; this should make the
disassembly output look more consistent, thus less confusing.
OK to commit?
Thanks,
Yufeng
opcodes/
2012-12-11 Yufeng Zhang <yufeng.zhang@arm.com>
* aarch64-opc.c (aarch64_print_operand): Change to print
AARCH64_OPND_IMM_MOV in hexadecimal in the instruction and in
decimal
in comment.
* aarch64-tbl.h (aarch64_opcode_table): Remove the 'F_PSEUDO' flag
from the opcode entries of OP_MOV_IMM_LOG, OP_MOV_IMM_WIDEN and
OP_MOV_IMM_WIDE.
gas/testsuite/
2012-12-11 Yufeng Zhang <yufeng.zhang@arm.com>
* gas/aarch64/int-insns.d: Update.
* gas/aarch64/mov.d: Update.
* gas/aarch64/reloc-insn.d: Update.
ld/testsuite/
2012-12-11 Yufeng Zhang <yufeng.zhang@arm.com>
* ld-aarch64/emit-relocs-264.d: Append the '-Mno-aliases' option to
the objdump directive.
* ld-aarch64/emit-relocs-266.d: Ditto.
* ld-aarch64/emit-relocs-268.d: Ditto.
* ld-aarch64/emit-relocs-269.d: Ditto.
* ld-aarch64/emit-relocs-270.d: Ditto.
* ld-aarch64/emit-relocs-271.d: Ditto.
* ld-aarch64/emit-relocs-272.d: Ditto.
On 15/11/12 18:37, Yufeng Zhang wrote:
Hi,
This patch changes the AArch64 disassembler to disassemble MOVZ, MOVN
and ORR (imm) as MOV where rules apply (for details, see 5.4.3.1 Move
(immediate), ARMv8 Instruction Set Overview).
The immediate value of the MOV alias is generally output in hex with
decimal in comment, unless the corresponding machine instruction is a
MOVZ/MOVN with shift == 0, in which case signed decimal is output with
hex in comment.
Is it OK to commit?
Thanks,
Yufeng
include/opcode/
2012-11-15 Yufeng Zhang<yufeng.zhang@arm.com>
* aarch64.h (aarch64_opnd_info): Add bit-field 'otd_flag'.
opcodes/
2012-11-15 Yufeng Zhang<yufeng.zhang@arm.com>
* aarch64-dis.c (convert_movewide_to_mov): Set 'otd_flag'.
* aarch64-opc.c (aarch64_print_operand): Change to print
AARCH64_OPND_IMM_MOV verbosely and in different formats
depending on the value of 'otd_flag'.
* aarch64-tbl.h (aarch64_opcode_table): Remove the 'F_PSEUDO' flag
from the opcode entries of OP_MOV_IMM_LOG, OP_MOV_IMM_WIDEN and
OP_MOV_IMM_WIDE.
gas/testsuite/
2012-11-15 Yufeng Zhang<yufeng.zhang@arm.com>
* gas/aarch64/int-insns.d: Update.
* gas/aarch64/mov.d: Update.
* gas/aarch64/reloc-insn.d: Update.
ld/testsuite/
2012-11-15 Yufeng Zhang<yufeng.zhang@arm.com>
* ld-aarch64/emit-relocs-264.d: Append the '-Mno-aliases' option to
the objdump directive.
* ld-aarch64/emit-relocs-266.d: Ditto.
* ld-aarch64/emit-relocs-268.d: Ditto.
* ld-aarch64/emit-relocs-269.d: Ditto.
* ld-aarch64/emit-relocs-270.d: Ditto.
* ld-aarch64/emit-relocs-271.d: Ditto.
* ld-aarch64/emit-relocs-272.d: Ditto.
diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c
index b5e0984..a68a74c 100644
--- a/opcodes/aarch64-opc.c
+++ b/opcodes/aarch64-opc.c
@@ -2433,10 +2433,26 @@ aarch64_print_operand (char *buf, size_t size, bfd_vma pc,
case AARCH64_OPND_IMMR:
case AARCH64_OPND_IMMS:
case AARCH64_OPND_FBITS:
- case AARCH64_OPND_IMM_MOV:
snprintf (buf, size, "#%" PRIi64, opnd->imm.value);
break;
+ case AARCH64_OPND_IMM_MOV:
+ switch (aarch64_get_qualifier_esize (opnds[0].qualifier))
+ {
+ case 4: /* e.g. MOV Wd, #<imm32>. */
+ {
+ int imm32 = opnd->imm.value;
+ snprintf (buf, size, "#0x%-20x\t// #%d", imm32, imm32);
+ }
+ break;
+ case 8: /* e.g. MOV Xd, #<imm64>. */
+ snprintf (buf, size, "#0x%-20" PRIx64 "\t// #%" PRIi64,
+ opnd->imm.value, opnd->imm.value);
+ break;
+ default: assert (0);
+ }
+ break;
+
case AARCH64_OPND_FPIMM0:
snprintf (buf, size, "#0.0");
break;
diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h
index d360b14..3fbc3b5 100644
--- a/opcodes/aarch64-tbl.h
+++ b/opcodes/aarch64-tbl.h
@@ -2017,7 +2017,7 @@ struct aarch64_opcode aarch64_opcode_table[] =
{"and", 0x12000000, 0x7f800000, log_imm, 0, CORE, OP3 (Rd_SP, Rn, LIMM), QL_R2NIL, F_HAS_ALIAS | F_SF},
{"bic", 0x12000000, 0x7f800000, log_imm, OP_BIC, CORE, OP3 (Rd_SP, Rn, LIMM), QL_R2NIL, F_ALIAS | F_PSEUDO | F_SF},
{"orr", 0x32000000, 0x7f800000, log_imm, 0, CORE, OP3 (Rd_SP, Rn, LIMM), QL_R2NIL, F_HAS_ALIAS | F_SF},
- {"mov", 0x320003e0, 0x7f8003e0, log_imm, OP_MOV_IMM_LOG, CORE, OP2 (Rd_SP, IMM_MOV), QL_R1NIL, F_ALIAS | F_PSEUDO | F_P1 | F_SF | F_CONV},
+ {"mov", 0x320003e0, 0x7f8003e0, log_imm, OP_MOV_IMM_LOG, CORE, OP2 (Rd_SP, IMM_MOV), QL_R1NIL, F_ALIAS | F_P1 | F_SF | F_CONV},
{"eor", 0x52000000, 0x7f800000, log_imm, 0, CORE, OP3 (Rd_SP, Rn, LIMM), QL_R2NIL, F_SF},
{"ands", 0x72000000, 0x7f800000, log_imm, 0, CORE, OP3 (Rd, Rn, LIMM), QL_R2NIL, F_HAS_ALIAS | F_SF},
{"tst", 0x7200001f, 0x7f80001f, log_imm, 0, CORE, OP2 (Rn, LIMM), QL_R1NIL, F_ALIAS | F_SF},
@@ -2036,9 +2036,9 @@ struct aarch64_opcode aarch64_opcode_table[] =
{"bics", 0x6a200000, 0x7f200000, log_shift, 0, CORE, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_SF},
/* Move wide (immediate). */
{"movn", 0x12800000, 0x7f800000, movewide, OP_MOVN, CORE, OP2 (Rd, HALF), QL_DST_R, F_SF | F_HAS_ALIAS},
- {"mov", 0x12800000, 0x7f800000, movewide, OP_MOV_IMM_WIDEN, CORE, OP2 (Rd, IMM_MOV), QL_DST_R, F_SF | F_ALIAS | F_PSEUDO | F_CONV},
+ {"mov", 0x12800000, 0x7f800000, movewide, OP_MOV_IMM_WIDEN, CORE, OP2 (Rd, IMM_MOV), QL_DST_R, F_SF | F_ALIAS | F_CONV},
{"movz", 0x52800000, 0x7f800000, movewide, OP_MOVZ, CORE, OP2 (Rd, HALF), QL_DST_R, F_SF | F_HAS_ALIAS},
- {"mov", 0x52800000, 0x7f800000, movewide, OP_MOV_IMM_WIDE, CORE, OP2 (Rd, IMM_MOV), QL_DST_R, F_SF | F_ALIAS | F_PSEUDO | F_CONV},
+ {"mov", 0x52800000, 0x7f800000, movewide, OP_MOV_IMM_WIDE, CORE, OP2 (Rd, IMM_MOV), QL_DST_R, F_SF | F_ALIAS | F_CONV},
{"movk", 0x72800000, 0x7f800000, movewide, OP_MOVK, CORE, OP2 (Rd, HALF), QL_DST_R, F_SF},
/* PC-rel. addressing. */
{"adr", 0x10000000, 0x9f000000, pcreladdr, 0, CORE, OP2 (Rd, ADDR_PCREL21), QL_ADRP, 0},
diff --git a/gas/testsuite/gas/aarch64/int-insns.d b/gas/testsuite/gas/aarch64/int-insns.d
index cf939de..8896c40 100644
--- a/gas/testsuite/gas/aarch64/int-insns.d
+++ b/gas/testsuite/gas/aarch64/int-insns.d
@@ -37,18 +37,18 @@ Disassembly of section .text:
68: 8b430441 add x1, x2, x3, lsr #1
6c: 91001ca5 add x5, x5, #0x7
70: 71000421 subs w1, w1, #0x1
- 74: d2800c82 movz x2, #0x64
- 78: d2800c82 movz x2, #0x64
- 7c: d2800c82 movz x2, #0x64
- 80: d2a00c82 movz x2, #0x64, lsl #16
- 84: d2a00c82 movz x2, #0x64, lsl #16
- 88: d2c00c82 movz x2, #0x64, lsl #32
- 8c: d2c00c82 movz x2, #0x64, lsl #32
- 90: d2e00c82 movz x2, #0x64, lsl #48
- 94: d2e00c82 movz x2, #0x64, lsl #48
- 98: 52800c81 movz w1, #0x64
- 9c: 52800c81 movz w1, #0x64
- a0: 52a00c81 movz w1, #0x64, lsl #16
+ 74: d2800c82 mov x2, #0x64 // #100
+ 78: d2800c82 mov x2, #0x64 // #100
+ 7c: d2800c82 mov x2, #0x64 // #100
+ 80: d2a00c82 mov x2, #0x640000 // #6553600
+ 84: d2a00c82 mov x2, #0x640000 // #6553600
+ 88: d2c00c82 mov x2, #0x6400000000 // #429496729600
+ 8c: d2c00c82 mov x2, #0x6400000000 // #429496729600
+ 90: d2e00c82 mov x2, #0x64000000000000 // #28147497671065600
+ 94: d2e00c82 mov x2, #0x64000000000000 // #28147497671065600
+ 98: 52800c81 mov w1, #0x64 // #100
+ 9c: 52800c81 mov w1, #0x64 // #100
+ a0: 52a00c81 mov w1, #0x640000 // #6553600
a4: 8a030041 and x1, x2, x3
a8: 0a0f015e and w30, w10, w15
ac: 12000041 and w1, w2, #0x1
diff --git a/gas/testsuite/gas/aarch64/mov.d b/gas/testsuite/gas/aarch64/mov.d
index b344b8e..78b9027 100644
--- a/gas/testsuite/gas/aarch64/mov.d
+++ b/gas/testsuite/gas/aarch64/mov.d
@@ -13,14 +13,14 @@ Disassembly of section \.text:
14: 910003ff mov sp, sp
18: aa0f03e7 mov x7, x15
1c: 2a0f03e7 mov w7, w15
- 20: 52800b01 movz w1, #0x58
- 24: 12800000 movn w0, #0x0
- 28: b2607fe0 orr x0, xzr, #0xffffffff00000000
- 2c: b2400fff orr sp, xzr, #0xf
- 30: 32000fff orr wsp, wzr, #0xf
- 34: d28001ff movz xzr, #0xf
- 38: 528001ff movz wzr, #0xf
+ 20: 52800b01 mov w1, #0x58 // #88
+ 24: 12800000 mov w0, #0xffffffff // #-1
+ 28: b2607fe0 mov x0, #0xffffffff00000000 // #-4294967296
+ 2c: b2400fff mov sp, #0xf // #15
+ 30: 32000fff mov wsp, #0xf // #15
+ 34: d28001ff mov xzr, #0xf // #15
+ 38: 528001ff mov wzr, #0xf // #15
3c: 0e1c3de7 mov w7, v15\.s\[3\]
40: 4e183fef mov x15, v31\.d\[1\]
- 44: d2801fe0 movz x0, #0xff
+ 44: d2801fe0 mov x0, #0xff // #255
48: 320de400 orr w0, w0, #0x99999999
diff --git a/gas/testsuite/gas/aarch64/reloc-insn.d b/gas/testsuite/gas/aarch64/reloc-insn.d
index 7eb13a2..afcccc7 100644
--- a/gas/testsuite/gas/aarch64/reloc-insn.d
+++ b/gas/testsuite/gas/aarch64/reloc-insn.d
@@ -5,13 +5,13 @@
Disassembly of section \.text:
0000000000000000 <.*>:
- 0: d281ffe0 movz x0, #0xfff
- 4: 9280ffe0 movn x0, #0x7ff
- 8: d2a24681 movz x1, #0x1234, lsl #16
+ 0: d281ffe0 mov x0, #0xfff // #4095
+ 4: 9280ffe0 mov x0, #0xfffffffffffff800 // #-2048
+ 8: d2a24681 mov x1, #0x12340000 // #305397760
c: f28acf01 movk x1, #0x5678
10: 92a00001 movn x1, #0x0, lsl #16
14: f29f0001 movk x1, #0xf800
- 18: d2d55761 movz x1, #0xaabb, lsl #32
+ 18: d2d55761 mov x1, #0xaabb00000000 // #187720135606272
1c: f2b99ba1 movk x1, #0xccdd, lsl #16
20: f29ddfe1 movk x1, #0xeeff
24: d2c00001 movz x1, #0x0, lsl #32
@@ -29,11 +29,11 @@ Disassembly of section \.text:
3c: 92c00001 movn x1, #0x0, lsl #32
40: f2bfffe1 movk x1, #0xffff, lsl #16
44: f29f0001 movk x1, #0xf800
- 48: d2ffffe1 movz x1, #0xffff, lsl #48
+ 48: d2ffffe1 mov x1, #0xffff000000000000 // #-281474976710656
4c: f2dfffe1 movk x1, #0xffff, lsl #32
50: f2bfffe1 movk x1, #0xffff, lsl #16
54: f29f0001 movk x1, #0xf800
- 58: d2ffdb81 movz x1, #0xfedc, lsl #48
+ 58: d2ffdb81 mov x1, #0xfedc000000000000 // #-82190693199511552
5c: f2d75301 movk x1, #0xba98, lsl #32
60: f2aeca81 movk x1, #0x7654, lsl #16
64: f2864201 movk x1, #0x3210
@@ -121,11 +121,11 @@ Disassembly of section \.text:
11c: 9400001f bl 198 <lab>
120: 94000000 bl 0 <xlab>
120: R_AARCH64_CALL26 xlab
- 124: d2e24680 movz x0, #0x1234, lsl #48
+ 124: d2e24680 mov x0, #0x1234000000000000 // #1311673391471656960
128: f2cacf00 movk x0, #0x5678, lsl #32
12c: f2b35780 movk x0, #0x9abc, lsl #16
130: f29bde00 movk x0, #0xdef0
- 134: d2ffdb80 movz x0, #0xfedc, lsl #48
+ 134: d2ffdb80 mov x0, #0xfedc000000000000 // #-82190693199511552
138: f2d75300 movk x0, #0xba98, lsl #32
13c: f2aeca80 movk x0, #0x7654, lsl #16
140: f2864200 movk x0, #0x3210
@@ -156,6 +156,5 @@ Disassembly of section \.text:
18c: 39400001 ldrb w1, \[x0\]
190: d65f03c0 ret
-
0000000000000194 <llit>:
194: deadf00d \.word 0xdeadf00d
diff --git a/ld/testsuite/ld-aarch64/emit-relocs-264.d b/ld/testsuite/ld-aarch64/emit-relocs-264.d
index 1da911b..eb93154 100644
--- a/ld/testsuite/ld-aarch64/emit-relocs-264.d
+++ b/ld/testsuite/ld-aarch64/emit-relocs-264.d
@@ -1,6 +1,6 @@
#source: emit-relocs-264.s
#ld: -T relocs.ld --defsym tempy=0x11000 --defsym tempy2=0x45000 --defsym tempy3=0x1234 -e0 --emit-relocs
-#objdump: -dr
+#objdump: -dr -Mno-aliases
#...
+10000: 8a000000 and x0, x0, x0
+10004: 92400000 and x0, x0, #0x1
diff --git a/ld/testsuite/ld-aarch64/emit-relocs-266.d b/ld/testsuite/ld-aarch64/emit-relocs-266.d
index fde9090..d517c8e 100644
--- a/ld/testsuite/ld-aarch64/emit-relocs-266.d
+++ b/ld/testsuite/ld-aarch64/emit-relocs-266.d
@@ -1,6 +1,6 @@
#source: emit-relocs-266.s
#ld: -T relocs.ld --defsym tempy=0x11000 --defsym tempy2=0x45000 --defsym tempy3=0x1234 -e0 --emit-relocs
-#objdump: -dr
+#objdump: -dr -Mno-aliases
#...
+10000: 8a000000 and x0, x0, x0
+10004: 92400000 and x0, x0, #0x1
diff --git a/ld/testsuite/ld-aarch64/emit-relocs-268.d b/ld/testsuite/ld-aarch64/emit-relocs-268.d
index 126548b..2733ebf 100644
--- a/ld/testsuite/ld-aarch64/emit-relocs-268.d
+++ b/ld/testsuite/ld-aarch64/emit-relocs-268.d
@@ -1,6 +1,6 @@
#source: emit-relocs-268.s
#ld: -T relocs.ld --defsym tempy=0x63001000 --defsym tempy2=0x4500000000 --defsym tempy3=0x1234567812345 -e0 --emit-relocs
-#objdump: -dr
+#objdump: -dr -Mno-aliases
#...
+10000: 8a000000 and x0, x0, x0
+10004: 92400000 and x0, x0, #0x1
diff --git a/ld/testsuite/ld-aarch64/emit-relocs-269.d b/ld/testsuite/ld-aarch64/emit-relocs-269.d
index a911532..0ed2729 100644
--- a/ld/testsuite/ld-aarch64/emit-relocs-269.d
+++ b/ld/testsuite/ld-aarch64/emit-relocs-269.d
@@ -1,6 +1,6 @@
#source: emit-relocs-269.s
#ld: -T relocs.ld --defsym tempy=0x6300100100100100 --defsym tempy2=0xf00df00df00df00d --defsym tempy3=0x1234567812345 -e0 --emit-relocs
-#objdump: -dr
+#objdump: -dr -Mno-aliases
#...
+10000: 8a000000 and x0, x0, x0
+10004: 92400000 and x0, x0, #0x1
diff --git a/ld/testsuite/ld-aarch64/emit-relocs-270.d b/ld/testsuite/ld-aarch64/emit-relocs-270.d
index 6e68aec..442150e 100644
--- a/ld/testsuite/ld-aarch64/emit-relocs-270.d
+++ b/ld/testsuite/ld-aarch64/emit-relocs-270.d
@@ -1,6 +1,6 @@
#source: emit-relocs-270.s
#ld: -T relocs.ld --defsym tempy=0x1012 --defsym tempy2=0x4500 --defsym tempy3=-292 -e0 --emit-relocs
-#objdump: -dr
+#objdump: -dr -Mno-aliases
#...
+10000: 8a000000 and x0, x0, x0
diff --git a/ld/testsuite/ld-aarch64/emit-relocs-271.d b/ld/testsuite/ld-aarch64/emit-relocs-271.d
index 5a230c7..1f34820 100644
--- a/ld/testsuite/ld-aarch64/emit-relocs-271.d
+++ b/ld/testsuite/ld-aarch64/emit-relocs-271.d
@@ -1,6 +1,6 @@
#source: emit-relocs-271.s
#ld: -T relocs.ld --defsym tempy=0x1012 --defsym tempy2=0x674500 --defsym tempy3=-292 -e0 --emit-relocs
-#objdump: -dr
+#objdump: -dr -Mno-aliases
#...
+10000: 8a000000 and x0, x0, x0
diff --git a/ld/testsuite/ld-aarch64/emit-relocs-272.d b/ld/testsuite/ld-aarch64/emit-relocs-272.d
index a02a52e..011ead5 100644
--- a/ld/testsuite/ld-aarch64/emit-relocs-272.d
+++ b/ld/testsuite/ld-aarch64/emit-relocs-272.d
@@ -1,6 +1,6 @@
#source: emit-relocs-272.s
#ld: -T relocs.ld --defsym tempy=0x1012 --defsym tempy2=-12345678912345 --defsym tempy3=-292 -e0 --emit-relocs
-#objdump: -dr
+#objdump: -dr -Mno-aliases
#...
+10000: 8a000000 and x0, x0, x0