| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378 |
- #include "precompiled.h"
- #include "sse.h"
- //namespace sse
- //{
- // // some defines first
- // union ieee754_QNAN
- // {
- // const float f;
- // struct
- // {
- // const unsigned int mantissa:23, exp:8, sign:1;
- // };
- //
- // ieee754_QNAN() : f(0.0), mantissa(0x7FFFFF), exp(0xFF), sign(0x0) {}
- // };
- //
- // namespace detail
- // {
- // union ieee754
- // {
- // ieee754() :
- // f(0.0f)
- // {}
- //
- // ieee754(float f) :
- // f(f)
- // {}
- //
- // ieee754(unsigned int mantissa, unsigned int exp, unsigned int sign) :
- // mantissa(mantissa), exp(exp), sign(sign)
- // {}
- //
- // float f;
- // struct
- // {
- // unsigned int mantissa:23, exp:8, sign:1;
- // };
- // };
- //
- // _MM_ALIGN16 const ieee754 qnan(0x7FFFFF, 0xFF, 0x0);
- // }
- //
- // float load(unsigned int mantissa, unsigned int exp, unsigned int sign)
- // {
- // sse::detail::ieee754 value(mantissa, exp, sign);
- // return value.f;
- // }
- //
- // _MM_ALIGN16 const sse::detail::ieee754 qnan(0x7FFFFF, 0xFF, 0x0);
- //
- // _MM_ALIGN16 const ieee754_QNAN absMask;
- // //static const __m128 abs4Mask = _mm_load1_ps( &absMask.f);
- // static const __m128 abs4Mask = _mm_set_ps1(absMask.f);
- //
- // __m128 _mm_neg_ps(__m128 v)
- // {
- // return _mm_sub_ps(_mm_setzero_ps(), v);
- // }
- //
- // __m128 fast_pow(__m128 base, __m128 exponent)
- // {
- // __m128 denom = _mm_mul_ps( exponent, base);
- // denom = _mm_sub_ps( exponent, denom);
- // denom = _mm_add_ps( base, denom);
- // return _mm_mul_ps( base, _mm_rcp_ps(denom));
- // }
- //
- // static const __m128 zero = _mm_setzero_ps();
- // static const __m128 one = _mm_set_ps1(1.0f);
- // static const __m128 two = _mm_set_ps1(2.0f);
- // static const __m128 pi = _mm_set_ps1(3.1415926535897932384626433832795f);
- // static const __m128 hundred_eighty = _mm_set_ps1(180.f);
- // static const __m128 pi_over_hundred_eighty = _mm_set_ps1(0.017453292519943295769236907684886f);
- // static const __m128 hundred_eighty_over_pi = _mm_set_ps1(57.295779513082320876798154814105f);
- //
- // //vec4 radians(vec4 degrees)
- // //{
- // // const float pi = float(3.1415926535897932384626433832795);
- // // return degrees * (pi / 180.f);
- // //}
- // __m128 radians(__m128 degrees)
- // {
- // return _mm_mul_ps(degrees, pi_over_hundred_eighty);
- // }
- //
- // __m128 _mm_rad_ss(__m128 degrees)
- // {
- // return _mm_mul_ss(degrees, pi_over_hundred_eighty);
- // }
- //
- // __m128 _mm_rad_ps(__m128 degrees)
- // {
- // return _mm_mul_ps(degrees, pi_over_hundred_eighty);
- // }
- //
- // //vec4 degrees(vec4 radians)
- // //{
- // // const float pi = float(3.1415926535897932384626433832795);
- // // return radians * (180.f / pi);
- // //}
- // __m128 degrees(__m128 radians)
- // {
- // return _mm_mul_ps(radians, hundred_eighty_over_pi);
- // }
- //
- // __m128 _mm_deg_ss(__m128 radians)
- // {
- // return _mm_mul_ss(radians, hundred_eighty_over_pi);
- // }
- //
- // __m128 _mm_deg_ps(__m128 radians)
- // {
- // return _mm_mul_ps(radians, hundred_eighty_over_pi);
- // }
- //
- // //vec4 sqrt(vec4 v)
- // //{
- // // return vec4(sqrt(v.x), sqrt(v.y), sqrt(v.z), sqrt(v.w));
- // //}
- // __m128 sqrt(__m128 v)
- // {
- // return _mm_sqrt_ps(v);
- // }
- //
- // //vec4 inversesqrt(vec4 x)
- // //{
- // // return vec4(1.0f) / sqrt(x);
- // //}
- // __m128 inversesqrt(__m128 v)
- // {
- // return _mm_rsqrt_ps(v);
- // }
- //
- // //vec4 abs(vec4 x)
- // //{
- // // return x >= T(0) ? x : -x;
- // //}
- // __m128 abs(__m128 x)
- // {
- // return _mm_and_ps(abs4Mask, x);
- // }
- //
- // //__m128 _mm_abs_ss(__m128 x)
- // //{
- // // return _mm_and_ss(abs4Mask, x);
- // //}
- //
- // __m128 _mm_abs_ps(__m128 x)
- // {
- // return _mm_and_ps(abs4Mask, x);
- // }
- //
- // //vec4 sign(vec4 x)
- // //{
- // // vec4 result;
- // // if(x > vec4(0))
- // // result = vec4(1);
- // // else if(x < T(0))
- // // result = vec4(-1);
- // // else
- // // result = vec4(0);
- // // return result;
- // //}
- // __m128 sign(__m128 x)
- // {
- // __m128 result;
- // __m128 cmp0 = _mm_cmpeq_ps(x, zero);
- // if(_mm_movemask_ps(cmp0) == 0)
- // result = zero;
- // else
- // {
- // __m128 cmp1 = _mm_cmpge_ps(x, zero);
- // //__m128 cmp2 = _mm_cmple_ps(x, zero);
- // if(_mm_movemask_ps(cmp1) > 0)
- // result = one;
- // else //if(_mm_movemask_ps(cmp2) > 0)
- // result = minus_one;
- // }
- // return result;
- // }
- //
- // __m128 _mm_sgn_ss(__m128 x)
- // {
- // __m128 result;
- // __m128 cmp0 = _mm_cmpeq_ss(x, zero);
- // if(_mm_movemask_ss(cmp0) == 0)
- // result = zero;
- // else
- // {
- // __m128 cmp1 = _mm_cmpge_ss(x, zero);
- // //__m128 cmp2 = _mm_cmple_ss(x, zero);
- // if(_mm_movemask_ss(cmp1) > 0)
- // result = one;
- // else //if(_mm_movemask_ss(cmp2) > 0)
- // result = minus_one;
- // }
- // return result;
- // }
- //
- // __m128 _mm_sgn_ps(__m128 x)
- // {
- // __m128 cmp0 = _mm_cmpeq_ps(x, zero);
- // __m128 cmp1 = _mm_cmple_ps(x, zero);
- // __m128 cmp2 = _mm_cmpge_ps(x, zero)
- //
- // __m128 result;
- // __m128 cmp0 = _mm_cmpeq_ps(x, zero);
- // if(_mm_movemask_ps(cmp0) == 0)
- // result = zero;
- // else
- // {
- // __m128 cmp1 = _mm_cmpge_ps(x, zero);
- // //__m128 cmp2 = _mm_cmple_ps(x, zero);
- // if(_mm_movemask_ps(cmp1) > 0)
- // result = one;
- // else //if(_mm_movemask_ps(cmp2) > 0)
- // result = minus_one;
- // }
- // return result;
- // }
- //
- // //vec4 floor(vec4 x)
- // //{
- // // return ::std::floor(x);
- // //}
- //
- // __m128 floor(__m128 v)
- // {
- //
- // }
- //
- // __m128 _mm_flr_ss(__m128 v)
- // {
- //
- // }
- //
- // __m128 _mm_flr_ps(__m128 v)
- // {
- //
- // }
- //
- // //vec4 ceil(vec4 x)
- // //{
- // // return ::std::ceil(vec4);
- // //}
- //
- //
- //
- // //vec4 fract(vec4 x)
- // //{
- // // return x - floor(x);
- // //}
- // __m128 fract(__m128 x)
- // {
- // __m128 flr0 = floor(x);
- // __m128 sub0 = _mm_sub_ps(x, flr0);
- // return sub0;
- // }
- //
- // __m128 _mm_frc_ss(__m128 x)
- // {
- // __m128 flr0 = _mm_flr_ss(x);
- // __m128 sub0 = _mm_sub_ss(x, flr0);
- // return sub0;
- // }
- //
- // __m128 _mm_frc_ps(__m128 x)
- // {
- // __m128 flr0 = _mm_flr_ps(x);
- // __m128 sub0 = _mm_sub_ps(x, flr0);
- // return sub0;
- // }
- //
- // //vec4 mod(vec4 x, vec4 y)
- // //{
- // // return x - y * floor(x / y);
- // //}
- // __m128 mod(__m128 x, __m128 y)
- // {
- // __m128 div0 = _mm_div_ps(x, y);
- // __m128 flr0 = _mm_flr_ps(div0);
- // __m128 mul0 = _mm_mul_ps(y, flr0);
- // __m128 sub0 = _mm_sub_ps(x, mul0);
- // return sub0;
- // }
- //
- // __m128 _mm_mod_ss(__m128 x, __m128 y)
- // {
- // __m128 div0 = _mm_div_ss(x, y);
- // __m128 flr0 = _mm_flr_ss(div0);
- // __m128 mul0 = _mm_mul_ss(y, flr0);
- // __m128 sub0 = _mm_sub_ss(x, mul0);
- // return sub0;
- // }
- //
- // __m128 _mm_mod_ps(__m128 x, __m128 y)
- // {
- // __m128 div0 = _mm_div_ps(x, y);
- // __m128 flr0 = _mm_flr_ps(div0);
- // __m128 mul0 = _mm_mul_ps(y, flr0);
- // __m128 sub0 = _mm_sub_ps(x, mul0);
- // return sub0;
- // }
- //
- // //vec4 min(vec4 x, vec4 y)
- // //{
- // // return x < y ? x : y;
- // //}
- // __m128 min(__m128 v1, __m128 v2)
- // {
- // return _mm_min_ps(v1, v2);
- // }
- //
- // //vec4 max(vec4 x, vec4 y)
- // //{
- // // return x > y ? x : y;
- // //}
- // __m128 max(__m128 v1, __m128 v2)
- // {
- // return _mm_max_ps(v1, v2);
- // }
- //
- // //vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal)
- // //{
- // // return max(min(v, maxVal), minVal);
- // //}
- // __m128 clamp(__m128 v, __m128 minVal, __m128 maxVal)
- // {
- // return _mm_max_ps(_mm_min_ps(v, maxVal), minVal);
- // }
- //
- // __m128 _mm_clp_ss(__m128 v, __m128 minVal, __m128 maxVal)
- // {
- // __m128 min0 = _mm_min_ss(v, maxVal);
- // __m128 max0 = _mm_max_ss(min0, minVal);
- // return max0;
- // }
- //
- // __m128 _mm_clp_ps(__m128 v, __m128 minVal, __m128 maxVal)
- // {
- // __m128 min0 = _mm_min_ps(v, maxVal);
- // __m128 max0 = _mm_max_ps(min0, minVal);
- // return max0;
- // }
- //
- // //vec4 mix(vec4 x, vec4 y, vec4 a)
- // //{
- // // return x * (vec4(1) - a) + y * a;
- // //}
- // __m128 mix(__m128 v1, __m128 v2, __m128 a)
- // {
- // __m128 sub0 = _mm_sub_ps(one, a);
- // __m128 mul0 = _mm_mul_ps(v1, sub0);
- // __m128 mul1 = _mm_mul_ps(v2, a);
- // __m128 add0 = _mm_add_ps(mul0, mul1);
- // return add0;
- // }
- //
- // __m128 _mm_lerp_ss(__m128 v1, __m128 v2, __m128 a)
- // {
- // __m128 sub0 = _mm_sub_ss(one, a);
- // __m128 mul0 = _mm_mul_ss(v1, sub0);
- // __m128 mul1 = _mm_mul_ss(v2, a);
- // __m128 add0 = _mm_add_ss(mul0, mul1);
- // return add0;
- // }
- //
- // __m128 _mm_lerp_ps(__m128 v1, __m128 v2, __m128 a)
- // {
- // __m128 sub0 = _mm_sub_ps(one, a);
- // __m128 mul0 = _mm_mul_ps(v1, sub0);
- // __m128 mul1 = _mm_mul_ps(v2, a);
- // __m128 add0 = _mm_add_ps(mul0, mul1);
- // return add0;
- // }
- //
- // //vec4 step(vec4 edge, vec4 x)
- // //{
- // // return x <= edge ? vec4(0) : vec4(1);
- // //}
- // __m128 step(__m128 edge, __m128 x)
- // {
- // __m128 cmp = _mm_cmple_ps(x, edge);
- // if(_mm_movemask_ps(cmp) == 0)
- // return one;
- // else
- // return zero;
- // }
- //
- // __m128 _mm_step_ss(__m128 edge, __m128 x)
- // {
- // __m128 cmp = _mm_cmple_ss(x, edge);
- // if(_mm_movemask_ss(cmp) == 0)
- // return one;
- // else
- // return zero;
- // }
- //
- // __m128 _mm_step_ps(__m128 edge, __m128 x)
- // {
- // __m128 cmp = _mm_cmple_ps(x, edge);
- // if(_mm_movemask_ps(cmp) == 0)
- // return one;
- // else
- // return zero;
- // }
- //
- // //vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x)
- // //{
- // // vec4 tmp = clamp((x - edge0) / (edge1 - edge0), vec4(0), vec4(1));
- // // return tmp * tmp * (vec4(3) - vec4(2) * tmp);
- // //}
- // __m128 smoothstep(__m128 edge0, __m128 edge1, __m128 x)
- // {
- // __m128 sub0 = _mm_sub_ps(x, edge0);
- // __m128 sub1 = _mm_sub_ps(edge1, edge0);
- // __m128 div0 = _mm_sub_ps(sub0, sub1);
- // __m128 clp0 = _mm_clp_ps(div0, zero, one);
- // __m128 mul0 = _mm_mul_ps(two, clp0);
- // __m128 sub2 = _mm_sub_ps(three, mul0);
- // __m128 mul1 = _mm_mul_ps(clp0, clp0);
- // __m128 mul2 = _mm_mul_ps(mul1, sub2);
- // return mul2;
- // }
- //
- // __m128 _mm_ssp_ss(__m128 edge0, __m128 edge1, __m128 x)
- // {
- // __m128 sub0 = _mm_sub_ss(x, edge0);
- // __m128 sub1 = _mm_sub_ss(edge1, edge0);
- // __m128 div0 = _mm_sub_ss(sub0, sub1);
- // __m128 clp0 = _mm_clp_ss(div0, zero, one);
- // __m128 mul0 = _mm_mul_ss(two, clp0);
- // __m128 sub2 = _mm_sub_ss(three, mul0);
- // __m128 mul1 = _mm_mul_ss(clp0, clp0);
- // __m128 mul2 = _mm_mul_ss(mul1, sub2);
- // return mul2;
- // }
- //
- // __m128 _mm_ssp_ps(__m128 edge0, __m128 edge1, __m128 x)
- // {
- // __m128 sub0 = _mm_sub_ps(x, edge0);
- // __m128 sub1 = _mm_sub_ps(edge1, edge0);
- // __m128 div0 = _mm_sub_ps(sub0, sub1);
- // __m128 clp0 = _mm_clp_ps(div0, zero, one);
- // __m128 mul0 = _mm_mul_ps(two, clp0);
- // __m128 sub2 = _mm_sub_ps(three, mul0);
- // __m128 mul1 = _mm_mul_ps(clp0, clp0);
- // __m128 mul2 = _mm_mul_ps(mul1, sub2);
- // return mul2;
- // }
- //
- // //float length(vec4 x)
- // //{
- // // float sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w;
- // // return sqrt(sqr);
- // //}
- // __m128 length(__m128 x)
- // {
- // __m128 dot0 = dot(x, x);
- // __m128 sqt0 = _mm_sqrt_ps(dot0);
- // return sqt0;
- // }
- //
- // __m128 _mm_len_ss(__m128 x)
- // {
- // __m128 dot0 = _mm_dot_ss(x, x);
- // __m128 sqt0 = _mm_sqrt_ss(dot0);
- // return sqt0;
- // }
- //
- // __m128 _mm_len_ps(__m128 x)
- // {
- // __m128 dot0 = _mm_dot_ps(x, x);
- // __m128 sqt0 = _mm_sqrt_ps(dot0);
- // return sqt0;
- // }
- //
- // //float distance(vec4 p0, vec4 p1)
- // //{
- // // return length(p1 - p0);
- // //}
- // __m128 distance(__m128 p0, __m128 p1)
- // {
- // __m128 sub0 = _mm_sub_ps(p0, p1);
- // __m128 len0 = _mm_len_ps(sub0);
- // return len0;
- // }
- //
- // __m128 _mm_dst_ss(__m128 p0, __m128 p1)
- // {
- // __m128 sub0 = _mm_sub_ps(p0, p1);
- // __m128 len0 = _mm_len_ps(sub0);
- // return len0;
- // }
- //
- // __m128 _mm_dst_ps(__m128 p0, __m128 p1)
- // {
- // __m128 sub0 = _mm_sub_ps(p0, p1);
- // __m128 len0 = _mm_len_ps(sub0);
- // return len0;
- // }
- //
- // //vec4 dot(vec4 x, vec4 y)
- // //{
- // // return vec4(x.x * y.x + x.y * y.y + x.z * y.z + x.w * y.w);
- // //}
- // __m128 dot(__m128 v1, __m128 v2)
- // {
- // __m128 mul0 = _mm_mul_ps(v1, v2);
- // __m128 swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1));
- // __m128 add0 = _mm_add_ps(mul0, swp0);
- // __m128 swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3));
- // __m128 add1 = _mm_add_ps(add0, swp1);
- // return add1;
- // }
- //
- // __m128 _mm_dot_ss(__m128 v1, __m128 v2)
- // {
- // __m128 mul0 = _mm_mul_ps(v1, v2);
- // __m128 swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1));
- // __m128 add0 = _mm_add_ps(mul0, swp0);
- // __m128 swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3));
- // __m128 add1 = _mm_add_ps(add0, swp1);
- // return add1;
- // }
- //
- // __m128 _mm_dot_ps(__m128 v1, __m128 v2)
- // {
- // __m128 mul0 = _mm_mul_ps(v1, v2);
- // __m128 swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1));
- // __m128 add0 = _mm_add_ps(mul0, swp0);
- // __m128 swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3));
- // __m128 add1 = _mm_add_ps(add0, swp1);
- // return add1;
- // }
- //
- // //vec3 cross(vec3 x, vec3 y)
- // //{
- // // return vec3(
- // // x.y * y.z - y.y * x.z,
- // // x.z * y.x - y.z * x.x,
- // // x.x * y.y - y.x * x.y);
- // //}
- // __m128 cross(__m128 v1, __m128 v2)
- // {
- // __m128 swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1));
- // __m128 swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2));
- // __m128 swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1));
- // __m128 swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2));
- // __m128 mul0 = _mm_mul_ps(swp0, swp3);
- // __m128 mul1 = _mm_mul_ps(swp1, swp2);
- // __m128 sub0 = _mm_sub_ps(mul0, mul1);
- // return sub0;
- // }
- //
- // __m128 _mm_xpd_ps(__m128 v1, __m128 v2)
- // {
- // __m128 swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1));
- // __m128 swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2));
- // __m128 swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1));
- // __m128 swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2));
- // __m128 mul0 = _mm_mul_ps(swp0, swp3);
- // __m128 mul1 = _mm_mul_ps(swp1, swp2);
- // __m128 sub0 = _mm_sub_ps(mul0, mul1);
- // return sub0;
- // }
- //
- // //vec4 normalize(vec4 x)
- // //{
- // // float sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w;
- // // return x * inversesqrt(sqr);
- // //}
- // __m128 normalize(__m128 v)
- // {
- // __m128 dot0 = dot(v, v);
- // __m128 isr0 = _mm_rsqrt_ps(dot0);
- // __m128 mul0 = _mm_mul_ps(v, isr0);
- // return mul0;
- // }
- //
- // __m128 _mm_nrm_ps(__m128 v)
- // {
- // __m128 dot0 = dot(v, v);
- // __m128 isr0 = _mm_rsqrt_ps(dot0);
- // __m128 mul0 = _mm_mul_ps(v, isr0);
- // return mul0;
- // }
- //
- // __m128 rcp(__m128 v)
- // {
- // return _mm_rcp_ps(v);
- // }
- //
- // //vec4 mad(vec4 v0, vec4 v1, vec4 v2)
- // //{
- // // return v0 * v1 + v2;
- // //}
- // __m128 mad(__m128 v0, __m128 v1, __m128 v2)
- // {
- // __m128 mul0 = _mm_mul_ps(v0, v1);
- // __m128 add0 = _mm_add_ps(mul0, v2);
- // return add0;
- // }
- //
- // __m128 _mm_mad_ss(__m128 v0, __m128 v1, __m128 v2)
- // {
- // __m128 mul0 = _mm_mul_ss(v0, v1);
- // __m128 add0 = _mm_add_ss(mul0, v2);
- // return add0;
- // }
- //
- // __m128 _mm_mad_ps(__m128 v0, __m128 v1, __m128 v2)
- // {
- // __m128 mul0 = _mm_mul_ps(v0, v1);
- // __m128 add0 = _mm_add_ps(mul0, v2);
- // return add0;
- // }
- //
- // //vec4 reflect(vec4 I, vec4 N)
- // //{
- // // return I - N * dot(N, I) * 2.0f;
- // //}
- // __m128 reflect(__m128 I, __m128 N)
- // {
- // __m128 dot0 = dot(N, I);
- // __m128 mul0 = _mm_mul_ps(N, I);
- // __m128 mul1 = _mm_mul_ps(mul0, two);
- // __m128 sub0 = _mm_sub_ps(I, mul1);
- // return sub0;
- // }
- //
- // __m128 _mm_rfe_ps(__m128 I, __m128 N)
- // {
- // __m128 dot0 = dot(N, I);
- // __m128 mul0 = _mm_mul_ps(N, I);
- // __m128 mul1 = _mm_mul_ps(mul0, two);
- // __m128 sub0 = _mm_sub_ps(I, mul1);
- // return sub0;
- // }
- //
- // //vec4 refract(vec4 I, vec4 N, T eta)
- // //{
- // // float dotValue = dot(N, I);
- // // float k = 1.0f - eta * eta * (1.0f - dotValue * dotValue);
- // // if(k < 0.0f)
- // // return vec4(0.0f);
- // // return eta * I - (eta * dotValue + sqrt(k)) * N;
- // //}
- // __m128 refract(__m128 I, __m128 N, __m128 eta)
- // {
- // __m128 dot0 = dot(N, I);
- // __m128 mul0 = _mm_mul_ps(eta, eta);
- // __m128 mul1 = _mm_mul_ps(dot0, dot0);
- // __m128 sub0 = _mm_sub_ps(one, mul0);
- // __m128 sub1 = _mm_sub_ps(one, mul1);
- // __m128 mul2 = _mm_mul_ps(sub0, sub1);
- //
- // if(_mm_movemask_ps(_mm_cmplt_ss(mul2, zero)) == 0)
- // return zero;
- //
- // __m128 sqt0 = _mm_sqrt_ps(mul2);
- // __m128 mul3 = _mm_mul_ps(eta, dot0);
- // __m128 add0 = _mm_add_ps(mul3, sqt0);
- // __m128 mul4 = _mm_mul_ps(add0, N);
- // __m128 mul5 = _mm_mul_ps(eta, I);
- // __m128 sub2 = _mm_sub_ps(mul5, mul4);
- //
- // return sub2;
- // }
- //
- // __m128 _mm_rfa_ps(__m128 I, __m128 N, __m128 eta)
- // {
- // __m128 dot0 = dot(N, I);
- // __m128 mul0 = _mm_mul_ps(eta, eta);
- // __m128 mul1 = _mm_mul_ps(dot0, dot0);
- // __m128 sub0 = _mm_sub_ps(one, mul0);
- // __m128 sub1 = _mm_sub_ps(one, mul1);
- // __m128 mul2 = _mm_mul_ps(sub0, sub1);
- //
- // if(_mm_movemask_ps(_mm_cmplt_ss(mul2, zero)) == 0)
- // return zero;
- //
- // __m128 sqt0 = _mm_sqrt_ps(mul2);
- // __m128 mul3 = _mm_mul_ps(eta, dot0);
- // __m128 add0 = _mm_add_ps(mul3, sqt0);
- // __m128 mul4 = _mm_mul_ps(add0, N);
- // __m128 mul5 = _mm_mul_ps(eta, I);
- // __m128 sub2 = _mm_sub_ps(mul5, mul4);
- //
- // return sub2;
- // }
- //
- //
- // struct vec4;
- // typedef const vec4& vec4_param;
- //
- // template <int N>
- // class comp
- // {
- // public:
- // comp(int i) :
- // index(i)
- // {
- // assert(i < N && i >= 0);
- // }
- //
- // operator const int() const{return index;}
- //
- // private:
- // int index;
- // };
- //
- // typedef comp<4> comp4_t;
- //
- // struct vec4
- // {
- // vec4();
- // vec4(float s);
- // vec4(float x, float y, float z, float w);
- // vec4(float v[4]);
- //
- // explicit vec4(__m128 data);
- //
- // vec4& operator= (vec4_param v);
- // vec4& operator+=(float s);
- // vec4& operator+=(vec4_param v);
- // vec4& operator-=(float s);
- // vec4& operator-=(vec4_param v);
- // vec4& operator*=(float s);
- // vec4& operator*=(vec4_param v);
- // vec4& operator/=(float s);
- // vec4& operator/=(vec4_param v);
- // vec4& operator++();
- // vec4& operator--();
- //
- // union
- // {
- // __m128 data;
- // struct{float x, y, z, w;};
- // float array[4];
- // };
- // };
- //
- // vec4::vec4() :
- // data(_mm_setzero_ps())
- // {}
- //
- // vec4::vec4(float s) :
- // data(_mm_load_ps1(&s))
- //// data(_mm_set_ps1(s))
- // {}
- //
- // vec4::vec4(float v[4]) :
- // data(_mm_load_ps(v))
- // {}
- //
- // vec4::vec4(float x, float y, float z, float w) :
- //// data(_mm_setr_ps(x, y, z, w))
- // data(_mm_set_ps(w, z, y, x))
- // {}
- //
- // vec4::vec4(__m128 data) :
- // data(data)
- // {}
- //
- // vec4& vec4::operator= (vec4_param v)
- // {
- // this->data = v.data;
- // return *this;
- // }
- //
- // vec4& vec4::operator+=(float s)
- // {
- // vec4 tmp(s);
- // this->data = _mm_add_ps(this->data , tmp.data);
- // return *this;
- // }
- //
- // vec4& vec4::operator+=(vec4_param v)
- // {
- // this->data = _mm_add_ps(this->data , v.data);
- // return *this;
- // }
- //
- // vec4& vec4::operator-=(float s)
- // {
- // vec4 tmp(s);
- // this->data = _mm_sub_ps(this->data , tmp.data);
- // return *this;
- // }
- //
- // vec4& vec4::operator-=(vec4_param v)
- // {
- // this->data = _mm_sub_ps(this->data , v.data);
- // return *this;
- // }
- //
- // vec4& vec4::operator*=(float s)
- // {
- // vec4 tmp(s);
- // this->data = _mm_mul_ps(this->data , tmp.data);
- // return *this;
- // }
- //
- // vec4& vec4::operator*=(vec4_param v)
- // {
- // this->data = _mm_mul_ps(this->data , v.data);
- // return *this;
- // }
- //
- // vec4& vec4::operator/=(float s)
- // {
- // vec4 tmp(s);
- // this->data = _mm_div_ps(this->data , tmp.data);
- // return *this;
- // }
- //
- // vec4& vec4::operator/=(vec4_param v)
- // {
- // this->data = _mm_div_ps(this->data , v.data);
- // return *this;
- // }
- //
- // vec4& vec4::operator++()
- // {
- // static __m128 inc = _mm_set_ps1(1.0f);
- // this->data = _mm_add_ps(this->data , inc);
- // return *this;
- // }
- //
- // vec4& vec4::operator--()
- // {
- // static __m128 inc = _mm_set_ps1(1.0f);
- // this->data = _mm_sub_ps(this->data , inc);
- // return *this;
- // }
- //
- // vec4 operator+ (const vec4& v1, const vec4& v2)
- // {
- // return vec4(_mm_add_ps(v1.data , v2.data));
- // }
- //
- // vec4 operator+ (const vec4& v1, const float s)
- // {
- // vec4 v2(s);
- // return vec4(_mm_add_ps(v1.data , v2.data));
- // }
- //
- // vec4 operator+ (const float s, const vec4& v2)
- // {
- // vec4 v1(s);
- // return vec4(_mm_add_ps(v1.data , v2.data));
- // }
- //
- // vec4 operator- (const vec4& v1, const vec4& v2)
- // {
- // return vec4(_mm_sub_ps(v1.data , v2.data));
- // }
- //
- // vec4 operator- (const vec4& v1, const float s)
- // {
- // vec4 v2(s);
- // return vec4(_mm_sub_ps(v1.data , v2.data));
- // }
- //
- // vec4 operator- (const float s, const vec4& v2)
- // {
- // vec4 v1(s);
- // return vec4(_mm_sub_ps(v1.data , v2.data));
- // }
- //
- // vec4 operator* (const vec4& v1, const vec4& v2)
- // {
- // return vec4(_mm_mul_ps(v1.data , v2.data));
- // }
- //
- // vec4 operator* (const vec4& v1, const float s)
- // {
- // vec4 v2(s);
- // return vec4(_mm_mul_ps(v1.data , v2.data));
- // }
- //
- // vec4 operator* (const float s, const vec4& v2)
- // {
- // vec4 v1(s);
- // return vec4(_mm_mul_ps(v1.data , v2.data));
- // }
- //
- // vec4 operator/ (const vec4& v1, const vec4& v2)
- // {
- // return vec4(_mm_div_ps(v1.data , v2.data));
- // }
- //
- // vec4 operator/ (const vec4& v1, const float s)
- // {
- // vec4 v2(s);
- // return vec4(_mm_div_ps(v1.data , v2.data));
- // }
- //
- // vec4 operator/ (const float s, const vec4& v2)
- // {
- // vec4 v1(s);
- // return vec4(_mm_div_ps(v1.data , v2.data));
- // }
- //
- // vec4 load(const vec4& v, const comp4_t component)
- // {
- // switch(component)
- // {
- // default:
- // case 3:
- // return vec4(_mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(0, 0, 0, 0)));
- // case 2:
- // return vec4(_mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(1, 1, 1, 1)));
- // case 1:
- // return vec4(_mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(2, 2, 2, 2)));
- // case 0:
- // return vec4(_mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 3, 3, 3)));
- // }
- // }
- //
- // vec4 rcp(vec4_param v)
- // {
- // return vec4(_mm_rcp_ps(v.data));
- // }
- //
- // vec4 sqrt(vec4_param v)
- // {
- // return vec4(_mm_sqrt_ps(v.data));
- // }
- //
- // vec4 inversesqrt(vec4_param v)
- // {
- // return vec4(_mm_rsqrt_ps(v.data));
- // }
- //
- // vec4 min(vec4_param v1, vec4_param v2)
- // {
- // return vec4(_mm_min_ps(v1.data, v2.data));
- // }
- //
- // vec4 max(vec4_param v1, vec4_param v2)
- // {
- // return vec4(_mm_max_ps(v1.data, v2.data));
- // }
- //
- // vec4 clamp(vec4_param v, float minVal, float maxVal)
- // {
- // vec4 v1(minVal);
- // vec4 v2(maxVal);
- // return vec4(_mm_min_ps(_mm_max_ps(v.data, v2.data), v1.data));
- // }
- //
- // vec4 clamp(vec4_param v, vec4_param minVal, vec4_param maxVal)
- // {
- // return vec4(_mm_min_ps(_mm_max_ps(v.data, maxVal.data), minVal.data));
- // }
- //
- // vec4 mix(vec4_param x, vec4_param y, vec4_param a)
- // {
- // __m128 one = _mm_set_ps1(1.0f);
- // __m128 b = _mm_sub_ps(one, a.data);
- // __m128 mul1 = _mm_mul_ps(x.data, b);
- // __m128 mul2 = _mm_mul_ps(y.data, a.data);
- // __m128 addFinal = _mm_add_ps(mul1, mul2);
- // return vec4(addFinal);
- //
- //
- //// __m128 b = _mm_sub_ps(_mm_set_ps1(1.0f), a.data);
- //// return vec4(_mm_add_ps(_mm_mul_ps(x.data, b), _mm_mul_ps(y.data, a.data)));
- // }
- //
- // float dot(vec4_param x, vec4_param y)
- // {
- // float result = 0.0f;
- // _mm_store_ss(&result, dot(x.data, y.data));
- // return result;
- // }
- //
- // vec4 reflect(vec4_param I, vec4_param N)
- // {
- // __m128 Normal = N.data;
- // __m128 Inc = I.data;
- // __m128 Two = _mm_set_ps1(2.0f);
- // __m128 Mul = _mm_mul_ps(Normal, dot(Normal, Inc));
- // return vec4(_mm_sub_ps(Inc, _mm_mul_ps(Mul, Two)));
- // }
- //
- // vec4 refract(vec4_param I, vec4_param N, float eta)
- // {
- // __m128 zero = _mm_set_ps1(0.0f);
- // __m128 eta1 = _mm_set_ps1(eta);
- // __m128 eta2 = _mm_mul_ps(eta1, eta1);
- // __m128 one = _mm_set_ps1(1.0f);
- // __m128 dotValue = dot(I.data, N.data);
- // __m128 dotValue2 = _mm_mul_ps(dotValue, dotValue);
- // __m128 k = _mm_sub_ps(one, _mm_mul_ps(eta2, _mm_sub_ps(one, dotValue2)));
- // __m128 isnull = _mm_cmplt_ss(k, zero);
- // if(_mm_movemask_ps(isnull) == 0)
- // return vec4(zero);
- // else
- // {
- // __m128 temp0 = _mm_add_ps(_mm_mul_ps(eta1, dotValue), sqrt(k));
- // __m128 temp1 = _mm_shuffle_ps(temp0, temp0, _MM_SHUFFLE(0, 0, 0, 0));
- // __m128 temp2 = _mm_mul_ps(temp1, N.data);
- // __m128 temp3 = _mm_mul_ps(eta1, I.data);
- // return vec4(_mm_sub_ps(temp3, temp2));
- // }
- // }
- //
- //
- //};
- //
- //namespace glm
- //{
- // glm::vec4 rcp(const glm::vec4& v)
- // {
- // return 1.0f / v;
- // }
- //}
- //
- //namespace cpu
- //{
- // void sincos(float a, float &s, float &c)
- // {
- // _asm
- // {
- // fld a
- // fsincos
- // mov ecx, c
- // mov edx, s
- // fstp dword ptr [ecx]
- // fstp dword ptr [edx]
- // }
- // }
- //
- // void sincos(double a, double& s, double& c)
- // {
- // _asm
- // {
- // fld a
- // fsincos
- // mov ecx, c
- // mov edx, s
- // fstp qword ptr [ecx]
- // fstp qword ptr [edx]
- // }
- // }
- //
- // float sin(float s)
- // {
- // float result = 0.0f;
- // float* p = &result;
- // _asm
- // {
- // fld s
- // fsin
- // mov ecx, p
- // fstp dword ptr [ecx]
- // }
- // return result;
- //
- // //float result = 0.0f;
- // //_asm
- // //{
- // // fld s
- // // fsin
- // // mov ecx, result
- // // fstp dword ptr [ecx]
- // //}
- // //return result;
- // }
- //
- // float abs(float s)
- // {
- // float result = 0.0f;
- // float* p = &result;
- // _asm
- // {
- // fld s
- // fabs
- // mov ecx, p
- // fstp dword ptr [ecx]
- // }
- // return result;
- //
- // //float result = 0.0f;
- // //_asm
- // //{
- // // fld s
- // // fsin
- // // mov ecx, result
- // // fstp dword ptr [ecx]
- // //}
- // //return result;
- // }
- //
- // float add(float s1, float s2)
- // {
- // float result = 0.0f;
- // float* p = &result;
- // _asm
- // {
- // fld s1
- // fld s2
- // fadd
- // mov ecx, p
- // fstp dword ptr [ecx]
- // }
- // return result;
- // }
- //
- // float sub(float s1, float s2)
- // {
- // float result = 0.0f;
- // float* p = &result;
- // _asm
- // {
- // fld s1
- // fld s2
- // fsub
- // mov ecx, p
- // fstp dword ptr [ecx]
- // }
- // return result;
- // }
- //
- // float mul(float s1, float s2)
- // {
- // float result = 0.0f;
- // float* p = &result;
- // _asm
- // {
- // fld s1
- // fld s2
- // fmul
- // mov ecx, p
- // fstp dword ptr [ecx]
- // }
- // return result;
- // }
- //
- // float div(float s1, float s2)
- // {
- // float result = 0.0f;
- // float* p = &result;
- // _asm
- // {
- // fld s1
- // fld s2
- // fdiv
- // mov ecx, p
- // fstp dword ptr [ecx]
- // }
- // return result;
- // }
- //}
- //
- //void test_asm()
- //{
- // float sin0 = cpu::sin(1.0f);
- // float sin1 = glm::sin(1.0f);
- // float add0 = cpu::add(1.0f, 2.0f);
- // float sub0 = cpu::sub(1.0f, 2.0f);
- //
- //
- // float end = 1.0f;
- //}
- //
- //void test_clamp()
- //{
- // sse::vec4 v(0.5f, 0.5f, 9.5f, 9.5f);
- // sse::vec4 minVal(1.0f, 2.0f, 3.0f, 4.0f);
- // sse::vec4 maxVal(5.0f, 6.0f, 7.0f, 8.0f);
- //
- // __m128 clamp0 = sse::clamp(
- // v.data,
- // minVal.data,
- // maxVal.data);
- //
- // glm::vec4 clamp1 = glm::clamp(
- // glm::vec4(0.5f, 0.5f, 9.5f, 9.5f),
- // glm::vec4(1.0f, 2.0f, 3.0f, 4.0f),
- // glm::vec4(5.0f, 6.0f, 7.0f, 8.0f));
- //
- // __m128 end = _mm_setzero_ps();
- //}
- //
- //#define DECLARE_EPI32_CONST(name) \
- // extern const _MM_ALIGN16 int _epi32_##name[4];
- //#define IMPLEMENT_EPI32_CONST(name,x) \
- // const _MM_ALIGN16 int _epi32_##name[4]={x,x,x,x};
- //#define IMPLEMENT_EPI32_CONST4(name,x,y,z,w) \
- // const _MM_ALIGN16 int _epi32_##name[4]={w,z,y,x};
- //
- //#define DECLARE_PS_CONST(name) \
- // extern const _MM_ALIGN16 float _ps_##name[4];
- //#define IMPLEMENT_PS_CONST(name,x) \
- // const _MM_ALIGN16 float _ps_##name[4]={x,x,x,x};
- //#define IMPLEMENT_PS_CONST4(name,x,y,z,w) \
- // const _MM_ALIGN16 float _ps_##name[4]={w,z,y,x};
- //
- ////IMPLEMENT_PS_CONST(sincos_p0, 0.15707963267948963959e1f)
- ////IMPLEMENT_PS_CONST(sincos_p1, -0.64596409750621907082e0f)
- ////IMPLEMENT_PS_CONST(sincos_p2, 0.7969262624561800806e-1f)
- ////IMPLEMENT_PS_CONST(sincos_p3, -0.468175413106023168e-2f)
- //
- //IMPLEMENT_EPI32_CONST(sign_mask,0x80000000)
- //IMPLEMENT_EPI32_CONST(inv_sign_mask,0x7FFFFFFF)
- //IMPLEMENT_EPI32_CONST(mant_mask,0x7F800000)
- //IMPLEMENT_EPI32_CONST(inv_mant_mask,0x807FFFFF)
- //IMPLEMENT_EPI32_CONST(min_norm_pos,0x00800000)
- //IMPLEMENT_EPI32_CONST(1,1)
- //IMPLEMENT_EPI32_CONST(2,2)
- //IMPLEMENT_EPI32_CONST(7,7)
- //IMPLEMENT_EPI32_CONST(127,127)
- //IMPLEMENT_EPI32_CONST(ninf,0xFF800000)
- //IMPLEMENT_EPI32_CONST(pinf,0x7F800000)
- //
- //IMPLEMENT_PS_CONST(1_3,0.33333333333333333333333333333333f)
- //IMPLEMENT_PS_CONST(0p5,0.5f)
- //IMPLEMENT_PS_CONST(1,1.0f)
- //IMPLEMENT_PS_CONST(m1,-1.0f)
- //IMPLEMENT_PS_CONST(2,2.0f)
- //IMPLEMENT_PS_CONST(3,3.0f)
- //IMPLEMENT_PS_CONST(127,127.0f)
- //IMPLEMENT_PS_CONST(255,255.0f)
- //IMPLEMENT_PS_CONST(2pow23,8388608.0f)
- //
- //IMPLEMENT_PS_CONST4(1_0_0_0,1.0f,0.0f,0.0f,0.0f)
- //IMPLEMENT_PS_CONST4(0_1_0_0,0.0f,1.0f,0.0f,0.0f)
- //IMPLEMENT_PS_CONST4(0_0_1_0,0.0f,0.0f,1.0f,0.0f)
- //IMPLEMENT_PS_CONST4(0_0_0_1,0.0f,0.0f,0.0f,1.0f)
- //
- //IMPLEMENT_PS_CONST(pi, 3.1415926535897932384626433832795f)
- //IMPLEMENT_PS_CONST(pi2, 6.283185307179586476925286766560f)
- //IMPLEMENT_PS_CONST(2_pi, 0.63661977236758134307553505349006f)
- //IMPLEMENT_PS_CONST(pi_2, 1.5707963267948966192313216916398f)
- //IMPLEMENT_PS_CONST(4_pi, 1.2732395447351626861510701069801f)
- //IMPLEMENT_PS_CONST(pi_4, 0.78539816339744830961566084581988f)
- //
- //IMPLEMENT_PS_CONST(sincos_p0, 0.15707963267948963959e1f)
- //IMPLEMENT_PS_CONST(sincos_p1, -0.64596409750621907082e0f)
- //IMPLEMENT_PS_CONST(sincos_p2, 0.7969262624561800806e-1f)
- //IMPLEMENT_PS_CONST(sincos_p3, -0.468175413106023168e-2f)
- //IMPLEMENT_PS_CONST(tan_p0, -1.79565251976484877988e7f)
- //IMPLEMENT_PS_CONST(tan_p1, 1.15351664838587416140e6f)
- //IMPLEMENT_PS_CONST(tan_p2, -1.30936939181383777646e4f)
- //IMPLEMENT_PS_CONST(tan_q0, -5.38695755929454629881e7f)
- //IMPLEMENT_PS_CONST(tan_q1, 2.50083801823357915839e7f)
- //IMPLEMENT_PS_CONST(tan_q2, -1.32089234440210967447e6f)
- //IMPLEMENT_PS_CONST(tan_q3, 1.36812963470692954678e4f)
- //IMPLEMENT_PS_CONST(tan_poleval,3.68935e19f)
- //IMPLEMENT_PS_CONST(atan_t0, -0.91646118527267623468e-1f)
- //IMPLEMENT_PS_CONST(atan_t1, -0.13956945682312098640e1f)
- //IMPLEMENT_PS_CONST(atan_t2, -0.94393926122725531747e2f)
- //IMPLEMENT_PS_CONST(atan_t3, 0.12888383034157279340e2f)
- //IMPLEMENT_PS_CONST(atan_s0, 0.12797564625607904396e1f)
- //IMPLEMENT_PS_CONST(atan_s1, 0.21972168858277355914e1f)
- //IMPLEMENT_PS_CONST(atan_s2, 0.68193064729268275701e1f)
- //IMPLEMENT_PS_CONST(atan_s3, 0.28205206687035841409e2f)
- //
- //IMPLEMENT_PS_CONST(exp_hi, 88.3762626647949f)
- //IMPLEMENT_PS_CONST(exp_lo, -88.3762626647949f)
- //IMPLEMENT_PS_CONST(exp_rln2, 1.4426950408889634073599f)
- //IMPLEMENT_PS_CONST(exp_p0, 1.26177193074810590878e-4f)
- //IMPLEMENT_PS_CONST(exp_p1, 3.02994407707441961300e-2f)
- //IMPLEMENT_PS_CONST(exp_q0, 3.00198505138664455042e-6f)
- //IMPLEMENT_PS_CONST(exp_q1, 2.52448340349684104192e-3f)
- //IMPLEMENT_PS_CONST(exp_q2, 2.27265548208155028766e-1f)
- //IMPLEMENT_PS_CONST(exp_q3, 2.00000000000000000009e0f)
- //IMPLEMENT_PS_CONST(exp_c1, 6.93145751953125e-1f)
- //IMPLEMENT_PS_CONST(exp_c2, 1.42860682030941723212e-6f)
- //IMPLEMENT_PS_CONST(exp2_hi, 127.4999961853f)
- //IMPLEMENT_PS_CONST(exp2_lo, -127.4999961853f)
- //IMPLEMENT_PS_CONST(exp2_p0, 2.30933477057345225087e-2f)
- //IMPLEMENT_PS_CONST(exp2_p1, 2.02020656693165307700e1f)
- //IMPLEMENT_PS_CONST(exp2_p2, 1.51390680115615096133e3f)
- //IMPLEMENT_PS_CONST(exp2_q0, 2.33184211722314911771e2f)
- //IMPLEMENT_PS_CONST(exp2_q1, 4.36821166879210612817e3f)
- //IMPLEMENT_PS_CONST(log_p0, -7.89580278884799154124e-1f)
- //IMPLEMENT_PS_CONST(log_p1, 1.63866645699558079767e1f)
- //IMPLEMENT_PS_CONST(log_p2, -6.41409952958715622951e1f)
- //IMPLEMENT_PS_CONST(log_q0, -3.56722798256324312549e1f)
- //IMPLEMENT_PS_CONST(log_q1, 3.12093766372244180303e2f)
- //IMPLEMENT_PS_CONST(log_q2, -7.69691943550460008604e2f)
- //IMPLEMENT_PS_CONST(log_c0, 0.693147180559945f)
- //IMPLEMENT_PS_CONST(log2_c0, 1.44269504088896340735992f)
- //
- //#define GLM_NAKED __declspec(naked) __cdecl
- //
- //__m128 GLM_NAKED _mm_cos_ps(__m128 x)
- //{
- // __asm
- // {
- // andps xmm0, _epi32_inv_sign_mask
- // addps xmm0, _ps_pi_2
- // mulps xmm0, _ps_2_pi
- // pxor xmm3, xmm3
- // movdqa xmm5, _epi32_1
- // movaps xmm4, _ps_1
- // cvttps2dq xmm2, xmm0
- // pand xmm5, xmm2
- // pcmpeqd xmm5, xmm3
- // cvtdq2ps xmm6, xmm2
- // pand xmm2, _epi32_2
- // pslld xmm2, 30
- // subps xmm0, xmm6
- // minps xmm0, xmm4
- // subps xmm4, xmm0
- // andps xmm0, xmm5
- // andnps xmm5, xmm4
- // orps xmm0, xmm5
- // movaps xmm1, xmm0
- // mulps xmm0, xmm0
- // orps xmm1, xmm2
- // movaps xmm7, xmm0
- // mulps xmm0, _ps_sincos_p3
- // addps xmm0, _ps_sincos_p2
- // mulps xmm0, xmm7
- // addps xmm0, _ps_sincos_p1
- // mulps xmm0, xmm7
- // addps xmm0, _ps_sincos_p0
- // mulps xmm0, xmm1
- // ret
- // }
- //}
- //
- //void test_sse()
- //{
- // sse::vec4 v1(1.0f, 2.0f, 3.0f, 4.0f);
- // sse::vec4 v2(5.0f, 6.0f, 7.0f, 8.0f);
- // sse::vec4 v3(9.0f);
- // sse::vec4 v4(0.5f, 0.5f, 0.5f, 0.5f);
- // __m128 v5 = sse::mix(v1.data, v2.data, v4.data);
- // __m128 dot0 = sse::dot(v1.data, v2.data);
- // float dot1 = sse::dot(v1, v2);
- // __m128 rcp0 = sse::rcp(v1.data);
- // glm::vec4 rcp1 = rcp(glm::vec4(1.0f, 2.0f, 3.0f, 4.0f));
- //
- // // cross
- // {
- // sse::vec4 v1(4.0f, 2.0f, 2.0f, 0.0f);
- // sse::vec4 v2(1.0f, 2.0f, 3.0f, 0.0f);
- // __m128 crs0 = sse::cross(v1.data, v2.data);
- //
- // glm::vec3 v3(4.0f, 2.0f, 2.0f);
- // glm::vec3 v4(1.0f, 2.0f, 3.0f);
- // glm::vec3 crs1 = glm::cross(v3, v4);
- //
- // __m128 end = _mm_set_ps1(1.0f);
- // }
- //
- // // ieee754
- // {
- // sse::detail::ieee754 one(1.f);
- // float f = sse::load(one.mantissa, one.exp, one.sign);
- //
- // __m128 end = _mm_set_ps1(1.0f);
- // }
- //
- // test_clamp();
- // test_asm();
- //
- // __m128 cos0 = _mm_cos_ps(_mm_set_ps1(1.0f));
- // glm::vec4 cos1 = glm::cos(glm::vec4(1.0f));
- //
- // float f = glm::dot(glm::vec4(1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(5.0f, 6.0f, 7.0f, 8.0f));
- // sse::vec4 end(9.0f);
- //
- // //sse::vec4 vComp = sse::load(sse::vec4(1.0f, 2.0f, 3.0f, 4.0f), 1);
- // //vComp += sse::vec4(1.0f);
- // //--vComp;
- // //sse::vec4 vMixed = sse::mix(vComp, sse::vec4(-0.5f), sse::vec4(0.5f));
- // //float sDot = sse::dot(sse::vec4(1.0f), sse::vec4(2.0f));
- // //float cDot = glm::dot(glm::vec4(1.0f), glm::vec4(2.0f));
- //}
|