* config/tc-v850.c (md_assemble): Allow signed values for
authorNick Clifton <nickc@redhat.com>
Tue, 15 Jan 2013 08:45:45 +0000 (08:45 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 15 Jan 2013 08:45:45 +0000 (08:45 +0000)
V850E_IMMEDIATE.

* gas/v850/basic.exp: Allow for variations in reloc names.
* gas/v850/split-lo16.d: Likewise.

* gas/v850/v850e1.s: Add more tests of the PREPARE insn.
* gas/v850/v850e1.d: Update expected disassembly.

* v850-dis.c (get_operand_value): Sign extend V850E_IMMEDIATE
values.
* v850-opc.c (IMM16LO): Add V850_OPERAND_SIGNED attribute.

gas/ChangeLog
gas/config/tc-v850.c
gas/testsuite/ChangeLog
gas/testsuite/gas/v850/basic.exp
gas/testsuite/gas/v850/split-lo16.d
gas/testsuite/gas/v850/v850e1.d
gas/testsuite/gas/v850/v850e1.s
opcodes/ChangeLog
opcodes/v850-dis.c
opcodes/v850-opc.c

index a7758bf6686bbdcc85d5276506788bad0ca0bbf8..d632dcaa2d0a5ff6074ffb25198af448b7a7bb1c 100644 (file)
@@ -1,3 +1,8 @@
+2013-01-15  Nick Clifton  <nickc@redhat.com>
+
+       * config/tc-v850.c (md_assemble): Allow signed values for
+       V850E_IMMEDIATE.
+
 2013-01-11  Sean Keys  <skeys@ipdatasys.com>
 
        * config/tc-xgate.c (md_begin): Fix mistake made when going from
index 7053e9300bf9f74386d2035641b59d8a35d21e18..ad1fb30eb8b11ada8ff58126e68553ae2720ff1a 100644 (file)
@@ -2350,7 +2350,8 @@ md_assemble (char *str)
                    }
                  if (operand->flags & V850E_IMMEDIATE16)
                    {
-                     if (ex.X_add_number & 0xffff0000)
+                     if ((ex.X_add_number & 0xffff0000)
+                         && ((ex.X_add_number & 0xffff0000) != 0xffff0000))
                        {
                          errmsg = _("constant too big to fit into instruction");
                          goto error;
index fafd84feff050f1240a5fec84ba4b5fe9da31310..47d6d15e3031e57a56d189d6a18d4ac8d760a6c7 100644 (file)
@@ -1,3 +1,11 @@
+2013-01-15  Nick Clifton  <nickc@redhat.com>
+
+       * gas/v850/basic.exp: Allow for variations in reloc names.
+       * gas/v850/split-lo16.d: Likewise.
+
+       * gas/v850/v850e1.s: Add more tests of the PREPARE insn.
+       * gas/v850/v850e1.d: Update expected disassembly.
+
 2013-01-14  Alan Modra  <amodra@gmail.com>
 
        * gas/v850/basic.exp (reloc part 1): Pass -mgcc-abi to gas.
index aaf377a0d04c114238346d8aa42c95c0ef2dda69..cf6aaa35375f6e134c53e00ca95786163f34bf81 100644 (file)
@@ -386,17 +386,17 @@ proc do_simple_reloc_tests {} {
 
        while 1 {
            expect {
-               -re "^00000002\[^\n\]*R_V850_LO16\[^\n\]*\n"
+               -re "^00000002\[^\n\]*R_V8\[A-Z0-9_\]+\[^\n\]*\n"
                        { set x [expr $x+1] }
-               -re "^00000006\[^\n\]*R_V850_HI16_S\[^\n\]*\n"
+               -re "^00000006\[^\n\]*R_V8\[A-Z0-9_\]+\[^\n\]*\n"
                        { set x [expr $x+1] }
-               -re "^0000000a\[^\n\]*R_V850_HI16\[^\n\]*\n"
+               -re "^0000000a\[^\n\]*R_V8\[A-Z0-9_\]+\[^\n\]*\n"
                        { set x [expr $x+1] }
-               -re "^0000000e\[^\n\]*R_V850_ZDA_16_16_OFFSET\[^\n\]*\n"
+               -re "^0000000e\[^\n\]*R_V8\[A-Z0-9_\]+\[^\n\]*\n"
                        { set x [expr $x+1] }
-               -re "^00000012\[^\n\]*R_V850_TDA_16_16_OFFSET\[^\n\]*\n"
+               -re "^00000012\[^\n\]*R_V8\[A-Z0-9_\]+\[^\n\]*\n"
                        { set x [expr $x+1] }
-               -re "^00000016\[^\n\]*R_V850_SDA_16_16_OFFSET\[^\n\]*\n"
+               -re "^00000016\[^\n\]*R_V8\[A-Z0-9_\]+\[^\n\]*\n"
                        { set x [expr $x+1] }
                -re "\[^\n\]*\n"                                { }
                timeout                 { perror "timeout\n"; break }
index f7420845858a83f78f0f4e94d2a0a6d6e235cbf0..9580c80e55aaccbb0fbf7b5b4e7a6881e1a6d0d0 100644 (file)
@@ -4,13 +4,13 @@
 #...
 00000000 <.*>:
    0:  40 0e 00 00     movhi   0, r0, r1
-                       2: R_V850_HI16_S        foo
+                       2: R_V8.*       foo
    4:  01 16 00 00     addi    0, r1, r2
-                       6: R_V850_LO16  foo
+                       6: R_V8.*       foo
    8:  01 17 00 00     ld\.b   0\[r1\], r2
-                       a: R_V850_LO16  foo
+                       a: R_V8.*       foo
    c:  81 17 01 00     ld\.bu  0\[r1\], r2
-                       c: R_V850_LO16_SPLIT_OFFSET     foo
+                       c: R_V8.*       foo
   10:  a1 17 45 23     ld\.bu  9029\[r1\], r2
   14:  81 17 57 34     ld\.bu  13398\[r1\], r2
   18:  20 57 01 00     ld.w    0\[r0\], r10
index 7560d88d83657078c2beb6de7f146b295f501429..6773c5c82a5bd85cca985ef722e8ad30c3f04362 100644 (file)
@@ -43,3 +43,4 @@ Disassembly of section .text:
 0x0+7a 83 00  [        ]*zxb   sp
 0x0+7c c4 00  [        ]*zxh   gp
 0x0+7e 63 ff 9d 00[    ]*st.w  lp, 156\[sp\]
+0x0+82 80 07 0b e8 f6 ff[      ]*prepare       {r20, r24 - r26}, 0, -10
index 2e6d640a242611834638dc91afc9c170a1092c0b..b60be436890d1eb8a849567cad14a81427621ff0 100644 (file)
@@ -37,3 +37,4 @@
        zxb     r3
        zxh     r4
        st.w    lp, 156[sp]
+       prepare {r20,r24,r25,r26},0,-10
index 6ccf7acdd50359ddd5777853cfdf2c23e71adc91..27607884ddf785ac0793fd2240f3377dd5003ba9 100644 (file)
@@ -1,3 +1,9 @@
+2013-01-15  Nick Clifton  <nickc@redhat.com>
+
+       * v850-dis.c (get_operand_value): Sign extend V850E_IMMEDIATE
+       values.
+       * v850-opc.c (IMM16LO): Add V850_OPERAND_SIGNED attribute.
+
 2013-01-14  Will Newton <will.newton@imgtec.com>
 
        * metag-dis.c (REG_WIDTH): Increase to 64.
index 5f9d87b8f8668ce5beb7a2ed7443e39ecf966acb..7d2e72025ab18422490498ef319e0cbb1b10b4cd 100644 (file)
@@ -118,6 +118,8 @@ get_operand_value (const struct v850_operand *operand,
 
          if (operand->flags & V850E_IMMEDIATE16HI)
            value <<= 16;
+         else if (value & 0x8000)
+           value |= (-1L << 16);
 
          return value;
        }
index 0867d432caa59abf553f3ba933d9b2219c5b0955..806651f3622d8ef6507874c6fcda952c6a1769cd 100644 (file)
@@ -747,9 +747,9 @@ const struct v850_operand v850_operands[] =
 #define IMM16  (I16 + 1)
   { 16, 32, NULL, NULL, V850E_IMMEDIATE16, BFD_RELOC_16 },
 
-/* The 16 bit immediate following a 32 bit instruction.  */
+/* The signed 16 bit immediate following a prepare instruction.  */
 #define IMM16LO        (IMM16 + 1)
-  { 16, 32, NULL, NULL, V850E_IMMEDIATE16, BFD_RELOC_LO16 },
+  { 16, 32, NULL, NULL, V850E_IMMEDIATE16 | V850_OPERAND_SIGNED, BFD_RELOC_LO16 },
 
 /* The hi 16 bit immediate following a 32 bit instruction.  */
 #define IMM16HI        (IMM16LO + 1)