diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2001-12-11 19:33:39 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2001-12-11 19:33:39 +0000 |
commit | 0afeef64be52defd45b00c47464183dd43381725 (patch) | |
tree | 84e24cc2300c3468b223984903faa944b7798df6 /gcc/tree.c | |
parent | 3c612a619d0c4476cd0fde1feb1daafddba7c069 (diff) | |
download | gcc-0afeef64be52defd45b00c47464183dd43381725.zip gcc-0afeef64be52defd45b00c47464183dd43381725.tar.gz gcc-0afeef64be52defd45b00c47464183dd43381725.tar.bz2 |
c-common.c (type_for_mode): Handle unsigned vectors.
2001-12-10 Aldy Hernandez <aldyh@redhat.com>
* c-common.c (type_for_mode): Handle unsigned vectors.
(type_for_mode): Remove redundant calls to TYPE_MODE.
* tree.c (make_vector): New.
(build_common_tree_nodes_2): Use make_vector for vector types.
Add unsigned vector types.
* tree.h (tree_index): Add unsigned types for vectors.
(unsigned_V16QI_type_node): New.
(unsigned_V4SI_type_node): New.
(unsigned_V8QI_type_node): New.
(unsigned_V8HI_type_node): New.
(unsigned_V4HI_type_node): New.
(unsigned_V2SI_type_node): New.
From-SVN: r47889
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 81 |
1 files changed, 42 insertions, 39 deletions
@@ -162,6 +162,7 @@ static int type_hash_eq PARAMS ((const void*, const void*)); static unsigned int type_hash_hash PARAMS ((const void*)); static void print_type_hash_statistics PARAMS((void)); static void finish_vector_type PARAMS((tree)); +static tree make_vector PARAMS ((enum machine_mode, tree, int)); static int type_hash_marked_p PARAMS ((const void *)); static void type_hash_mark PARAMS ((const void *)); static int mark_tree_hashtable_entry PARAMS((void **, void *)); @@ -4874,43 +4875,45 @@ build_common_tree_nodes_2 (short_double) va_list_type_node = t; } - V4SF_type_node = make_node (VECTOR_TYPE); - TREE_TYPE (V4SF_type_node) = float_type_node; - TYPE_MODE (V4SF_type_node) = V4SFmode; - finish_vector_type (V4SF_type_node); - - V4SI_type_node = make_node (VECTOR_TYPE); - TREE_TYPE (V4SI_type_node) = intSI_type_node; - TYPE_MODE (V4SI_type_node) = V4SImode; - finish_vector_type (V4SI_type_node); - - V2SI_type_node = make_node (VECTOR_TYPE); - TREE_TYPE (V2SI_type_node) = intSI_type_node; - TYPE_MODE (V2SI_type_node) = V2SImode; - finish_vector_type (V2SI_type_node); - - V4HI_type_node = make_node (VECTOR_TYPE); - TREE_TYPE (V4HI_type_node) = intHI_type_node; - TYPE_MODE (V4HI_type_node) = V4HImode; - finish_vector_type (V4HI_type_node); - - V8QI_type_node = make_node (VECTOR_TYPE); - TREE_TYPE (V8QI_type_node) = intQI_type_node; - TYPE_MODE (V8QI_type_node) = V8QImode; - finish_vector_type (V8QI_type_node); - - V8HI_type_node = make_node (VECTOR_TYPE); - TREE_TYPE (V8HI_type_node) = intHI_type_node; - TYPE_MODE (V8HI_type_node) = V8HImode; - finish_vector_type (V8HI_type_node); - - V2SF_type_node = make_node (VECTOR_TYPE); - TREE_TYPE (V2SF_type_node) = float_type_node; - TYPE_MODE (V2SF_type_node) = V2SFmode; - finish_vector_type (V2SF_type_node); - - V16QI_type_node = make_node (VECTOR_TYPE); - TREE_TYPE (V16QI_type_node) = intQI_type_node; - TYPE_MODE (V16QI_type_node) = V16QImode; - finish_vector_type (V16QI_type_node); + unsigned_V4SI_type_node + = make_vector (V4SImode, unsigned_intSI_type_node, 1); + unsigned_V2SI_type_node + = make_vector (V2SImode, unsigned_intSI_type_node, 1); + unsigned_V4HI_type_node + = make_vector (V4HImode, unsigned_intHI_type_node, 1); + unsigned_V8QI_type_node + = make_vector (V8QImode, unsigned_intQI_type_node, 1); + unsigned_V8HI_type_node + = make_vector (V8HImode, unsigned_intHI_type_node, 1); + unsigned_V16QI_type_node + = make_vector (V16QImode, unsigned_intQI_type_node, 1); + + V4SF_type_node = make_vector (V4SFmode, float_type_node, 0); + V4SI_type_node = make_vector (V4SImode, intSI_type_node, 0); + V2SI_type_node = make_vector (V2SImode, intSI_type_node, 0); + V4HI_type_node = make_vector (V4HImode, intHI_type_node, 0); + V8QI_type_node = make_vector (V8QImode, intQI_type_node, 0); + V8HI_type_node = make_vector (V8HImode, intHI_type_node, 0); + V2SF_type_node = make_vector (V2SFmode, float_type_node, 0); + V16QI_type_node = make_vector (V16QImode, intQI_type_node, 0); +} + +/* Returns a vector tree node given a vector mode, the inner type, and + the signness. */ + +static tree +make_vector (mode, innertype, unsignedp) + enum machine_mode mode; + tree innertype; + int unsignedp; +{ + tree t; + + t = make_node (VECTOR_TYPE); + TREE_TYPE (t) = innertype; + TYPE_MODE (t) = mode; + TREE_UNSIGNED (TREE_TYPE (t)) = unsignedp; + finish_vector_type (t); + + return t; } |