diff options
Diffstat (limited to 'gcc/tree.def')
-rw-r--r-- | gcc/tree.def | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/tree.def b/gcc/tree.def index ffc772f..2c16cb9 100644 --- a/gcc/tree.def +++ b/gcc/tree.def @@ -1073,6 +1073,28 @@ DEFTREECODE (WIDEN_MULT_EXPR, "widen_mult_expr", tcc_binary, 2) DEFTREECODE (VEC_LSHIFT_EXPR, "vec_lshift_expr", tcc_binary, 2) DEFTREECODE (VEC_RSHIFT_EXPR, "vec_rshift_expr", tcc_binary, 2) +/* Widening vector multiplication. + The two operands are vectors with N elements of size S. Multiplying the + elements of the two vectors will result in N products of size 2*S. + VEC_WIDEN_MULT_HI_EXPR computes the N/2 high products. + VEC_WIDEN_MULT_LO_EXPR computes the N/2 low products. */ +DEFTREECODE (VEC_WIDEN_MULT_HI_EXPR, "widen_mult_hi_expr", tcc_binary, 2) +DEFTREECODE (VEC_WIDEN_MULT_LO_EXPR, "widen_mult_hi_expr", tcc_binary, 2) + +/* Unpack (extract and promote/widen) the high/low elements of the input vector + into the output vector. The input vector has twice as many elements + as the output vector, that are half the size of the elements + of the output vector. This is used to support type promotion. */ +DEFTREECODE (VEC_UNPACK_HI_EXPR, "vec_unpack_hi_expr", tcc_unary, 1) +DEFTREECODE (VEC_UNPACK_LO_EXPR, "vec_unpack_lo_expr", tcc_unary, 1) + +/* Pack (demote/narrow and merge) the elements of the two input vectors + into the output vector, using modulo/saturating arithmetic. + The elements of the input vectors are twice the size of the elements of the + output vector. This is used to support type demotion. */ +DEFTREECODE (VEC_PACK_MOD_EXPR, "vec_pack_mod_expr", tcc_binary, 2) +DEFTREECODE (VEC_PACK_SAT_EXPR, "vec_pack_sat_expr", tcc_binary, 2) + /* Local variables: mode:c |