* cgen-ibld.in (insert_normal): Support CGEN_IFLD_SIGN_OPT.
authorGeoffrey Keating <geoffk@geoffk.org>
Sun, 1 Jul 2001 02:48:46 +0000 (02:48 +0000)
committerGeoffrey Keating <geoffk@geoffk.org>
Sun, 1 Jul 2001 02:48:46 +0000 (02:48 +0000)
opcodes/ChangeLog
opcodes/cgen-ibld.in

index d7dc563fa2316b07890055cc51369ca95c99207f..c6af91e3a5dab855119467f4844daf17336ee408 100644 (file)
@@ -1,3 +1,7 @@
+2001-06-30  Geoffrey Keating  <geoffk@redhat.com>
+
+       * cgen-ibld.in (insert_normal): Support CGEN_IFLD_SIGN_OPT.
+
 2001-06-28  Geoffrey Keating  <geoffk@redhat.com>
 
        * cgen-asm.c (cgen_parse_keyword): Allow any first character.
index ca2f1e5fcc19d8d461b2361795f03a90ba9b35e7..0ca4200aa2ae47c6adb086dc223889db21eb3cde 100644 (file)
@@ -145,7 +145,22 @@ insert_normal (cd, value, attrs, word_offset, start, length, word_length,
     }
 
   /* Ensure VALUE will fit.  */
-  if (! CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED))
+  if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT))
+    {
+      long minval = - (1L << (length - 1));
+      unsigned long maxval = mask;
+      
+      if ((value > 0 && (unsigned long) value > maxval)
+         || value < minval)
+       {
+         /* xgettext:c-format */
+         sprintf (errbuf,
+                  _("operand out of range (%ld not between %ld and %lu)"),
+                  value, minval, maxval);
+         return errbuf;
+       }
+    }
+  else if (! CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED))
     {
       unsigned long maxval = mask;