]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
objc-act.c (encode_type): Encode INTEGER_TYPEs and REAL_TYPEs based on the bitsize...
authorZack Weinberg <zack@gcc.gnu.org>
Mon, 29 Sep 2003 22:28:58 +0000 (22:28 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Mon, 29 Sep 2003 22:28:58 +0000 (22:28 +0000)
* objc/objc-act.c (encode_type): Encode INTEGER_TYPEs and
REAL_TYPEs based on the bitsize of the type's mode, not the
mode directly.

From-SVN: r71923

gcc/ChangeLog
gcc/objc/objc-act.c

index 2b6facfa8c6aab42fb2c21656c210ef269da4d81..a9fdc0e083fe12c225947b41c639cddddcf020d9 100644 (file)
@@ -1,8 +1,14 @@
+2003-09-29  Zack Weinberg  <zack@codesourcery.com>
+
+       * objc/objc-act.c (encode_type): Encode INTEGER_TYPEs and
+       REAL_TYPEs based on the bitsize of the type's mode, not the
+       mode directly.
+
 2003-09-29  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
 
        * dwarf2out.c (default_eh_frame_section): Split into ...
        (named_section_eh_frame_section, collect2_eh_frame_section): ... new
-       functions. 
+       functions.
        * output.h (named_section_eh_frame_section): Declare.
        (collect2_eh_frame_section): Likewise.
 
index e9379a753b16e3e8009bf1bfd3199bd261f88137..24fcffebb9be94ed03cdaaac85e3bd67db350f0f 100644 (file)
@@ -7325,62 +7325,42 @@ encode_next_bitfield (int width)
 }
 \f
 /* FORMAT will be OBJC_ENCODE_INLINE_DEFS or OBJC_ENCODE_DONT_INLINE_DEFS.  */
-
 static void
 encode_type (tree type, int curtype, int format)
 {
   enum tree_code code = TREE_CODE (type);
+  char c;
 
   if (code == INTEGER_TYPE)
     {
-      if (integer_zerop (TYPE_MIN_VALUE (type)))
+      switch (GET_MODE_BITSIZE (TYPE_MODE (type)))
        {
-         /* Unsigned integer types.  */
-
-         if (TYPE_MODE (type) == QImode)
-           obstack_1grow (&util_obstack, 'C');
-         else if (TYPE_MODE (type) == HImode)
-           obstack_1grow (&util_obstack, 'S');
-         else if (TYPE_MODE (type) == SImode)
-           {
-             if (type == long_unsigned_type_node)
-               obstack_1grow (&util_obstack, 'L');
-             else
-               obstack_1grow (&util_obstack, 'I');
-           }
-         else if (TYPE_MODE (type) == DImode)
-           obstack_1grow (&util_obstack, 'Q');
-       }
-
-      else
-       /* Signed integer types.  */
-       {
-         if (TYPE_MODE (type) == QImode)
-           obstack_1grow (&util_obstack, 'c');
-         else if (TYPE_MODE (type) == HImode)
-           obstack_1grow (&util_obstack, 's');
-         else if (TYPE_MODE (type) == SImode)
-           {
-             if (type == long_integer_type_node)
-               obstack_1grow (&util_obstack, 'l');
-             else
-               obstack_1grow (&util_obstack, 'i');
-           }
-
-         else if (TYPE_MODE (type) == DImode)
-           obstack_1grow (&util_obstack, 'q');
+       case 8:  c = TREE_UNSIGNED (type) ? 'C' : 'c'; break;
+       case 16: c = TREE_UNSIGNED (type) ? 'S' : 's'; break;
+       case 32: 
+         if (type == long_unsigned_type_node
+             || type == long_integer_type_node)
+                c = TREE_UNSIGNED (type) ? 'L' : 'l';
+         else
+                c = TREE_UNSIGNED (type) ? 'I' : 'i';
+         break;
+       case 64: c = TREE_UNSIGNED (type) ? 'Q' : 'q'; break;
+       default: abort ();
        }
+      obstack_1grow (&util_obstack, c);
     }
 
   else if (code == REAL_TYPE)
     {
       /* Floating point types.  */
-
-      if (TYPE_MODE (type) == SFmode)
-       obstack_1grow (&util_obstack, 'f');
-      else if (TYPE_MODE (type) == DFmode
-              || TYPE_MODE (type) == TFmode)
-       obstack_1grow (&util_obstack, 'd');
+      switch (GET_MODE_BITSIZE (TYPE_MODE (type)))
+       {
+       case 32:  c = 'f'; break;
+       case 64:
+       case 128: c = 'd'; break;
+       default: abort ();
+       }
+      obstack_1grow (&util_obstack, c);
     }
 
   else if (code == VOID_TYPE)