Skip to content

Commit 12b9dfb

Browse files
committed
Sorted bruteforce tests by operation.
1 parent dcb913a commit 12b9dfb

File tree

1 file changed

+57
-46
lines changed

1 file changed

+57
-46
lines changed

Source/test/tests/BruteSimdTest.cpp

Lines changed: 57 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -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"\nWrong 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"\nWrong 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

176187
END_TEST

0 commit comments

Comments
 (0)