2 Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.
5 Redistribution and use in source and binary forms,
6 with or without modification, are permitted provided that the
7 following conditions are met:
8 * Redistributions of source code must retain the above copyright
9 notice, this list of conditions and the following disclaimer.
10 * Redistributions in binary form must reproduce the above copyright
11 notice, this list of conditions and the following disclaimer in the
12 documentation and/or other materials provided with the distribution.
13 * Neither the name of the Sony Computer Entertainment Inc nor the names
14 of its contributors may be used to endorse or promote products derived
15 from this software without specific prior written permission.
17 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 POSSIBILITY OF SUCH DAMAGE.
30 #ifndef _VECTORMATH_VEC_SOA_V_C_H
31 #define _VECTORMATH_VEC_SOA_V_C_H
34 #endif /* __cplusplus */
36 /*-----------------------------------------------------------------------------
38 * for shuffles, words are labeled [x,y,z,w] [a,b,c,d]
40 #define _VECTORMATH_SHUF_X 0x00010203
41 #define _VECTORMATH_SHUF_Y 0x04050607
42 #define _VECTORMATH_SHUF_Z 0x08090a0b
43 #define _VECTORMATH_SHUF_W 0x0c0d0e0f
44 #define _VECTORMATH_SHUF_A 0x10111213
45 #define _VECTORMATH_SHUF_B 0x14151617
46 #define _VECTORMATH_SHUF_C 0x18191a1b
47 #define _VECTORMATH_SHUF_D 0x1c1d1e1f
48 #define _VECTORMATH_SHUF_0 0x80808080
49 #define _VECTORMATH_SHUF_XAYB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B })
50 #define _VECTORMATH_SHUF_ZCWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D })
51 #define _VECTORMATH_SHUF_ZBW0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_0 })
52 #define _VECTORMATH_SHUF_XCY0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_0 })
53 #define _VECTORMATH_SHUF_ZDW0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_0 })
54 #define _VECTORMATH_SHUF_XAZC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C })
55 #define _VECTORMATH_SHUF_ZDXB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_B })
56 #define _VECTORMATH_SHUF_YBWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D })
57 #define _VECTORMATH_SHUF_XDZB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B })
58 #define _VECTORMATH_SHUF_YAWC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_C })
59 #define _VECTORMATH_SHUF_ZBXD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_D })
60 #define _VECTORMATH_SHUF_XYCD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_D })
61 #define _VECTORMATH_SLERP_TOL 0.999f
63 /*-----------------------------------------------------------------------------
66 #ifndef _VECTORMATH_INTERNAL_FUNCTIONS
67 #define _VECTORMATH_INTERNAL_FUNCTIONS
71 static inline VmathSoaVector3 vmathSoaV3MakeFromElems_V( vec_float4 _x, vec_float4 _y, vec_float4 _z )
73 VmathSoaVector3 result;
74 vmathSoaV3MakeFromElems(&result, _x, _y, _z);
78 static inline VmathSoaVector3 vmathSoaV3MakeFromP3_V( VmathSoaPoint3 pnt )
80 VmathSoaVector3 result;
81 vmathSoaV3MakeFromP3(&result, &pnt);
85 static inline VmathSoaVector3 vmathSoaV3MakeFromScalar_V( vec_float4 scalar )
87 VmathSoaVector3 result;
88 vmathSoaV3MakeFromScalar(&result, scalar);
92 static inline VmathSoaVector3 vmathSoaV3MakeFromAos_V( VmathVector3 vec )
94 VmathSoaVector3 result;
95 vmathSoaV3MakeFromAos(&result, &vec);
99 static inline VmathSoaVector3 vmathSoaV3MakeFrom4Aos_V( VmathVector3 vec0, VmathVector3 vec1, VmathVector3 vec2, VmathVector3 vec3 )
101 VmathSoaVector3 result;
102 vmathSoaV3MakeFrom4Aos(&result, &vec0, &vec1, &vec2, &vec3);
106 static inline VmathSoaVector3 vmathSoaV3MakeXAxis_V( )
108 VmathSoaVector3 result;
109 vmathSoaV3MakeXAxis(&result);
113 static inline VmathSoaVector3 vmathSoaV3MakeYAxis_V( )
115 VmathSoaVector3 result;
116 vmathSoaV3MakeYAxis(&result);
120 static inline VmathSoaVector3 vmathSoaV3MakeZAxis_V( )
122 VmathSoaVector3 result;
123 vmathSoaV3MakeZAxis(&result);
127 static inline VmathSoaVector3 vmathSoaV3Lerp_V( vec_float4 t, VmathSoaVector3 vec0, VmathSoaVector3 vec1 )
129 VmathSoaVector3 result;
130 vmathSoaV3Lerp(&result, t, &vec0, &vec1);
134 static inline VmathSoaVector3 vmathSoaV3Slerp_V( vec_float4 t, VmathSoaVector3 unitVec0, VmathSoaVector3 unitVec1 )
136 VmathSoaVector3 result;
137 vmathSoaV3Slerp(&result, t, &unitVec0, &unitVec1);
141 static inline void vmathSoaV3Get4Aos_V( VmathSoaVector3 vec, VmathVector3 *result0, VmathVector3 *result1, VmathVector3 *result2, VmathVector3 *result3 )
143 vmathSoaV3Get4Aos(&vec, result0, result1, result2, result3);
146 static inline void vmathSoaV3LoadXYZArray_V( VmathSoaVector3 *vec, const vec_float4 *threeQuads )
148 vmathSoaV3LoadXYZArray(vec, threeQuads);
151 static inline void vmathSoaV3StoreXYZArray_V( VmathSoaVector3 vec, vec_float4 *threeQuads )
153 vmathSoaV3StoreXYZArray(&vec, threeQuads);
156 static inline void vmathSoaV3StoreHalfFloats_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1, vec_ushort8 *threeQuads )
158 vmathSoaV3StoreHalfFloats(&vec0, &vec1, threeQuads);
161 static inline void vmathSoaV3SetX_V( VmathSoaVector3 *result, vec_float4 _x )
163 vmathSoaV3SetX(result, _x);
166 static inline vec_float4 vmathSoaV3GetX_V( VmathSoaVector3 vec )
168 return vmathSoaV3GetX(&vec);
171 static inline void vmathSoaV3SetY_V( VmathSoaVector3 *result, vec_float4 _y )
173 vmathSoaV3SetY(result, _y);
176 static inline vec_float4 vmathSoaV3GetY_V( VmathSoaVector3 vec )
178 return vmathSoaV3GetY(&vec);
181 static inline void vmathSoaV3SetZ_V( VmathSoaVector3 *result, vec_float4 _z )
183 vmathSoaV3SetZ(result, _z);
186 static inline vec_float4 vmathSoaV3GetZ_V( VmathSoaVector3 vec )
188 return vmathSoaV3GetZ(&vec);
191 static inline void vmathSoaV3SetElem_V( VmathSoaVector3 *result, int idx, vec_float4 value )
193 vmathSoaV3SetElem(result, idx, value);
196 static inline vec_float4 vmathSoaV3GetElem_V( VmathSoaVector3 vec, int idx )
198 return vmathSoaV3GetElem(&vec, idx);
201 static inline VmathSoaVector3 vmathSoaV3Add_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 )
203 VmathSoaVector3 result;
204 vmathSoaV3Add(&result, &vec0, &vec1);
208 static inline VmathSoaVector3 vmathSoaV3Sub_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 )
210 VmathSoaVector3 result;
211 vmathSoaV3Sub(&result, &vec0, &vec1);
215 static inline VmathSoaPoint3 vmathSoaV3AddP3_V( VmathSoaVector3 vec, VmathSoaPoint3 pnt1 )
217 VmathSoaPoint3 result;
218 vmathSoaV3AddP3(&result, &vec, &pnt1);
222 static inline VmathSoaVector3 vmathSoaV3ScalarMul_V( VmathSoaVector3 vec, vec_float4 scalar )
224 VmathSoaVector3 result;
225 vmathSoaV3ScalarMul(&result, &vec, scalar);
229 static inline VmathSoaVector3 vmathSoaV3ScalarDiv_V( VmathSoaVector3 vec, vec_float4 scalar )
231 VmathSoaVector3 result;
232 vmathSoaV3ScalarDiv(&result, &vec, scalar);
236 static inline VmathSoaVector3 vmathSoaV3Neg_V( VmathSoaVector3 vec )
238 VmathSoaVector3 result;
239 vmathSoaV3Neg(&result, &vec);
243 static inline VmathSoaVector3 vmathSoaV3MulPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 )
245 VmathSoaVector3 result;
246 vmathSoaV3MulPerElem(&result, &vec0, &vec1);
250 static inline VmathSoaVector3 vmathSoaV3DivPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 )
252 VmathSoaVector3 result;
253 vmathSoaV3DivPerElem(&result, &vec0, &vec1);
257 static inline VmathSoaVector3 vmathSoaV3RecipPerElem_V( VmathSoaVector3 vec )
259 VmathSoaVector3 result;
260 vmathSoaV3RecipPerElem(&result, &vec);
264 static inline VmathSoaVector3 vmathSoaV3SqrtPerElem_V( VmathSoaVector3 vec )
266 VmathSoaVector3 result;
267 vmathSoaV3SqrtPerElem(&result, &vec);
271 static inline VmathSoaVector3 vmathSoaV3RsqrtPerElem_V( VmathSoaVector3 vec )
273 VmathSoaVector3 result;
274 vmathSoaV3RsqrtPerElem(&result, &vec);
278 static inline VmathSoaVector3 vmathSoaV3AbsPerElem_V( VmathSoaVector3 vec )
280 VmathSoaVector3 result;
281 vmathSoaV3AbsPerElem(&result, &vec);
285 static inline VmathSoaVector3 vmathSoaV3CopySignPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 )
287 VmathSoaVector3 result;
288 vmathSoaV3CopySignPerElem(&result, &vec0, &vec1);
292 static inline VmathSoaVector3 vmathSoaV3MaxPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 )
294 VmathSoaVector3 result;
295 vmathSoaV3MaxPerElem(&result, &vec0, &vec1);
299 static inline vec_float4 vmathSoaV3MaxElem_V( VmathSoaVector3 vec )
301 return vmathSoaV3MaxElem(&vec);
304 static inline VmathSoaVector3 vmathSoaV3MinPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 )
306 VmathSoaVector3 result;
307 vmathSoaV3MinPerElem(&result, &vec0, &vec1);
311 static inline vec_float4 vmathSoaV3MinElem_V( VmathSoaVector3 vec )
313 return vmathSoaV3MinElem(&vec);
316 static inline vec_float4 vmathSoaV3Sum_V( VmathSoaVector3 vec )
318 return vmathSoaV3Sum(&vec);
321 static inline vec_float4 vmathSoaV3Dot_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 )
323 return vmathSoaV3Dot(&vec0, &vec1);
326 static inline vec_float4 vmathSoaV3LengthSqr_V( VmathSoaVector3 vec )
328 return vmathSoaV3LengthSqr(&vec);
331 static inline vec_float4 vmathSoaV3Length_V( VmathSoaVector3 vec )
333 return vmathSoaV3Length(&vec);
336 static inline VmathSoaVector3 vmathSoaV3Normalize_V( VmathSoaVector3 vec )
338 VmathSoaVector3 result;
339 vmathSoaV3Normalize(&result, &vec);
343 static inline VmathSoaVector3 vmathSoaV3Cross_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 )
345 VmathSoaVector3 result;
346 vmathSoaV3Cross(&result, &vec0, &vec1);
350 static inline VmathSoaVector3 vmathSoaV3Select_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1, vec_uint4 select1 )
352 VmathSoaVector3 result;
353 vmathSoaV3Select(&result, &vec0, &vec1, select1);
357 #ifdef _VECTORMATH_DEBUG
359 static inline void vmathSoaV3Print_V( VmathSoaVector3 vec )
361 vmathSoaV3Print(&vec);
364 static inline void vmathSoaV3Prints_V( VmathSoaVector3 vec, const char *name )
366 vmathSoaV3Prints(&vec, name);
371 static inline VmathSoaVector4 vmathSoaV4MakeFromElems_V( vec_float4 _x, vec_float4 _y, vec_float4 _z, vec_float4 _w )
373 VmathSoaVector4 result;
374 vmathSoaV4MakeFromElems(&result, _x, _y, _z, _w);
378 static inline VmathSoaVector4 vmathSoaV4MakeFromV3Scalar_V( VmathSoaVector3 xyz, vec_float4 _w )
380 VmathSoaVector4 result;
381 vmathSoaV4MakeFromV3Scalar(&result, &xyz, _w);
385 static inline VmathSoaVector4 vmathSoaV4MakeFromV3_V( VmathSoaVector3 vec )
387 VmathSoaVector4 result;
388 vmathSoaV4MakeFromV3(&result, &vec);
392 static inline VmathSoaVector4 vmathSoaV4MakeFromP3_V( VmathSoaPoint3 pnt )
394 VmathSoaVector4 result;
395 vmathSoaV4MakeFromP3(&result, &pnt);
399 static inline VmathSoaVector4 vmathSoaV4MakeFromQ_V( VmathSoaQuat quat )
401 VmathSoaVector4 result;
402 vmathSoaV4MakeFromQ(&result, &quat);
406 static inline VmathSoaVector4 vmathSoaV4MakeFromScalar_V( vec_float4 scalar )
408 VmathSoaVector4 result;
409 vmathSoaV4MakeFromScalar(&result, scalar);
413 static inline VmathSoaVector4 vmathSoaV4MakeFromAos_V( VmathVector4 vec )
415 VmathSoaVector4 result;
416 vmathSoaV4MakeFromAos(&result, &vec);
420 static inline VmathSoaVector4 vmathSoaV4MakeFrom4Aos_V( VmathVector4 vec0, VmathVector4 vec1, VmathVector4 vec2, VmathVector4 vec3 )
422 VmathSoaVector4 result;
423 vmathSoaV4MakeFrom4Aos(&result, &vec0, &vec1, &vec2, &vec3);
427 static inline VmathSoaVector4 vmathSoaV4MakeXAxis_V( )
429 VmathSoaVector4 result;
430 vmathSoaV4MakeXAxis(&result);
434 static inline VmathSoaVector4 vmathSoaV4MakeYAxis_V( )
436 VmathSoaVector4 result;
437 vmathSoaV4MakeYAxis(&result);
441 static inline VmathSoaVector4 vmathSoaV4MakeZAxis_V( )
443 VmathSoaVector4 result;
444 vmathSoaV4MakeZAxis(&result);
448 static inline VmathSoaVector4 vmathSoaV4MakeWAxis_V( )
450 VmathSoaVector4 result;
451 vmathSoaV4MakeWAxis(&result);
455 static inline VmathSoaVector4 vmathSoaV4Lerp_V( vec_float4 t, VmathSoaVector4 vec0, VmathSoaVector4 vec1 )
457 VmathSoaVector4 result;
458 vmathSoaV4Lerp(&result, t, &vec0, &vec1);
462 static inline VmathSoaVector4 vmathSoaV4Slerp_V( vec_float4 t, VmathSoaVector4 unitVec0, VmathSoaVector4 unitVec1 )
464 VmathSoaVector4 result;
465 vmathSoaV4Slerp(&result, t, &unitVec0, &unitVec1);
469 static inline void vmathSoaV4Get4Aos_V( VmathSoaVector4 vec, VmathVector4 *result0, VmathVector4 *result1, VmathVector4 *result2, VmathVector4 *result3 )
471 vmathSoaV4Get4Aos(&vec, result0, result1, result2, result3);
474 static inline void vmathSoaV4StoreHalfFloats_V( VmathSoaVector4 vec, vec_ushort8 *twoQuads )
476 vmathSoaV4StoreHalfFloats(&vec, twoQuads);
479 static inline void vmathSoaV4SetXYZ_V( VmathSoaVector4 *result, VmathSoaVector3 vec )
481 vmathSoaV4SetXYZ(result, &vec);
484 static inline VmathSoaVector3 vmathSoaV4GetXYZ_V( VmathSoaVector4 vec )
486 VmathSoaVector3 result;
487 vmathSoaV4GetXYZ(&result, &vec);
491 static inline void vmathSoaV4SetX_V( VmathSoaVector4 *result, vec_float4 _x )
493 vmathSoaV4SetX(result, _x);
496 static inline vec_float4 vmathSoaV4GetX_V( VmathSoaVector4 vec )
498 return vmathSoaV4GetX(&vec);
501 static inline void vmathSoaV4SetY_V( VmathSoaVector4 *result, vec_float4 _y )
503 vmathSoaV4SetY(result, _y);
506 static inline vec_float4 vmathSoaV4GetY_V( VmathSoaVector4 vec )
508 return vmathSoaV4GetY(&vec);
511 static inline void vmathSoaV4SetZ_V( VmathSoaVector4 *result, vec_float4 _z )
513 vmathSoaV4SetZ(result, _z);
516 static inline vec_float4 vmathSoaV4GetZ_V( VmathSoaVector4 vec )
518 return vmathSoaV4GetZ(&vec);
521 static inline void vmathSoaV4SetW_V( VmathSoaVector4 *result, vec_float4 _w )
523 vmathSoaV4SetW(result, _w);
526 static inline vec_float4 vmathSoaV4GetW_V( VmathSoaVector4 vec )
528 return vmathSoaV4GetW(&vec);
531 static inline void vmathSoaV4SetElem_V( VmathSoaVector4 *result, int idx, vec_float4 value )
533 vmathSoaV4SetElem(result, idx, value);
536 static inline vec_float4 vmathSoaV4GetElem_V( VmathSoaVector4 vec, int idx )
538 return vmathSoaV4GetElem(&vec, idx);
541 static inline VmathSoaVector4 vmathSoaV4Add_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 )
543 VmathSoaVector4 result;
544 vmathSoaV4Add(&result, &vec0, &vec1);
548 static inline VmathSoaVector4 vmathSoaV4Sub_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 )
550 VmathSoaVector4 result;
551 vmathSoaV4Sub(&result, &vec0, &vec1);
555 static inline VmathSoaVector4 vmathSoaV4ScalarMul_V( VmathSoaVector4 vec, vec_float4 scalar )
557 VmathSoaVector4 result;
558 vmathSoaV4ScalarMul(&result, &vec, scalar);
562 static inline VmathSoaVector4 vmathSoaV4ScalarDiv_V( VmathSoaVector4 vec, vec_float4 scalar )
564 VmathSoaVector4 result;
565 vmathSoaV4ScalarDiv(&result, &vec, scalar);
569 static inline VmathSoaVector4 vmathSoaV4Neg_V( VmathSoaVector4 vec )
571 VmathSoaVector4 result;
572 vmathSoaV4Neg(&result, &vec);
576 static inline VmathSoaVector4 vmathSoaV4MulPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 )
578 VmathSoaVector4 result;
579 vmathSoaV4MulPerElem(&result, &vec0, &vec1);
583 static inline VmathSoaVector4 vmathSoaV4DivPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 )
585 VmathSoaVector4 result;
586 vmathSoaV4DivPerElem(&result, &vec0, &vec1);
590 static inline VmathSoaVector4 vmathSoaV4RecipPerElem_V( VmathSoaVector4 vec )
592 VmathSoaVector4 result;
593 vmathSoaV4RecipPerElem(&result, &vec);
597 static inline VmathSoaVector4 vmathSoaV4SqrtPerElem_V( VmathSoaVector4 vec )
599 VmathSoaVector4 result;
600 vmathSoaV4SqrtPerElem(&result, &vec);
604 static inline VmathSoaVector4 vmathSoaV4RsqrtPerElem_V( VmathSoaVector4 vec )
606 VmathSoaVector4 result;
607 vmathSoaV4RsqrtPerElem(&result, &vec);
611 static inline VmathSoaVector4 vmathSoaV4AbsPerElem_V( VmathSoaVector4 vec )
613 VmathSoaVector4 result;
614 vmathSoaV4AbsPerElem(&result, &vec);
618 static inline VmathSoaVector4 vmathSoaV4CopySignPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 )
620 VmathSoaVector4 result;
621 vmathSoaV4CopySignPerElem(&result, &vec0, &vec1);
625 static inline VmathSoaVector4 vmathSoaV4MaxPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 )
627 VmathSoaVector4 result;
628 vmathSoaV4MaxPerElem(&result, &vec0, &vec1);
632 static inline vec_float4 vmathSoaV4MaxElem_V( VmathSoaVector4 vec )
634 return vmathSoaV4MaxElem(&vec);
637 static inline VmathSoaVector4 vmathSoaV4MinPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 )
639 VmathSoaVector4 result;
640 vmathSoaV4MinPerElem(&result, &vec0, &vec1);
644 static inline vec_float4 vmathSoaV4MinElem_V( VmathSoaVector4 vec )
646 return vmathSoaV4MinElem(&vec);
649 static inline vec_float4 vmathSoaV4Sum_V( VmathSoaVector4 vec )
651 return vmathSoaV4Sum(&vec);
654 static inline vec_float4 vmathSoaV4Dot_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 )
656 return vmathSoaV4Dot(&vec0, &vec1);
659 static inline vec_float4 vmathSoaV4LengthSqr_V( VmathSoaVector4 vec )
661 return vmathSoaV4LengthSqr(&vec);
664 static inline vec_float4 vmathSoaV4Length_V( VmathSoaVector4 vec )
666 return vmathSoaV4Length(&vec);
669 static inline VmathSoaVector4 vmathSoaV4Normalize_V( VmathSoaVector4 vec )
671 VmathSoaVector4 result;
672 vmathSoaV4Normalize(&result, &vec);
676 static inline VmathSoaVector4 vmathSoaV4Select_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1, vec_uint4 select1 )
678 VmathSoaVector4 result;
679 vmathSoaV4Select(&result, &vec0, &vec1, select1);
683 #ifdef _VECTORMATH_DEBUG
685 static inline void vmathSoaV4Print_V( VmathSoaVector4 vec )
687 vmathSoaV4Print(&vec);
690 static inline void vmathSoaV4Prints_V( VmathSoaVector4 vec, const char *name )
692 vmathSoaV4Prints(&vec, name);
697 static inline VmathSoaPoint3 vmathSoaP3MakeFromElems_V( vec_float4 _x, vec_float4 _y, vec_float4 _z )
699 VmathSoaPoint3 result;
700 vmathSoaP3MakeFromElems(&result, _x, _y, _z);
704 static inline VmathSoaPoint3 vmathSoaP3MakeFromV3_V( VmathSoaVector3 vec )
706 VmathSoaPoint3 result;
707 vmathSoaP3MakeFromV3(&result, &vec);
711 static inline VmathSoaPoint3 vmathSoaP3MakeFromScalar_V( vec_float4 scalar )
713 VmathSoaPoint3 result;
714 vmathSoaP3MakeFromScalar(&result, scalar);
718 static inline VmathSoaPoint3 vmathSoaP3MakeFromAos_V( VmathPoint3 pnt )
720 VmathSoaPoint3 result;
721 vmathSoaP3MakeFromAos(&result, &pnt);
725 static inline VmathSoaPoint3 vmathSoaP3MakeFrom4Aos_V( VmathPoint3 pnt0, VmathPoint3 pnt1, VmathPoint3 pnt2, VmathPoint3 pnt3 )
727 VmathSoaPoint3 result;
728 vmathSoaP3MakeFrom4Aos(&result, &pnt0, &pnt1, &pnt2, &pnt3);
732 static inline VmathSoaPoint3 vmathSoaP3Lerp_V( vec_float4 t, VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 )
734 VmathSoaPoint3 result;
735 vmathSoaP3Lerp(&result, t, &pnt0, &pnt1);
739 static inline void vmathSoaP3Get4Aos_V( VmathSoaPoint3 pnt, VmathPoint3 *result0, VmathPoint3 *result1, VmathPoint3 *result2, VmathPoint3 *result3 )
741 vmathSoaP3Get4Aos(&pnt, result0, result1, result2, result3);
744 static inline void vmathSoaP3LoadXYZArray_V( VmathSoaPoint3 *vec, const vec_float4 *threeQuads )
746 vmathSoaP3LoadXYZArray(vec, threeQuads);
749 static inline void vmathSoaP3StoreXYZArray_V( VmathSoaPoint3 vec, vec_float4 *threeQuads )
751 vmathSoaP3StoreXYZArray(&vec, threeQuads);
754 static inline void vmathSoaP3StoreHalfFloats_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1, vec_ushort8 *threeQuads )
756 vmathSoaP3StoreHalfFloats(&pnt0, &pnt1, threeQuads);
759 static inline void vmathSoaP3SetX_V( VmathSoaPoint3 *result, vec_float4 _x )
761 vmathSoaP3SetX(result, _x);
764 static inline vec_float4 vmathSoaP3GetX_V( VmathSoaPoint3 pnt )
766 return vmathSoaP3GetX(&pnt);
769 static inline void vmathSoaP3SetY_V( VmathSoaPoint3 *result, vec_float4 _y )
771 vmathSoaP3SetY(result, _y);
774 static inline vec_float4 vmathSoaP3GetY_V( VmathSoaPoint3 pnt )
776 return vmathSoaP3GetY(&pnt);
779 static inline void vmathSoaP3SetZ_V( VmathSoaPoint3 *result, vec_float4 _z )
781 vmathSoaP3SetZ(result, _z);
784 static inline vec_float4 vmathSoaP3GetZ_V( VmathSoaPoint3 pnt )
786 return vmathSoaP3GetZ(&pnt);
789 static inline void vmathSoaP3SetElem_V( VmathSoaPoint3 *result, int idx, vec_float4 value )
791 vmathSoaP3SetElem(result, idx, value);
794 static inline vec_float4 vmathSoaP3GetElem_V( VmathSoaPoint3 pnt, int idx )
796 return vmathSoaP3GetElem(&pnt, idx);
799 static inline VmathSoaVector3 vmathSoaP3Sub_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 )
801 VmathSoaVector3 result;
802 vmathSoaP3Sub(&result, &pnt0, &pnt1);
806 static inline VmathSoaPoint3 vmathSoaP3AddV3_V( VmathSoaPoint3 pnt, VmathSoaVector3 vec1 )
808 VmathSoaPoint3 result;
809 vmathSoaP3AddV3(&result, &pnt, &vec1);
813 static inline VmathSoaPoint3 vmathSoaP3SubV3_V( VmathSoaPoint3 pnt, VmathSoaVector3 vec1 )
815 VmathSoaPoint3 result;
816 vmathSoaP3SubV3(&result, &pnt, &vec1);
820 static inline VmathSoaPoint3 vmathSoaP3MulPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 )
822 VmathSoaPoint3 result;
823 vmathSoaP3MulPerElem(&result, &pnt0, &pnt1);
827 static inline VmathSoaPoint3 vmathSoaP3DivPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 )
829 VmathSoaPoint3 result;
830 vmathSoaP3DivPerElem(&result, &pnt0, &pnt1);
834 static inline VmathSoaPoint3 vmathSoaP3RecipPerElem_V( VmathSoaPoint3 pnt )
836 VmathSoaPoint3 result;
837 vmathSoaP3RecipPerElem(&result, &pnt);
841 static inline VmathSoaPoint3 vmathSoaP3SqrtPerElem_V( VmathSoaPoint3 pnt )
843 VmathSoaPoint3 result;
844 vmathSoaP3SqrtPerElem(&result, &pnt);
848 static inline VmathSoaPoint3 vmathSoaP3RsqrtPerElem_V( VmathSoaPoint3 pnt )
850 VmathSoaPoint3 result;
851 vmathSoaP3RsqrtPerElem(&result, &pnt);
855 static inline VmathSoaPoint3 vmathSoaP3AbsPerElem_V( VmathSoaPoint3 pnt )
857 VmathSoaPoint3 result;
858 vmathSoaP3AbsPerElem(&result, &pnt);
862 static inline VmathSoaPoint3 vmathSoaP3CopySignPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 )
864 VmathSoaPoint3 result;
865 vmathSoaP3CopySignPerElem(&result, &pnt0, &pnt1);
869 static inline VmathSoaPoint3 vmathSoaP3MaxPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 )
871 VmathSoaPoint3 result;
872 vmathSoaP3MaxPerElem(&result, &pnt0, &pnt1);
876 static inline vec_float4 vmathSoaP3MaxElem_V( VmathSoaPoint3 pnt )
878 return vmathSoaP3MaxElem(&pnt);
881 static inline VmathSoaPoint3 vmathSoaP3MinPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 )
883 VmathSoaPoint3 result;
884 vmathSoaP3MinPerElem(&result, &pnt0, &pnt1);
888 static inline vec_float4 vmathSoaP3MinElem_V( VmathSoaPoint3 pnt )
890 return vmathSoaP3MinElem(&pnt);
893 static inline vec_float4 vmathSoaP3Sum_V( VmathSoaPoint3 pnt )
895 return vmathSoaP3Sum(&pnt);
898 static inline VmathSoaPoint3 vmathSoaP3Scale_V( VmathSoaPoint3 pnt, vec_float4 scaleVal )
900 VmathSoaPoint3 result;
901 vmathSoaP3Scale(&result, &pnt, scaleVal);
905 static inline VmathSoaPoint3 vmathSoaP3NonUniformScale_V( VmathSoaPoint3 pnt, VmathSoaVector3 scaleVec )
907 VmathSoaPoint3 result;
908 vmathSoaP3NonUniformScale(&result, &pnt, &scaleVec);
912 static inline vec_float4 vmathSoaP3Projection_V( VmathSoaPoint3 pnt, VmathSoaVector3 unitVec )
914 return vmathSoaP3Projection(&pnt, &unitVec);
917 static inline vec_float4 vmathSoaP3DistSqrFromOrigin_V( VmathSoaPoint3 pnt )
919 return vmathSoaP3DistSqrFromOrigin(&pnt);
922 static inline vec_float4 vmathSoaP3DistFromOrigin_V( VmathSoaPoint3 pnt )
924 return vmathSoaP3DistFromOrigin(&pnt);
927 static inline vec_float4 vmathSoaP3DistSqr_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 )
929 return vmathSoaP3DistSqr(&pnt0, &pnt1);
932 static inline vec_float4 vmathSoaP3Dist_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 )
934 return vmathSoaP3Dist(&pnt0, &pnt1);
937 static inline VmathSoaPoint3 vmathSoaP3Select_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1, vec_uint4 select1 )
939 VmathSoaPoint3 result;
940 vmathSoaP3Select(&result, &pnt0, &pnt1, select1);
944 #ifdef _VECTORMATH_DEBUG
946 static inline void vmathSoaP3Print_V( VmathSoaPoint3 pnt )
948 vmathSoaP3Print(&pnt);
951 static inline void vmathSoaP3Prints_V( VmathSoaPoint3 pnt, const char *name )
953 vmathSoaP3Prints(&pnt, name);
960 #endif /* __cplusplus */