5 // Copyright (c) 2011 Apple Inc.
10 #include "LinearMath/btScalar.h"
11 #if defined (BT_USE_SSE_IN_API) || defined (BT_USE_NEON)
14 #include "Test_v3div.h"
21 #include <LinearMath/btVector3.h>
23 #define BT_OP(a, b) ((a) / (b))
24 // reference code for testing purposes
25 static inline btVector3& v3div_ref(btVector3& v1, btVector3& v2);
27 static btVector3& v3div_ref(btVector3& v0, btVector3& v1, btVector3& v2)
29 v0.m_floats[0] = BT_OP(v1.m_floats[0] , v2.m_floats[0]),
30 v0.m_floats[1] = BT_OP(v1.m_floats[1] , v2.m_floats[1]),
31 v0.m_floats[2] = BT_OP(v1.m_floats[2] , v2.m_floats[2]);
36 #define LOOPCOUNT 1024
37 #define NUM_CYCLES 1000
49 w = BT_NAN; // w channel NaN
61 btVector3 correct_res, test_res;
65 correct_res.setValue(vNaN, vNaN, vNaN);
66 test_res.setValue(vNaN, vNaN, vNaN);
67 correct_res = v3div_ref(correct_res, v1, v2);
68 test_res = BT_OP(v3,v2);
70 if( fabsf(correct_res.m_floats[0] - test_res.m_floats[0]) +
71 fabsf(correct_res.m_floats[1] - test_res.m_floats[1]) +
72 fabsf(correct_res.m_floats[2] - test_res.m_floats[2]) > FLT_EPSILON*10 )
74 vlog( "Error - v3div result error! "
75 "\ncorrect = (%10.4f, %10.4f, %10.4f) "
76 "\ntested = (%10.4f, %10.4f, %10.4f) \n",
77 correct_res.m_floats[0], correct_res.m_floats[1], correct_res.m_floats[2],
78 test_res.m_floats[0], test_res.m_floats[1], test_res.m_floats[2]);
84 #define DATA_SIZE LOOPCOUNT
86 btVector3 vec3_arr0[DATA_SIZE];
87 btVector3 vec3_arr1[DATA_SIZE];
88 btVector3 vec3_arr2[DATA_SIZE];
95 uint64_t startTime, bestTime, currentTime;
96 w = BT_NAN; // w channel NaN
100 for (j = 0; j < NUM_CYCLES; j++)
102 for( k = 0; k < DATA_SIZE; k++ )
107 vec3_arr1[k].setValue(x,y,z);
108 vec3_arr1[k].setW(w);
113 vec3_arr2[k].setValue(x,y,z);
114 vec3_arr2[k].setW(w);
117 startTime = ReadTicks();
118 for( k = 0; k < LOOPCOUNT; k++ )
120 vec3_arr0[k] = v3div_ref(vec3_arr0[k], vec3_arr1[k], vec3_arr2[k]);
122 currentTime = ReadTicks() - startTime;
123 scalarTime += currentTime;
124 if( currentTime < bestTime )
125 bestTime = currentTime;
127 if( 0 == gReportAverageTimes )
128 scalarTime = bestTime;
130 scalarTime /= NUM_CYCLES;
134 uint64_t startTime, bestTime, currentTime;
138 for (j = 0; j < NUM_CYCLES; j++)
140 for( k = 0; k < DATA_SIZE; k++ )
145 vec3_arr1[k].setValue(x,y,z);
146 vec3_arr1[k].setW(w);
151 vec3_arr2[k].setValue(x,y,z);
152 vec3_arr2[k].setW(w);
155 startTime = ReadTicks();
156 for( k = 0; k < LOOPCOUNT; k++ )
158 vec3_arr0[k] = BT_OP(vec3_arr1[k] , vec3_arr2[k]);
160 currentTime = ReadTicks() - startTime;
161 vectorTime += currentTime;
162 if( currentTime < bestTime )
163 bestTime = currentTime;
165 if( 0 == gReportAverageTimes )
166 vectorTime = bestTime;
168 vectorTime /= NUM_CYCLES;
172 vlog( " \t scalar\t vector\n" );
173 vlog( " \t%10.4f\t%10.4f\n", TicksToCycles( scalarTime ) / LOOPCOUNT,
174 TicksToCycles( vectorTime ) / LOOPCOUNT );