blob: d4afaab5ba5fa276078ba54f85cc30f359cbb766 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O2" } */
#include <arm_neon.h>
#define FUNC(IT, OT, S) \
OT \
foo_##S (IT a) \
{ \
return vaddlv_##S (a);\
}
FUNC (int8x8_t, int16_t, s8)
/* { dg-final { scan-assembler-times {saddlv\th0, v0\.8b} 1} } */
FUNC (int16x4_t, int32_t, s16)
/* { dg-final { scan-assembler-times {saddlv\ts0, v0\.4h} 1} } */
FUNC (int32x2_t, int64_t, s32)
/* { dg-final { scan-assembler-times {saddlp\tv0\.1d, v0\.2s} 1} } */
FUNC (uint8x8_t, uint16_t, u8)
/* { dg-final { scan-assembler-times {uaddlv\th0, v0\.8b} 1} } */
FUNC (uint16x4_t, uint32_t, u16)
/* { dg-final { scan-assembler-times {uaddlv\ts0, v0\.4h} 1} } */
FUNC (uint32x2_t, uint64_t, u32)
/* { dg-final { scan-assembler-times {uaddlp\tv0.1d, v0\.2s} 1} } */
#define FUNCQ(IT, OT, S) \
OT \
fooq_##S (IT a) \
{ \
return vaddlvq_##S (a); \
}
FUNCQ (int8x16_t, int16_t, s8)
/* { dg-final { scan-assembler-times {saddlv\th0, v0\.16b} 1} } */
FUNCQ (int16x8_t, int32_t, s16)
/* { dg-final { scan-assembler-times {saddlv\ts0, v0\.8h} 1} } */
FUNCQ (int32x4_t, int64_t, s32)
/* { dg-final { scan-assembler-times {saddlv\td0, v0\.4s} 1} } */
FUNCQ (uint8x16_t, uint16_t, u8)
/* { dg-final { scan-assembler-times {uaddlv\th0, v0\.16b} 1} } */
FUNCQ (uint16x8_t, uint32_t, u16)
/* { dg-final { scan-assembler-times {uaddlv\ts0, v0\.8h} 1} } */
FUNCQ (uint32x4_t, uint64_t, u32)
/* { dg-final { scan-assembler-times {uaddlv\td0, v0\.4s} 1} } */