summaryrefslogtreecommitdiff
path: root/gcc/objc
diff options
context:
space:
mode:
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2003-09-29 22:28:58 +0000
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2003-09-29 22:28:58 +0000
commit32478cf5117ce460fa2b006abcd04f785ce4a78d (patch)
tree1892a62a80adce92264197d13022ce8b65e53e62 /gcc/objc
parent5bd20ed7fffc3a1d689cbda59db2282b86bc6fda (diff)
downloadgcc-32478cf5117ce460fa2b006abcd04f785ce4a78d.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71923 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/objc')
-rw-r--r--gcc/objc/objc-act.c64
1 files changed, 22 insertions, 42 deletions
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index e9379a753b1..24fcffebb9b 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -7325,62 +7325,42 @@ encode_next_bitfield (int width)
}
/* 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)