#ifndef __RUCC_XMMINTRIN_H
#define __RUCC_XMMINTRIN_H
#include <mmintrin.h>
#include <mm_malloc.h>
enum _mm_hint
{
_MM_HINT_IT0 = 19,
_MM_HINT_IT1 = 18,
_MM_HINT_RST2 = 9,
_MM_HINT_ET0 = 7,
_MM_HINT_T0 = 3,
_MM_HINT_T1 = 2,
_MM_HINT_T2 = 1,
_MM_HINT_NTA = 0
};
#define _MM_SHUFFLE(fp3, fp2, fp1, fp0) \
(((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | (fp0))
#define _MM_EXCEPT_MASK 0x003f
#define _MM_EXCEPT_INVALID 0x0001
#define _MM_EXCEPT_DENORM 0x0002
#define _MM_EXCEPT_DIV_ZERO 0x0004
#define _MM_EXCEPT_OVERFLOW 0x0008
#define _MM_EXCEPT_UNDERFLOW 0x0010
#define _MM_EXCEPT_INEXACT 0x0020
#define _MM_MASK_MASK 0x1f80
#define _MM_MASK_INVALID 0x0080
#define _MM_MASK_DENORM 0x0100
#define _MM_MASK_DIV_ZERO 0x0200
#define _MM_MASK_OVERFLOW 0x0400
#define _MM_MASK_UNDERFLOW 0x0800
#define _MM_MASK_INEXACT 0x1000
#define _MM_ROUND_MASK 0x6000
#define _MM_ROUND_NEAREST 0x0000
#define _MM_ROUND_DOWN 0x2000
#define _MM_ROUND_UP 0x4000
#define _MM_ROUND_TOWARD_ZERO 0x6000
#define _MM_FLUSH_ZERO_MASK 0x8000
#define _MM_FLUSH_ZERO_ON 0x8000
#define _MM_FLUSH_ZERO_OFF 0x0000
typedef float __v4sf __attribute__((__vector_size__(16)));
typedef int __v4si __attribute__((__vector_size__(16)));
typedef unsigned int __v4su __attribute__((__vector_size__(16)));
typedef float __v2sf __attribute__((__vector_size__(8)));
typedef float __m128 __attribute__((__vector_size__(16), __may_alias__));
typedef float __m128_u __attribute__((__vector_size__(16), __may_alias__, __aligned__(1)));
static __inline__ __m128 __attribute__((__always_inline__)) _mm_undefined_ps(void)
{
__m128 __answer;
return __answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_setzero_ps(void)
{
return (__m128)(__v4sf){ 0.0f, 0.0f, 0.0f, 0.0f };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_add_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4sf)__a + (__v4sf)__b);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_add_ss(__m128 __a, __m128 __b)
{
__v4sf __answer = (__v4sf)__a;
__answer[0] = __answer[0] + ((__v4sf)__b)[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_sub_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4sf)__a - (__v4sf)__b);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_sub_ss(__m128 __a, __m128 __b)
{
__v4sf __answer = (__v4sf)__a;
__answer[0] = __answer[0] - ((__v4sf)__b)[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_mul_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4sf)__a * (__v4sf)__b);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_mul_ss(__m128 __a, __m128 __b)
{
__v4sf __answer = (__v4sf)__a;
__answer[0] = __answer[0] * ((__v4sf)__b)[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_div_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4sf)__a / (__v4sf)__b);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_div_ss(__m128 __a, __m128 __b)
{
__v4sf __answer = (__v4sf)__a;
__answer[0] = __answer[0] / ((__v4sf)__b)[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_rcp_ps(__m128 __a)
{
return (__m128)((__v4sf){ 1.0f, 1.0f, 1.0f, 1.0f } / (__v4sf)__a);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_rcp_ss(__m128 __a)
{
__v4sf __answer = (__v4sf)__a;
__answer[0] = 1.0f / __answer[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_min_ps(__m128 __a, __m128 __b)
{
__v4sf __x = (__v4sf)__a, __y = (__v4sf)__b;
return (__m128)(__v4sf){ __x[0] < __y[0] ? __x[0] : __y[0], __x[1] < __y[1] ? __x[1] : __y[1],
__x[2] < __y[2] ? __x[2] : __y[2], __x[3] < __y[3] ? __x[3] : __y[3] };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_min_ss(__m128 __a, __m128 __b)
{
__v4sf __answer = (__v4sf)__a;
float __y = ((__v4sf)__b)[0];
__answer[0] = __answer[0] < __y ? __answer[0] : __y;
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_max_ps(__m128 __a, __m128 __b)
{
__v4sf __x = (__v4sf)__a, __y = (__v4sf)__b;
return (__m128)(__v4sf){ __x[0] > __y[0] ? __x[0] : __y[0], __x[1] > __y[1] ? __x[1] : __y[1],
__x[2] > __y[2] ? __x[2] : __y[2], __x[3] > __y[3] ? __x[3] : __y[3] };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_max_ss(__m128 __a, __m128 __b)
{
__v4sf __answer = (__v4sf)__a;
float __y = ((__v4sf)__b)[0];
__answer[0] = __answer[0] > __y ? __answer[0] : __y;
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_and_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4su)__a & (__v4su)__b);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_andnot_ps(__m128 __a, __m128 __b)
{
return (__m128)(~(__v4su)__a & (__v4su)__b);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_or_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4su)__a | (__v4su)__b);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_xor_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4su)__a ^ (__v4su)__b);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpeq_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4si)((__v4sf)__a == (__v4sf)__b));
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmplt_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4si)((__v4sf)__a < (__v4sf)__b));
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmple_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4si)((__v4sf)__a <= (__v4sf)__b));
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpgt_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4si)((__v4sf)__a > (__v4sf)__b));
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpge_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4si)((__v4sf)__a >= (__v4sf)__b));
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpneq_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4si)((__v4sf)__a != (__v4sf)__b));
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpnlt_ps(__m128 __a, __m128 __b)
{
return (__m128)(~(__v4si)((__v4sf)__a < (__v4sf)__b));
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpnle_ps(__m128 __a, __m128 __b)
{
return (__m128)(~(__v4si)((__v4sf)__a <= (__v4sf)__b));
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpngt_ps(__m128 __a, __m128 __b)
{
return (__m128)(~(__v4si)((__v4sf)__a > (__v4sf)__b));
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpnge_ps(__m128 __a, __m128 __b)
{
return (__m128)(~(__v4si)((__v4sf)__a >= (__v4sf)__b));
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpord_ps(__m128 __a, __m128 __b)
{
return (__m128)((__v4si)((__v4sf)__a == (__v4sf)__a) & (__v4si)((__v4sf)__b == (__v4sf)__b));
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpunord_ps(__m128 __a, __m128 __b)
{
return (__m128)(~((__v4si)((__v4sf)__a == (__v4sf)__a) & (__v4si)((__v4sf)__b == (__v4sf)__b)));
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpeq_ss(__m128 __a, __m128 __b)
{
__v4su __answer = (__v4su)__a;
__answer[0] = (unsigned int)((__v4si)((__v4sf)__a == (__v4sf)__b))[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmplt_ss(__m128 __a, __m128 __b)
{
__v4su __answer = (__v4su)__a;
__answer[0] = (unsigned int)((__v4si)((__v4sf)__a < (__v4sf)__b))[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmple_ss(__m128 __a, __m128 __b)
{
__v4su __answer = (__v4su)__a;
__answer[0] = (unsigned int)((__v4si)((__v4sf)__a <= (__v4sf)__b))[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpgt_ss(__m128 __a, __m128 __b)
{
__v4su __answer = (__v4su)__a;
__answer[0] = (unsigned int)((__v4si)((__v4sf)__a > (__v4sf)__b))[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpge_ss(__m128 __a, __m128 __b)
{
__v4su __answer = (__v4su)__a;
__answer[0] = (unsigned int)((__v4si)((__v4sf)__a >= (__v4sf)__b))[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpneq_ss(__m128 __a, __m128 __b)
{
__v4su __answer = (__v4su)__a;
__answer[0] = (unsigned int)((__v4si)((__v4sf)__a != (__v4sf)__b))[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpnlt_ss(__m128 __a, __m128 __b)
{
__v4su __answer = (__v4su)__a;
__answer[0] = (unsigned int)(~(__v4si)((__v4sf)__a < (__v4sf)__b))[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpnle_ss(__m128 __a, __m128 __b)
{
__v4su __answer = (__v4su)__a;
__answer[0] = (unsigned int)(~(__v4si)((__v4sf)__a <= (__v4sf)__b))[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpngt_ss(__m128 __a, __m128 __b)
{
__v4su __answer = (__v4su)__a;
__answer[0] = (unsigned int)(~(__v4si)((__v4sf)__a > (__v4sf)__b))[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpnge_ss(__m128 __a, __m128 __b)
{
__v4su __answer = (__v4su)__a;
__answer[0] = (unsigned int)(~(__v4si)((__v4sf)__a >= (__v4sf)__b))[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpord_ss(__m128 __a, __m128 __b)
{
__v4su __answer = (__v4su)__a;
float __x = ((__v4sf)__a)[0], __y = ((__v4sf)__b)[0];
__answer[0] = __x == __x && __y == __y ? 0xffffffffu : 0u;
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cmpunord_ss(__m128 __a, __m128 __b)
{
__v4su __answer = (__v4su)__a;
float __x = ((__v4sf)__a)[0], __y = ((__v4sf)__b)[0];
__answer[0] = __x == __x && __y == __y ? 0u : 0xffffffffu;
return (__m128)__answer;
}
static __inline__ int __attribute__((__always_inline__)) _mm_comieq_ss(__m128 __a, __m128 __b)
{
return ((__v4sf)__a)[0] == ((__v4sf)__b)[0];
}
static __inline__ int __attribute__((__always_inline__)) _mm_comilt_ss(__m128 __a, __m128 __b)
{
return ((__v4sf)__a)[0] < ((__v4sf)__b)[0];
}
static __inline__ int __attribute__((__always_inline__)) _mm_comile_ss(__m128 __a, __m128 __b)
{
return ((__v4sf)__a)[0] <= ((__v4sf)__b)[0];
}
static __inline__ int __attribute__((__always_inline__)) _mm_comigt_ss(__m128 __a, __m128 __b)
{
return ((__v4sf)__a)[0] > ((__v4sf)__b)[0];
}
static __inline__ int __attribute__((__always_inline__)) _mm_comige_ss(__m128 __a, __m128 __b)
{
return ((__v4sf)__a)[0] >= ((__v4sf)__b)[0];
}
static __inline__ int __attribute__((__always_inline__)) _mm_comineq_ss(__m128 __a, __m128 __b)
{
return ((__v4sf)__a)[0] != ((__v4sf)__b)[0];
}
static __inline__ int __attribute__((__always_inline__)) _mm_ucomieq_ss(__m128 __a, __m128 __b)
{
return ((__v4sf)__a)[0] == ((__v4sf)__b)[0];
}
static __inline__ int __attribute__((__always_inline__)) _mm_ucomilt_ss(__m128 __a, __m128 __b)
{
return ((__v4sf)__a)[0] < ((__v4sf)__b)[0];
}
static __inline__ int __attribute__((__always_inline__)) _mm_ucomile_ss(__m128 __a, __m128 __b)
{
return ((__v4sf)__a)[0] <= ((__v4sf)__b)[0];
}
static __inline__ int __attribute__((__always_inline__)) _mm_ucomigt_ss(__m128 __a, __m128 __b)
{
return ((__v4sf)__a)[0] > ((__v4sf)__b)[0];
}
static __inline__ int __attribute__((__always_inline__)) _mm_ucomige_ss(__m128 __a, __m128 __b)
{
return ((__v4sf)__a)[0] >= ((__v4sf)__b)[0];
}
static __inline__ int __attribute__((__always_inline__)) _mm_ucomineq_ss(__m128 __a, __m128 __b)
{
return ((__v4sf)__a)[0] != ((__v4sf)__b)[0];
}
static __inline__ __m128 __attribute__((__always_inline__))
_mm_cmp_ps(__m128 __a, __m128 __b, const int __predicate)
{
switch (__predicate & 31)
{
case 0:
return _mm_cmpeq_ps(__a, __b);
case 1:
return _mm_cmplt_ps(__a, __b);
case 2:
return _mm_cmple_ps(__a, __b);
case 3:
return _mm_cmpunord_ps(__a, __b);
case 4:
return _mm_cmpneq_ps(__a, __b);
case 5:
return _mm_cmpnlt_ps(__a, __b);
case 6:
return _mm_cmpnle_ps(__a, __b);
case 7:
return _mm_cmpord_ps(__a, __b);
default:
return _mm_setzero_ps();
}
}
static __inline__ __m128 __attribute__((__always_inline__))
_mm_cmp_ss(__m128 __a, __m128 __b, const int __predicate)
{
switch (__predicate & 31)
{
case 0:
return _mm_cmpeq_ss(__a, __b);
case 1:
return _mm_cmplt_ss(__a, __b);
case 2:
return _mm_cmple_ss(__a, __b);
case 3:
return _mm_cmpunord_ss(__a, __b);
case 4:
return _mm_cmpneq_ss(__a, __b);
case 5:
return _mm_cmpnlt_ss(__a, __b);
case 6:
return _mm_cmpnle_ss(__a, __b);
case 7:
return _mm_cmpord_ss(__a, __b);
default:
{
__v4su __answer = (__v4su)__a;
__answer[0] = 0u;
return (__m128)__answer;
}
}
}
static __inline__ float __attribute__((__always_inline__)) __rucc_round_to_integral(float __x)
{
float __magic = 8388608.0f;
float __size = __x < 0.0f ? -__x : __x;
float __answer;
if (!(__size < __magic))
return __x;
__answer = (__size + __magic) - __magic;
return __x < 0.0f ? -__answer : __answer;
}
static __inline__ int __attribute__((__always_inline__)) __rucc_float_to_int(float __x)
{
float __rounded = __rucc_round_to_integral(__x);
if (!(__rounded >= -2147483648.0f) || !(__rounded < 2147483648.0f))
return (-2147483647 - 1);
return (int)__rounded;
}
static __inline__ long long __attribute__((__always_inline__)) __rucc_float_to_long(float __x)
{
float __rounded = __rucc_round_to_integral(__x);
if (!(__rounded >= -9223372036854775808.0f) || !(__rounded < 9223372036854775808.0f))
return (-9223372036854775807LL - 1);
return (long long)__rounded;
}
static __inline__ int __attribute__((__always_inline__)) __rucc_float_to_int_trunc(float __x)
{
if (!(__x > -2147483649.0f) || !(__x < 2147483648.0f))
return (-2147483647 - 1);
return (int)__x;
}
static __inline__ long long __attribute__((__always_inline__)) __rucc_float_to_long_trunc(float __x)
{
if (!(__x > -9223372036854777856.0f) || !(__x < 9223372036854775808.0f))
return (-9223372036854775807LL - 1);
return (long long)__x;
}
static __inline__ float __attribute__((__always_inline__)) _mm_cvtss_f32(__m128 __a)
{
return ((__v4sf)__a)[0];
}
static __inline__ int __attribute__((__always_inline__)) _mm_cvtss_si32(__m128 __a)
{
return __rucc_float_to_int(((__v4sf)__a)[0]);
}
static __inline__ int __attribute__((__always_inline__)) _mm_cvttss_si32(__m128 __a)
{
return __rucc_float_to_int_trunc(((__v4sf)__a)[0]);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cvtsi32_ss(__m128 __a, int __b)
{
__v4sf __answer = (__v4sf)__a;
__answer[0] = (float)__b;
return (__m128)__answer;
}
#ifdef __x86_64__
static __inline__ long long __attribute__((__always_inline__)) _mm_cvtss_si64(__m128 __a)
{
return __rucc_float_to_long(((__v4sf)__a)[0]);
}
static __inline__ long long __attribute__((__always_inline__)) _mm_cvttss_si64(__m128 __a)
{
return __rucc_float_to_long_trunc(((__v4sf)__a)[0]);
}
static __inline__ __m128 __attribute__((__always_inline__))
_mm_cvtsi64_ss(__m128 __a, long long __b)
{
__v4sf __answer = (__v4sf)__a;
__answer[0] = (float)__b;
return (__m128)__answer;
}
static __inline__ long long __attribute__((__always_inline__)) _mm_cvtss_si64x(__m128 __a)
{
return __rucc_float_to_long(((__v4sf)__a)[0]);
}
static __inline__ long long __attribute__((__always_inline__)) _mm_cvttss_si64x(__m128 __a)
{
return __rucc_float_to_long_trunc(((__v4sf)__a)[0]);
}
static __inline__ __m128 __attribute__((__always_inline__))
_mm_cvtsi64x_ss(__m128 __a, long long __b)
{
__v4sf __answer = (__v4sf)__a;
__answer[0] = (float)__b;
return (__m128)__answer;
}
#endif
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cvtpi32_ps(__m128 __a, __m64 __b)
{
__v4sf __answer = (__v4sf)__a;
__v2si __from = (__v2si)__b;
__answer[0] = (float)__from[0];
__answer[1] = (float)__from[1];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cvtpi32x2_ps(__m64 __a, __m64 __b)
{
__v2si __low = (__v2si)__a, __high = (__v2si)__b;
return (__m128)(__v4sf){ (float)__low[0], (float)__low[1], (float)__high[0], (float)__high[1] };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cvtpi16_ps(__m64 __a)
{
__v4hi __from = (__v4hi)__a;
return (__m128)(__v4sf){ (float)__from[0], (float)__from[1], (float)__from[2],
(float)__from[3] };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cvtpu16_ps(__m64 __a)
{
__v4hu __from = (__v4hu)__a;
return (__m128)(__v4sf){ (float)__from[0], (float)__from[1], (float)__from[2],
(float)__from[3] };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cvtpi8_ps(__m64 __a)
{
__v8qi __from = (__v8qi)__a;
return (__m128)(__v4sf){ (float)__from[0], (float)__from[1], (float)__from[2],
(float)__from[3] };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_cvtpu8_ps(__m64 __a)
{
__v8qu __from = (__v8qu)__a;
return (__m128)(__v4sf){ (float)__from[0], (float)__from[1], (float)__from[2],
(float)__from[3] };
}
static __inline__ __m64 __attribute__((__always_inline__)) _mm_cvtps_pi32(__m128 __a)
{
__v4sf __from = (__v4sf)__a;
return (__m64)(__v2si){ __rucc_float_to_int(__from[0]), __rucc_float_to_int(__from[1]) };
}
static __inline__ __m64 __attribute__((__always_inline__)) _mm_cvttps_pi32(__m128 __a)
{
__v4sf __from = (__v4sf)__a;
return (__m64)(__v2si){ __rucc_float_to_int_trunc(__from[0]),
__rucc_float_to_int_trunc(__from[1]) };
}
static __inline__ __m64 __attribute__((__always_inline__)) _mm_cvtps_pi16(__m128 __a)
{
__v4sf __from = (__v4sf)__a;
return (__m64)(__v4hi){ __rucc_sat_hi(__rucc_float_to_int(__from[0])),
__rucc_sat_hi(__rucc_float_to_int(__from[1])),
__rucc_sat_hi(__rucc_float_to_int(__from[2])),
__rucc_sat_hi(__rucc_float_to_int(__from[3])) };
}
static __inline__ __m64 __attribute__((__always_inline__)) _mm_cvtps_pi8(__m128 __a)
{
__v4sf __from = (__v4sf)__a;
return (__m64)(__v8qi){ __rucc_sat_qi(__rucc_sat_hi(__rucc_float_to_int(__from[0]))),
__rucc_sat_qi(__rucc_sat_hi(__rucc_float_to_int(__from[1]))),
__rucc_sat_qi(__rucc_sat_hi(__rucc_float_to_int(__from[2]))),
__rucc_sat_qi(__rucc_sat_hi(__rucc_float_to_int(__from[3]))),
0, 0, 0, 0 };
}
static __inline__ __m128 __attribute__((__always_inline__))
_mm_set_ps(const float __z, const float __y, const float __x, const float __w)
{
return (__m128)(__v4sf){ __w, __x, __y, __z };
}
static __inline__ __m128 __attribute__((__always_inline__))
_mm_setr_ps(float __z, float __y, float __x, float __w)
{
return (__m128)(__v4sf){ __z, __y, __x, __w };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_set_ss(float __f)
{
return (__m128)(__v4sf){ __f, 0.0f, 0.0f, 0.0f };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_set1_ps(float __f)
{
return (__m128)(__v4sf){ __f, __f, __f, __f };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_set_ps1(float __f)
{
return _mm_set1_ps(__f);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_load_ps(const float *__p)
{
return *(const __m128 *)__p;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_loadu_ps(const float *__p)
{
return *(const __m128_u *)__p;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_load_ss(const float *__p)
{
return _mm_set_ss(*__p);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_load1_ps(const float *__p)
{
return _mm_set1_ps(*__p);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_load_ps1(const float *__p)
{
return _mm_load1_ps(__p);
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_loadr_ps(const float *__p)
{
__v4sf __from = (__v4sf)*(const __m128 *)__p;
return (__m128)(__v4sf){ __from[3], __from[2], __from[1], __from[0] };
}
static __inline__ __m128 __attribute__((__always_inline__))
_mm_loadh_pi(__m128 __a, __m64 const *__p)
{
__v4sf __answer = (__v4sf)__a;
__v2sf __from = *(const __v2sf *)__p;
__answer[2] = __from[0];
__answer[3] = __from[1];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__))
_mm_loadl_pi(__m128 __a, __m64 const *__p)
{
__v4sf __answer = (__v4sf)__a;
__v2sf __from = *(const __v2sf *)__p;
__answer[0] = __from[0];
__answer[1] = __from[1];
return (__m128)__answer;
}
static __inline__ void __attribute__((__always_inline__)) _mm_store_ps(float *__p, __m128 __a)
{
*(__m128 *)__p = __a;
}
static __inline__ void __attribute__((__always_inline__)) _mm_storeu_ps(float *__p, __m128 __a)
{
*(__m128_u *)__p = __a;
}
static __inline__ void __attribute__((__always_inline__)) _mm_store_ss(float *__p, __m128 __a)
{
*__p = ((__v4sf)__a)[0];
}
static __inline__ void __attribute__((__always_inline__)) _mm_store1_ps(float *__p, __m128 __a)
{
*(__m128 *)__p = _mm_set1_ps(((__v4sf)__a)[0]);
}
static __inline__ void __attribute__((__always_inline__)) _mm_store_ps1(float *__p, __m128 __a)
{
_mm_store1_ps(__p, __a);
}
static __inline__ void __attribute__((__always_inline__)) _mm_storer_ps(float *__p, __m128 __a)
{
__v4sf __from = (__v4sf)__a;
*(__m128 *)__p = (__m128)(__v4sf){ __from[3], __from[2], __from[1], __from[0] };
}
static __inline__ void __attribute__((__always_inline__)) _mm_storeh_pi(__m64 *__p, __m128 __a)
{
__v4sf __from = (__v4sf)__a;
*(__v2sf *)__p = (__v2sf){ __from[2], __from[3] };
}
static __inline__ void __attribute__((__always_inline__)) _mm_storel_pi(__m64 *__p, __m128 __a)
{
__v4sf __from = (__v4sf)__a;
*(__v2sf *)__p = (__v2sf){ __from[0], __from[1] };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_move_ss(__m128 __a, __m128 __b)
{
__v4sf __answer = (__v4sf)__a;
__answer[0] = ((__v4sf)__b)[0];
return (__m128)__answer;
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_movehl_ps(__m128 __a, __m128 __b)
{
__v4sf __x = (__v4sf)__a, __y = (__v4sf)__b;
return (__m128)(__v4sf){ __y[2], __y[3], __x[2], __x[3] };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_movelh_ps(__m128 __a, __m128 __b)
{
__v4sf __x = (__v4sf)__a, __y = (__v4sf)__b;
return (__m128)(__v4sf){ __x[0], __x[1], __y[0], __y[1] };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_unpackhi_ps(__m128 __a, __m128 __b)
{
__v4sf __x = (__v4sf)__a, __y = (__v4sf)__b;
return (__m128)(__v4sf){ __x[2], __y[2], __x[3], __y[3] };
}
static __inline__ __m128 __attribute__((__always_inline__)) _mm_unpacklo_ps(__m128 __a, __m128 __b)
{
__v4sf __x = (__v4sf)__a, __y = (__v4sf)__b;
return (__m128)(__v4sf){ __x[0], __y[0], __x[1], __y[1] };
}
static __inline__ __m128 __attribute__((__always_inline__))
_mm_shuffle_ps(__m128 __a, __m128 __b, const int __mask)
{
__v4sf __x = (__v4sf)__a, __y = (__v4sf)__b;
return (__m128)(__v4sf){ __x[__mask & 3], __x[(__mask >> 2) & 3], __y[(__mask >> 4) & 3],
__y[(__mask >> 6) & 3] };
}
static __inline__ int __attribute__((__always_inline__)) _mm_movemask_ps(__m128 __a)
{
__v4su __from = (__v4su)__a;
return (int)((__from[0] >> 31) | ((__from[1] >> 31) << 1) | ((__from[2] >> 31) << 2)
| ((__from[3] >> 31) << 3));
}
#define _MM_TRANSPOSE4_PS(row0, row1, row2, row3) \
do \
{ \
__v4sf __r0 = (__v4sf)(row0), __r1 = (__v4sf)(row1); \
__v4sf __r2 = (__v4sf)(row2), __r3 = (__v4sf)(row3); \
(row0) = (__m128)(__v4sf){ __r0[0], __r1[0], __r2[0], __r3[0] }; \
(row1) = (__m128)(__v4sf){ __r0[1], __r1[1], __r2[1], __r3[1] }; \
(row2) = (__m128)(__v4sf){ __r0[2], __r1[2], __r2[2], __r3[2] }; \
(row3) = (__m128)(__v4sf){ __r0[3], __r1[3], __r2[3], __r3[3] }; \
} while (0)
static __inline__ __m64 __attribute__((__always_inline__)) _mm_max_pi16(__m64 __a, __m64 __b)
{
__v4hi __x = (__v4hi)__a, __y = (__v4hi)__b;
return (__m64)(__v4hi){ __x[0] > __y[0] ? __x[0] : __y[0], __x[1] > __y[1] ? __x[1] : __y[1],
__x[2] > __y[2] ? __x[2] : __y[2], __x[3] > __y[3] ? __x[3] : __y[3] };
}
static __inline__ __m64 __attribute__((__always_inline__)) _mm_min_pi16(__m64 __a, __m64 __b)
{
__v4hi __x = (__v4hi)__a, __y = (__v4hi)__b;
return (__m64)(__v4hi){ __x[0] < __y[0] ? __x[0] : __y[0], __x[1] < __y[1] ? __x[1] : __y[1],
__x[2] < __y[2] ? __x[2] : __y[2], __x[3] < __y[3] ? __x[3] : __y[3] };
}
static __inline__ __m64 __attribute__((__always_inline__)) _mm_max_pu8(__m64 __a, __m64 __b)
{
__v8qu __x = (__v8qu)__a, __y = (__v8qu)__b;
int __i;
__v8qu __answer;
for (__i = 0; __i < 8; __i++)
__answer[__i] = __x[__i] > __y[__i] ? __x[__i] : __y[__i];
return (__m64)__answer;
}
static __inline__ __m64 __attribute__((__always_inline__)) _mm_min_pu8(__m64 __a, __m64 __b)
{
__v8qu __x = (__v8qu)__a, __y = (__v8qu)__b;
int __i;
__v8qu __answer;
for (__i = 0; __i < 8; __i++)
__answer[__i] = __x[__i] < __y[__i] ? __x[__i] : __y[__i];
return (__m64)__answer;
}
static __inline__ __m64 __attribute__((__always_inline__)) _mm_avg_pu8(__m64 __a, __m64 __b)
{
__v8qu __x = (__v8qu)__a, __y = (__v8qu)__b;
int __i;
__v8qu __answer;
for (__i = 0; __i < 8; __i++)
__answer[__i] = (unsigned char)(((unsigned int)__x[__i] + (unsigned int)__y[__i] + 1u) >> 1);
return (__m64)__answer;
}
static __inline__ __m64 __attribute__((__always_inline__)) _mm_avg_pu16(__m64 __a, __m64 __b)
{
__v4hu __x = (__v4hu)__a, __y = (__v4hu)__b;
int __i;
__v4hu __answer;
for (__i = 0; __i < 4; __i++)
__answer[__i] = (unsigned short)(((unsigned int)__x[__i] + (unsigned int)__y[__i] + 1u) >> 1);
return (__m64)__answer;
}
static __inline__ __m64 __attribute__((__always_inline__)) _mm_mulhi_pu16(__m64 __a, __m64 __b)
{
__v4hu __x = (__v4hu)__a, __y = (__v4hu)__b;
int __i;
__v4hu __answer;
for (__i = 0; __i < 4; __i++)
__answer[__i] = (unsigned short)(((unsigned int)__x[__i] * (unsigned int)__y[__i]) >> 16);
return (__m64)__answer;
}
static __inline__ __m64 __attribute__((__always_inline__)) _mm_sad_pu8(__m64 __a, __m64 __b)
{
__v8qu __x = (__v8qu)__a, __y = (__v8qu)__b;
int __i, __total = 0;
for (__i = 0; __i < 8; __i++)
{
int __difference = (int)__x[__i] - (int)__y[__i];
__total += __difference < 0 ? -__difference : __difference;
}
return (__m64)(__v4hi){ (short)__total, 0, 0, 0 };
}
static __inline__ int __attribute__((__always_inline__)) _mm_movemask_pi8(__m64 __a)
{
__v8qu __from = (__v8qu)__a;
int __i, __answer = 0;
for (__i = 0; __i < 8; __i++)
__answer |= (int)(__from[__i] >> 7) << __i;
return __answer;
}
static __inline__ __m64 __attribute__((__always_inline__))
_mm_shuffle_pi16(__m64 __a, const int __mask)
{
__v4hi __from = (__v4hi)__a;
return (__m64)(__v4hi){ __from[__mask & 3], __from[(__mask >> 2) & 3],
__from[(__mask >> 4) & 3], __from[(__mask >> 6) & 3] };
}
static __inline__ int __attribute__((__always_inline__))
_mm_extract_pi16(__m64 __a, const int __n)
{
return (int)((__v4hu)__a)[__n & 3];
}
static __inline__ __m64 __attribute__((__always_inline__))
_mm_insert_pi16(__m64 __a, const int __d, const int __n)
{
__v4hi __answer = (__v4hi)__a;
__answer[__n & 3] = (short)__d;
return (__m64)__answer;
}
static __inline__ void __attribute__((__always_inline__))
_mm_maskmove_si64(__m64 __a, __m64 __mask, char *__p)
{
__v8qu __from = (__v8qu)__a, __which = (__v8qu)__mask;
int __i;
for (__i = 0; __i < 8; __i++)
if ((__which[__i] & 0x80u) != 0u)
__p[__i] = (char)__from[__i];
}
#define _mm_prefetch(P, I) __builtin_prefetch((P), (((I) & 0xC) >> 2), ((I) & 0x3))
static __inline__ void __attribute__((__always_inline__)) _mm_pause(void)
{
}
static __inline__ void __attribute__((__always_inline__)) _mm_sfence(void)
{
__atomic_thread_fence(__ATOMIC_SEQ_CST);
}
static __inline__ void __attribute__((__always_inline__)) _mm_stream_ps(float *__p, __m128 __a)
{
*(__m128 *)__p = __a;
}
static __inline__ void __attribute__((__always_inline__)) _mm_stream_pi(__m64 *__p, __m64 __a)
{
*__p = __a;
}
#define _mm_cvt_si2ss _mm_cvtsi32_ss
#define _mm_cvt_ss2si _mm_cvtss_si32
#define _mm_cvtt_ss2si _mm_cvttss_si32
#define _mm_cvt_pi2ps _mm_cvtpi32_ps
#define _mm_cvt_ps2pi _mm_cvtps_pi32
#define _mm_cvtt_ps2pi _mm_cvttps_pi32
#endif