Commit 5cfd5d9b by Andrew Pinski Committed by Andrew Pinski

c-typeck.c (build_binary_op): Allow % on integal vectors.

2009-05-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        * c-typeck.c (build_binary_op): Allow % on integal vectors.
        * doc/extend.texi (Vector Extension): Document that % is allowed too.

009-05-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        * typeck.c (build_binary_op): Allow % on integal vectors.

2009-05-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        * gcc.dg/vector-4.c: New testcase.
        * gcc.dg/simd-1b.c: % is now allowed for integer vectors.
        * g++.dg/ext/vector16.C: New testcase.

From-SVN: r147722
parent dae279f0
2009-05-19 Andrew Pinski <andrew_pinski@playstation.sony.com>
* c-typeck.c (build_binary_op): Allow % on integal vectors.
* doc/extend.texi (Vector Extension): Document that % is allowed too.
2009-05-19 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (ix86_avoid_jump_mispredicts): Check
......
......@@ -8988,7 +8988,11 @@ build_binary_op (location_t location, enum tree_code code,
case FLOOR_MOD_EXPR:
warn_for_div_by_zero (location, op1);
if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
&& TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
&& TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE)
common = 1;
else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
{
/* Although it would be tempting to shorten always here, that loses
on some targets, since the modulo instruction is undefined if the
......
2009-05-19 Andrew Pinski <andrew_pinski@playstation.sony.com>
* typeck.c (build_binary_op): Allow % on integal vectors.
2009-05-18 Jason Merrill <jason@redhat.com>
Implement explicit conversions ops as specified in N2437.
......
......@@ -3492,7 +3492,11 @@ cp_build_binary_op (location_t location,
case FLOOR_MOD_EXPR:
warn_for_div_by_zero (location, op1);
if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
&& TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
&& TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE)
common = 1;
else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
{
/* Although it would be tempting to shorten always here, that loses
on some targets, since the modulo instruction is undefined if the
......
......@@ -5746,7 +5746,7 @@ produce code that uses 4 @code{SIs}.
The types defined in this manner can be used with a subset of normal C
operations. Currently, GCC will allow using the following operators
on these types: @code{+, -, *, /, unary minus, ^, |, &, ~}@.
on these types: @code{+, -, *, /, unary minus, ^, |, &, ~, %}@.
The operations behave like C++ @code{valarrays}. Addition is defined as
the addition of the corresponding elements of the operands. For
......
2009-05-19 Andrew Pinski <andrew_pinski@playstation.sony.com>
* gcc.dg/vector-4.c: New testcase.
* gcc.dg/simd-1b.c: % is now allowed for integer vectors.
* g++.dg/ext/vector16.C: New testcase.
2009-05-19 H.J. Lu <hongjiu.lu@intel.com>
PR c/40172
......
/* { dg-do compile } */
#define vector __attribute__((vector_size(4*sizeof(int)) ))
vector int a, b, c;
/* Test that remainder works for vectors. */
void f(void)
{
a = b % c;
}
......@@ -14,7 +14,7 @@ void
hanneke ()
{
/* Operators on compatible SIMD types. */
a %= b; /* { dg-error "invalid operands to binary %" } */
a %= b;
c &= d;
a |= b;
c ^= d;
......
/* { dg-do compile } */
#define vector __attribute__((vector_size(4*sizeof(int)) ))
vector int a, b, c;
/* Test that remainder works for vectors. */
void f(void)
{
a = b % c;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment