@@ -37,6 +37,7 @@ void unaryEquivalent (
3737 simdOutput.writeAlignedUnsafe (simdResult);
3838 // Compare results.
3939 for (intptr_t lane = 0 ; lane < laneCount; lane++) {
40+ // TODO: Handle tolerance margins for floating-point elements.
4041 if (scalarResult[lane] != simdResult[lane]) {
4142 printText (U" \n Wrong result at lane " , lane, U" in 0.." , laneCount - 1 , U" at iteration " , iteration, U" of " , testName, U" !\n " );
4243 printText (U" Input: " , inputA[lane], U" \n " );
@@ -84,6 +85,7 @@ void binaryEquivalent (
8485 simdOutput.writeAlignedUnsafe (simdResult);
8586 // Compare results.
8687 for (intptr_t lane = 0 ; lane < laneCount; lane++) {
88+ // TODO: Handle tolerance margins for floating-point elements.
8789 if (scalarResult[lane] != simdResult[lane]) {
8890 printText (U" \n Wrong result at lane " , lane, U" in 0.." , laneCount - 1 , U" at iteration " , iteration, U" of " , testName, U" !\n " );
8991 printText (U" Input: " , inputA[lane], U" , " , inputB[lane], U" \n " );
@@ -118,59 +120,68 @@ START_TEST(BruteSimd)
118120 printText (U" * NEON\n " );
119121 #endif
120122
121- BINARY_POINT_EQUIVALENCE (uint8_t , U8x16, a + b);
122- BINARY_POINT_EQUIVALENCE (uint8_t , U8x32, a + b);
123- BINARY_POINT_EQUIVALENCE (uint8_t , U8x16, a - b);
124- BINARY_POINT_EQUIVALENCE (uint8_t , U8x32, a - b);
125- // Missing implementations
126- // BINARY_POINT_EQUIVALENCE(uint8_t, U8x16, a * b);
127- // BINARY_POINT_EQUIVALENCE(uint8_t, U8x32, a * b);
128- // TODO: These should be easy to implement a fallback for if reinterpret casting to two 64-bit unsigned integers.
129- // BINARY_POINT_EQUIVALENCE(uint8_t, U8x16, a & b);
130- // BINARY_POINT_EQUIVALENCE(uint8_t, U8x32, a & b);
131- // BINARY_POINT_EQUIVALENCE(uint8_t, U8x16, a | b);
132- // BINARY_POINT_EQUIVALENCE(uint8_t, U8x32, a | b);
133- // BINARY_POINT_EQUIVALENCE(uint8_t, U8x16, a ^ b);
134- // BINARY_POINT_EQUIVALENCE(uint8_t, U8x32, a ^ b);
135-
123+ // Addition.
124+ BINARY_POINT_EQUIVALENCE (uint8_t , U8x16 , a + b);
125+ BINARY_POINT_EQUIVALENCE (uint8_t , U8x32 , a + b);
136126 BINARY_POINT_EQUIVALENCE (uint16_t , U16x8 , a + b);
137127 BINARY_POINT_EQUIVALENCE (uint16_t , U16x16, a + b);
128+ BINARY_POINT_EQUIVALENCE (uint32_t , U32x4 , a + b);
129+ BINARY_POINT_EQUIVALENCE (uint32_t , U32x8 , a + b);
130+ BINARY_POINT_EQUIVALENCE (int32_t , I32x4 , a + b);
131+ BINARY_POINT_EQUIVALENCE (int32_t , I32x4 , a + b);
132+
133+ // Subtraction
134+ BINARY_POINT_EQUIVALENCE (uint8_t , U8x16 , a - b);
135+ BINARY_POINT_EQUIVALENCE (uint8_t , U8x32 , a - b);
138136 BINARY_POINT_EQUIVALENCE (uint16_t , U16x8 , a - b);
139137 BINARY_POINT_EQUIVALENCE (uint16_t , U16x16, a - b);
140- // Missing implementations
141- // BINARY_POINT_EQUIVALENCE(uint16_t, U16x8 , a * b);
142- // BINARY_POINT_EQUIVALENCE(uint16_t, U16x16, a * b);
143- BINARY_POINT_EQUIVALENCE (uint16_t , U16x8, a & b);
138+ BINARY_POINT_EQUIVALENCE (uint32_t , U32x4 , a - b);
139+ BINARY_POINT_EQUIVALENCE (uint32_t , U32x8 , a - b);
140+ BINARY_POINT_EQUIVALENCE (int32_t , I32x4 , a - b);
141+ BINARY_POINT_EQUIVALENCE (int32_t , I32x4 , a - b);
142+
143+ // Negation
144+ UNARY_POINT_EQUIVALENCE (int32_t , I32x4 , -a);
145+ UNARY_POINT_EQUIVALENCE (int32_t , I32x4 , -a);
146+
147+ // Multiplication
148+ // BINARY_POINT_EQUIVALENCE(uint8_t , U8x16 , a * b); // Missing
149+ // BINARY_POINT_EQUIVALENCE(uint8_t , U8x32 , a * b); // Missing
150+ // BINARY_POINT_EQUIVALENCE(uint16_t, U16x8 , a * b); // Missing
151+ // BINARY_POINT_EQUIVALENCE(uint16_t, U16x16, a * b); // Missing
152+ BINARY_POINT_EQUIVALENCE (uint32_t , U32x4 , a * b);
153+ BINARY_POINT_EQUIVALENCE (uint32_t , U32x8 , a * b);
154+ BINARY_POINT_EQUIVALENCE (int32_t , I32x4 , a * b);
155+ BINARY_POINT_EQUIVALENCE (int32_t , I32x4 , a * b);
156+
157+ // Bitwise and
158+ // BINARY_POINT_EQUIVALENCE(uint8_t , U8x16 , a & b); // Missing
159+ // BINARY_POINT_EQUIVALENCE(uint8_t , U8x32 , a & b); // Missing
160+ BINARY_POINT_EQUIVALENCE (uint16_t , U16x8 , a & b);
144161 BINARY_POINT_EQUIVALENCE (uint16_t , U16x16, a & b);
145- BINARY_POINT_EQUIVALENCE (uint16_t , U16x8, a | b);
162+ BINARY_POINT_EQUIVALENCE (uint32_t , U32x4 , a & b);
163+ BINARY_POINT_EQUIVALENCE (uint32_t , U32x8 , a & b);
164+
165+ // Bitwise or
166+ // BINARY_POINT_EQUIVALENCE(uint8_t , U8x16, a | b); // Missing
167+ // BINARY_POINT_EQUIVALENCE(uint8_t , U8x32, a | b); // Missing
168+ BINARY_POINT_EQUIVALENCE (uint16_t , U16x8 , a | b);
146169 BINARY_POINT_EQUIVALENCE (uint16_t , U16x16, a | b);
147- BINARY_POINT_EQUIVALENCE (uint16_t , U16x8, a ^ b);
148- BINARY_POINT_EQUIVALENCE (uint16_t , U16x16, a ^ b);
149- UNARY_POINT_EQUIVALENCE (uint16_t , U16x8, ~a);
150- UNARY_POINT_EQUIVALENCE (uint16_t , U16x16, ~a);
170+ BINARY_POINT_EQUIVALENCE (uint32_t , U32x4 , a | b);
171+ BINARY_POINT_EQUIVALENCE (uint32_t , U32x8 , a | b);
151172
152- BINARY_POINT_EQUIVALENCE (uint32_t , U32x4, a + b);
153- BINARY_POINT_EQUIVALENCE (uint32_t , U32x8, a + b);
154- BINARY_POINT_EQUIVALENCE (uint32_t , U32x4, a - b);
155- BINARY_POINT_EQUIVALENCE (uint32_t , U32x8, a - b);
156- BINARY_POINT_EQUIVALENCE (uint32_t , U32x4, a * b);
157- BINARY_POINT_EQUIVALENCE (uint32_t , U32x8, a * b);
158- BINARY_POINT_EQUIVALENCE (uint32_t , U32x4, a & b);
159- BINARY_POINT_EQUIVALENCE (uint32_t , U32x8, a & b);
160- BINARY_POINT_EQUIVALENCE (uint32_t , U32x4, a | b);
161- BINARY_POINT_EQUIVALENCE (uint32_t , U32x8, a | b);
162- BINARY_POINT_EQUIVALENCE (uint32_t , U32x4, a ^ b);
163- BINARY_POINT_EQUIVALENCE (uint32_t , U32x8, a ^ b);
164- UNARY_POINT_EQUIVALENCE (uint32_t , U32x4, ~a);
165- UNARY_POINT_EQUIVALENCE (uint32_t , U32x8, ~a);
173+ // Bitwise xor
174+ // BINARY_POINT_EQUIVALENCE(uint8_t , U8x16, a ^ b); // Missing
175+ // BINARY_POINT_EQUIVALENCE(uint8_t , U8x32, a ^ b); // Missing
176+ BINARY_POINT_EQUIVALENCE (uint16_t , U16x8 , a ^ b);
177+ BINARY_POINT_EQUIVALENCE (uint16_t , U16x16, a ^ b);
178+ BINARY_POINT_EQUIVALENCE (uint32_t , U32x4 , a ^ b);
179+ BINARY_POINT_EQUIVALENCE (uint32_t , U32x8 , a ^ b);
166180
167- UNARY_POINT_EQUIVALENCE (int32_t , I32x4, -a);
168- UNARY_POINT_EQUIVALENCE (int32_t , I32x4, -a);
169- BINARY_POINT_EQUIVALENCE (int32_t , I32x4, a + b);
170- BINARY_POINT_EQUIVALENCE (int32_t , I32x4, a + b);
171- BINARY_POINT_EQUIVALENCE (int32_t , I32x4, a - b);
172- BINARY_POINT_EQUIVALENCE (int32_t , I32x4, a - b);
173- BINARY_POINT_EQUIVALENCE (int32_t , I32x4, a * b);
174- BINARY_POINT_EQUIVALENCE (int32_t , I32x4, a * b);
181+ // Bitwise negation
182+ UNARY_POINT_EQUIVALENCE (uint16_t , U16x8 , ~a);
183+ UNARY_POINT_EQUIVALENCE (uint16_t , U16x16, ~a);
184+ UNARY_POINT_EQUIVALENCE (uint32_t , U32x4 , ~a);
185+ UNARY_POINT_EQUIVALENCE (uint32_t , U32x8 , ~a);
175186
176187END_TEST
0 commit comments