/* PR target/100637 */
/* { dg-do compile } */
/* { dg-options "-O2 -msse2 -dp" } */

typedef short __v2hi __attribute__ ((__vector_size__ (4)));
typedef unsigned short __v2hu __attribute__ ((__vector_size__ (4)));

__v2hi and (__v2hi a, __v2hi b) { return a & b; };

__v2hi andn (__v2hi a, __v2hi b) { return a & ~b; };

__v2hi or  (__v2hi a, __v2hi b) { return a | b; };

__v2hi xor  (__v2hi a, __v2hi b) { return a ^ b; };

__v2hi not  (__v2hi a) { return ~a; };

__v2hi plus  (__v2hi a, __v2hi b) { return a + b; };
/* { dg-final { scan-assembler "addv2hi3" } } */

__v2hi minus  (__v2hi a, __v2hi b) { return a - b; };
__v2hi neg  (__v2hi a) { return -a; };
/* { dg-final { scan-assembler-times "subv2hi3" 2 } } */

__v2hi mul  (__v2hi a, __v2hi b) { return a * b; };
/* { dg-final { scan-assembler "mulv2hi3" } } */

__v2hi shl (__v2hi a, int b) { return a << b; };
/* { dg-final { scan-assembler "ashlv2hi3" } } */

__v2hi ashr (__v2hi a, int b) { return a >> b; };
/* { dg-final { scan-assembler "ashrv2hi3" } } */

__v2hu lshr  (__v2hu a, int b) { return a >> b; };
/* { dg-final { scan-assembler "lshrv2hi3" } } */
