* config/tc-v850.c (md_assemble): Sign extend constants value
authorJeff Law <law@redhat.com>
Thu, 31 Jul 1997 21:11:17 +0000 (21:11 +0000)
committerJeff Law <law@redhat.com>
Thu, 31 Jul 1997 21:11:17 +0000 (21:11 +0000)
        for hi and hi0 expressions.
        (v850_insert_operand): Enable range checking for generic 16bit
        operands.
finish work for pr12944.

gas/ChangeLog
gas/config/tc-v850.c

index 2399e4c..d5ab127 100644 (file)
@@ -1,4 +1,11 @@
 start-sanitize-v850
+Thu Jul 31 15:13:43 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * config/tc-v850.c (md_assemble): Sign extend constants value
+       for hi and hi0 expressions.
+       (v850_insert_operand): Enable range checking for generic 16bit
+       operands.
+
 Tue Jul 29 14:20:43 1997  Jeffrey A Law  (law@cygnus.com)
 
        * config/tc-v850.c (md_assemble): Turn on fx_no_overflow for
index 59dfb6c..5ee6528 100644 (file)
@@ -655,13 +655,28 @@ md_assemble (str)
                      }
 
                    case BFD_RELOC_HI16:
-                     ex.X_add_number = ((ex.X_add_number >> 16) & 0xffff);
-                     break;
+                     {
+                       /* Truncate, then sign extend the value.  */
+                       int temp = (ex.X_add_number >> 16) & 0xffff;
+
+                       /* XXX Assumes 32bit ints! */
+                       temp = (temp << 16) >> 16;
+                       ex.X_add_number = temp;
+                       break;
+                     }
 
                    case BFD_RELOC_HI16_S:
-                     ex.X_add_number = ((ex.X_add_number >> 16) & 0xffff)
-                       + ((ex.X_add_number >> 15) & 1);
-                     break;
+                     {
+                       /* Truncate, then sign extend the value.  */
+                       int temp = (ex.X_add_number >> 16) & 0xffff;
+
+                       temp += (ex.X_add_number >> 15) & 1;
+
+                       /* XXX Assumes 32bit ints! */
+                       temp = (temp << 16) >> 16;
+                       ex.X_add_number = temp;
+                       break;
+                     }
 
                    default:
                      break;
@@ -1062,7 +1077,7 @@ v850_insert_operand (insn, operand, val, file, line)
      char *file;
      unsigned int line;
 {
-  if (operand->bits != 16)
+  if (operand->bits != 32)
     {
       long min, max;
       offsetT test;