diff options
author | aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-11 19:33:39 +0000 |
---|---|---|
committer | aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-11 19:33:39 +0000 |
commit | 88ae7f04397c6b56b0bc6fab5545125f7eef0416 (patch) | |
tree | 84e24cc2300c3468b223984903faa944b7798df6 /gcc | |
parent | 9cc8afbebae67e6a6adb670baebf16ad6561bbf9 (diff) | |
download | gcc-88ae7f04397c6b56b0bc6fab5545125f7eef0416.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47889 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 17 | ||||
-rw-r--r-- | gcc/c-common.c | 48 | ||||
-rw-r--r-- | gcc/tree.c | 81 | ||||
-rw-r--r-- | gcc/tree.h | 16 |
4 files changed, 103 insertions, 59 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index eb1fbff8d61..e6a8d64de3b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,20 @@ +2001-12-11 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. + 2001-12-11 Stan Shebs <shebs@apple.com> * objc/objc-act.c (finish_message_expr): Fix misplaced parens in a diff --git a/gcc/c-common.c b/gcc/c-common.c index 29bb05948c1..ad585948660 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -1315,16 +1315,16 @@ type_for_mode (mode, unsignedp) return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node; - if (mode == TYPE_MODE (intQI_type_node)) + if (mode == QImode) return unsignedp ? unsigned_intQI_type_node : intQI_type_node; - if (mode == TYPE_MODE (intHI_type_node)) + if (mode == HImode) return unsignedp ? unsigned_intHI_type_node : intHI_type_node; - if (mode == TYPE_MODE (intSI_type_node)) + if (mode == SImode) return unsignedp ? unsigned_intSI_type_node : intSI_type_node; - if (mode == TYPE_MODE (intDI_type_node)) + if (mode == DImode) return unsignedp ? unsigned_intDI_type_node : intDI_type_node; #if HOST_BITS_PER_WIDE_INT >= 64 @@ -1348,22 +1348,30 @@ type_for_mode (mode, unsignedp) return build_pointer_type (integer_type_node); #ifdef VECTOR_MODE_SUPPORTED_P - if (mode == TYPE_MODE (V16QI_type_node) && VECTOR_MODE_SUPPORTED_P (mode)) - return V16QI_type_node; - if (mode == TYPE_MODE (V8HI_type_node) && VECTOR_MODE_SUPPORTED_P (mode)) - return V8HI_type_node; - if (mode == TYPE_MODE (V4SF_type_node) && VECTOR_MODE_SUPPORTED_P (mode)) - return V4SF_type_node; - if (mode == TYPE_MODE (V4SI_type_node) && VECTOR_MODE_SUPPORTED_P (mode)) - return V4SI_type_node; - if (mode == TYPE_MODE (V2SI_type_node) && VECTOR_MODE_SUPPORTED_P (mode)) - return V2SI_type_node; - if (mode == TYPE_MODE (V4HI_type_node) && VECTOR_MODE_SUPPORTED_P (mode)) - return V4HI_type_node; - if (mode == TYPE_MODE (V8QI_type_node) && VECTOR_MODE_SUPPORTED_P (mode)) - return V8QI_type_node; - if (mode == TYPE_MODE (V2SF_type_node) && VECTOR_MODE_SUPPORTED_P (mode)) - return V2SF_type_node; + if (VECTOR_MODE_SUPPORTED_P (mode)) + { + switch (mode) + { + case V16QImode: + return unsignedp ? unsigned_V16QI_type_node : V16QI_type_node; + case V8HImode: + return unsignedp ? unsigned_V8HI_type_node : V8HI_type_node; + case V4SImode: + return unsignedp ? unsigned_V4SI_type_node : V4SI_type_node; + case V2SImode: + return unsignedp ? unsigned_V2SI_type_node : V2SI_type_node; + case V4HImode: + return unsignedp ? unsigned_V4HI_type_node : V4HI_type_node; + case V8QImode: + return unsignedp ? unsigned_V8QI_type_node : V8QI_type_node; + case V4SFmode: + return V4SF_type_node; + case V2SFmode: + return V2SF_type_node; + default: + break; + } + } #endif return 0; diff --git a/gcc/tree.c b/gcc/tree.c index 45d18f6acde..a267fd7e290 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -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; } diff --git a/gcc/tree.h b/gcc/tree.h index ce2bcb9b7a7..c905324de47 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -1888,6 +1888,15 @@ enum tree_index TI_VOID_LIST_NODE, + TI_UV4SF_TYPE, + TI_UV4SI_TYPE, + TI_UV8HI_TYPE, + TI_UV8QI_TYPE, + TI_UV4HI_TYPE, + TI_UV2SI_TYPE, + TI_UV2SF_TYPE, + TI_UV16QI_TYPE, + TI_V4SF_TYPE, TI_V4SI_TYPE, TI_V8HI_TYPE, @@ -1956,6 +1965,13 @@ extern tree global_trees[TI_MAX]; #define main_identifier_node global_trees[TI_MAIN_IDENTIFIER] #define MAIN_NAME_P(NODE) (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node) +#define unsigned_V16QI_type_node global_trees[TI_UV16QI_TYPE] +#define unsigned_V4SI_type_node global_trees[TI_UV4SI_TYPE] +#define unsigned_V8QI_type_node global_trees[TI_UV8QI_TYPE] +#define unsigned_V8HI_type_node global_trees[TI_UV8HI_TYPE] +#define unsigned_V4HI_type_node global_trees[TI_UV4HI_TYPE] +#define unsigned_V2SI_type_node global_trees[TI_UV2SI_TYPE] + #define V16QI_type_node global_trees[TI_V16QI_TYPE] #define V4SF_type_node global_trees[TI_V4SF_TYPE] #define V4SI_type_node global_trees[TI_V4SI_TYPE] |