/* { dg-do compile } */ /* { dg-require-effective-target arm_crypto_ok } */ /* { dg-add-options arm_crypto } */ /* { dg-additional-options "-O3" } */ #include "arm_neon.h" uint32_t foo (void) { uint32_t val = 0xdeadbeef; return vsha1h_u32 (val); } #define GET_LANE(lane) \ uint32_t foo_lane##lane (uint32x4_t val) \ { \ return vsha1h_u32 (vgetq_lane_u32 (val, lane)); \ } #define TEST_SHA1H_VEC_SELECT(FUNC) \ FUNC (0) \ FUNC (1) \ FUNC (2) \ FUNC (3) \ TEST_SHA1H_VEC_SELECT (GET_LANE) /* { dg-final { scan-assembler-times {sha1h.32\tq[0-9]+, q[0-9]+} 5 } } */ /* { dg-final { scan-assembler-times {vdup.32\tq[0-9]+, r[0-9]+} 4 } } */ /* { dg-final { scan-assembler-times {vmov.32\tr[0-9]+, d[0-9]+\[[0-9]+\]+} 3 } } */