// The result will always be correct since we mask the result with m, but
// for debug builds we also want to make sure not to generate FP exceptions
#ifndef NDEBUG
- x.simdInternal_ = vbslq_f64(m.simdInternal_, x.simdInternal_, vdupq_n_f64(1.0f));
+ x.simdInternal_ = vbslq_f64(m.simdInternal_, x.simdInternal_, vdupq_n_f64(1.0));
#endif
return {
float64x2_t(vandq_u64(uint64x2_t(vrsqrteq_f64(x.simdInternal_)), m.simdInternal_))
// The result will always be correct since we mask the result with m, but
// for debug builds we also want to make sure not to generate FP exceptions
#ifndef NDEBUG
- x.simdInternal_ = vbslq_f64(m.simdInternal_, x.simdInternal_, vdupq_n_f64(1.0f));
+ x.simdInternal_ = vbslq_f64(m.simdInternal_, x.simdInternal_, vdupq_n_f64(1.0));
#endif
return {
float64x2_t(vandq_u64(uint64x2_t(vrecpeq_f64(x.simdInternal_)), m.simdInternal_))
selectByMask(SimdDouble a, SimdDBool m)
{
return {
- float64x2_t(vandq_u64(uint64x2_t(a.simdInternal_), m.simdInternal_))
+ float64x2_t(vandq_u64(uint64x2_t(a.simdInternal_), m.simdInternal_))
};
}
selectByNotMask(SimdDouble a, SimdDBool m)
{
return {
- float64x2_t(vbicq_u64(uint64x2_t(a.simdInternal_), m.simdInternal_))
+ float64x2_t(vbicq_u64(uint64x2_t(a.simdInternal_), m.simdInternal_))
};
}
blend(SimdDouble a, SimdDouble b, SimdDBool sel)
{
return {
- vbslq_f64(sel.simdInternal_, b.simdInternal_, a.simdInternal_)
+ vbslq_f64(sel.simdInternal_, b.simdInternal_, a.simdInternal_)
};
}
operator<<(SimdDInt32 a, int n)
{
return {
- vshl_s32(a.simdInternal_, vdup_n_s32(n >= 32 ? 32 : n))
+ vshl_s32(a.simdInternal_, vdup_n_s32(n >= 32 ? 32 : n))
};
}
operator>>(SimdDInt32 a, int n)
{
return {
- vshl_s32(a.simdInternal_, vdup_n_s32(n >= 32 ? -32 : -n))
+ vshl_s32(a.simdInternal_, vdup_n_s32(n >= 32 ? -32 : -n))
};
}
operator&(SimdDInt32 a, SimdDInt32 b)
{
return {
- vand_s32(a.simdInternal_, b.simdInternal_)
+ vand_s32(a.simdInternal_, b.simdInternal_)
};
}
andNot(SimdDInt32 a, SimdDInt32 b)
{
return {
- vbic_s32(b.simdInternal_, a.simdInternal_)
+ vbic_s32(b.simdInternal_, a.simdInternal_)
};
}
operator|(SimdDInt32 a, SimdDInt32 b)
{
return {
- vorr_s32(a.simdInternal_, b.simdInternal_)
+ vorr_s32(a.simdInternal_, b.simdInternal_)
};
}
operator^(SimdDInt32 a, SimdDInt32 b)
{
return {
- veor_s32(a.simdInternal_, b.simdInternal_)
+ veor_s32(a.simdInternal_, b.simdInternal_)
};
}
operator+(SimdDInt32 a, SimdDInt32 b)
{
return {
- vadd_s32(a.simdInternal_, b.simdInternal_)
+ vadd_s32(a.simdInternal_, b.simdInternal_)
};
}
operator-(SimdDInt32 a, SimdDInt32 b)
{
return {
- vsub_s32(a.simdInternal_, b.simdInternal_)
+ vsub_s32(a.simdInternal_, b.simdInternal_)
};
}
operator*(SimdDInt32 a, SimdDInt32 b)
{
return {
- vmul_s32(a.simdInternal_, b.simdInternal_)
+ vmul_s32(a.simdInternal_, b.simdInternal_)
};
}
operator==(SimdDInt32 a, SimdDInt32 b)
{
return {
- vceq_s32(a.simdInternal_, b.simdInternal_)
+ vceq_s32(a.simdInternal_, b.simdInternal_)
};
}
testBits(SimdDInt32 a)
{
return {
- vtst_s32( a.simdInternal_, a.simdInternal_)
+ vtst_s32( a.simdInternal_, a.simdInternal_)
};
}
operator<(SimdDInt32 a, SimdDInt32 b)
{
return {
- vclt_s32(a.simdInternal_, b.simdInternal_)
+ vclt_s32(a.simdInternal_, b.simdInternal_)
};
}
operator&&(SimdDIBool a, SimdDIBool b)
{
return {
- vand_u32(a.simdInternal_, b.simdInternal_)
+ vand_u32(a.simdInternal_, b.simdInternal_)
};
}
operator||(SimdDIBool a, SimdDIBool b)
{
return {
- vorr_u32(a.simdInternal_, b.simdInternal_)
+ vorr_u32(a.simdInternal_, b.simdInternal_)
};
}
selectByMask(SimdDInt32 a, SimdDIBool m)
{
return {
- vand_s32(a.simdInternal_, vreinterpret_s32_u32(m.simdInternal_))
+ vand_s32(a.simdInternal_, vreinterpret_s32_u32(m.simdInternal_))
};
}
selectByNotMask(SimdDInt32 a, SimdDIBool m)
{
return {
- vbic_s32(a.simdInternal_, vreinterpret_s32_u32(m.simdInternal_))
+ vbic_s32(a.simdInternal_, vreinterpret_s32_u32(m.simdInternal_))
};
}
blend(SimdDInt32 a, SimdDInt32 b, SimdDIBool sel)
{
return {
- vbsl_s32(sel.simdInternal_, b.simdInternal_, a.simdInternal_)
+ vbsl_s32(sel.simdInternal_, b.simdInternal_, a.simdInternal_)
};
}
cvtR2I(SimdDouble a)
{
return {
- vmovn_s64(vcvtnq_s64_f64(a.simdInternal_))
+ vmovn_s64(vcvtnq_s64_f64(a.simdInternal_))
};
}
cvttR2I(SimdDouble a)
{
return {
- vmovn_s64(vcvtq_s64_f64(a.simdInternal_))
+ vmovn_s64(vcvtq_s64_f64(a.simdInternal_))
};
}
cvtI2R(SimdDInt32 a)
{
return {
- vcvtq_f64_s64(vmovl_s32(a.simdInternal_))
+ vcvtq_f64_s64(vmovl_s32(a.simdInternal_))
};
}
cvtB2IB(SimdDBool a)
{
return {
- vqmovn_u64(a.simdInternal_)
+ vqmovn_u64(a.simdInternal_)
};
}
cvtIB2B(SimdDIBool a)
{
return {
- vorrq_u64(vmovl_u32(a.simdInternal_), vshlq_n_u64(vmovl_u32(a.simdInternal_), 32))
+ vorrq_u64(vmovl_u32(a.simdInternal_), vshlq_n_u64(vmovl_u32(a.simdInternal_), 32))
};
}
cvtDD2F(SimdDouble d0, SimdDouble d1)
{
return {
- vcvt_high_f32_f64(vcvt_f32_f64(d0.simdInternal_), d1.simdInternal_)
+ vcvt_high_f32_f64(vcvt_f32_f64(d0.simdInternal_), d1.simdInternal_)
};
}