Wwise SDK 2015.1.9
Version
menu_open
link
include/AK/SoundEngine/Platforms/arm_neon/AkSimdShuffle.h
Go to the documentation of this file.00001 00002 // 00003 // Copyright (c) 2006 Audiokinetic Inc. / All Rights Reserved 00004 // 00006 00009 00010 #ifndef __AK_SIMD_SHUFFLE_H__ 00011 #define __AK_SIMD_SHUFFLE_H__ 00012 00013 namespace _AKSIMD_LOCAL 00014 { 00015 // Same as _mm_shuffle_ps( a, b, _MM_SHUFFLE( z, y, x, w ) ). There is no default implementation 00016 // of this template function. Every required combination of zyxw needs to be explicitely implemented 00017 // below. 00018 template< int zyxw > AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32( const AKSIMD_V4F32& a, const AKSIMD_V4F32& b ); 00019 00020 /* 0 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00021 { 00022 //return akshuffle_xxaa( xyzw, abcd ); 00023 AKSIMD_V2F32 xx = vdup_lane_f32( vget_low_f32( xyzw ), 0 ); 00024 AKSIMD_V2F32 aa = vdup_lane_f32( vget_low_f32( abcd ), 0 ); 00025 AKSIMD_V4F32 xxaa = vcombine_f32( xx, aa ); 00026 return xxaa; 00027 } 00028 /* 1 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yxaa( xyzw, abcd ); } 00029 /* 2 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxaa( xyzw, abcd ); } 00030 /* 3 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxaa( xyzw, abcd ); } 00031 /* 4 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xyaa( xyzw, abcd ); } 00032 /* 5 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yyaa( xyzw, abcd ); } 00033 /* 6 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zyaa( xyzw, abcd ); } 00034 /* 7 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wyaa( xyzw, abcd ); } 00035 /* 8 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xzaa( xyzw, abcd ); } 00036 /* 9 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yzaa( xyzw, abcd ); } 00037 /* 10 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzaa( xyzw, abcd ); } 00038 /* 11 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzaa( xyzw, abcd ); } 00039 /* 12 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xwaa( xyzw, abcd ); } 00040 /* 13 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_ywaa( xyzw, abcd ); } 00041 /* 14 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zwaa( xyzw, abcd ); } 00042 /* 15 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 0, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00043 { 00044 //return akshuffle_wwaa( xyzw, abcd ); 00045 AKSIMD_V2F32 ww = vdup_lane_f32( vget_high_f32( xyzw ), 1 ); 00046 AKSIMD_V2F32 aa = vdup_lane_f32( vget_low_f32( abcd ), 0 ); 00047 AKSIMD_V4F32 wwaa = vcombine_f32( ww, aa ); 00048 return wwaa; 00049 00050 } 00051 /* 16 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxba( xyzw, abcd ); } 00052 /* 17 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00053 { 00054 //return akshuffle_yxba( xyzw, abcd ); 00055 AKSIMD_V2F32 yx = vrev64_f32( vget_low_f32( xyzw ) ); 00056 AKSIMD_V2F32 ba = vrev64_f32( vget_low_f32( abcd ) ); 00057 AKSIMD_V4F32 yxba = vcombine_f32( yx , ba ); 00058 return yxba; 00059 } 00060 /* 18 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxba( xyzw, abcd ); } 00061 /* 19 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxba( xyzw, abcd ); } 00062 /* 20 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xyba( xyzw, abcd ); } 00063 /* 21 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yyba( xyzw, abcd ); } 00064 /* 22 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zyba( xyzw, abcd ); } 00065 /* 23 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wyba( xyzw, abcd ); } 00066 /* 24 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xzba( xyzw, abcd ); } 00067 /* 25 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yzba( xyzw, abcd ); } 00068 /* 26 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzba( xyzw, abcd ); } 00069 /* 27 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzba( xyzw, abcd ); } 00070 /* 28 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xwba( xyzw, abcd ); } 00071 /* 29 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_ywba( xyzw, abcd ); } 00072 /* 30 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00073 { 00074 //return akshuffle_zwba( xyzw, abcd ); 00075 AKSIMD_V2F32 zw = vget_high_f32( xyzw ); 00076 AKSIMD_V2F32 ba = vrev64_f32( vget_low_f32( abcd ) ); 00077 AKSIMD_V4F32 zwba = vcombine_f32( zw , ba ); 00078 return zwba; 00079 } 00080 /* 31 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 1, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwba( xyzw, abcd ); } 00081 /* 32 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxca( xyzw, abcd ); } 00082 /* 33 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yxca( xyzw, abcd ); } 00083 /* 34 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxca( xyzw, abcd ); } 00084 /* 35 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxca( xyzw, abcd ); } 00085 /* 36 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xyca( xyzw, abcd ); } 00086 /* 37 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yyca( xyzw, abcd ); } 00087 /* 38 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zyca( xyzw, abcd ); } 00088 /* 39 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wyca( xyzw, abcd ); } 00089 /* 40 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xzca( xyzw, abcd ); } 00090 /* 41 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yzca( xyzw, abcd ); } 00091 /* 42 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzca( xyzw, abcd ); } 00092 /* 43 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzca( xyzw, abcd ); } 00093 /* 44 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xwca( xyzw, abcd ); } 00094 /* 45 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_ywca( xyzw, abcd ); } 00095 /* 46 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zwca( xyzw, abcd ); } 00096 /* 47 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 2, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwca( xyzw, abcd ); } 00097 /* 48 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxda( xyzw, abcd ); } 00098 /* 49 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yxda( xyzw, abcd ); } 00099 /* 50 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxda( xyzw, abcd ); } 00100 /* 51 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxda( xyzw, abcd ); } 00101 /* 52 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xyda( xyzw, abcd ); } 00102 /* 53 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yyda( xyzw, abcd ); } 00103 /* 54 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00104 { 00105 //return akshuffle_zyda( xyzw, abcd ); 00106 AKSIMD_V4F32 bcda = vextq_f32( abcd, abcd, 1 ); 00107 AKSIMD_V4F32 yzwx = vextq_f32( xyzw, xyzw, 1 ); 00108 AKSIMD_V4F32 zyda = vcombine_f32( vrev64_f32( vget_low_f32( yzwx ) ), vget_high_f32( bcda ) ); 00109 return zyda; 00110 } 00111 /* 55 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wyda( xyzw, abcd ); } 00112 /* 56 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xzda( xyzw, abcd ); } 00113 /* 57 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yzda( xyzw, abcd ); } 00114 /* 58 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzda( xyzw, abcd ); } 00115 /* 59 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzda( xyzw, abcd ); } 00116 /* 60 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xwda( xyzw, abcd ); } 00117 /* 61 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_ywda( xyzw, abcd ); } 00118 /* 62 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zwda( xyzw, abcd ); } 00119 /* 63 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(0, 3, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwda( xyzw, abcd ); } 00120 /* 64 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxab( xyzw, abcd ); } 00121 /* 65 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yxab( xyzw, abcd ); } 00122 /* 66 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxab( xyzw, abcd ); } 00123 /* 67 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxab( xyzw, abcd ); } 00124 /* 68 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00125 { 00126 //return akshuffle_xyab( xyzw, abcd ); 00127 AKSIMD_V4F32 xyab = vcombine_f32( vget_low_f32( xyzw ) , vget_low_f32( abcd ) ); 00128 return xyab; 00129 } 00130 /* 69 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yyab( xyzw, abcd ); } 00131 /* 70 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zyab( xyzw, abcd ); } 00132 /* 71 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wyab( xyzw, abcd ); } 00133 /* 72 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xzab( xyzw, abcd ); } 00134 /* 73 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00135 { 00136 //return akshuffle_yzab( xyzw, abcd ); 00137 AKSIMD_V4F32 yzwx = vextq_f32( xyzw, xyzw, 1 ); 00138 AKSIMD_V2F32 yz = vget_low_f32( yzwx ); 00139 AKSIMD_V2F32 ab = vget_low_f32( abcd ); 00140 AKSIMD_V4F32 yzab = vcombine_f32( yz, ab ); 00141 return yzab; 00142 } 00143 /* 74 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzab( xyzw, abcd ); } 00144 /* 75 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzab( xyzw, abcd ); } 00145 /* 76 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xwab( xyzw, abcd ); } 00146 /* 77 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_ywab( xyzw, abcd ); } 00147 /* 78 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00148 { 00149 //return akshuffle_zwab( xyzw, abcd ); 00150 AKSIMD_V2F32 zw = vget_high_f32( xyzw ); 00151 AKSIMD_V2F32 ab = vget_low_f32( abcd ); 00152 AKSIMD_V4F32 zwab = vcombine_f32( zw, ab ); 00153 return zwab; 00154 } 00155 /* 79 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 0, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwab( xyzw, abcd ); } 00156 /* 80 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxbb( xyzw, abcd ); } 00157 /* 81 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yxbb( xyzw, abcd ); } 00158 /* 82 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxbb( xyzw, abcd ); } 00159 /* 83 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxbb( xyzw, abcd ); } 00160 /* 84 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xybb( xyzw, abcd ); } 00161 /* 85 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00162 { 00163 //return akshuffle_yybb( xyzw, abcd ); 00164 AKSIMD_V2F32 yy = vdup_lane_f32( vget_low_f32( xyzw ), 1 ); 00165 AKSIMD_V2F32 bb = vdup_lane_f32( vget_low_f32( abcd ), 1 ); 00166 AKSIMD_V4F32 yybb = vcombine_f32( yy, bb ); 00167 return yybb; 00168 } 00169 /* 86 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zybb( xyzw, abcd ); } 00170 /* 87 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wybb( xyzw, abcd ); } 00171 /* 88 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xzbb( xyzw, abcd ); } 00172 /* 89 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yzbb( xyzw, abcd ); } 00173 /* 90 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzbb( xyzw, abcd ); } 00174 /* 91 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzbb( xyzw, abcd ); } 00175 /* 92 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xwbb( xyzw, abcd ); } 00176 /* 93 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_ywbb( xyzw, abcd ); } 00177 /* 94 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zwbb( xyzw, abcd ); } 00178 /* 95 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 1, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwbb( xyzw, abcd ); } 00179 /* 96 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxcb( xyzw, abcd ); } 00180 /* 97 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yxcb( xyzw, abcd ); } 00181 /* 98 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxcb( xyzw, abcd ); } 00182 /* 99 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxcb( xyzw, abcd ); } 00183 /* 100 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xycb( xyzw, abcd ); } 00184 /* 101 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yycb( xyzw, abcd ); } 00185 /* 102 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zycb( xyzw, abcd ); } 00186 /* 103 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wycb( xyzw, abcd ); } 00187 /* 104 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xzcb( xyzw, abcd ); } 00188 /* 105 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yzcb( xyzw, abcd ); } 00189 /* 106 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzcb( xyzw, abcd ); } 00190 /* 107 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzcb( xyzw, abcd ); } 00191 /* 108 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xwcb( xyzw, abcd ); } 00192 /* 109 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_ywcb( xyzw, abcd ); } 00193 /* 110 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zwcb( xyzw, abcd ); } 00194 /* 111 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 2, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwcb( xyzw, abcd ); } 00195 /* 112 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxdb( xyzw, abcd ); } 00196 /* 113 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yxdb( xyzw, abcd ); } 00197 /* 114 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00198 { 00199 //return akshuffle_zxdb( xyzw, abcd ); 00200 00201 float32x2x2_t xz_yw = vtrn_f32( vget_low_f32( xyzw ), vget_high_f32( xyzw ) ); 00202 float32x2x2_t ac_bd = vtrn_f32( vget_low_f32( abcd ), vget_high_f32( abcd ) ); 00203 AKSIMD_V4F32 zxdb = vcombine_f32( vrev64_f32( xz_yw.val[0] ), vrev64_f32( ac_bd.val[1] ) ); 00204 00205 return zxdb; 00206 } 00207 /* 115 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxdb( xyzw, abcd ); } 00208 /* 116 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xydb( xyzw, abcd ); } 00209 /* 117 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yydb( xyzw, abcd ); } 00210 /* 118 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zydb( xyzw, abcd ); } 00211 /* 119 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wydb( xyzw, abcd ); } 00212 /* 120 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xzdb( xyzw, abcd ); } 00213 /* 121 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yzdb( xyzw, abcd ); } 00214 /* 122 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzdb( xyzw, abcd ); } 00215 /* 123 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzdb( xyzw, abcd ); } 00216 /* 124 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xwdb( xyzw, abcd ); } 00217 /* 125 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_ywdb( xyzw, abcd ); } 00218 /* 126 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zwdb( xyzw, abcd ); } 00219 /* 127 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(1, 3, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwdb( xyzw, abcd ); } 00220 /* 128 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxac( xyzw, abcd ); } 00221 /* 129 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00222 { 00223 //return akshuffle_yxac( xyzw, abcd ); 00224 AKSIMD_V2F32 ac = vtrn_f32( vget_low_f32( abcd ), vget_high_f32( abcd ) ).val[0]; 00225 AKSIMD_V2F32 yx = vrev64_f32( vget_low_f32( xyzw ) ); 00226 AKSIMD_V4F32 yxac = vcombine_f32( yx, ac ); 00227 return yxac; 00228 } 00229 /* 130 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxac( xyzw, abcd ); } 00230 /* 131 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxac( xyzw, abcd ); } 00231 /* 132 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xyac( xyzw, abcd ); } 00232 /* 133 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yyac( xyzw, abcd ); } 00233 /* 134 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zyac( xyzw, abcd ); } 00234 /* 135 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wyac( xyzw, abcd ); } 00235 /* 136 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00236 { 00237 //return akshuffle_xzac( xyzw, abcd ); 00238 float32x2x2_t xz_yw = vtrn_f32( vget_low_f32( xyzw ), vget_high_f32( xyzw ) ); 00239 float32x2x2_t ac_bd = vtrn_f32( vget_low_f32( abcd ), vget_high_f32( abcd ) ); 00240 AKSIMD_V4F32 xzac = vcombine_f32( xz_yw.val[0], ac_bd.val[0] ); 00241 return xzac; 00242 } 00243 /* 137 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00244 { 00245 //return akshuffle_yzac( xyzw, abcd ); 00246 AKSIMD_V4F32 yzwx = vextq_f32( xyzw, xyzw, 1 ); 00247 AKSIMD_V2F32 yz = vget_low_f32( yzwx ); 00248 float32x2x2_t ac_bd = vtrn_f32( vget_low_f32( abcd ), vget_high_f32( abcd ) ); 00249 AKSIMD_V4F32 yzac = vcombine_f32( yz, ac_bd.val[0] ); 00250 return yzac; 00251 } 00252 /* 138 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzac( xyzw, abcd ); } 00253 /* 139 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzac( xyzw, abcd ); } 00254 /* 140 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00255 { 00256 //return akshuffle_xwac( xyzw, abcd ); 00257 AKSIMD_V2F32 xw = vrev64_f32( vext_f32( vget_high_f32( xyzw ) , vget_low_f32( xyzw ) , 1 ) ); 00258 float32x2x2_t ac_bd = vtrn_f32( vget_low_f32( abcd ), vget_high_f32( abcd ) ); 00259 AKSIMD_V4F32 xwac = vcombine_f32( xw, ac_bd.val[0] );; 00260 return xwac; 00261 } 00262 /* 141 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00263 { 00264 //return akshuffle_ywac( xyzw, abcd ); 00265 float32x2x2_t xz_yw = vtrn_f32( vget_low_f32( xyzw ), vget_high_f32( xyzw ) ); 00266 float32x2x2_t ac_bd = vtrn_f32( vget_low_f32( abcd ), vget_high_f32( abcd ) ); 00267 AKSIMD_V4F32 ywac = vcombine_f32( xz_yw.val[1], ac_bd.val[0] ); 00268 return ywac; 00269 } 00270 /* 142 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zwac( xyzw, abcd ); } 00271 /* 143 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 0, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwac( xyzw, abcd ); } 00272 /* 144 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxbc( xyzw, abcd ); } 00273 /* 145 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yxbc( xyzw, abcd ); } 00274 /* 146 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxbc( xyzw, abcd ); } 00275 /* 147 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxbc( xyzw, abcd ); } 00276 /* 148 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xybc( xyzw, abcd ); } 00277 /* 149 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yybc( xyzw, abcd ); } 00278 /* 150 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zybc( xyzw, abcd ); } 00279 /* 151 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wybc( xyzw, abcd ); } 00280 /* 152 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xzbc( xyzw, abcd ); } 00281 /* 153 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00282 { 00283 //return akshuffle_yzbc( xyzw, abcd ); 00284 AKSIMD_V4F32 yzwx = vextq_f32( xyzw, xyzw, 1 ); 00285 AKSIMD_V2F32 yz = vget_low_f32( yzwx ); 00286 AKSIMD_V2F32 bc = vext_f32( vget_low_f32( abcd ) , vget_high_f32( abcd ) , 1 ); 00287 AKSIMD_V4F32 yzbc = vcombine_f32( yz , bc ); 00288 return yzbc; 00289 } 00290 /* 154 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzbc( xyzw, abcd ); } 00291 /* 155 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzbc( xyzw, abcd ); } 00292 /* 156 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00293 { 00294 //return akshuffle_xwbc( xyzw, abcd ); 00295 AKSIMD_V2F32 xw = vrev64_f32( vext_f32( vget_high_f32( xyzw ) , vget_low_f32( xyzw ) , 1 ) ); 00296 AKSIMD_V2F32 bc = vext_f32( vget_low_f32( abcd ) , vget_high_f32( abcd ) , 1 ); 00297 AKSIMD_V4F32 xwbc = vcombine_f32( xw, bc ); 00298 return xwbc; 00299 } 00300 /* 157 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00301 { 00302 //return akshuffle_ywbc( xyzw, abcd ); 00303 AKSIMD_V2F32 yw = vext_f32( vget_low_f32( xyzw ) , vrev64_f32( vget_high_f32( xyzw ) ), 1 ); 00304 AKSIMD_V2F32 bc = vext_f32( vget_low_f32( abcd ) , vget_high_f32( abcd ) , 1 ); 00305 AKSIMD_V4F32 ywbc = vcombine_f32( yw, bc ); 00306 return ywbc; 00307 } 00308 /* 158 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zwbc( xyzw, abcd ); } 00309 /* 159 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 1, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwbc( xyzw, abcd ); } 00310 /* 160 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00311 { 00312 AKSIMD_V2F32 xx = vdup_lane_f32( vget_low_f32( xyzw ), 0 ); 00313 AKSIMD_V2F32 cc = vdup_lane_f32( vget_high_f32( abcd ), 0 ); 00314 AKSIMD_V4F32 xxcc = vcombine_f32( xx, cc ); 00315 return xxcc; 00316 } 00317 /* 161 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yxcc( xyzw, abcd ); } 00318 /* 162 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxcc( xyzw, abcd ); } 00319 /* 163 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxcc( xyzw, abcd ); } 00320 /* 164 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xycc( xyzw, abcd ); } 00321 /* 165 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yycc( xyzw, abcd ); } 00322 /* 166 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zycc( xyzw, abcd ); } 00323 /* 167 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wycc( xyzw, abcd ); } 00324 /* 168 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xzcc( xyzw, abcd ); } 00325 /* 169 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yzcc( xyzw, abcd ); } 00326 /* 170 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzcc( xyzw, abcd ); } 00327 /* 171 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzcc( xyzw, abcd ); } 00328 /* 172 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xwcc( xyzw, abcd ); } 00329 /* 173 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_ywcc( xyzw, abcd ); } 00330 /* 174 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zwcc( xyzw, abcd ); } 00331 /* 175 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 2, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwcc( xyzw, abcd ); } 00332 /* 176 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxdc( xyzw, abcd ); } 00333 /* 177 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00334 { 00335 AKSIMD_V2F32 yx = vrev64_f32( vget_low_f32( xyzw ) ); 00336 AKSIMD_V2F32 dc = vrev64_f32( vget_high_f32( abcd ) ); 00337 AKSIMD_V4F32 yxdc = vcombine_f32( yx, dc ); 00338 return yxdc; 00339 } 00340 /* 178 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxdc( xyzw, abcd ); } 00341 /* 179 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxdc( xyzw, abcd ); } 00342 /* 180 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xydc( xyzw, abcd ); } 00343 /* 181 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yydc( xyzw, abcd ); } 00344 /* 182 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zydc( xyzw, abcd ); } 00345 /* 183 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wydc( xyzw, abcd ); } 00346 /* 184 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xzdc( xyzw, abcd ); } 00347 /* 185 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yzdc( xyzw, abcd ); } 00348 /* 186 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzdc( xyzw, abcd ); } 00349 /* 187 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00350 { 00351 //return akshuffle_wzdc( xyzw, abcd ); 00352 AKSIMD_V2F32 wz = vrev64_f32( vget_high_f32( xyzw ) ); 00353 AKSIMD_V2F32 dc = vrev64_f32( vget_high_f32( abcd ) ); 00354 AKSIMD_V4F32 wzdc = vcombine_f32( wz , dc ); 00355 return wzdc; 00356 } 00357 /* 188 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xwdc( xyzw, abcd ); } 00358 /* 189 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_ywdc( xyzw, abcd ); } 00359 /* 190 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zwdc( xyzw, abcd ); } 00360 /* 191 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(2, 3, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwdc( xyzw, abcd ); } 00361 /* 192 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxad( xyzw, abcd ); } 00362 /* 193 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yxad( xyzw, abcd ); } 00363 /* 194 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxad( xyzw, abcd ); } 00364 /* 195 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxad( xyzw, abcd ); } 00365 /* 196 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xyad( xyzw, abcd ); } 00366 /* 197 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yyad( xyzw, abcd ); } 00367 /* 198 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zyad( xyzw, abcd ); } 00368 /* 199 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wyad( xyzw, abcd ); } 00369 /* 200 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00370 { 00371 //return akshuffle_xzad( xyzw, abcd ); 00372 AKSIMD_V2F32 xz = vext_f32( vrev64_f32( vget_low_f32( xyzw ) ), vget_high_f32( xyzw ) , 1 ); 00373 AKSIMD_V2F32 ad = vrev64_f32( vext_f32( vget_high_f32( abcd ) , vget_low_f32( abcd ) , 1 ) ); 00374 AKSIMD_V4F32 xzad = vcombine_f32( xz , ad ); 00375 return xzad; 00376 } 00377 /* 201 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00378 { 00379 //return akshuffle_yzad( xyzw, abcd ); 00380 AKSIMD_V4F32 yzwx = vextq_f32( xyzw, xyzw, 1 ); 00381 AKSIMD_V2F32 yz = vget_low_f32( yzwx ); 00382 AKSIMD_V2F32 ad = vrev64_f32( vext_f32( vget_high_f32( abcd ) , vget_low_f32( abcd ) , 1 ) ); 00383 AKSIMD_V4F32 yzad = vcombine_f32( yz , ad ); 00384 return yzad; 00385 } 00386 /* 202 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzad( xyzw, abcd ); } 00387 /* 203 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzad( xyzw, abcd ); } 00388 /* 204 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00389 { 00390 //return akshuffle_xwad( xyzw, abcd ); 00391 AKSIMD_V2F32 xw = vrev64_f32( vext_f32( vget_high_f32( xyzw ) , vget_low_f32( xyzw ) , 1 ) ); 00392 AKSIMD_V2F32 ad = vrev64_f32( vext_f32( vget_high_f32( abcd ) , vget_low_f32( abcd ) , 1 ) ); 00393 AKSIMD_V4F32 xwad = vcombine_f32( xw, ad ); 00394 return xwad; 00395 } 00396 /* 205 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_ywad( xyzw, abcd ); } 00397 /* 206 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zwad( xyzw, abcd ); } 00398 /* 207 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 0, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwad( xyzw, abcd ); } 00399 /* 208 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxbd( xyzw, abcd ); } 00400 /* 209 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yxbd( xyzw, abcd ); } 00401 /* 210 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxbd( xyzw, abcd ); } 00402 /* 211 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxbd( xyzw, abcd ); } 00403 /* 212 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xybd( xyzw, abcd ); } 00404 /* 213 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yybd( xyzw, abcd ); } 00405 /* 214 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zybd( xyzw, abcd ); } 00406 /* 215 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wybd( xyzw, abcd ); } 00407 /* 216 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00408 { 00409 //return akshuffle_xzbd( xyzw, abcd ); 00410 float32x2x2_t xz_yw = vtrn_f32( vget_low_f32( xyzw ), vget_high_f32( xyzw ) ); 00411 float32x2x2_t ac_bd = vtrn_f32( vget_low_f32( abcd ), vget_high_f32( abcd ) ); 00412 AKSIMD_V4F32 xzbd = vcombine_f32( xz_yw.val[0], ac_bd.val[1] ); 00413 return xzbd; 00414 } 00415 /* 217 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00416 { 00417 //return akshuffle_yzbd( xyzw, abcd ); 00418 AKSIMD_V4F32 yzwx = vextq_f32( xyzw, xyzw, 1 ); 00419 AKSIMD_V2F32 yz = vget_low_f32( yzwx ); 00420 float32x2x2_t ac_bd = vtrn_f32( vget_low_f32( abcd ), vget_high_f32( abcd ) ); 00421 AKSIMD_V4F32 yzbd = vcombine_f32( yz, ac_bd.val[1] ); 00422 return yzbd; 00423 } 00424 /* 218 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzbd( xyzw, abcd ); } 00425 /* 219 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzbd( xyzw, abcd ); } 00426 /* 220 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00427 { 00428 //return akshuffle_xwbd( xyzw, abcd ); 00429 AKSIMD_V2F32 xw = vrev64_f32( vext_f32( vget_high_f32( xyzw ) , vget_low_f32( xyzw ) , 1 ) ); 00430 AKSIMD_V2F32 bd = vext_f32( vget_low_f32( abcd ) , vrev64_f32( vget_high_f32( abcd ) ), 1 ); 00431 00432 AKSIMD_V4F32 xwbd = vcombine_f32( xw, bd ); 00433 return xwbd; 00434 } 00435 /* 221 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00436 { 00437 //return akshuffle_ywbd( xyzw, abcd ); 00438 float32x2x2_t xz_yw = vtrn_f32( vget_low_f32( xyzw ), vget_high_f32( xyzw ) ); 00439 float32x2x2_t ac_bd = vtrn_f32( vget_low_f32( abcd ), vget_high_f32( abcd ) ); 00440 AKSIMD_V4F32 ywbd = vcombine_f32( xz_yw.val[1], ac_bd.val[1] ); 00441 return ywbd; 00442 } 00443 /* 222 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zwbd( xyzw, abcd ); } 00444 /* 223 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 1, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwbd( xyzw, abcd ); } 00445 /* 224 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxcd( xyzw, abcd ); } 00446 /* 225 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yxcd( xyzw, abcd ); } 00447 /* 226 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxcd( xyzw, abcd ); } 00448 /* 227 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxcd( xyzw, abcd ); } 00449 /* 228 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00450 { 00451 //return akshuffle_xycd( xyzw, abcd ); 00452 AKSIMD_V2F32 xy = vget_low_f32( xyzw ); 00453 AKSIMD_V2F32 cd = vget_high_f32( abcd ); 00454 return vcombine_f32( xy, cd ); 00455 } 00456 /* 229 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yycd( xyzw, abcd ); } 00457 /* 230 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zycd( xyzw, abcd ); } 00458 /* 231 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wycd( xyzw, abcd ); } 00459 /* 232 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xzcd( xyzw, abcd ); } 00460 /* 233 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yzcd( xyzw, abcd ); } 00461 /* 234 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzcd( xyzw, abcd ); } 00462 /* 235 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzcd( xyzw, abcd ); } 00463 /* 236 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xwcd( xyzw, abcd ); } 00464 /* 237 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_ywcd( xyzw, abcd ); } 00465 /* 238 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00466 { 00467 //return akshuffle_zwcd( xyzw, abcd ); 00468 AKSIMD_V2F32 zw = vget_high_f32( xyzw ); 00469 AKSIMD_V2F32 cd = vget_high_f32( abcd ); 00470 AKSIMD_V4F32 zwcd = vcombine_f32( zw , cd ); 00471 return zwcd; 00472 } 00473 /* 239 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 2, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wwcd( xyzw, abcd ); } 00474 /* 240 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 0, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xxdd( xyzw, abcd ); } 00475 /* 241 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 0, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yxdd( xyzw, abcd ); } 00476 /* 242 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 0, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zxdd( xyzw, abcd ); } 00477 /* 243 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 0, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wxdd( xyzw, abcd ); } 00478 /* 244 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 1, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xydd( xyzw, abcd ); } 00479 /* 245 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 1, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00480 { 00481 AKSIMD_V2F32 yy = vdup_lane_f32( vget_low_f32( xyzw ), 1 ); 00482 AKSIMD_V2F32 dd = vdup_lane_f32( vget_high_f32( abcd ), 1 ); 00483 AKSIMD_V4F32 yydd = vcombine_f32( yy, dd ); 00484 return yydd; 00485 } 00486 /* 246 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 1, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zydd( xyzw, abcd ); } 00487 /* 247 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 1, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wydd( xyzw, abcd ); } 00488 /* 248 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 2, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xzdd( xyzw, abcd ); } 00489 /* 249 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 2, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_yzdd( xyzw, abcd ); } 00490 /* 250 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 2, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zzdd( xyzw, abcd ); } 00491 /* 251 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 2, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_wzdd( xyzw, abcd ); } 00492 /* 252 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 3, 0)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_xwdd( xyzw, abcd ); } 00493 /* 253 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 3, 1)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_ywdd( xyzw, abcd ); } 00494 /* 254 */ //template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 3, 2)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) { return akshuffle_zwdd( xyzw, abcd ); } 00495 /* 255 */ template<> AkForceInline AKSIMD_V4F32 SHUFFLE_V4F32<AKSIMD_SHUFFLE(3, 3, 3, 3)>( const AKSIMD_V4F32& xyzw, const AKSIMD_V4F32& abcd ) 00496 { 00497 //return akshuffle_wwdd( xyzw, abcd ); 00498 AKSIMD_V2F32 ww = vdup_lane_f32( vget_high_f32( xyzw ), 1 ); 00499 AKSIMD_V2F32 dd = vdup_lane_f32( vget_high_f32( abcd ), 1 ); 00500 AKSIMD_V4F32 wwdd = vcombine_f32( ww, dd ); 00501 return wwdd; 00502 } 00503 } 00504 00505 #endif // __AK_SIMD_SHUFFLE_H__
Cette page a-t-elle été utile ?
Besoin d'aide ?
Des questions ? Des problèmes ? Besoin de plus d'informations ? Contactez-nous, nous pouvons vous aider !
Visitez notre page d'AideDécrivez-nous de votre projet. Nous sommes là pour vous aider.
Enregistrez votre projet et nous vous aiderons à démarrer sans aucune obligation !
Partir du bon pied avec Wwise