RISC-V: Disassemble x0 based addresses as 0.
authorJim Wilson <jimw@sifive.com>
Wed, 10 Jan 2018 00:40:06 +0000 (16:40 -0800)
committerJim Wilson <jimw@sifive.com>
Wed, 10 Jan 2018 00:40:06 +0000 (16:40 -0800)
gas/
* testsuite/gas/riscv/auipc-x0.d: New.
* testsuite/gas/riscv/auipc-x0.s: New.

opcodes/
* riscv-dis.c (maybe_print_address): If base_reg is zero,
then the hi_addr value is zero.

gas/ChangeLog
gas/testsuite/gas/riscv/auipc-x0.d [new file with mode: 0644]
gas/testsuite/gas/riscv/auipc-x0.s [new file with mode: 0644]
opcodes/ChangeLog
opcodes/riscv-dis.c

index 287656b325799ccee0e374762c45cbe9c234ea97..4ab6fa3ef12dcafcc7db51e1f063755f1edc08ba 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-09  Jim Wilson  <jimw@sifive.com>
+
+       * testsuite/gas/riscv/auipc-x0.d: New.
+       * testsuite/gas/riscv/auipc-x0.s: New.
+
 2018-01-09  James Greenhalgh  <james.greenhalgh@arm.com>
 
        * config/tc-arm.c (insns): Add csdb, enable for Armv3 and above
diff --git a/gas/testsuite/gas/riscv/auipc-x0.d b/gas/testsuite/gas/riscv/auipc-x0.d
new file mode 100644 (file)
index 0000000..bcf95af
--- /dev/null
@@ -0,0 +1,12 @@
+#as: -march=rv32i
+#objdump: -dr
+
+.*:[   ]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+#...
+[      ]+40:[  ]+00000017[     ]+auipc[        ]+zero,0x0
+[      ]+44:[  ]+00002003[     ]+lw[   ]+zero,0\(zero\) # 0 .*
diff --git a/gas/testsuite/gas/riscv/auipc-x0.s b/gas/testsuite/gas/riscv/auipc-x0.s
new file mode 100644 (file)
index 0000000..f7b394c
--- /dev/null
@@ -0,0 +1,4 @@
+target:
+       .skip 64
+       auipc x0, 0
+       lw x0, 0(x0)
index 96bc41c900439d124577283480b56daa651c58d5..24d1101c1065a4deef20173954367b5ad1dfecc8 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-09  Jim Wilson  <jimw@sifive.com>
+
+       * riscv-dis.c (maybe_print_address): If base_reg is zero,
+       then the hi_addr value is zero.
+
 2018-01-09  James Greenhalgh  <james.greenhalgh@arm.com>
 
        * arm-dis.c (arm_opcodes): Add csdb.
index cc427b4b935fb5c467375eb50a2f0a6f79119358..cc642d4ad3045ac7920f3898647b9d0da1040564 100644 (file)
@@ -101,7 +101,7 @@ maybe_print_address (struct riscv_private_data *pd, int base_reg, int offset)
 {
   if (pd->hi_addr[base_reg] != (bfd_vma)-1)
     {
-      pd->print_addr = pd->hi_addr[base_reg] + offset;
+      pd->print_addr = (base_reg != 0 ? pd->hi_addr[base_reg] : 0) + offset;
       pd->hi_addr[base_reg] = -1;
     }
   else if (base_reg == X_GP && pd->gp != (bfd_vma)-1)