6#ifndef _FVEC_H_INCLUDED
7#define _FVEC_H_INCLUDED
11#error ERROR: This file is only supported in C++ compilations!
19#if defined(_ENABLE_VEC_DEBUG)
23#pragma pack(push,_CRT_PACKING)
26#define EXPLICIT explicit
39 operator __m128()
const {
return vec; }
68 static const F32vec4 fvecf0pt5(0.5f);
69 static const F32vec4 fvecf3pt0(3.0f);
71 return (fvecf0pt5 *Ra0) *(fvecf3pt0 - (
a *Ra0) *Ra0);
74#define Fvec32s4_COMP(op) friend F32vec4 cmp##op (const F32vec4 &a,const F32vec4 &b) { return _mm_cmp##op##_ps(a,b); }
90#if defined(_ENABLE_VEC_DEBUG)
92 float *fp = (
float*)&
a;
93 os <<
"[3]:" << *(fp+3)
102 float *fp = (
float*)&
vec;
107 float *fp = (
float*)&
vec;
119#define Fvec32s4_SELECT(op) inline F32vec4 select_##op (const F32vec4 &a,const F32vec4 &b,const F32vec4 &c,const F32vec4 &d) { F32vec4 mask = _mm_cmp##op##_ps(a,b); return((mask & c) | F32vec4((_mm_andnot_ps(mask,d)))); }
130#undef Fvec32s4_SELECT
132inline Is16vec4
simd_max(
const Is16vec4 &
a,
const Is16vec4 &
b) {
return _m_pmaxsw(
a,
b); }
133inline Is16vec4
simd_min(
const Is16vec4 &
a,
const Is16vec4 &
b) {
return _m_pminsw(
a,
b); }
134inline Iu8vec8
simd_max(
const Iu8vec8 &
a,
const Iu8vec8 &
b) {
return _m_pmaxub(
a,
b); }
135inline Iu8vec8
simd_min(
const Iu8vec8 &
a,
const Iu8vec8 &
b) {
return _m_pminub(
a,
b); }
136inline Iu16vec4
simd_avg(
const Iu16vec4 &
a,
const Iu16vec4 &
b) {
return _m_pavgw(
a,
b); }
137inline Iu8vec8
simd_avg(
const Iu8vec8 &
a,
const Iu8vec8 &
b) {
return _m_pavgb(
a,
b); }
139inline Iu16vec4
mul_high(
const Iu16vec4 &
a,
const Iu16vec4 &
b) {
return _m_pmulhuw(
a,
b); }
170 operator __m128()
const {
return vec; }
193 static const F32vec1 fvecf0pt5(0.5f);
194 static const F32vec1 fvecf3pt0(3.0f);
196 return (fvecf0pt5 *Ra0) *(fvecf3pt0 - (
a *Ra0) *Ra0);
198#define Fvec32s1_COMP(op) friend F32vec1 cmp##op (const F32vec1 &a,const F32vec1 &b) { return _mm_cmp##op##_ss(a,b); }
214#if defined(_ENABLE_VEC_DEBUG)
216 float *fp = (
float*)&
a;
217 os <<
"float:" << *fp;
223#define Fvec32s1_SELECT(op) inline F32vec1 select_##op (const F32vec1 &a,const F32vec1 &b,const F32vec1 &c,const F32vec1 &d) { F32vec1 mask = _mm_cmp##op##_ss(a,b); return((mask & c) | F32vec1((_mm_andnot_ps(mask,d)))); }
234#undef Fvec32s1_SELECT
236inline int F32vec1ToInt(
const F32vec1 &
a)
basic_ostream< _CharT, _Traits > &_STLP_CALL operator<<(basic_ostream< _CharT, _Traits > &__os, const bitset< _Nb > &__x)
friend F32vec1 rsqrt_nr(const F32vec1 &a)
F32vec1 & operator-=(F32vec1 &a)
friend F32vec1 rcp(const F32vec1 &a)
Fvec32s1_COMP(eq) Fvec32s1_COMP(lt) Fvec32s1_COMP(le) Fvec32s1_COMP(gt) Fvec32s1_COMP(ge) Fvec32s1_COMP(neq) Fvec32s1_COMP(nlt) Fvec32s1_COMP(nle) Fvec32s1_COMP(ngt) Fvec32s1_COMP(nge) friend F32vec1 simd_min(const F32vec1 &a
friend F32vec1 operator^(const F32vec1 &a, const F32vec1 &b)
F32vec1 & operator^=(F32vec1 &a)
F32vec1 & operator+=(F32vec1 &a)
F32vec1 & operator/=(F32vec1 &a)
F32vec1 & operator*=(F32vec1 &a)
friend F32vec1 operator&(const F32vec1 &a, const F32vec1 &b)
friend F32vec1 operator-(const F32vec1 &a, const F32vec1 &b)
friend F32vec1 operator*(const F32vec1 &a, const F32vec1 &b)
F32vec1 & operator&=(F32vec1 &a)
friend F32vec1 sqrt(const F32vec1 &a)
friend F32vec1 rcp_nr(const F32vec1 &a)
F32vec1 & operator|=(F32vec1 &a)
friend F32vec1 operator/(const F32vec1 &a, const F32vec1 &b)
friend F32vec1 operator|(const F32vec1 &a, const F32vec1 &b)
friend F32vec1 rsqrt(const F32vec1 &a)
EXPLICIT F32vec1(float f)
friend F32vec1 simd_max(const F32vec1 &a, const F32vec1 &b)
friend F32vec1 operator+(const F32vec1 &a, const F32vec1 &b)
EXPLICIT F32vec1(double d)
friend F32vec4 simd_max(const F32vec4 &a, const F32vec4 &b)
const float & operator[](int i) const
friend float add_horizontal(F32vec4 &a)
friend F32vec4 rsqrt_nr(const F32vec4 &a)
float & operator[](int i)
F32vec4 & operator&=(F32vec4 &a)
F32vec4 & operator+=(F32vec4 &a)
friend F32vec4 operator|(const F32vec4 &a, const F32vec4 &b)
friend F32vec4 rcp(const F32vec4 &a)
EXPLICIT F32vec4(double d)
friend F32vec4 operator-(const F32vec4 &a, const F32vec4 &b)
F32vec4 & operator=(float f)
F32vec4 & operator-=(F32vec4 &a)
friend F32vec4 rsqrt(const F32vec4 &a)
friend F32vec4 operator&(const F32vec4 &a, const F32vec4 &b)
F32vec4 & operator^=(F32vec4 &a)
Fvec32s4_COMP(eq) Fvec32s4_COMP(lt) Fvec32s4_COMP(le) Fvec32s4_COMP(gt) Fvec32s4_COMP(ge) Fvec32s4_COMP(neq) Fvec32s4_COMP(nlt) Fvec32s4_COMP(nle) Fvec32s4_COMP(ngt) Fvec32s4_COMP(nge) friend F32vec4 simd_min(const F32vec4 &a
friend F32vec4 operator*(const F32vec4 &a, const F32vec4 &b)
F32vec4 & operator/=(F32vec4 &a)
friend F32vec4 operator+(const F32vec4 &a, const F32vec4 &b)
F32vec4 & operator|=(F32vec4 &a)
F32vec4 & operator*=(F32vec4 &a)
friend F32vec4 operator/(const F32vec4 &a, const F32vec4 &b)
friend F32vec4 rcp_nr(const F32vec4 &a)
friend F32vec4 sqrt(const F32vec4 &a)
EXPLICIT F32vec4(float f)
friend F32vec4 operator^(const F32vec4 &a, const F32vec4 &b)
F32vec4(float f3, float f2, float f1, float f0)
#define Fvec32s4_COMP(op)
#define Fvec32s4_SELECT(op)
F32vec4 unpack_low(const F32vec4 &a, const F32vec4 &b)
#define Fvec32s1_COMP(op)
F32vec4 IntToF32vec4(const F32vec4 &a, int i)
int F32vec4ToInt(const F32vec4 &a)
Iu16vec4 simd_avg(const Iu16vec4 &a, const Iu16vec4 &b)
void loadu(F32vec4 &a, float *p)
void store_nta(float *p, F32vec4 &a)
Is32vec2 F32vec4ToIs32vec2(const F32vec4 &a)
#define Fvec32s1_SELECT(op)
Iu16vec4 mul_high(const Iu16vec4 &a, const Iu16vec4 &b)
Is16vec4 simd_min(const Is16vec4 &a, const Is16vec4 &b)
F32vec4 Is32vec2ToF32vec4(const F32vec4 &a, const Is32vec2 &b)
Iu8vec8 simd_max(const Iu8vec8 &a, const Iu8vec8 &b)
int move_mask(const F32vec4 &a)
void storeu(float *p, const F32vec4 &a)
F32vec4 unpack_high(const F32vec4 &a, const F32vec4 &b)
void mask_move(const I8vec8 &a, const I8vec8 &b, char *addr)
GLboolean GLboolean GLboolean b
GLenum const GLvoid * addr
GLboolean GLboolean GLboolean GLboolean a
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define eq(received, expected, label, type)
__INTRIN_INLINE_SSE void _mm_stream_pi(__m64 *__p, __m64 __a)
__m128 _mm_add_ss(__m128 a, __m128 b)
__m128 _mm_rsqrt_ps(__m128 a)
void _mm_storeu_ps(float *p, __m128 a)
__m128 _mm_loadu_ps(float const *p)
void _mm_stream_ps(float *p, __m128 a)
__m128 _mm_div_ss(__m128 a, __m128 b)
__m128 _mm_max_ss(__m128 a, __m128 b)
__m128 _mm_set_ps(float e3, float e2, float e1, float e0)
__m128 _mm_rcp_ps(__m128 a)
__m128 _mm_mul_ss(__m128 a, __m128 b)
__m128 _mm_rsqrt_ss(__m128 a)
__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8)
__m128 _mm_set_ss(float a)
__m128 _mm_cvt_si2ss(__m128 a, int b)
__m128 _mm_and_ps(__m128 a, __m128 b)
__m128 _mm_xor_ps(__m128 a, __m128 b)
__m128 _mm_set_ps1(float a)
__m128 _mm_div_ps(__m128 a, __m128 b)
__m128 _mm_max_ps(__m128 a, __m128 b)
__m128 _mm_sub_ps(__m128 a, __m128 b)
__m128 _mm_unpackhi_ps(__m128 a, __m128 b)
__m128 _mm_min_ss(__m128 a, __m128 b)
__m128 _mm_add_ps(__m128 a, __m128 b)
__m128 _mm_min_ps(__m128 a, __m128 b)
int _mm_cvtt_ss2si(__m128 a)
__m128 _mm_sqrt_ss(__m128 a)
__m128 _mm_or_ps(__m128 a, __m128 b)
__m128 _mm_sqrt_ps(__m128 a)
__m128 _mm_sub_ss(__m128 a, __m128 b)
__m128 _mm_rcp_ss(__m128 a)
__m128 _mm_mul_ps(__m128 a, __m128 b)
__m128 _mm_unpacklo_ps(__m128 a, __m128 b)
int _mm_movemask_ps(__m128 a)