return (poly8x16_t)__builtin_aarch64_qtbl4v16qi (__o, (int8x16_t)__idx);
}
-
/* vqtbx2 */
+
__extension__ extern __inline int8x8_t
__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vqtbx2_s8 (int8x8_t __r, int8x16x2_t __tab, uint8x8_t __idx)
{
__builtin_aarch64_simd_oi __o;
- __o = __builtin_aarch64_set_qregoiv16qi (__o, __tab.val[0], 0);
- __o = __builtin_aarch64_set_qregoiv16qi (__o, __tab.val[1], 1);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return __builtin_aarch64_qtbx2v8qi (__r, __o, (int8x8_t)__idx);
}
vqtbx2_u8 (uint8x8_t __r, uint8x16x2_t __tab, uint8x8_t __idx)
{
__builtin_aarch64_simd_oi __o;
- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)__tab.val[0], 0);
- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)__tab.val[1], 1);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return (uint8x8_t)__builtin_aarch64_qtbx2v8qi ((int8x8_t)__r, __o,
(int8x8_t)__idx);
}
vqtbx2_p8 (poly8x8_t __r, poly8x16x2_t __tab, uint8x8_t __idx)
{
__builtin_aarch64_simd_oi __o;
- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)__tab.val[0], 0);
- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)__tab.val[1], 1);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return (poly8x8_t)__builtin_aarch64_qtbx2v8qi ((int8x8_t)__r, __o,
(int8x8_t)__idx);
}
vqtbx2q_s8 (int8x16_t __r, int8x16x2_t __tab, uint8x16_t __idx)
{
__builtin_aarch64_simd_oi __o;
- __o = __builtin_aarch64_set_qregoiv16qi (__o, __tab.val[0], 0);
- __o = __builtin_aarch64_set_qregoiv16qi (__o, __tab.val[1], 1);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return __builtin_aarch64_qtbx2v16qi (__r, __o, (int8x16_t)__idx);
}
vqtbx2q_u8 (uint8x16_t __r, uint8x16x2_t __tab, uint8x16_t __idx)
{
__builtin_aarch64_simd_oi __o;
- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)__tab.val[0], 0);
- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)__tab.val[1], 1);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return (uint8x16_t)__builtin_aarch64_qtbx2v16qi ((int8x16_t)__r, __o,
- (int8x16_t)__idx);
+ (int8x16_t)__idx);
}
__extension__ extern __inline poly8x16_t
vqtbx2q_p8 (poly8x16_t __r, poly8x16x2_t __tab, uint8x16_t __idx)
{
__builtin_aarch64_simd_oi __o;
- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)__tab.val[0], 0);
- __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)__tab.val[1], 1);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return (poly8x16_t)__builtin_aarch64_qtbx2v16qi ((int8x16_t)__r, __o,
(int8x16_t)__idx);
}
/* vqtbx3 */
+
__extension__ extern __inline int8x8_t
__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vqtbx3_s8 (int8x8_t __r, int8x16x3_t __tab, uint8x8_t __idx)
{
__builtin_aarch64_simd_ci __o;
- __o = __builtin_aarch64_set_qregciv16qi (__o, __tab.val[0], 0);
- __o = __builtin_aarch64_set_qregciv16qi (__o, __tab.val[1], 1);
- __o = __builtin_aarch64_set_qregciv16qi (__o, __tab.val[2], 2);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return __builtin_aarch64_qtbx3v8qi (__r, __o, (int8x8_t)__idx);
}
vqtbx3_u8 (uint8x8_t __r, uint8x16x3_t __tab, uint8x8_t __idx)
{
__builtin_aarch64_simd_ci __o;
- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)__tab.val[0], 0);
- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)__tab.val[1], 1);
- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)__tab.val[2], 2);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return (uint8x8_t)__builtin_aarch64_qtbx3v8qi ((int8x8_t)__r, __o,
(int8x8_t)__idx);
}
vqtbx3_p8 (poly8x8_t __r, poly8x16x3_t __tab, uint8x8_t __idx)
{
__builtin_aarch64_simd_ci __o;
- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)__tab.val[0], 0);
- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)__tab.val[1], 1);
- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)__tab.val[2], 2);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return (poly8x8_t)__builtin_aarch64_qtbx3v8qi ((int8x8_t)__r, __o,
(int8x8_t)__idx);
}
vqtbx3q_s8 (int8x16_t __r, int8x16x3_t __tab, uint8x16_t __idx)
{
__builtin_aarch64_simd_ci __o;
- __o = __builtin_aarch64_set_qregciv16qi (__o, __tab.val[0], 0);
- __o = __builtin_aarch64_set_qregciv16qi (__o, __tab.val[1], 1);
- __o = __builtin_aarch64_set_qregciv16qi (__o, __tab.val[2], 2);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return __builtin_aarch64_qtbx3v16qi (__r, __o, (int8x16_t)__idx);
}
vqtbx3q_u8 (uint8x16_t __r, uint8x16x3_t __tab, uint8x16_t __idx)
{
__builtin_aarch64_simd_ci __o;
- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)__tab.val[0], 0);
- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)__tab.val[1], 1);
- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)__tab.val[2], 2);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return (uint8x16_t)__builtin_aarch64_qtbx3v16qi ((int8x16_t)__r, __o,
(int8x16_t)__idx);
}
vqtbx3q_p8 (poly8x16_t __r, poly8x16x3_t __tab, uint8x16_t __idx)
{
__builtin_aarch64_simd_ci __o;
- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)__tab.val[0], 0);
- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)__tab.val[1], 1);
- __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)__tab.val[2], 2);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return (poly8x16_t)__builtin_aarch64_qtbx3v16qi ((int8x16_t)__r, __o,
(int8x16_t)__idx);
}
vqtbx4_s8 (int8x8_t __r, int8x16x4_t __tab, uint8x8_t __idx)
{
__builtin_aarch64_simd_xi __o;
- __o = __builtin_aarch64_set_qregxiv16qi (__o, __tab.val[0], 0);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, __tab.val[1], 1);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, __tab.val[2], 2);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, __tab.val[3], 3);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return __builtin_aarch64_qtbx4v8qi (__r, __o, (int8x8_t)__idx);
}
vqtbx4_u8 (uint8x8_t __r, uint8x16x4_t __tab, uint8x8_t __idx)
{
__builtin_aarch64_simd_xi __o;
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[0], 0);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[1], 1);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[2], 2);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[3], 3);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return (uint8x8_t)__builtin_aarch64_qtbx4v8qi ((int8x8_t)__r, __o,
(int8x8_t)__idx);
}
vqtbx4_p8 (poly8x8_t __r, poly8x16x4_t __tab, uint8x8_t __idx)
{
__builtin_aarch64_simd_xi __o;
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[0], 0);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[1], 1);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[2], 2);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[3], 3);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return (poly8x8_t)__builtin_aarch64_qtbx4v8qi ((int8x8_t)__r, __o,
(int8x8_t)__idx);
}
vqtbx4q_s8 (int8x16_t __r, int8x16x4_t __tab, uint8x16_t __idx)
{
__builtin_aarch64_simd_xi __o;
- __o = __builtin_aarch64_set_qregxiv16qi (__o, __tab.val[0], 0);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, __tab.val[1], 1);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, __tab.val[2], 2);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, __tab.val[3], 3);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return __builtin_aarch64_qtbx4v16qi (__r, __o, (int8x16_t)__idx);
}
vqtbx4q_u8 (uint8x16_t __r, uint8x16x4_t __tab, uint8x16_t __idx)
{
__builtin_aarch64_simd_xi __o;
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[0], 0);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[1], 1);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[2], 2);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[3], 3);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return (uint8x16_t)__builtin_aarch64_qtbx4v16qi ((int8x16_t)__r, __o,
(int8x16_t)__idx);
}
vqtbx4q_p8 (poly8x16_t __r, poly8x16x4_t __tab, uint8x16_t __idx)
{
__builtin_aarch64_simd_xi __o;
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[0], 0);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[1], 1);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[2], 2);
- __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)__tab.val[3], 3);
+ __builtin_memcpy (&__o, &__tab, sizeof (__tab));
return (poly8x16_t)__builtin_aarch64_qtbx4v16qi ((int8x16_t)__r, __o,
(int8x16_t)__idx);
}
TEST_TBL3 (vqtbl3q, uint8x16_t, uint8x16x3_t, uint8x16_t, u8)
TEST_TBL3 (vqtbl3q, poly8x16_t, poly8x16x3_t, uint8x16_t, p8)
+#define TEST_TBX2(name, rettype, tbltype, idxtype, ts) \
+ rettype test_ ## name ## _ ## ts (rettype a, idxtype b, tbltype c) \
+ { \
+ return name ## _ ## ts (a, c, b); \
+ }
+
+TEST_TBX2 (vqtbx2, int8x8_t, int8x16x2_t, uint8x8_t, s8)
+TEST_TBX2 (vqtbx2, uint8x8_t, uint8x16x2_t, uint8x8_t, u8)
+TEST_TBX2 (vqtbx2, poly8x8_t, poly8x16x2_t, uint8x8_t, p8)
+
+TEST_TBX2 (vqtbx2q, int8x16_t, int8x16x2_t, uint8x16_t, s8)
+TEST_TBX2 (vqtbx2q, uint8x16_t, uint8x16x2_t, uint8x16_t, u8)
+TEST_TBX2 (vqtbx2q, poly8x16_t, poly8x16x2_t, uint8x16_t, p8)
+
+#define TEST_TBX3(name, rettype, tbltype, idxtype, ts) \
+ rettype test_ ## name ## _ ## ts (rettype a, tbltype b, idxtype c) \
+ { \
+ return name ## _ ## ts (a, b, c); \
+ }
+
+TEST_TBX3 (vqtbx3, int8x8_t, int8x16x3_t, uint8x8_t, s8)
+TEST_TBX3 (vqtbx3, uint8x8_t, uint8x16x3_t, uint8x8_t, u8)
+TEST_TBX3 (vqtbx3, poly8x8_t, poly8x16x3_t, uint8x8_t, p8)
+
+TEST_TBX3 (vqtbx3q, int8x16_t, int8x16x3_t, uint8x16_t, s8)
+TEST_TBX3 (vqtbx3q, uint8x16_t, uint8x16x3_t, uint8x16_t, u8)
+TEST_TBX3 (vqtbx3q, poly8x16_t, poly8x16x3_t, uint8x16_t, p8)
+
+#define TEST_TBX4(name, rettype, tbltype, idxtype, ts) \
+ rettype test_ ## name ## _ ## ts (rettype a, idxtype b, idxtype dummy1, \
+ idxtype dummy2, tbltype c) \
+ { \
+ return name ## _ ## ts (a, c, b); \
+ }
+
+TEST_TBX4 (vqtbx4, int8x8_t, int8x16x4_t, uint8x8_t, s8)
+TEST_TBX4 (vqtbx4, uint8x8_t, uint8x16x4_t, uint8x8_t, u8)
+TEST_TBX4 (vqtbx4, poly8x8_t, poly8x16x4_t, uint8x8_t, p8)
+
+TEST_TBX4 (vqtbx4q, int8x16_t, int8x16x4_t, uint8x16_t, s8)
+TEST_TBX4 (vqtbx4q, uint8x16_t, uint8x16x4_t, uint8x16_t, u8)
+TEST_TBX4 (vqtbx4q, poly8x16_t, poly8x16x4_t, uint8x16_t, p8)
+
/* { dg-final { scan-assembler-not "mov\\t" } } */
/* { dg-final { scan-assembler-times "tbl\\t" 18} } */
+/* { dg-final { scan-assembler-times "tbx\\t" 18} } */