blob: bd6b6bf07932f2dc3b36130d053900f12326738c [file] [log] [blame]
/* { dg-do compile { target aarch64*-*-* } } */
/* { dg-options "-O3" } */
#pragma GCC target "+nosve"
#include <stdint.h>
#define SSRA(func, vtype, n) \
void func () \
{ \
int i; \
for (i = 0; i < n; i++) \
{ \
s1##vtype[i] += s2##vtype[i] >> 2; \
} \
}
#define TEST_VDQ_I_MODES(FUNC) \
FUNC (test_v8qi_v16qi, _char, 16) \
FUNC (test_v4hi_v8h1, _short, 8) \
FUNC (test_v2si_v4si, _int, 4) \
FUNC (test_v2di, _ll, 2) \
int8_t s1_char[16], s2_char[16];
int16_t s1_short[8], s2_short[8];
int32_t s1_int[4], s2_int[4];
int64_t s1_ll[2], s2_ll[2];
TEST_VDQ_I_MODES(SSRA)
/* { dg-final { scan-assembler "ssra" } } */
/* { dg-final { scan-assembler-not "sshr" } } */
/* { dg-final { scan-assembler-times {ssra\tv[0-9]+\.16b, v[0-9]+\.16b, [0-9]+} 1 } } */
/* { dg-final { scan-assembler-times {ssra\tv[0-9]+\.8h, v[0-9]+\.8h, [0-9]+} 1 } } */
/* { dg-final { scan-assembler-times {ssra\tv[0-9]+\.4s, v[0-9]+\.4s, [0-9]+} 1 } } */
/* { dg-final { scan-assembler-times {ssra\tv[0-9]+\.2d, v[0-9]+\.2d, [0-9]+} 1 } } */