+2016-01-15 Jiong Wang <jiong.wang@arm.com>
+
+ * config/aarch64/aarch64-builtins.c (aarch64_types_unopus_qualifiers):
+ New.
+ (TYPES_UNOPUS): Likewise.
+ * config/aarch64/aarch64-simd-builtins.def (lbtruncuv2sf): Correct
+ builtin type, from UNOP to UNOPUS.
+ (lbtruncuv4sf): Likewise.
+ (lbtruncuv2df): Likewise.
+ (lrounduv2sf): Likewise.
+ (lrounduv4sf): Likewise.
+ (lrounduv2df): Likewise.
+ (lroundusf): Likewise.
+ (lroundusf): Likewise.
+ (lceiluv2sf): Likewise.
+ (lceiluv4sf): Likewise.
+ (lceiluv2df): Likewise.
+ (lceilusf): Likewise.
+ (lceiludf): Likewise.
+ (lflooruv2sf): Likewise.
+ (lflooruv4sf): Likewise.
+ (lflooruv2df): Likewise.
+ (lfloorusf): Likewise.
+ (lfloorudf): Likewise.
+ (lfrintnuv2sf): Likewise.
+ (lfrintnuv4sf): Likewise.
+ (lfrintnuv2df): Likewise.
+ (lfrintnusf): Likewise.
+ (lfrintnudf): Likewise.
+ * config/aarch64/arm_neon.h (vcvt_u32_f32): Remove unncessary type
+ conversion.
+ (vcvtq_u32_f32): Likewise.
+ (vcvtq_u64_f64): Likewise.
+ (vcvta_u32_f32): Likewise.
+ (vcvtaq_u32_f32): Likewise.
+ (vcvtaq_u64_f64): Likewise.
+ (vcvtm_u32_f32): Likewise.
+ (vcvtmq_u32_f32): Likewise.
+ (vcvtmq_u64_f64): Likewise.
+ (vcvtn_u32_f32): Likwise.
+ (vcvtnq_u32_f32): Likewise.
+ (vcvtnq_u64_f64): Likewise.
+ (vcvtp_u32_f32): Likewise.
+ (vcvtpq_u32_f32): Likewise.
+ (vcvtpq_u64_f64): Likewise.
+ (vcvtmd_u64_f64): Likewise.
+ (vcvtms_u32_f32): Likewise.
+ (vcvtad_u64_f64): Likewise.
+ (vcvtas_u32_f32): Likewise.
+ (vcvtnd_u64_f64): Likewise.
+ (vcvtns_u32_f32): Likewise.
+ (vcvtpd_u64_f64): Likewise.
+ (vcvtps_u32_f32): Likewise.
+
2016-01-15 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* config/aarch64/aarch64.c (aarch64_if_then_else_costs): Handle
= { qualifier_unsigned, qualifier_unsigned };
#define TYPES_UNOPU (aarch64_types_unopu_qualifiers)
static enum aarch64_type_qualifiers
+aarch64_types_unopus_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+ = { qualifier_unsigned, qualifier_none };
+#define TYPES_UNOPUS (aarch64_types_unopus_qualifiers)
+static enum aarch64_type_qualifiers
aarch64_types_binop_qualifiers[SIMD_MAX_BUILTIN_ARGS]
= { qualifier_none, qualifier_none, qualifier_maybe_immediate };
#define TYPES_BINOP (aarch64_types_binop_qualifiers)
VAR1 (UNOP, lbtruncv4sf, 2, v4si)
VAR1 (UNOP, lbtruncv2df, 2, v2di)
- VAR1 (UNOP, lbtruncuv2sf, 2, v2si)
- VAR1 (UNOP, lbtruncuv4sf, 2, v4si)
- VAR1 (UNOP, lbtruncuv2df, 2, v2di)
+ VAR1 (UNOPUS, lbtruncuv2sf, 2, v2si)
+ VAR1 (UNOPUS, lbtruncuv4sf, 2, v4si)
+ VAR1 (UNOPUS, lbtruncuv2df, 2, v2di)
VAR1 (UNOP, lroundv2sf, 2, v2si)
VAR1 (UNOP, lroundv4sf, 2, v4si)
VAR1 (UNOP, lroundsf, 2, si)
VAR1 (UNOP, lrounddf, 2, di)
- VAR1 (UNOP, lrounduv2sf, 2, v2si)
- VAR1 (UNOP, lrounduv4sf, 2, v4si)
- VAR1 (UNOP, lrounduv2df, 2, v2di)
- VAR1 (UNOP, lroundusf, 2, si)
- VAR1 (UNOP, lroundudf, 2, di)
+ VAR1 (UNOPUS, lrounduv2sf, 2, v2si)
+ VAR1 (UNOPUS, lrounduv4sf, 2, v4si)
+ VAR1 (UNOPUS, lrounduv2df, 2, v2di)
+ VAR1 (UNOPUS, lroundusf, 2, si)
+ VAR1 (UNOPUS, lroundudf, 2, di)
VAR1 (UNOP, lceilv2sf, 2, v2si)
VAR1 (UNOP, lceilv4sf, 2, v4si)
VAR1 (UNOP, lceilv2df, 2, v2di)
- VAR1 (UNOP, lceiluv2sf, 2, v2si)
- VAR1 (UNOP, lceiluv4sf, 2, v4si)
- VAR1 (UNOP, lceiluv2df, 2, v2di)
- VAR1 (UNOP, lceilusf, 2, si)
- VAR1 (UNOP, lceiludf, 2, di)
+ VAR1 (UNOPUS, lceiluv2sf, 2, v2si)
+ VAR1 (UNOPUS, lceiluv4sf, 2, v4si)
+ VAR1 (UNOPUS, lceiluv2df, 2, v2di)
+ VAR1 (UNOPUS, lceilusf, 2, si)
+ VAR1 (UNOPUS, lceiludf, 2, di)
VAR1 (UNOP, lfloorv2sf, 2, v2si)
VAR1 (UNOP, lfloorv4sf, 2, v4si)
VAR1 (UNOP, lfloorv2df, 2, v2di)
- VAR1 (UNOP, lflooruv2sf, 2, v2si)
- VAR1 (UNOP, lflooruv4sf, 2, v4si)
- VAR1 (UNOP, lflooruv2df, 2, v2di)
- VAR1 (UNOP, lfloorusf, 2, si)
- VAR1 (UNOP, lfloorudf, 2, di)
+ VAR1 (UNOPUS, lflooruv2sf, 2, v2si)
+ VAR1 (UNOPUS, lflooruv4sf, 2, v4si)
+ VAR1 (UNOPUS, lflooruv2df, 2, v2di)
+ VAR1 (UNOPUS, lfloorusf, 2, si)
+ VAR1 (UNOPUS, lfloorudf, 2, di)
VAR1 (UNOP, lfrintnv2sf, 2, v2si)
VAR1 (UNOP, lfrintnv4sf, 2, v4si)
VAR1 (UNOP, lfrintnsf, 2, si)
VAR1 (UNOP, lfrintndf, 2, di)
- VAR1 (UNOP, lfrintnuv2sf, 2, v2si)
- VAR1 (UNOP, lfrintnuv4sf, 2, v4si)
- VAR1 (UNOP, lfrintnuv2df, 2, v2di)
- VAR1 (UNOP, lfrintnusf, 2, si)
- VAR1 (UNOP, lfrintnudf, 2, di)
+ VAR1 (UNOPUS, lfrintnuv2sf, 2, v2si)
+ VAR1 (UNOPUS, lfrintnuv4sf, 2, v4si)
+ VAR1 (UNOPUS, lfrintnuv2df, 2, v2di)
+ VAR1 (UNOPUS, lfrintnusf, 2, si)
+ VAR1 (UNOPUS, lfrintnudf, 2, di)
/* Implemented by <optab><fcvt_target><VDQF:mode>2. */
VAR1 (UNOP, floatv2si, 2, v2sf)
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
vcvt_u32_f32 (float32x2_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint32x2_t) __builtin_aarch64_lbtruncuv2sfv2si (__a);
+ return __builtin_aarch64_lbtruncuv2sfv2si_us (__a);
}
__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
vcvtq_u32_f32 (float32x4_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint32x4_t) __builtin_aarch64_lbtruncuv4sfv4si (__a);
+ return __builtin_aarch64_lbtruncuv4sfv4si_us (__a);
}
__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
vcvtq_u64_f64 (float64x2_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint64x2_t) __builtin_aarch64_lbtruncuv2dfv2di (__a);
+ return __builtin_aarch64_lbtruncuv2dfv2di_us (__a);
}
/* vcvta */
__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
vcvtad_u64_f64 (float64_t __a)
{
- return __builtin_aarch64_lroundudfdi (__a);
+ return __builtin_aarch64_lroundudfdi_us (__a);
}
__extension__ static __inline int32_t __attribute__ ((__always_inline__))
__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
vcvtas_u32_f32 (float32_t __a)
{
- return __builtin_aarch64_lroundusfsi (__a);
+ return __builtin_aarch64_lroundusfsi_us (__a);
}
__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
vcvta_u32_f32 (float32x2_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint32x2_t) __builtin_aarch64_lrounduv2sfv2si (__a);
+ return __builtin_aarch64_lrounduv2sfv2si_us (__a);
}
__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
vcvtaq_u32_f32 (float32x4_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint32x4_t) __builtin_aarch64_lrounduv4sfv4si (__a);
+ return __builtin_aarch64_lrounduv4sfv4si_us (__a);
}
__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
vcvtaq_u64_f64 (float64x2_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint64x2_t) __builtin_aarch64_lrounduv2dfv2di (__a);
+ return __builtin_aarch64_lrounduv2dfv2di_us (__a);
}
/* vcvtm */
__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
vcvtmd_u64_f64 (float64_t __a)
{
- return __builtin_aarch64_lfloorudfdi (__a);
+ return __builtin_aarch64_lfloorudfdi_us (__a);
}
__extension__ static __inline int32_t __attribute__ ((__always_inline__))
__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
vcvtms_u32_f32 (float32_t __a)
{
- return __builtin_aarch64_lfloorusfsi (__a);
+ return __builtin_aarch64_lfloorusfsi_us (__a);
}
__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
vcvtm_u32_f32 (float32x2_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint32x2_t) __builtin_aarch64_lflooruv2sfv2si (__a);
+ return __builtin_aarch64_lflooruv2sfv2si_us (__a);
}
__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
vcvtmq_u32_f32 (float32x4_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint32x4_t) __builtin_aarch64_lflooruv4sfv4si (__a);
+ return __builtin_aarch64_lflooruv4sfv4si_us (__a);
}
__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
vcvtmq_u64_f64 (float64x2_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint64x2_t) __builtin_aarch64_lflooruv2dfv2di (__a);
+ return __builtin_aarch64_lflooruv2dfv2di_us (__a);
}
/* vcvtn */
__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
vcvtnd_u64_f64 (float64_t __a)
{
- return __builtin_aarch64_lfrintnudfdi (__a);
+ return __builtin_aarch64_lfrintnudfdi_us (__a);
}
__extension__ static __inline int32_t __attribute__ ((__always_inline__))
__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
vcvtns_u32_f32 (float32_t __a)
{
- return __builtin_aarch64_lfrintnusfsi (__a);
+ return __builtin_aarch64_lfrintnusfsi_us (__a);
}
__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
vcvtn_u32_f32 (float32x2_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint32x2_t) __builtin_aarch64_lfrintnuv2sfv2si (__a);
+ return __builtin_aarch64_lfrintnuv2sfv2si_us (__a);
}
__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
vcvtnq_u32_f32 (float32x4_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint32x4_t) __builtin_aarch64_lfrintnuv4sfv4si (__a);
+ return __builtin_aarch64_lfrintnuv4sfv4si_us (__a);
}
__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
vcvtnq_u64_f64 (float64x2_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint64x2_t) __builtin_aarch64_lfrintnuv2dfv2di (__a);
+ return __builtin_aarch64_lfrintnuv2dfv2di_us (__a);
}
/* vcvtp */
__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
vcvtpd_u64_f64 (float64_t __a)
{
- return __builtin_aarch64_lceiludfdi (__a);
+ return __builtin_aarch64_lceiludfdi_us (__a);
}
__extension__ static __inline int32_t __attribute__ ((__always_inline__))
__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
vcvtps_u32_f32 (float32_t __a)
{
- return __builtin_aarch64_lceilusfsi (__a);
+ return __builtin_aarch64_lceilusfsi_us (__a);
}
__extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
vcvtp_u32_f32 (float32x2_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint32x2_t) __builtin_aarch64_lceiluv2sfv2si (__a);
+ return __builtin_aarch64_lceiluv2sfv2si_us (__a);
}
__extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
vcvtpq_u32_f32 (float32x4_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint32x4_t) __builtin_aarch64_lceiluv4sfv4si (__a);
+ return __builtin_aarch64_lceiluv4sfv4si_us (__a);
}
__extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
vcvtpq_u64_f64 (float64x2_t __a)
{
- /* TODO: This cast should go away when builtins have
- their correct types. */
- return (uint64x2_t) __builtin_aarch64_lceiluv2dfv2di (__a);
+ return __builtin_aarch64_lceiluv2dfv2di_us (__a);
}
/* vdup_n */