diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2003-04-01 13:40:11 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2003-04-01 13:40:11 +0000 |
commit | d744e06e5edeb7dca7bf021559b3bdfdabe12a28 (patch) | |
tree | 8129a959cc2632337ea9823f4d5298efac0ea6e5 /gcc/varasm.c | |
parent | 46e33d43a2f80c82284832820287e118c7e7c65c (diff) | |
download | gcc-d744e06e5edeb7dca7bf021559b3bdfdabe12a28.zip gcc-d744e06e5edeb7dca7bf021559b3bdfdabe12a28.tar.gz gcc-d744e06e5edeb7dca7bf021559b3bdfdabe12a28.tar.bz2 |
simd-3.c: New.
* testsuite/gcc.c-torture/execute/simd-3.c: New.
* expr.c (expand_expr): Handle VECTOR_CST.
(const_vector_from_tree): New.
* varasm.c (output_constant): Handle VECTOR_CST.
* c-typeck.c (digest_init): Build a vector constant from a
VECTOR_TYPE.
* config/rs6000/rs6000.c: Remove prototype for
easy_vector_constant.
(easy_vector_constant): Add mode parameter. Rewrite to handle
more easy constants.
(rs6000_emit_move): Pass mode to easy_vector_constant.
Call emit_easy_vector_insn for SPE V2SI vector constant moves.
(emit_easy_vector_insn): New.
(easy_vector_same): New.
(EASY_VECTOR_15): New macro.
(EASY_VECTOR_15_ADD_SELF): New macro.
(bdesc_2arg): Rename to xorv2si3.
(easy_vector_constant_add_self): New.
(input_operand): Allow vector constants.
* config/rs6000/rs6000.h (PREDICATE_CODES): Add
easy_vector_constant, easy_vector_constant_add_self.
(EXTRA_CONSTRAINT): Add 'W'.
* config/rs6000/rs6000-protos.h: Add prototype for
easy_vector_constant, emit_easy_vector_insn.
* config/rs6000/altivec.md (xorv8hi3): New.
(xorv16qi3): New.
Remove all _const0 patterns.
(movv4si_internal): Rewrite to use code. Add vector constant to
vector alternative. Add splitter.
(movv8hi_internal): Same.
(movv16qi_internal): Same.
(movv4sf_internal): Same.
Change the unspecs for vspltis* to use constants.
* config/rs6000/spe.md ("xorv4hi3"): New.
("spe_evxor"): Rename to xorv2si3.
("xorv1di3"): New.
Remove all _const0 patterns.
(movv2si_internal): Rewrite to use code. Add vector constant to
alternatives. Add splitter.
(movv4hi_internal): Add vector constant to alternatives.
(movv1di_internal): Same.
(movv2sf_internal): Same.
From-SVN: r65130
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r-- | gcc/varasm.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c index fc6f467..9c93e9b 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -4015,6 +4015,23 @@ output_constant (exp, size, align) thissize = MIN (TREE_STRING_LENGTH (exp), size); assemble_string (TREE_STRING_POINTER (exp), thissize); } + else if (TREE_CODE (exp) == VECTOR_CST) + { + int elt_size; + tree link; + unsigned int nalign; + enum machine_mode inner; + + inner = GET_MODE_INNER (TYPE_MODE (TREE_TYPE (exp))); + nalign = MIN (align, GET_MODE_ALIGNMENT (inner)); + + elt_size = GET_MODE_UNIT_SIZE (TYPE_MODE (TREE_TYPE (exp))); + + link = TREE_VECTOR_CST_ELTS (exp); + output_constant (TREE_VALUE (link), elt_size, align); + while ((link = TREE_CHAIN (link)) != NULL) + output_constant (TREE_VALUE (link), elt_size, nalign); + } else abort (); break; |