Correct opcode generated for RX indirect MOVs without an offset.
authorVinay Kumar G <Vinay.G@kpit.com>
Mon, 15 Feb 2016 16:34:34 +0000 (16:34 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 15 Feb 2016 16:34:34 +0000 (16:34 +0000)
PR gas/19665
* config/rx-parse.y (MOV):  Opcode generation for index
register addressing mode.
* testsuite/gas/rx/rx.exp: Updated for new testcase.
* testsuite/gas/rx/pr19665.s: New file.
* testsuite/gas/rx/pr19665.s: New file.
* testsuite/gas/rx/mov.d: Update expected output.

gas/ChangeLog
gas/config/rx-parse.y
gas/testsuite/gas/rx/mov.d
gas/testsuite/gas/rx/pr19665.d [new file with mode: 0644]
gas/testsuite/gas/rx/pr19665.s [new file with mode: 0644]
gas/testsuite/gas/rx/rx.exp

index 57a34ca..ab32c0f 100644 (file)
@@ -1,4 +1,14 @@
-2016-02-15  Nick Clifton  <nickc@redhat.com>
+202016-02-15  Vinay  <Vinay.G@kpit.com>
+
+       PR gas/19665
+       * config/rx-parse.y (MOV):  Opcode generation for index
+       register addressing mode.
+       * testsuite/gas/rx/rx.exp: Updated for new testcase.
+       * testsuite/gas/rx/pr19665.s: New file.
+       * testsuite/gas/rx/pr19665.s: New file.
+       * testsuite/gas/rx/mov.d: Update expected output.
+
+16-02-15  Nick Clifton  <nickc@redhat.com>
 
        * doc/as.texinfo (.section): Document that numeric values can now
        be used for the flags and type fields of the ELF target's .section
index 4c99fab..7a7eb70 100644 (file)
@@ -274,6 +274,15 @@ statement :
 
 /* ---------------------------------------------------------------------- */
 
+       | MOV DOT_B '#' EXPR ',' '[' REG ']'
+         { B2 (0xf8, 0x04); F ($7, 8, 4); IMMB ($4, 12);}
+
+       | MOV DOT_W '#' EXPR ',' '[' REG ']'
+          { B2 (0xf8, 0x01); F ($7, 8, 4); IMMW ($4, 12);}
+
+       | MOV DOT_L '#' EXPR ',' '[' REG ']'
+         { B2 (0xf8, 0x02); F ($7, 8, 4); IMM ($4, 12);}
+
        | MOV DOT_B '#' EXPR ',' disp '[' REG ']'
          /* rx_disp5op changes the value if it succeeds, so keep it last.  */
          { if ($8 <= 7 && rx_uintop ($4, 8) && rx_disp5op0 (&$6, BSIZE))
index 1df5321..3be9055 100644 (file)
@@ -167,13 +167,13 @@ Disassembly of section .*:
  [0-9a-f]+:    ef 1f                           mov\.l  r1, r15
  [0-9a-f]+:    ef f0                           mov\.l  r15, r0
  [0-9a-f]+:    ef ff                           mov\.l  r15, r15
- [0-9a-f]+:    3c 00 00                        mov\.b  #0, 0\[r0\]
+ [0-9a-f]+:    f8 04 00                        mov\.b  #0, \[r0\]
  [0-9a-f]+:    f8 f4 00                        mov\.b  #0, \[r15\]
  [0-9a-f]+:    f9 04 fc 00                     mov\.b  #0, 252\[r0\]
  [0-9a-f]+:    f9 f4 fc 00                     mov\.b  #0, 252\[r15\]
  [0-9a-f]+:    fa 04 fc ff 00                  mov\.b  #0, 65532\[r0\]
  [0-9a-f]+:    fa f4 fc ff 00                  mov\.b  #0, 65532\[r15\]
- [0-9a-f]+:    3c 00 ff                        mov\.b  #255, 0\[r0\]
+ [0-9a-f]+:    f8 04 ff                        mov\.b  #255, \[r0\]
  [0-9a-f]+:    f8 f4 ff                        mov\.b  #255, \[r15\]
  [0-9a-f]+:    f9 04 fc ff                     mov\.b  #255, 252\[r0\]
  [0-9a-f]+:    f9 f4 fc ff                     mov\.b  #255, 252\[r15\]
@@ -185,13 +185,13 @@ Disassembly of section .*:
  [0-9a-f]+:    f9 f5 7e 80                     mov\.w  #-128, 252\[r15\]
  [0-9a-f]+:    fa 05 fe 7f 80                  mov\.w  #-128, 65532\[r0\]
  [0-9a-f]+:    fa f5 fe 7f 80                  mov\.w  #-128, 65532\[r15\]
- [0-9a-f]+:    3d 00 7f                        mov\.w  #127, 0\[r0\]
+ [0-9a-f]+:    f8 05 7f                        mov\.w  #127, \[r0\]
  [0-9a-f]+:    f8 f5 7f                        mov\.w  #127, \[r15\]
  [0-9a-f]+:    f9 05 7e 7f                     mov\.w  #127, 252\[r0\]
  [0-9a-f]+:    f9 f5 7e 7f                     mov\.w  #127, 252\[r15\]
  [0-9a-f]+:    fa 05 fe 7f 7f                  mov\.w  #127, 65532\[r0\]
  [0-9a-f]+:    fa f5 fe 7f 7f                  mov\.w  #127, 65532\[r15\]
- [0-9a-f]+:    3d 00 00                        mov\.w  #0, 0\[r0\]
+ [0-9a-f]+:    f8 05 00                        mov\.w  #0, \[r0\]
  [0-9a-f]+:    f8 f5 00                        mov\.w  #0, \[r15\]
  [0-9a-f]+:    f9 05 7e 00                     mov\.w  #0, 252\[r0\]
  [0-9a-f]+:    f9 f5 7e 00                     mov\.w  #0, 252\[r15\]
@@ -209,7 +209,7 @@ Disassembly of section .*:
  [0-9a-f]+:    f9 f6 3f 80                     mov.l   #-128, 252\[r15\]
  [0-9a-f]+:    fa 06 ff 3f 80                  mov.l   #-128, 65532\[r0\]
  [0-9a-f]+:    fa f6 ff 3f 80                  mov.l   #-128, 65532\[r15\]
- [0-9a-f]+:    3e 00 7f                        mov.l   #127, 0\[r0\]
+ [0-9a-f]+:    f8 06 7f                        mov.l   #127, \[r0\]
  [0-9a-f]+:    f8 f6 7f                        mov.l   #127, \[r15\]
  [0-9a-f]+:    f9 06 3f 7f                     mov.l   #127, 252\[r0\]
  [0-9a-f]+:    f9 f6 3f 7f                     mov.l   #127, 252\[r15\]
diff --git a/gas/testsuite/gas/rx/pr19665.d b/gas/testsuite/gas/rx/pr19665.d
new file mode 100644 (file)
index 0000000..6f18151
--- /dev/null
@@ -0,0 +1,26 @@
+#objdump: -dr
+
+dump.o:     file format elf32-rx-le
+
+
+Disassembly of section .*:
+
+00000000 <.*>:
+   0:  f8 04 ff[        ]+mov\.b       #255, \[r0\]
+   3:  f8 14 ff[        ]+mov\.b       #255, \[r1\]
+   6:  f8 24 ff[        ]+mov\.b       #255, \[r2\]
+   9:  f8 d4 ff[        ]+mov\.b       #255, \[r13\]
+   c:  f8 e4 ff[        ]+mov\.b       #255, \[r14\]
+   f:  f8 f4 ff[        ]+mov\.b       #255, \[r15\]
+  12:  f8 09 ff 00[     ]+mov\.w       #255, \[r0\]
+  16:  f8 19 ff 00[     ]+mov\.w       #255, \[r1\]
+  1a:  f8 29 ff 00[     ]+mov\.w       #255, \[r2\]
+  1e:  f8 d9 ff 00[     ]+mov\.w       #255, \[r13\]
+  22:  f8 e9 ff 00[     ]+mov\.w       #255, \[r14\]
+  26:  f8 f9 ff 00[     ]+mov\.w       #255, \[r15\]
+  2a:  f8 0a ff 00[     ]+mov\.l       #255, \[r0\]
+  2e:  f8 1a ff 00[     ]+mov\.l       #255, \[r1\]
+  32:  f8 2a ff 00[     ]+mov\.l       #255, \[r2\]
+  36:  f8 da ff 00[     ]+mov\.l       #255, \[r13\]
+  3a:  f8 ea ff 00[     ]+mov\.l       #255, \[r14\]
+  3e:  f8 fa ff 00[     ]+mov\.l       #255, \[r15\]
diff --git a/gas/testsuite/gas/rx/pr19665.s b/gas/testsuite/gas/rx/pr19665.s
new file mode 100644 (file)
index 0000000..04f1612
--- /dev/null
@@ -0,0 +1,20 @@
+mov.b #0xff, [r0]
+mov.b #0xff, [r1]
+mov.b #0xff, [r2]
+mov.b #0xff, [r13]
+mov.b #0xff, [r14]
+mov.b #0xff, [r15]
+#
+mov.w #0xff, [r0]
+mov.w #0xff, [r1]
+mov.w #0xff, [r2]
+mov.w #0xff, [r13]
+mov.w #0xff, [r14]
+mov.w #0xff, [r15]
+#
+mov.l #0xff, [r0]
+mov.l #0xff, [r1]
+mov.l #0xff, [r2]
+mov.l #0xff, [r13]
+mov.l #0xff, [r14]
+mov.l #0xff, [r15]
index 5c206c7..e16d43b 100644 (file)
@@ -34,3 +34,4 @@ foreach test [lsort [glob $srcdir/$subdir/*.sm]] {
 
 run_dump_test "rx-asm-good"
 # run_list_test "rx-asm-bad" "" "Generation of error messages with bogus Renesas assembler directives"
+run_dump_test "pr19665"