Reference
[Supplimental]


Arithmetic Operations

SSP_FORCEINLINE __m128 ssp_arithmetic_hadd4_dup_ps_REF (__m128 a)
SSP_FORCEINLINE __m128i ssp_arithmetic_hadd4_epu16_REF (__m128i a)

Convert Operations

SSP_FORCEINLINE void ssp_convert_reverse_transpose_REF (__m128i *a, __m128i *b, __m128i *c)
SSP_FORCEINLINE void ssp_convert_3c_3p_epi8_REF (__m128i *rgb1, __m128i *rgb2, __m128i *rgb3)
SSP_FORCEINLINE void ssp_convert_3p_3c_epi8_REF (__m128i *r, __m128i *g, __m128i *b)
SSP_FORCEINLINE void ssp_convert_3c_3p_epi16_REF (__m128i *rgb1, __m128i *rgb2, __m128i *rgb3)
SSP_FORCEINLINE void ssp_convert_3p_3c_epi16_REF (__m128i *r, __m128i *g, __m128i *b)
SSP_FORCEINLINE void ssp_convert_3c_3p_epi32_REF (__m128i *rgb1, __m128i *rgb2, __m128i *rgb3)
SSP_FORCEINLINE void ssp_convert_3p_3c_epi32_REF (__m128i *r, __m128i *g, __m128i *b)
SSP_FORCEINLINE void ssp_convert_4c_4p_epi8_REF (__m128i *rgba1, __m128i *rgba2, __m128i *rgba3, __m128i *rgba4)
SSP_FORCEINLINE void ssp_convert_4p_4c_epi8_REF (__m128i *r, __m128i *g, __m128i *b, __m128i *a)
SSP_FORCEINLINE void ssp_convert_4c_4p_epi16_REF (__m128i *rgba1, __m128i *rgba2, __m128i *rgba3, __m128i *rgba4)
SSP_FORCEINLINE void ssp_convert_4p_4c_epi16_REF (__m128i *r, __m128i *g, __m128i *b, __m128i *a)
SSP_FORCEINLINE void ssp_convert_4c_4p_epi32_REF (__m128i *rgba1, __m128i *rgba2, __m128i *rgba3, __m128i *rgba4)
SSP_FORCEINLINE void ssp_convert_4p_4c_epi32_REF (__m128i *r, __m128i *g, __m128i *b, __m128i *a)

Logical Operations

SSP_FORCEINLINE __m128i ssp_logical_invert_si128_REF (__m128i a)
SSP_FORCEINLINE __m128i ssp_slli_epi8_REF (__m128i a, const int b)
SSP_FORCEINLINE __m128i ssp_srli_epi8_REF (__m128i a, const int b)

Memory Operations

__m128i ssp_memory_load1_epu8_REF (unsigned char a)

Number Operations{

SSP_FORCEINLINE int ssp_number_isValidNumber_F32_REF (ssp_s32 *val)
SSP_FORCEINLINE int ssp_number_isValidNumber_F64_REF (ssp_s64 *val)
SSP_FORCEINLINE ssp_f32 ssp_number_changeSNanToQNaN_F32_REF (ssp_s32 *val)
SSP_FORCEINLINE ssp_f64 ssp_number_changeSNanToQNaN_F64_REF (ssp_s64 *val)

Function Documentation

SSP_FORCEINLINE __m128 ssp_arithmetic_hadd4_dup_ps_REF ( __m128  a  ) 

Definition at line 16 of file SSEPlus_arithmetic_REF.h.

00017 {
00018     ssp_m128 A;
00019     ssp_f32 t;
00020     
00021     A.f = a;
00022     t   = A.f32[0] + 
00023           A.f32[1] + 
00024           A.f32[2] + 
00025           A.f32[3];
00026 
00027     A.f32[0] = t;
00028     A.f32[1] = t;
00029     A.f32[2] = t;
00030     A.f32[3] = t;
00031     return A.f;
00032 }  

SSP_FORCEINLINE __m128i ssp_arithmetic_hadd4_epu16_REF ( __m128i  a  ) 

Definition at line 34 of file SSEPlus_arithmetic_REF.h.

00035 {
00036     ssp_m128 A;
00037     A.i = a;
00038 
00039     A.u16[0] = A.u16[0] + A.u16[1] + + A.u16[2] + + A.u16[3];
00040     A.u16[4] = A.u16[4] + A.u16[5] + + A.u16[6] + + A.u16[7];
00041 
00042     return A.i;
00043 }  

SSP_FORCEINLINE void ssp_convert_3c_3p_epi16_REF ( __m128i *  rgb1,
__m128i *  rgb2,
__m128i *  rgb3 
)

Definition at line 182 of file SSEPlus_convert_REF.h.

00183 {
00184     ssp_m128 trgb1, trgb2, trgb3;
00185     ssp_m128 r, g, b;
00186     trgb1.i = *rgb1;
00187     trgb2.i = *rgb2;
00188     trgb3.i = *rgb3;
00189 
00190     r.s16[0] = trgb1.s16[0];
00191     r.s16[1] = trgb1.s16[3];
00192     r.s16[2] = trgb1.s16[6];
00193     r.s16[3] = trgb2.s16[1];
00194     r.s16[4] = trgb2.s16[4];
00195     r.s16[5] = trgb2.s16[7];
00196     r.s16[6] = trgb3.s16[2];
00197     r.s16[7] = trgb3.s16[5];
00198 
00199     g.s16[0] = trgb1.s16[1];
00200     g.s16[1] = trgb1.s16[4];
00201     g.s16[2] = trgb1.s16[7];
00202     g.s16[3] = trgb2.s16[2];
00203     g.s16[4] = trgb2.s16[5];
00204     g.s16[5] = trgb3.s16[0];
00205     g.s16[6] = trgb3.s16[3];
00206     g.s16[7] = trgb3.s16[6];
00207 
00208     b.s16[0] = trgb1.s16[2];
00209     b.s16[1] = trgb1.s16[5];
00210     b.s16[2] = trgb2.s16[0];
00211     b.s16[3] = trgb2.s16[3];
00212     b.s16[4] = trgb2.s16[6];
00213     b.s16[5] = trgb3.s16[1];
00214     b.s16[6] = trgb3.s16[4];
00215     b.s16[7] = trgb3.s16[7];
00216 
00217         *rgb1 = r.i;
00218         *rgb2 = g.i;
00219         *rgb3 = b.i;
00220 }

SSP_FORCEINLINE void ssp_convert_3c_3p_epi32_REF ( __m128i *  rgb1,
__m128i *  rgb2,
__m128i *  rgb3 
)

Definition at line 264 of file SSEPlus_convert_REF.h.

00265 {
00266     ssp_m128 trgb1, trgb2, trgb3;
00267     ssp_m128 r, g, b;
00268         trgb1.i = *rgb1;
00269         trgb2.i = *rgb2;
00270         trgb3.i = *rgb3;
00271 
00272     r.s32[0] = trgb1.s32[0];
00273     r.s32[1] = trgb1.s32[3];
00274     r.s32[2] = trgb2.s32[2];
00275     r.s32[3] = trgb3.s32[1];
00276 
00277     g.s32[0] = trgb1.s32[1];
00278     g.s32[1] = trgb2.s32[0];
00279     g.s32[2] = trgb2.s32[3];
00280     g.s32[3] = trgb3.s32[2];
00281 
00282     b.s32[0] = trgb1.s32[2];
00283     b.s32[1] = trgb2.s32[1];
00284     b.s32[2] = trgb3.s32[0];
00285     b.s32[3] = trgb3.s32[3];
00286 
00287         *rgb1 = r.i;
00288         *rgb2 = g.i;
00289         *rgb3 = b.i;
00290 }

SSP_FORCEINLINE void ssp_convert_3c_3p_epi8_REF ( __m128i *  rgb1,
__m128i *  rgb2,
__m128i *  rgb3 
)

Definition at line 48 of file SSEPlus_convert_REF.h.

00049 {
00050     ssp_m128 RGB1, RGB2, RGB3;
00051     ssp_m128 R,G,B;
00052 
00053     RGB1.i = *rgb1;
00054     RGB2.i = *rgb2;
00055     RGB3.i = *rgb3;
00056     
00057     R.u8[0 ] = RGB1.u8[0 ];  //RED
00058     R.u8[1 ] = RGB1.u8[3 ];
00059     R.u8[2 ] = RGB1.u8[6 ];
00060     R.u8[3 ] = RGB1.u8[9 ];
00061     R.u8[4 ] = RGB1.u8[12];
00062     R.u8[5 ] = RGB1.u8[15];
00063     R.u8[6 ] = RGB2.u8[2 ];
00064     R.u8[7 ] = RGB2.u8[5 ];
00065     R.u8[8 ] = RGB2.u8[8 ];
00066     R.u8[9 ] = RGB2.u8[11];
00067     R.u8[10] = RGB2.u8[14];
00068     R.u8[11] = RGB3.u8[1 ];
00069     R.u8[12] = RGB3.u8[4 ];
00070     R.u8[13] = RGB3.u8[7 ];
00071     R.u8[14] = RGB3.u8[10];
00072     R.u8[15] = RGB3.u8[13];
00073 
00074     G.u8[0 ] = RGB1.u8[1 ];  //GREEN
00075     G.u8[1 ] = RGB1.u8[4 ];
00076     G.u8[2 ] = RGB1.u8[7 ];
00077     G.u8[3 ] = RGB1.u8[10];
00078     G.u8[4 ] = RGB1.u8[13];
00079     G.u8[5 ] = RGB2.u8[0 ];
00080     G.u8[6 ] = RGB2.u8[3 ];
00081     G.u8[7 ] = RGB2.u8[6 ];
00082     G.u8[8 ] = RGB2.u8[9 ];
00083     G.u8[9 ] = RGB2.u8[12];
00084     G.u8[10] = RGB2.u8[15];
00085     G.u8[11] = RGB3.u8[2 ];
00086     G.u8[12] = RGB3.u8[5 ];
00087     G.u8[13] = RGB3.u8[8 ];
00088     G.u8[14] = RGB3.u8[11];
00089     G.u8[15] = RGB3.u8[14];
00090 
00091     B.u8[0 ] = RGB1.u8[2 ];  //BLUE
00092     B.u8[1 ] = RGB1.u8[5 ];
00093     B.u8[2 ] = RGB1.u8[8 ];
00094     B.u8[3 ] = RGB1.u8[11];
00095     B.u8[4 ] = RGB1.u8[14];
00096     B.u8[5 ] = RGB2.u8[1 ];
00097     B.u8[6 ] = RGB2.u8[4 ];
00098     B.u8[7 ] = RGB2.u8[7 ];
00099     B.u8[8 ] = RGB2.u8[10];
00100     B.u8[9 ] = RGB2.u8[13];
00101     B.u8[10] = RGB3.u8[0 ];
00102     B.u8[11] = RGB3.u8[3 ];
00103     B.u8[12] = RGB3.u8[6 ];
00104     B.u8[13] = RGB3.u8[9 ];
00105     B.u8[14] = RGB3.u8[12];
00106     B.u8[15] = RGB3.u8[15];
00107    
00108 
00109     *rgb1 = R.i;
00110     *rgb2 = G.i;
00111     *rgb3 = B.i;   
00112 }

SSP_FORCEINLINE void ssp_convert_3p_3c_epi16_REF ( __m128i *  r,
__m128i *  g,
__m128i *  b 
)

Definition at line 223 of file SSEPlus_convert_REF.h.

00224 {
00225     ssp_m128 rgb1, rgb2, rgb3;
00226     ssp_m128 tr, tg, tb;
00227     tr.i = *r;
00228     tg.i = *g;
00229     tb.i = *b;
00230 
00231     rgb1.s16[0] = tr.s16[0];
00232     rgb1.s16[3] = tr.s16[1];
00233     rgb1.s16[6] = tr.s16[2];
00234     rgb2.s16[1] = tr.s16[3];
00235     rgb2.s16[4] = tr.s16[4];
00236     rgb2.s16[7] = tr.s16[5];
00237     rgb3.s16[2] = tr.s16[6];
00238     rgb3.s16[5] = tr.s16[7];
00239 
00240     rgb1.s16[1] = tg.s16[0];
00241     rgb1.s16[4] = tg.s16[1];
00242     rgb1.s16[7] = tg.s16[2];
00243     rgb2.s16[2] = tg.s16[3];
00244     rgb2.s16[5] = tg.s16[4];
00245     rgb3.s16[0] = tg.s16[5];
00246     rgb3.s16[3] = tg.s16[6];
00247     rgb3.s16[6] = tg.s16[7];
00248 
00249     rgb1.s16[2] = tb.s16[0];
00250     rgb1.s16[5] = tb.s16[1];
00251     rgb2.s16[0] = tb.s16[2];
00252     rgb2.s16[3] = tb.s16[3];
00253     rgb2.s16[6] = tb.s16[4];
00254     rgb3.s16[1] = tb.s16[5];
00255     rgb3.s16[4] = tb.s16[6];
00256     rgb3.s16[7] = tb.s16[7];
00257 
00258         *r = rgb1.i;
00259         *g = rgb2.i;
00260         *b = rgb3.i;
00261 }

SSP_FORCEINLINE void ssp_convert_3p_3c_epi32_REF ( __m128i *  r,
__m128i *  g,
__m128i *  b 
)

Definition at line 293 of file SSEPlus_convert_REF.h.

00294 {
00295     ssp_m128 tr, tg, tb;
00296     ssp_m128 rgb1, rgb2, rgb3;
00297 
00298         tr.i = *r;
00299         tg.i = *g;
00300         tb.i = *b;
00301 
00302     rgb1.s32[0] = tr.s32[0];
00303     rgb1.s32[3] = tr.s32[1];
00304     rgb2.s32[2] = tr.s32[2];
00305     rgb3.s32[1] = tr.s32[3];
00306 
00307     rgb1.s32[1] = tg.s32[0];
00308     rgb2.s32[0] = tg.s32[1];
00309     rgb2.s32[3] = tg.s32[2];
00310     rgb3.s32[2] = tg.s32[3];
00311 
00312     rgb1.s32[2] = tb.s32[0];
00313     rgb2.s32[1] = tb.s32[1];
00314     rgb3.s32[0] = tb.s32[2];
00315     rgb3.s32[3] = tb.s32[3];
00316 
00317         *r = rgb1.i;
00318         *g = rgb2.i;
00319         *b = rgb3.i;
00320 }

SSP_FORCEINLINE void ssp_convert_3p_3c_epi8_REF ( __m128i *  r,
__m128i *  g,
__m128i *  b 
)

Definition at line 116 of file SSEPlus_convert_REF.h.

00117 {
00118     ssp_m128 R,G,B;
00119     ssp_m128 RGB1, RGB2, RGB3;
00120     
00121     R.i = *r;
00122     G.i = *g;
00123     B.i = *b;
00124 
00125     RGB1.u8[0 ] = R.u8[0 ];  
00126     RGB1.u8[1 ] = G.u8[0 ];
00127     RGB1.u8[2 ] = B.u8[0 ];
00128     RGB1.u8[3 ] = R.u8[1 ];
00129     RGB1.u8[4 ] = G.u8[1 ];
00130     RGB1.u8[5 ] = B.u8[1 ];
00131     RGB1.u8[6 ] = R.u8[2 ];
00132     RGB1.u8[7 ] = G.u8[2 ];
00133     RGB1.u8[8 ] = B.u8[2 ];
00134     RGB1.u8[9 ] = R.u8[3 ];
00135     RGB1.u8[10] = G.u8[3 ];
00136     RGB1.u8[11] = B.u8[3 ];
00137     RGB1.u8[12] = R.u8[4 ];
00138     RGB1.u8[13] = G.u8[4 ];
00139     RGB1.u8[14] = B.u8[4 ];
00140     RGB1.u8[15] = R.u8[5 ];
00141 
00142     RGB2.u8[0 ] = G.u8[5 ];  
00143     RGB2.u8[1 ] = B.u8[5 ];
00144     RGB2.u8[2 ] = R.u8[6 ];
00145     RGB2.u8[3 ] = G.u8[6 ];
00146     RGB2.u8[4 ] = B.u8[6 ];
00147     RGB2.u8[5 ] = R.u8[7 ];
00148     RGB2.u8[6 ] = G.u8[7 ];
00149     RGB2.u8[7 ] = B.u8[7 ];
00150     RGB2.u8[8 ] = R.u8[8 ];
00151     RGB2.u8[9 ] = G.u8[8 ];
00152     RGB2.u8[10] = B.u8[8 ];
00153     RGB2.u8[11] = R.u8[9 ];
00154     RGB2.u8[12] = G.u8[9 ];
00155     RGB2.u8[13] = B.u8[9 ];
00156     RGB2.u8[14] = R.u8[10];
00157     RGB2.u8[15] = G.u8[10];
00158 
00159     RGB3.u8[0 ] = B.u8[10];  
00160     RGB3.u8[1 ] = R.u8[11];
00161     RGB3.u8[2 ] = G.u8[11];
00162     RGB3.u8[3 ] = B.u8[11];
00163     RGB3.u8[4 ] = R.u8[12];
00164     RGB3.u8[5 ] = G.u8[12];
00165     RGB3.u8[6 ] = B.u8[12];
00166     RGB3.u8[7 ] = R.u8[13];
00167     RGB3.u8[8 ] = G.u8[13];
00168     RGB3.u8[9 ] = B.u8[13];
00169     RGB3.u8[10] = R.u8[14];
00170     RGB3.u8[11] = G.u8[14];
00171     RGB3.u8[12] = B.u8[14];
00172     RGB3.u8[13] = R.u8[15];
00173     RGB3.u8[14] = G.u8[15];
00174     RGB3.u8[15] = B.u8[15];
00175 
00176     *r = RGB1.i;
00177     *g = RGB2.i;
00178     *b = RGB3.i;
00179 }

SSP_FORCEINLINE void ssp_convert_4c_4p_epi16_REF ( __m128i *  rgba1,
__m128i *  rgba2,
__m128i *  rgba3,
__m128i *  rgba4 
)

Definition at line 406 of file SSEPlus_convert_REF.h.

00407 {
00408         int n;
00409         ssp_m128 trgba1, trgba2, trgba3, trgba4;
00410         ssp_m128 r, g, b, a;
00411 
00412         trgba1.i = *rgba1;
00413         trgba2.i = *rgba2;
00414         trgba3.i = *rgba3;
00415         trgba4.i = *rgba4;
00416 
00417     for( n = 0; n < 2; n++ )
00418     {
00419         r.s16[0+n] = trgba1.s16[4*n];
00420         r.s16[2+n] = trgba2.s16[4*n];
00421         r.s16[4+n] = trgba3.s16[4*n];
00422         r.s16[6+n] = trgba4.s16[4*n];
00423 
00424         g.s16[0+n] = trgba1.s16[4*n+1];
00425         g.s16[2+n] = trgba2.s16[4*n+1];
00426         g.s16[4+n] = trgba3.s16[4*n+1];
00427         g.s16[6+n] = trgba4.s16[4*n+1];
00428 
00429         b.s16[0+n] = trgba1.s16[4*n+2];
00430         b.s16[2+n] = trgba2.s16[4*n+2];
00431         b.s16[4+n] = trgba3.s16[4*n+2];
00432         b.s16[6+n] = trgba4.s16[4*n+2];
00433 
00434         a.s16[0+n] = trgba1.s16[4*n+3];
00435         a.s16[2+n] = trgba2.s16[4*n+3];
00436         a.s16[4+n] = trgba3.s16[4*n+3];
00437         a.s16[6+n] = trgba4.s16[4*n+3];
00438     }
00439 
00440         *rgba1 = r.i;
00441         *rgba2 = g.i;
00442         *rgba3 = b.i;
00443         *rgba4 = a.i;
00444 }

SSP_FORCEINLINE void ssp_convert_4c_4p_epi32_REF ( __m128i *  rgba1,
__m128i *  rgba2,
__m128i *  rgba3,
__m128i *  rgba4 
)

Definition at line 487 of file SSEPlus_convert_REF.h.

00488 {
00489         ssp_m128 trgba1, trgba2, trgba3, trgba4;
00490         ssp_m128 r, g, b, a;
00491 
00492         trgba1.i = *rgba1;
00493         trgba2.i = *rgba2;
00494         trgba3.i = *rgba3;
00495         trgba4.i = *rgba4;
00496 
00497     r.s32[0] = trgba1.s32[0];
00498     r.s32[1] = trgba2.s32[0];
00499     r.s32[2] = trgba3.s32[0];
00500     r.s32[3] = trgba4.s32[0];
00501 
00502     g.s32[0] = trgba1.s32[1];
00503     g.s32[1] = trgba2.s32[1];
00504     g.s32[2] = trgba3.s32[1];
00505     g.s32[3] = trgba4.s32[1];
00506 
00507     b.s32[0] = trgba1.s32[2];
00508     b.s32[1] = trgba2.s32[2];
00509     b.s32[2] = trgba3.s32[2];
00510     b.s32[3] = trgba4.s32[2];
00511 
00512     a.s32[0] = trgba1.s32[3];
00513     a.s32[1] = trgba2.s32[3];
00514     a.s32[2] = trgba3.s32[3];
00515     a.s32[3] = trgba4.s32[3];
00516 
00517         *rgba1 = r.i;
00518         *rgba2 = g.i;
00519         *rgba3 = b.i;
00520         *rgba4 = a.i;
00521 }

SSP_FORCEINLINE void ssp_convert_4c_4p_epi8_REF ( __m128i *  rgba1,
__m128i *  rgba2,
__m128i *  rgba3,
__m128i *  rgba4 
)

Definition at line 324 of file SSEPlus_convert_REF.h.

00325 {
00326         int n;
00327         ssp_m128 trgba1, trgba2, trgba3, trgba4;
00328         ssp_m128 r, g, b, a;
00329 
00330         trgba1.i = *rgba1;
00331         trgba2.i = *rgba2;
00332         trgba3.i = *rgba3;
00333         trgba4.i = *rgba4;
00334 
00335     for( n = 0; n < 4; n++ )
00336     {
00337         r.s8[0+n] = trgba1.s8[4*n];
00338         r.s8[4+n] = trgba2.s8[4*n];
00339         r.s8[8+n] = trgba3.s8[4*n];
00340         r.s8[12+n] = trgba4.s8[4*n];
00341 
00342         g.s8[0+n] = trgba1.s8[4*n+1];
00343         g.s8[4+n] = trgba2.s8[4*n+1];
00344         g.s8[8+n] = trgba3.s8[4*n+1];
00345         g.s8[12+n] = trgba4.s8[4*n+1];
00346 
00347         b.s8[0+n] = trgba1.s8[4*n+2];
00348         b.s8[4+n] = trgba2.s8[4*n+2];
00349         b.s8[8+n] = trgba3.s8[4*n+2];
00350         b.s8[12+n] = trgba4.s8[4*n+2];
00351 
00352         a.s8[0+n] = trgba1.s8[4*n+3];
00353         a.s8[4+n] = trgba2.s8[4*n+3];
00354         a.s8[8+n] = trgba3.s8[4*n+3];
00355         a.s8[12+n] = trgba4.s8[4*n+3];
00356     }
00357 
00358         *rgba1 = r.i;
00359         *rgba2 = g.i;
00360         *rgba3 = b.i;
00361         *rgba4 = a.i;
00362 }

SSP_FORCEINLINE void ssp_convert_4p_4c_epi16_REF ( __m128i *  r,
__m128i *  g,
__m128i *  b,
__m128i *  a 
)

Definition at line 447 of file SSEPlus_convert_REF.h.

00448 {
00449         int n;
00450     ssp_m128 tr, tg, tb, ta;
00451     ssp_m128 rgba1, rgba2, rgba3, rgba4;
00452         tr.i = *r;
00453         tg.i = *g;
00454         tb.i = *b;
00455         ta.i = *a;
00456 
00457     for( n = 0; n < 2; n++ )
00458     {
00459         rgba1.s16[4*n] = tr.s16[0+n];
00460         rgba2.s16[4*n] = tr.s16[2+n];
00461         rgba3.s16[4*n] = tr.s16[4+n];
00462         rgba4.s16[4*n] = tr.s16[6+n];
00463 
00464         rgba1.s16[4*n+1] = tg.s16[0+n];
00465         rgba2.s16[4*n+1] = tg.s16[2+n];
00466         rgba3.s16[4*n+1] = tg.s16[4+n];
00467         rgba4.s16[4*n+1] = tg.s16[6+n];
00468 
00469         rgba1.s16[4*n+2] = tb.s16[0+n];
00470         rgba2.s16[4*n+2] = tb.s16[2+n];
00471         rgba3.s16[4*n+2] = tb.s16[4+n];
00472         rgba4.s16[4*n+2] = tb.s16[6+n];
00473 
00474         rgba1.s16[4*n+3] = ta.s16[0+n];
00475         rgba2.s16[4*n+3] = ta.s16[2+n];
00476         rgba3.s16[4*n+3] = ta.s16[4+n];
00477         rgba4.s16[4*n+3] = ta.s16[6+n];
00478     }
00479 
00480         *r = rgba1.i;
00481         *g = rgba2.i;
00482         *b = rgba3.i;
00483         *a = rgba4.i;
00484 }

SSP_FORCEINLINE void ssp_convert_4p_4c_epi32_REF ( __m128i *  r,
__m128i *  g,
__m128i *  b,
__m128i *  a 
)

Definition at line 524 of file SSEPlus_convert_REF.h.

00525 {
00526     ssp_m128 tr, tg, tb, ta;
00527     ssp_m128 rgba1, rgba2, rgba3, rgba4;
00528         tr.i = *r;
00529         tg.i = *g;
00530         tb.i = *b;
00531         ta.i = *a;
00532 
00533     rgba1.s32[0] = tr.s32[0];
00534     rgba2.s32[0] = tr.s32[1];
00535     rgba3.s32[0] = tr.s32[2];
00536     rgba4.s32[0] = tr.s32[3];
00537 
00538     rgba1.s32[1] = tg.s32[0];
00539     rgba2.s32[1] = tg.s32[1];
00540     rgba3.s32[1] = tg.s32[2];
00541     rgba4.s32[1] = tg.s32[3];
00542 
00543     rgba1.s32[2] = tb.s32[0];
00544     rgba2.s32[2] = tb.s32[1];
00545     rgba3.s32[2] = tb.s32[2];
00546     rgba4.s32[2] = tb.s32[3];
00547 
00548     rgba1.s32[3] = ta.s32[0];
00549     rgba2.s32[3] = ta.s32[1];
00550     rgba3.s32[3] = ta.s32[2];
00551     rgba4.s32[3] = ta.s32[3];
00552 
00553         *r = rgba1.i;
00554         *g = rgba2.i;
00555         *b = rgba3.i;
00556         *a = rgba4.i;
00557 }

SSP_FORCEINLINE void ssp_convert_4p_4c_epi8_REF ( __m128i *  r,
__m128i *  g,
__m128i *  b,
__m128i *  a 
)

Definition at line 366 of file SSEPlus_convert_REF.h.

00367 {
00368         int n;
00369     ssp_m128 tr, tg, tb, ta;
00370     ssp_m128 rgba1, rgba2, rgba3, rgba4;
00371         tr.i = *r;
00372         tg.i = *g;
00373         tb.i = *b;
00374         ta.i = *a;
00375 
00376     for( n = 0; n < 4; n++ )
00377     {
00378         rgba1.s8[4*n] = tr.s8[0+n];
00379         rgba2.s8[4*n] = tr.s8[4+n];
00380         rgba3.s8[4*n] = tr.s8[8+n];
00381         rgba4.s8[4*n] = tr.s8[12+n];
00382 
00383         rgba1.s8[4*n+1] = tg.s8[0+n];
00384         rgba2.s8[4*n+1] = tg.s8[4+n];
00385         rgba3.s8[4*n+1] = tg.s8[8+n];
00386         rgba4.s8[4*n+1] = tg.s8[12+n];
00387 
00388         rgba1.s8[4*n+2] = tb.s8[0+n];
00389         rgba2.s8[4*n+2] = tb.s8[4+n];
00390         rgba3.s8[4*n+2] = tb.s8[8+n];
00391         rgba4.s8[4*n+2] = tb.s8[12+n];
00392 
00393         rgba1.s8[4*n+3] = ta.s8[0+n];
00394         rgba2.s8[4*n+3] = ta.s8[4+n];
00395         rgba3.s8[4*n+3] = ta.s8[8+n];
00396         rgba4.s8[4*n+3] = ta.s8[12+n];
00397     }
00398 
00399         *r = rgba1.i;
00400         *g = rgba2.i;
00401         *b = rgba3.i;
00402         *a = rgba4.i;
00403 }

SSP_FORCEINLINE void ssp_convert_reverse_transpose_REF ( __m128i *  a,
__m128i *  b,
__m128i *  c 
)

Definition at line 19 of file SSEPlus_convert_REF.h.

00020 {
00021     ssp_m128 Ai, Ao, Bi, Bo, Ci, Co;
00022     Ai.i = *a;   
00023     Bi.i = *b;   
00024     Ci.i = *c;   
00025 
00026     Ao.u32[ 0 ] = Ai.u32[ 0 ];
00027     Ao.u32[ 1 ] = Bi.u32[ 0 ];
00028     Ao.u32[ 2 ] = Ci.u32[ 0 ];
00029     Ao.u32[ 3 ] = Ai.u32[ 1 ];
00030 
00031     Bo.u32[ 0 ] = Bi.u32[ 1 ];
00032     Bo.u32[ 1 ] = Ci.u32[ 1 ];
00033     Bo.u32[ 2 ] = Ai.u32[ 2 ];
00034     Bo.u32[ 3 ] = Bi.u32[ 2 ];
00035 
00036     Co.u32[ 0 ] = Ci.u32[ 2 ];
00037     Co.u32[ 1 ] = Ai.u32[ 3 ];
00038     Co.u32[ 2 ] = Bi.u32[ 3 ];
00039     Co.u32[ 3 ] = Ci.u32[ 3 ];
00040 
00041     *a = Ao.i;
00042     *b = Bo.i;
00043     *c = Co.i;
00044 }

SSP_FORCEINLINE __m128i ssp_logical_invert_si128_REF ( __m128i  a  ) 

Definition at line 15 of file SSEPlus_logical_REF.h.

00016 {
00017     ssp_m128 A;
00018     A.i = a;
00019 
00020     A.u32[0] = ~A.u32[0];
00021     A.u32[1] = ~A.u32[1];
00022     A.u32[2] = ~A.u32[2];
00023     A.u32[3] = ~A.u32[3];
00024     return A.i;
00025 }

__m128i ssp_memory_load1_epu8_REF ( unsigned char  a  ) 

Definition at line 15 of file SSEPlus_memory_REF.h.

00016 {
00017     ssp_m128 A;
00018     
00019     A.u8[0] = a;
00020     A.u8[1] = a;
00021     A.u8[2] = a;
00022     A.u8[3] = a;
00023 
00024     A.u32[1] = A.u32[0];
00025     A.u32[2] = A.u32[0];
00026     A.u32[3] = A.u32[0]; 
00027     
00028     return A.i;
00029 }

SSP_FORCEINLINE ssp_f32 ssp_number_changeSNanToQNaN_F32_REF ( ssp_s32 val  ) 

Definition at line 36 of file SSEPlus_number_REF.h.

00036                                                                                  : move into utility collection
00037 {
00038     ssp_f32* retVal = (ssp_f32*)val;
00039     // Check if the value is already a QNaN
00040     if( (*val & 0x00400000) != 0x00400000 )
00041     {
00042         // Check if the value is + or - infinitie
00043         if( (*val | 0x7F800000) != 0x7F800000 )
00044         {
00045             // Convert SNan To QNaN
00046             *retVal = (ssp_f32)( *val | 0x00400000 );
00047         }
00048     }
00049     return *retVal;
00050 }

SSP_FORCEINLINE ssp_f64 ssp_number_changeSNanToQNaN_F64_REF ( ssp_s64 val  ) 

Definition at line 52 of file SSEPlus_number_REF.h.

00052                                                                                  : move into utility collection
00053 {
00054     ssp_f64* retVal = (ssp_f64*)val;
00055     // Check if the value is already a QNaN
00056     if( (*val & 0x0008000000000000ll) != 0x0008000000000000ll )
00057     {
00058         // Check if the value is + or - infinitie
00059         if( (*val | 0x7FF0000000000000ll) != 0x7FF0000000000000ll )
00060         {
00061             // Convert SNan To QNaN
00062             *retVal = (ssp_f64)( *val | 0x0008000000000000ll );
00063         }
00064     }
00065     return *retVal;
00066 }

SSP_FORCEINLINE int ssp_number_isValidNumber_F32_REF ( ssp_s32 val  ) 

Definition at line 15 of file SSEPlus_number_REF.h.

00015                                                                           : move into utility collection
00016 {
00017     // Check for NAN, +infin, or -infin (exponent: 111 1111 1)
00018     // Are the exponent bits all 1's?
00019     if( (*val & 0x7F800000) == 0x7F800000 )
00020     {
00021         return 0;
00022     }
00023     return 1;
00024 }

SSP_FORCEINLINE int ssp_number_isValidNumber_F64_REF ( ssp_s64 val  ) 

Definition at line 25 of file SSEPlus_number_REF.h.

00025                                                                              : move into utility collection
00026 {
00027     // Check for NAN, +infin, or -infin (exponent: 1111 1111)
00028     // Are the exponent bits all 1's?
00029     if( (*val & 0x7FF0000000000000ll) == 0x7FF0000000000000ll )
00030     {
00031         return 0;
00032     }
00033     return 1;
00034 }

SSP_FORCEINLINE __m128i ssp_slli_epi8_REF ( __m128i  a,
const int  b 
)

r_:= a_ << b; (logical left shift)

Definition at line 31 of file SSEPlus_logical_REF.h.

00032 {
00033     int n;
00034     ssp_m128 A;
00035     A.i = a;
00036     for( n = 0; n < 16; n++ )
00037     {
00038         A.u8[n] = A.u8[n] << b;
00039     }
00040     return A.i;
00041 }

SSP_FORCEINLINE __m128i ssp_srli_epi8_REF ( __m128i  a,
const int  b 
)

r_:= a_ >> b; (logical right shift)

Definition at line 46 of file SSEPlus_logical_REF.h.

00047 {                                            //  a = VfVeVdVcVbVaV9V8V7V6V5V4V3V2V1V0
00048     int n;
00049     ssp_m128 A;
00050     A.i = a;
00051     for( n = 0; n < 16; n++ )
00052     {
00053         A.u8[n] = A.u8[n] >> b;
00054     }
00055     return A.i;
00056 }


Generated on Wed May 21 13:44:15 2008 for "SSEPlus" by  doxygen 1.5.4