Commit bdf2b720 by Nicolas Capens Committed by Nicolas Capens

Avoid ignoring unsuccessful routine creation

Unsuccessful routine creation is a bug that must be caught instead of being silently ignored. Bug: b/148295813 Change-Id: Ic718f0420d6833362944c96a3d172813eba3c207 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/40568Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by: 's avatarAntonio Maiorano <amaiorano@google.com>
parent 133b87d6
...@@ -131,12 +131,9 @@ TEST(ReactorUnitTests, Sample) ...@@ -131,12 +131,9 @@ TEST(ReactorUnitTests, Sample)
auto routine = function("one"); auto routine = function("one");
if(routine) int one[2] = { 1, 0 };
{ int result = routine(&one[1], 2);
int one[2] = { 1, 0 }; EXPECT_EQ(result, reference(&one[1], 2));
int result = routine(&one[1], 2);
EXPECT_EQ(result, reference(&one[1], 2));
}
} }
TEST(ReactorUnitTests, Uninitialized) TEST(ReactorUnitTests, Uninitialized)
...@@ -162,11 +159,8 @@ TEST(ReactorUnitTests, Uninitialized) ...@@ -162,11 +159,8 @@ TEST(ReactorUnitTests, Uninitialized)
auto routine = function("one"); auto routine = function("one");
if(routine) int result = routine();
{ EXPECT_EQ(result, result); // Anything is fine, just don't crash
int result = routine();
EXPECT_EQ(result, result); // Anything is fine, just don't crash
}
} }
TEST(ReactorUnitTests, Unreachable) TEST(ReactorUnitTests, Unreachable)
...@@ -186,11 +180,8 @@ TEST(ReactorUnitTests, Unreachable) ...@@ -186,11 +180,8 @@ TEST(ReactorUnitTests, Unreachable)
auto routine = function("one"); auto routine = function("one");
if(routine) int result = routine(16);
{ EXPECT_EQ(result, 20);
int result = routine(16);
EXPECT_EQ(result, 20);
}
} }
TEST(ReactorUnitTests, VariableAddress) TEST(ReactorUnitTests, VariableAddress)
...@@ -207,11 +198,8 @@ TEST(ReactorUnitTests, VariableAddress) ...@@ -207,11 +198,8 @@ TEST(ReactorUnitTests, VariableAddress)
auto routine = function("one"); auto routine = function("one");
if(routine) int result = routine(16);
{ EXPECT_EQ(result, 20);
int result = routine(16);
EXPECT_EQ(result, 20);
}
} }
TEST(ReactorUnitTests, SubVectorLoadStore) TEST(ReactorUnitTests, SubVectorLoadStore)
...@@ -232,36 +220,33 @@ TEST(ReactorUnitTests, SubVectorLoadStore) ...@@ -232,36 +220,33 @@ TEST(ReactorUnitTests, SubVectorLoadStore)
auto routine = function("one"); auto routine = function("one");
if(routine) int8_t in[16 * 5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
{ 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0,
int8_t in[16 * 5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 25, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0,
17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 33, 34, 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
25, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 39, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
33, 34, 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
37, 38, 39, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int8_t out[16 * 5] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, int8_t out[16 * 5] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
routine(in, out); routine(in, out);
for(int row = 0; row < 5; row++) for(int row = 0; row < 5; row++)
{
for(int col = 0; col < 16; col++)
{ {
for(int col = 0; col < 16; col++) int i = row * 16 + col;
if(in[i] == 0)
{ {
int i = row * 16 + col; EXPECT_EQ(out[i], -1) << "Row " << row << " column " << col << " not left untouched.";
}
if(in[i] == 0) else
{ {
EXPECT_EQ(out[i], -1) << "Row " << row << " column " << col << " not left untouched."; EXPECT_EQ(out[i], in[i]) << "Row " << row << " column " << col << " not equal to input.";
}
else
{
EXPECT_EQ(out[i], in[i]) << "Row " << row << " column " << col << " not equal to input.";
}
} }
} }
} }
...@@ -283,28 +268,25 @@ TEST(ReactorUnitTests, VectorConstant) ...@@ -283,28 +268,25 @@ TEST(ReactorUnitTests, VectorConstant)
auto routine = function("one"); auto routine = function("one");
if(routine) int8_t out[16 * 4] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
int8_t out[16 * 4] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
int8_t exp[16 * 4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, int8_t exp[16 * 4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, -1, -1, -1,
25, 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1,
33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, -1 }; 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, -1, -1 };
routine(out); routine(out);
for(int row = 0; row < 4; row++) for(int row = 0; row < 4; row++)
{
for(int col = 0; col < 16; col++)
{ {
for(int col = 0; col < 16; col++) int i = row * 16 + col;
{
int i = row * 16 + col;
EXPECT_EQ(out[i], exp[i]); EXPECT_EQ(out[i], exp[i]);
}
} }
} }
} }
...@@ -323,24 +305,21 @@ TEST(ReactorUnitTests, Concatenate) ...@@ -323,24 +305,21 @@ TEST(ReactorUnitTests, Concatenate)
auto routine = function("one"); auto routine = function("one");
if(routine) int8_t ref[16 * 5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
int8_t ref[16 * 5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
int8_t out[16 * 5] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, int8_t out[16 * 5] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
routine(out); routine(out);
for(int row = 0; row < 2; row++) for(int row = 0; row < 2; row++)
{
for(int col = 0; col < 16; col++)
{ {
for(int col = 0; col < 16; col++) int i = row * 16 + col;
{
int i = row * 16 + col;
EXPECT_EQ(out[i], ref[i]) << "Row " << row << " column " << col << " not equal to reference."; EXPECT_EQ(out[i], ref[i]) << "Row " << row << " column " << col << " not equal to reference.";
}
} }
} }
} }
...@@ -360,21 +339,18 @@ TEST(ReactorUnitTests, Cast) ...@@ -360,21 +339,18 @@ TEST(ReactorUnitTests, Cast)
auto routine = function("one"); auto routine = function("one");
if(routine) int out[2][4];
{
int out[2][4];
memset(&out, 0, sizeof(out)); memset(&out, 0, sizeof(out));
routine(&out); routine(&out);
EXPECT_EQ(out[0][0], 0x07080304); EXPECT_EQ(out[0][0], 0x07080304);
EXPECT_EQ(out[0][1], 0x15161112); EXPECT_EQ(out[0][1], 0x15161112);
EXPECT_EQ(out[1][0], 0x16120804); EXPECT_EQ(out[1][0], 0x16120804);
EXPECT_EQ(out[1][1], 0x01020304); EXPECT_EQ(out[1][1], 0x01020304);
EXPECT_EQ(out[1][2], 0x06080204); EXPECT_EQ(out[1][2], 0x06080204);
}
} }
static uint16_t swizzleCode4(int i) static uint16_t swizzleCode4(int i)
...@@ -424,83 +400,80 @@ TEST(ReactorUnitTests, Swizzle4) ...@@ -424,83 +400,80 @@ TEST(ReactorUnitTests, Swizzle4)
auto routine = function("one"); auto routine = function("one");
if(routine) struct
{ {
struct float f[256 + 256 + 2][4];
{ int i[388][4];
float f[256 + 256 + 2][4]; } out;
int i[388][4];
} out;
memset(&out, 0, sizeof(out)); memset(&out, 0, sizeof(out));
routine(&out); routine(&out);
for(int i = 0; i < 256; i++) for(int i = 0; i < 256; i++)
{ {
EXPECT_EQ(out.f[i][0], float((i >> 0) & 0x03) + 1.0f); EXPECT_EQ(out.f[i][0], float((i >> 0) & 0x03) + 1.0f);
EXPECT_EQ(out.f[i][1], float((i >> 2) & 0x03) + 1.0f); EXPECT_EQ(out.f[i][1], float((i >> 2) & 0x03) + 1.0f);
EXPECT_EQ(out.f[i][2], float((i >> 4) & 0x03) + 1.0f); EXPECT_EQ(out.f[i][2], float((i >> 4) & 0x03) + 1.0f);
EXPECT_EQ(out.f[i][3], float((i >> 6) & 0x03) + 1.0f); EXPECT_EQ(out.f[i][3], float((i >> 6) & 0x03) + 1.0f);
} }
for(int i = 0; i < 256; i++) for(int i = 0; i < 256; i++)
{ {
EXPECT_EQ(out.f[256 + i][0], float((i >> 0) & 0x03) + 1.0f); EXPECT_EQ(out.f[256 + i][0], float((i >> 0) & 0x03) + 1.0f);
EXPECT_EQ(out.f[256 + i][1], float((i >> 2) & 0x03) + 1.0f); EXPECT_EQ(out.f[256 + i][1], float((i >> 2) & 0x03) + 1.0f);
EXPECT_EQ(out.f[256 + i][2], float((i >> 4) & 0x03) + 5.0f); EXPECT_EQ(out.f[256 + i][2], float((i >> 4) & 0x03) + 5.0f);
EXPECT_EQ(out.f[256 + i][3], float((i >> 6) & 0x03) + 5.0f); EXPECT_EQ(out.f[256 + i][3], float((i >> 6) & 0x03) + 5.0f);
} }
EXPECT_EQ(out.f[512 + 0][0], 1.0f); EXPECT_EQ(out.f[512 + 0][0], 1.0f);
EXPECT_EQ(out.f[512 + 0][1], 5.0f); EXPECT_EQ(out.f[512 + 0][1], 5.0f);
EXPECT_EQ(out.f[512 + 0][2], 2.0f); EXPECT_EQ(out.f[512 + 0][2], 2.0f);
EXPECT_EQ(out.f[512 + 0][3], 6.0f); EXPECT_EQ(out.f[512 + 0][3], 6.0f);
EXPECT_EQ(out.f[512 + 1][0], 3.0f); EXPECT_EQ(out.f[512 + 1][0], 3.0f);
EXPECT_EQ(out.f[512 + 1][1], 7.0f); EXPECT_EQ(out.f[512 + 1][1], 7.0f);
EXPECT_EQ(out.f[512 + 1][2], 4.0f); EXPECT_EQ(out.f[512 + 1][2], 4.0f);
EXPECT_EQ(out.f[512 + 1][3], 8.0f); EXPECT_EQ(out.f[512 + 1][3], 8.0f);
EXPECT_EQ(out.i[0][0], 0x00050001); EXPECT_EQ(out.i[0][0], 0x00050001);
EXPECT_EQ(out.i[0][1], 0x00060002); EXPECT_EQ(out.i[0][1], 0x00060002);
EXPECT_EQ(out.i[0][2], 0x00000000); EXPECT_EQ(out.i[0][2], 0x00000000);
EXPECT_EQ(out.i[0][3], 0x00000000); EXPECT_EQ(out.i[0][3], 0x00000000);
EXPECT_EQ(out.i[1][0], 0x00070003); EXPECT_EQ(out.i[1][0], 0x00070003);
EXPECT_EQ(out.i[1][1], 0x00080004); EXPECT_EQ(out.i[1][1], 0x00080004);
EXPECT_EQ(out.i[1][2], 0x00000000); EXPECT_EQ(out.i[1][2], 0x00000000);
EXPECT_EQ(out.i[1][3], 0x00000000); EXPECT_EQ(out.i[1][3], 0x00000000);
EXPECT_EQ(out.i[2][0], 0x0A020901); EXPECT_EQ(out.i[2][0], 0x0A020901);
EXPECT_EQ(out.i[2][1], 0x0C040B03); EXPECT_EQ(out.i[2][1], 0x0C040B03);
EXPECT_EQ(out.i[2][2], 0x00000000); EXPECT_EQ(out.i[2][2], 0x00000000);
EXPECT_EQ(out.i[2][3], 0x00000000); EXPECT_EQ(out.i[2][3], 0x00000000);
EXPECT_EQ(out.i[3][0], 0x0E060D05); EXPECT_EQ(out.i[3][0], 0x0E060D05);
EXPECT_EQ(out.i[3][1], 0x10080F07); EXPECT_EQ(out.i[3][1], 0x10080F07);
EXPECT_EQ(out.i[3][2], 0x00000000); EXPECT_EQ(out.i[3][2], 0x00000000);
EXPECT_EQ(out.i[3][3], 0x00000000); EXPECT_EQ(out.i[3][3], 0x00000000);
for(int i = 0; i < 256; i++) for(int i = 0; i < 256; i++)
{ {
EXPECT_EQ(out.i[4 + i / 2][0 + (i % 2) * 2] & 0xFFFF, EXPECT_EQ(out.i[4 + i / 2][0 + (i % 2) * 2] & 0xFFFF,
((i >> 0) & 0x03) + 1); ((i >> 0) & 0x03) + 1);
EXPECT_EQ(out.i[4 + i / 2][0 + (i % 2) * 2] >> 16, EXPECT_EQ(out.i[4 + i / 2][0 + (i % 2) * 2] >> 16,
((i >> 2) & 0x03) + 1); ((i >> 2) & 0x03) + 1);
EXPECT_EQ(out.i[4 + i / 2][1 + (i % 2) * 2] & 0xFFFF, EXPECT_EQ(out.i[4 + i / 2][1 + (i % 2) * 2] & 0xFFFF,
((i >> 4) & 0x03) + 1); ((i >> 4) & 0x03) + 1);
EXPECT_EQ(out.i[4 + i / 2][1 + (i % 2) * 2] >> 16, EXPECT_EQ(out.i[4 + i / 2][1 + (i % 2) * 2] >> 16,
((i >> 6) & 0x03) + 1); ((i >> 6) & 0x03) + 1);
} }
for(int i = 0; i < 256; i++) for(int i = 0; i < 256; i++)
{ {
EXPECT_EQ(out.i[132 + i][0], ((i >> 0) & 0x03) + 1); EXPECT_EQ(out.i[132 + i][0], ((i >> 0) & 0x03) + 1);
EXPECT_EQ(out.i[132 + i][1], ((i >> 2) & 0x03) + 1); EXPECT_EQ(out.i[132 + i][1], ((i >> 2) & 0x03) + 1);
EXPECT_EQ(out.i[132 + i][2], ((i >> 4) & 0x03) + 1); EXPECT_EQ(out.i[132 + i][2], ((i >> 4) & 0x03) + 1);
EXPECT_EQ(out.i[132 + i][3], ((i >> 6) & 0x03) + 1); EXPECT_EQ(out.i[132 + i][3], ((i >> 6) & 0x03) + 1);
}
} }
} }
...@@ -518,124 +491,116 @@ TEST(ReactorUnitTests, Swizzle) ...@@ -518,124 +491,116 @@ TEST(ReactorUnitTests, Swizzle)
auto routine = function("one"); auto routine = function("one");
if(routine) int out[3][4];
{
int out[3][4];
memset(&out, 0, sizeof(out)); memset(&out, 0, sizeof(out));
routine(&out); routine(&out);
EXPECT_EQ(out[0][0], 0x16151413); EXPECT_EQ(out[0][0], 0x16151413);
EXPECT_EQ(out[0][1], 0x12111009); EXPECT_EQ(out[0][1], 0x12111009);
EXPECT_EQ(out[0][2], 0x08070605); EXPECT_EQ(out[0][2], 0x08070605);
EXPECT_EQ(out[0][3], 0x04030201); EXPECT_EQ(out[0][3], 0x04030201);
EXPECT_EQ(out[1][0], 0x08070605); EXPECT_EQ(out[1][0], 0x08070605);
EXPECT_EQ(out[1][1], 0x04030201); EXPECT_EQ(out[1][1], 0x04030201);
EXPECT_EQ(out[2][0], 0x15161314); EXPECT_EQ(out[2][0], 0x15161314);
EXPECT_EQ(out[2][1], 0x11120910); EXPECT_EQ(out[2][1], 0x11120910);
EXPECT_EQ(out[2][2], 0x07080506); EXPECT_EQ(out[2][2], 0x07080506);
EXPECT_EQ(out[2][3], 0x03040102); EXPECT_EQ(out[2][3], 0x03040102);
}
} }
TEST(ReactorUnitTests, Shuffle) TEST(ReactorUnitTests, Shuffle)
{ {
// |select| is [0aaa:0bbb:0ccc:0ddd] where |aaa|, |bbb|, |ccc|
// and |ddd| are 7-bit selection indices. For a total (1 << 12)
// possibilities.
const int kSelectRange = 1 << 12;
// Unfortunately, testing the whole kSelectRange results in a test
// that is far too slow to run, because LLVM spends exponentially more
// time optimizing the function below as the number of test cases
// increases.
//
// To work-around the problem, only test a subset of the range by
// skipping every kRangeIncrement value.
//
// Set this value to 1 if you want to test the whole implementation,
// which will take a little less than 2 minutes on a fast workstation.
//
// The default value here takes about 1390ms, which is a little more than
// what the Swizzle test takes (993 ms) on my machine. A non-power-of-2
// value ensures a better spread over possible values.
const int kRangeIncrement = 11;
auto rangeIndexToSelect = [](int i) {
return static_cast<unsigned short>(
(((i >> 9) & 7) << 0) |
(((i >> 6) & 7) << 4) |
(((i >> 3) & 7) << 8) |
(((i >> 0) & 7) << 12));
};
FunctionT<int(void *)> function;
{ {
// |select| is [0aaa:0bbb:0ccc:0ddd] where |aaa|, |bbb|, |ccc| Pointer<Byte> out = function.Arg<0>();
// and |ddd| are 7-bit selection indices. For a total (1 << 12)
// possibilities.
const int kSelectRange = 1 << 12;
// Unfortunately, testing the whole kSelectRange results in a test
// that is far too slow to run, because LLVM spends exponentially more
// time optimizing the function below as the number of test cases
// increases.
//
// To work-around the problem, only test a subset of the range by
// skipping every kRangeIncrement value.
//
// Set this value to 1 if you want to test the whole implementation,
// which will take a little less than 2 minutes on a fast workstation.
//
// The default value here takes about 1390ms, which is a little more than
// what the Swizzle test takes (993 ms) on my machine. A non-power-of-2
// value ensures a better spread over possible values.
const int kRangeIncrement = 11;
auto rangeIndexToSelect = [](int i) {
return static_cast<unsigned short>(
(((i >> 9) & 7) << 0) |
(((i >> 6) & 7) << 4) |
(((i >> 3) & 7) << 8) |
(((i >> 0) & 7) << 12));
};
FunctionT<int(void *)> function; for(int i = 0; i < kSelectRange; i += kRangeIncrement)
{ {
Pointer<Byte> out = function.Arg<0>(); unsigned short select = rangeIndexToSelect(i);
for(int i = 0; i < kSelectRange; i += kRangeIncrement) *Pointer<Float4>(out + 16 * i) = Shuffle(Float4(1.0f, 2.0f, 3.0f, 4.0f),
{ Float4(5.0f, 6.0f, 7.0f, 8.0f),
unsigned short select = rangeIndexToSelect(i); select);
*Pointer<Float4>(out + 16 * i) = Shuffle(Float4(1.0f, 2.0f, 3.0f, 4.0f),
Float4(5.0f, 6.0f, 7.0f, 8.0f),
select);
*Pointer<Int4>(out + (kSelectRange + i) * 16) = Shuffle(Int4(10, 11, 12, 13), *Pointer<Int4>(out + (kSelectRange + i) * 16) = Shuffle(Int4(10, 11, 12, 13),
Int4(14, 15, 16, 17), Int4(14, 15, 16, 17),
select); select);
*Pointer<UInt4>(out + (2 * kSelectRange + i) * 16) = Shuffle(UInt4(100, 101, 102, 103),
UInt4(104, 105, 106, 107),
select);
}
Return(0); *Pointer<UInt4>(out + (2 * kSelectRange + i) * 16) = Shuffle(UInt4(100, 101, 102, 103),
UInt4(104, 105, 106, 107),
select);
} }
auto routine = function("one"); Return(0);
}
if(routine) auto routine = function("one");
{
struct
{
float f[kSelectRange][4];
int i[kSelectRange][4];
unsigned u[kSelectRange][4];
} out;
memset(&out, 0, sizeof(out)); struct
{
float f[kSelectRange][4];
int i[kSelectRange][4];
unsigned u[kSelectRange][4];
} out;
routine(&out); memset(&out, 0, sizeof(out));
for(int i = 0; i < kSelectRange; i += kRangeIncrement) routine(&out);
{
EXPECT_EQ(out.f[i][0], float(1.0f + (i & 7)));
EXPECT_EQ(out.f[i][1], float(1.0f + ((i >> 3) & 7)));
EXPECT_EQ(out.f[i][2], float(1.0f + ((i >> 6) & 7)));
EXPECT_EQ(out.f[i][3], float(1.0f + ((i >> 9) & 7)));
}
for(int i = 0; i < kSelectRange; i += kRangeIncrement) for(int i = 0; i < kSelectRange; i += kRangeIncrement)
{ {
EXPECT_EQ(out.i[i][0], int(10 + (i & 7))); EXPECT_EQ(out.f[i][0], float(1.0f + (i & 7)));
EXPECT_EQ(out.i[i][1], int(10 + ((i >> 3) & 7))); EXPECT_EQ(out.f[i][1], float(1.0f + ((i >> 3) & 7)));
EXPECT_EQ(out.i[i][2], int(10 + ((i >> 6) & 7))); EXPECT_EQ(out.f[i][2], float(1.0f + ((i >> 6) & 7)));
EXPECT_EQ(out.i[i][3], int(10 + ((i >> 9) & 7))); EXPECT_EQ(out.f[i][3], float(1.0f + ((i >> 9) & 7)));
} }
for(int i = 0; i < kSelectRange; i += kRangeIncrement) for(int i = 0; i < kSelectRange; i += kRangeIncrement)
{ {
EXPECT_EQ(out.u[i][0], unsigned(100 + (i & 7))); EXPECT_EQ(out.i[i][0], int(10 + (i & 7)));
EXPECT_EQ(out.u[i][1], unsigned(100 + ((i >> 3) & 7))); EXPECT_EQ(out.i[i][1], int(10 + ((i >> 3) & 7)));
EXPECT_EQ(out.u[i][2], unsigned(100 + ((i >> 6) & 7))); EXPECT_EQ(out.i[i][2], int(10 + ((i >> 6) & 7)));
EXPECT_EQ(out.u[i][3], unsigned(100 + ((i >> 9) & 7))); EXPECT_EQ(out.i[i][3], int(10 + ((i >> 9) & 7)));
} }
}
for(int i = 0; i < kSelectRange; i += kRangeIncrement)
{
EXPECT_EQ(out.u[i][0], unsigned(100 + (i & 7)));
EXPECT_EQ(out.u[i][1], unsigned(100 + ((i >> 3) & 7)));
EXPECT_EQ(out.u[i][2], unsigned(100 + ((i >> 6) & 7)));
EXPECT_EQ(out.u[i][3], unsigned(100 + ((i >> 9) & 7)));
} }
} }
...@@ -688,12 +653,9 @@ TEST(ReactorUnitTests, Branching) ...@@ -688,12 +653,9 @@ TEST(ReactorUnitTests, Branching)
auto routine = function("one"); auto routine = function("one");
if(routine) int result = routine();
{
int result = routine();
EXPECT_EQ(result, 1000402222); EXPECT_EQ(result, 1000402222);
}
} }
TEST(ReactorUnitTests, MinMax) TEST(ReactorUnitTests, MinMax)
...@@ -720,64 +682,61 @@ TEST(ReactorUnitTests, MinMax) ...@@ -720,64 +682,61 @@ TEST(ReactorUnitTests, MinMax)
auto routine = function("one"); auto routine = function("one");
if(routine) unsigned int out[10][4];
{
unsigned int out[10][4];
memset(&out, 0, sizeof(out)); memset(&out, 0, sizeof(out));
routine(&out); routine(&out);
EXPECT_EQ(out[0][0], 0x00000000u); EXPECT_EQ(out[0][0], 0x00000000u);
EXPECT_EQ(out[0][1], 0x00000000u); EXPECT_EQ(out[0][1], 0x00000000u);
EXPECT_EQ(out[0][2], 0x00000000u); EXPECT_EQ(out[0][2], 0x00000000u);
EXPECT_EQ(out[0][3], 0x80000000u); EXPECT_EQ(out[0][3], 0x80000000u);
EXPECT_EQ(out[1][0], 0x3F800000u); EXPECT_EQ(out[1][0], 0x3F800000u);
EXPECT_EQ(out[1][1], 0x3F800000u); EXPECT_EQ(out[1][1], 0x3F800000u);
EXPECT_EQ(out[1][2], 0x00000000u); EXPECT_EQ(out[1][2], 0x00000000u);
EXPECT_EQ(out[1][3], 0x80000000u); EXPECT_EQ(out[1][3], 0x80000000u);
EXPECT_EQ(out[2][0], 0x00000000u); EXPECT_EQ(out[2][0], 0x00000000u);
EXPECT_EQ(out[2][1], 0x00000000u); EXPECT_EQ(out[2][1], 0x00000000u);
EXPECT_EQ(out[2][2], 0xFFFFFFFFu); EXPECT_EQ(out[2][2], 0xFFFFFFFFu);
EXPECT_EQ(out[2][3], 0x00000000u); EXPECT_EQ(out[2][3], 0x00000000u);
EXPECT_EQ(out[3][0], 0x00000001u); EXPECT_EQ(out[3][0], 0x00000001u);
EXPECT_EQ(out[3][1], 0x00000001u); EXPECT_EQ(out[3][1], 0x00000001u);
EXPECT_EQ(out[3][2], 0x00000000u); EXPECT_EQ(out[3][2], 0x00000000u);
EXPECT_EQ(out[3][3], 0x00000000u); EXPECT_EQ(out[3][3], 0x00000000u);
EXPECT_EQ(out[4][0], 0x00000000u); EXPECT_EQ(out[4][0], 0x00000000u);
EXPECT_EQ(out[4][1], 0x00000000u); EXPECT_EQ(out[4][1], 0x00000000u);
EXPECT_EQ(out[4][2], 0x00000000u); EXPECT_EQ(out[4][2], 0x00000000u);
EXPECT_EQ(out[4][3], 0x00000000u); EXPECT_EQ(out[4][3], 0x00000000u);
EXPECT_EQ(out[5][0], 0x00000001u); EXPECT_EQ(out[5][0], 0x00000001u);
EXPECT_EQ(out[5][1], 0x00000001u); EXPECT_EQ(out[5][1], 0x00000001u);
EXPECT_EQ(out[5][2], 0xFFFFFFFFu); EXPECT_EQ(out[5][2], 0xFFFFFFFFu);
EXPECT_EQ(out[5][3], 0x00000000u); EXPECT_EQ(out[5][3], 0x00000000u);
EXPECT_EQ(out[6][0], 0x00000000u); EXPECT_EQ(out[6][0], 0x00000000u);
EXPECT_EQ(out[6][1], 0x0000FFFFu); EXPECT_EQ(out[6][1], 0x0000FFFFu);
EXPECT_EQ(out[6][2], 0x00000000u); EXPECT_EQ(out[6][2], 0x00000000u);
EXPECT_EQ(out[6][3], 0x00000000u); EXPECT_EQ(out[6][3], 0x00000000u);
EXPECT_EQ(out[7][0], 0x00010001u); EXPECT_EQ(out[7][0], 0x00010001u);
EXPECT_EQ(out[7][1], 0x00000000u); EXPECT_EQ(out[7][1], 0x00000000u);
EXPECT_EQ(out[7][2], 0x00000000u); EXPECT_EQ(out[7][2], 0x00000000u);
EXPECT_EQ(out[7][3], 0x00000000u); EXPECT_EQ(out[7][3], 0x00000000u);
EXPECT_EQ(out[8][0], 0x00000000u); EXPECT_EQ(out[8][0], 0x00000000u);
EXPECT_EQ(out[8][1], 0x00000000u); EXPECT_EQ(out[8][1], 0x00000000u);
EXPECT_EQ(out[8][2], 0x00000000u); EXPECT_EQ(out[8][2], 0x00000000u);
EXPECT_EQ(out[8][3], 0x00000000u); EXPECT_EQ(out[8][3], 0x00000000u);
EXPECT_EQ(out[9][0], 0x00010001u); EXPECT_EQ(out[9][0], 0x00010001u);
EXPECT_EQ(out[9][1], 0x0000FFFFu); EXPECT_EQ(out[9][1], 0x0000FFFFu);
EXPECT_EQ(out[9][2], 0x00000000u); EXPECT_EQ(out[9][2], 0x00000000u);
EXPECT_EQ(out[9][3], 0x00000000u); EXPECT_EQ(out[9][3], 0x00000000u);
}
} }
TEST(ReactorUnitTests, NotNeg) TEST(ReactorUnitTests, NotNeg)
...@@ -803,59 +762,56 @@ TEST(ReactorUnitTests, NotNeg) ...@@ -803,59 +762,56 @@ TEST(ReactorUnitTests, NotNeg)
auto routine = function("one"); auto routine = function("one");
if(routine) unsigned int out[10][4];
{
unsigned int out[10][4];
memset(&out, 0, sizeof(out)); memset(&out, 0, sizeof(out));
routine(&out); routine(&out);
EXPECT_EQ(out[0][0], 0xAAAAAAAAu); EXPECT_EQ(out[0][0], 0xAAAAAAAAu);
EXPECT_EQ(out[0][1], 0x00000000u); EXPECT_EQ(out[0][1], 0x00000000u);
EXPECT_EQ(out[0][2], 0x00000000u); EXPECT_EQ(out[0][2], 0x00000000u);
EXPECT_EQ(out[0][3], 0x00000000u); EXPECT_EQ(out[0][3], 0x00000000u);
EXPECT_EQ(out[1][0], 0x0000AAAAu); EXPECT_EQ(out[1][0], 0x0000AAAAu);
EXPECT_EQ(out[1][1], 0x00000000u); EXPECT_EQ(out[1][1], 0x00000000u);
EXPECT_EQ(out[1][2], 0x00000000u); EXPECT_EQ(out[1][2], 0x00000000u);
EXPECT_EQ(out[1][3], 0x00000000u); EXPECT_EQ(out[1][3], 0x00000000u);
EXPECT_EQ(out[2][0], 0xAAAAAAAAu); EXPECT_EQ(out[2][0], 0xAAAAAAAAu);
EXPECT_EQ(out[2][1], 0x55555555u); EXPECT_EQ(out[2][1], 0x55555555u);
EXPECT_EQ(out[2][2], 0xFFFFFFFFu); EXPECT_EQ(out[2][2], 0xFFFFFFFFu);
EXPECT_EQ(out[2][3], 0x00000000u); EXPECT_EQ(out[2][3], 0x00000000u);
EXPECT_EQ(out[3][0], 0x5555AAAAu); EXPECT_EQ(out[3][0], 0x5555AAAAu);
EXPECT_EQ(out[3][1], 0x0000FFFFu); EXPECT_EQ(out[3][1], 0x0000FFFFu);
EXPECT_EQ(out[3][2], 0x00000000u); EXPECT_EQ(out[3][2], 0x00000000u);
EXPECT_EQ(out[3][3], 0x00000000u); EXPECT_EQ(out[3][3], 0x00000000u);
EXPECT_EQ(out[4][0], 0xAAAAAAABu); EXPECT_EQ(out[4][0], 0xAAAAAAABu);
EXPECT_EQ(out[4][1], 0x00000000u); EXPECT_EQ(out[4][1], 0x00000000u);
EXPECT_EQ(out[4][2], 0x00000000u); EXPECT_EQ(out[4][2], 0x00000000u);
EXPECT_EQ(out[4][3], 0x00000000u); EXPECT_EQ(out[4][3], 0x00000000u);
EXPECT_EQ(out[5][0], 0x0000AAABu); EXPECT_EQ(out[5][0], 0x0000AAABu);
EXPECT_EQ(out[5][1], 0x00000000u); EXPECT_EQ(out[5][1], 0x00000000u);
EXPECT_EQ(out[5][2], 0x00000000u); EXPECT_EQ(out[5][2], 0x00000000u);
EXPECT_EQ(out[5][3], 0x00000000u); EXPECT_EQ(out[5][3], 0x00000000u);
EXPECT_EQ(out[6][0], 0xAAAAAAABu); EXPECT_EQ(out[6][0], 0xAAAAAAABu);
EXPECT_EQ(out[6][1], 0x55555556u); EXPECT_EQ(out[6][1], 0x55555556u);
EXPECT_EQ(out[6][2], 0x00000000u); EXPECT_EQ(out[6][2], 0x00000000u);
EXPECT_EQ(out[6][3], 0x00000001u); EXPECT_EQ(out[6][3], 0x00000001u);
EXPECT_EQ(out[7][0], 0x5556AAABu); EXPECT_EQ(out[7][0], 0x5556AAABu);
EXPECT_EQ(out[7][1], 0x00010000u); EXPECT_EQ(out[7][1], 0x00010000u);
EXPECT_EQ(out[7][2], 0x00000000u); EXPECT_EQ(out[7][2], 0x00000000u);
EXPECT_EQ(out[7][3], 0x00000000u); EXPECT_EQ(out[7][3], 0x00000000u);
EXPECT_EQ(out[8][0], 0xBF800000u); EXPECT_EQ(out[8][0], 0xBF800000u);
EXPECT_EQ(out[8][1], 0x3F800000u); EXPECT_EQ(out[8][1], 0x3F800000u);
EXPECT_EQ(out[8][2], 0x80000000u); EXPECT_EQ(out[8][2], 0x80000000u);
EXPECT_EQ(out[8][3], 0x00000000u); EXPECT_EQ(out[8][3], 0x00000000u);
}
} }
TEST(ReactorUnitTests, FPtoUI) TEST(ReactorUnitTests, FPtoUI)
...@@ -876,24 +832,21 @@ TEST(ReactorUnitTests, FPtoUI) ...@@ -876,24 +832,21 @@ TEST(ReactorUnitTests, FPtoUI)
auto routine = function("one"); auto routine = function("one");
if(routine) unsigned int out[2][4];
{
unsigned int out[2][4];
memset(&out, 0, sizeof(out)); memset(&out, 0, sizeof(out));
routine(&out); routine(&out);
EXPECT_EQ(out[0][0], 0xF0000000u); EXPECT_EQ(out[0][0], 0xF0000000u);
EXPECT_EQ(out[0][1], 0xC0000000u); EXPECT_EQ(out[0][1], 0xC0000000u);
EXPECT_EQ(out[0][2], 0x00000001u); EXPECT_EQ(out[0][2], 0x00000001u);
EXPECT_EQ(out[0][3], 0xF000F000u); EXPECT_EQ(out[0][3], 0xF000F000u);
EXPECT_EQ(out[1][0], 0xF0000000u); EXPECT_EQ(out[1][0], 0xF0000000u);
EXPECT_EQ(out[1][1], 0x80000000u); EXPECT_EQ(out[1][1], 0x80000000u);
EXPECT_EQ(out[1][2], 0x00000000u); EXPECT_EQ(out[1][2], 0x00000000u);
EXPECT_EQ(out[1][3], 0xCCCC0000u); EXPECT_EQ(out[1][3], 0xCCCC0000u);
}
} }
TEST(ReactorUnitTests, VectorCompare) TEST(ReactorUnitTests, VectorCompare)
...@@ -915,40 +868,37 @@ TEST(ReactorUnitTests, VectorCompare) ...@@ -915,40 +868,37 @@ TEST(ReactorUnitTests, VectorCompare)
auto routine = function("one"); auto routine = function("one");
if(routine) unsigned int out[6][4];
{
unsigned int out[6][4];
memset(&out, 0, sizeof(out)); memset(&out, 0, sizeof(out));
routine(&out); routine(&out);
EXPECT_EQ(out[0][0], 0x00000000u); EXPECT_EQ(out[0][0], 0x00000000u);
EXPECT_EQ(out[0][1], 0xFFFFFFFFu); EXPECT_EQ(out[0][1], 0xFFFFFFFFu);
EXPECT_EQ(out[0][2], 0xFFFFFFFFu); EXPECT_EQ(out[0][2], 0xFFFFFFFFu);
EXPECT_EQ(out[0][3], 0xFFFFFFFFu); EXPECT_EQ(out[0][3], 0xFFFFFFFFu);
EXPECT_EQ(out[1][0], 0x00000000u); EXPECT_EQ(out[1][0], 0x00000000u);
EXPECT_EQ(out[1][1], 0x00000000u); EXPECT_EQ(out[1][1], 0x00000000u);
EXPECT_EQ(out[1][2], 0x00000000u); EXPECT_EQ(out[1][2], 0x00000000u);
EXPECT_EQ(out[1][3], 0xFFFFFFFFu); EXPECT_EQ(out[1][3], 0xFFFFFFFFu);
EXPECT_EQ(out[2][0], 0xFF000000u); EXPECT_EQ(out[2][0], 0xFF000000u);
EXPECT_EQ(out[2][1], 0x00000000u); EXPECT_EQ(out[2][1], 0x00000000u);
EXPECT_EQ(out[3][0], 0xFFFFFFFFu); EXPECT_EQ(out[3][0], 0xFFFFFFFFu);
EXPECT_EQ(out[3][1], 0xFFFFFFFFu); EXPECT_EQ(out[3][1], 0xFFFFFFFFu);
EXPECT_EQ(out[3][2], 0xFFFFFFFFu); EXPECT_EQ(out[3][2], 0xFFFFFFFFu);
EXPECT_EQ(out[3][3], 0xFFFFFFFFu); EXPECT_EQ(out[3][3], 0xFFFFFFFFu);
EXPECT_EQ(out[4][0], 0xFFFFFFFFu); EXPECT_EQ(out[4][0], 0xFFFFFFFFu);
EXPECT_EQ(out[4][1], 0x00000000u); EXPECT_EQ(out[4][1], 0x00000000u);
EXPECT_EQ(out[4][2], 0x00000000u); EXPECT_EQ(out[4][2], 0x00000000u);
EXPECT_EQ(out[4][3], 0xFFFFFFFFu); EXPECT_EQ(out[4][3], 0xFFFFFFFFu);
EXPECT_EQ(out[5][0], 0x00000000u); EXPECT_EQ(out[5][0], 0x00000000u);
EXPECT_EQ(out[5][1], 0xFFFFFFFFu); EXPECT_EQ(out[5][1], 0xFFFFFFFFu);
}
} }
TEST(ReactorUnitTests, SaturatedAddAndSubtract) TEST(ReactorUnitTests, SaturatedAddAndSubtract)
...@@ -1005,56 +955,53 @@ TEST(ReactorUnitTests, SaturatedAddAndSubtract) ...@@ -1005,56 +955,53 @@ TEST(ReactorUnitTests, SaturatedAddAndSubtract)
auto routine = function("one"); auto routine = function("one");
if(routine) unsigned int out[14][2];
{
unsigned int out[14][2];
memset(&out, 0, sizeof(out)); memset(&out, 0, sizeof(out));
routine(&out); routine(&out);
EXPECT_EQ(out[0][0], 0x08080808u); EXPECT_EQ(out[0][0], 0x08080808u);
EXPECT_EQ(out[0][1], 0x08080808u); EXPECT_EQ(out[0][1], 0x08080808u);
EXPECT_EQ(out[1][0], 0xFFFFFFFFu); EXPECT_EQ(out[1][0], 0xFFFFFFFFu);
EXPECT_EQ(out[1][1], 0xFEFFFFFFu); EXPECT_EQ(out[1][1], 0xFEFFFFFFu);
EXPECT_EQ(out[2][0], 0x00000000u); EXPECT_EQ(out[2][0], 0x00000000u);
EXPECT_EQ(out[2][1], 0x08060402u); EXPECT_EQ(out[2][1], 0x08060402u);
EXPECT_EQ(out[3][0], 0x08080808u); EXPECT_EQ(out[3][0], 0x08080808u);
EXPECT_EQ(out[3][1], 0x08080808u); EXPECT_EQ(out[3][1], 0x08080808u);
EXPECT_EQ(out[4][0], 0x7F7F7F7Fu); EXPECT_EQ(out[4][0], 0x7F7F7F7Fu);
EXPECT_EQ(out[4][1], 0x7E7F7F7Fu); EXPECT_EQ(out[4][1], 0x7E7F7F7Fu);
EXPECT_EQ(out[5][0], 0x80808080u); EXPECT_EQ(out[5][0], 0x80808080u);
EXPECT_EQ(out[5][1], 0x88868482u); EXPECT_EQ(out[5][1], 0x88868482u);
EXPECT_EQ(out[6][0], 0x80808080u); EXPECT_EQ(out[6][0], 0x80808080u);
EXPECT_EQ(out[6][1], 0x88868482u); EXPECT_EQ(out[6][1], 0x88868482u);
EXPECT_EQ(out[7][0], 0x00040004u); EXPECT_EQ(out[7][0], 0x00040004u);
EXPECT_EQ(out[7][1], 0x00040004u); EXPECT_EQ(out[7][1], 0x00040004u);
EXPECT_EQ(out[8][0], 0x7FFF7FFFu); EXPECT_EQ(out[8][0], 0x7FFF7FFFu);
EXPECT_EQ(out[8][1], 0x7FFE7FFFu); EXPECT_EQ(out[8][1], 0x7FFE7FFFu);
EXPECT_EQ(out[9][0], 0x80008000u); EXPECT_EQ(out[9][0], 0x80008000u);
EXPECT_EQ(out[9][1], 0x80048002u); EXPECT_EQ(out[9][1], 0x80048002u);
EXPECT_EQ(out[10][0], 0x80008000u); EXPECT_EQ(out[10][0], 0x80008000u);
EXPECT_EQ(out[10][1], 0x80048002u); EXPECT_EQ(out[10][1], 0x80048002u);
EXPECT_EQ(out[11][0], 0x00040004u); EXPECT_EQ(out[11][0], 0x00040004u);
EXPECT_EQ(out[11][1], 0x00040004u); EXPECT_EQ(out[11][1], 0x00040004u);
EXPECT_EQ(out[12][0], 0xFFFFFFFFu); EXPECT_EQ(out[12][0], 0xFFFFFFFFu);
EXPECT_EQ(out[12][1], 0xFFFEFFFFu); EXPECT_EQ(out[12][1], 0xFFFEFFFFu);
EXPECT_EQ(out[13][0], 0x00000000u); EXPECT_EQ(out[13][0], 0x00000000u);
EXPECT_EQ(out[13][1], 0x00040002u); EXPECT_EQ(out[13][1], 0x00040002u);
}
} }
TEST(ReactorUnitTests, Unpack) TEST(ReactorUnitTests, Unpack)
...@@ -1077,24 +1024,21 @@ TEST(ReactorUnitTests, Unpack) ...@@ -1077,24 +1024,21 @@ TEST(ReactorUnitTests, Unpack)
auto routine = function("one"); auto routine = function("one");
if(routine) unsigned int in[1][2];
{ unsigned int out[2][2];
unsigned int in[1][2];
unsigned int out[2][2];
memset(&out, 0, sizeof(out)); memset(&out, 0, sizeof(out));
in[0][0] = 0xABCDEF12u; in[0][0] = 0xABCDEF12u;
in[0][1] = 0x34567890u; in[0][1] = 0x34567890u;
routine(&in, &out); routine(&in, &out);
EXPECT_EQ(out[0][0], 0x78EF9012u); EXPECT_EQ(out[0][0], 0x78EF9012u);
EXPECT_EQ(out[0][1], 0x34AB56CDu); EXPECT_EQ(out[0][1], 0x34AB56CDu);
EXPECT_EQ(out[1][0], 0xEFEF1212u); EXPECT_EQ(out[1][0], 0xEFEF1212u);
EXPECT_EQ(out[1][1], 0xABABCDCDu); EXPECT_EQ(out[1][1], 0xABABCDCDu);
}
} }
TEST(ReactorUnitTests, Pack) TEST(ReactorUnitTests, Pack)
...@@ -1124,32 +1068,29 @@ TEST(ReactorUnitTests, Pack) ...@@ -1124,32 +1068,29 @@ TEST(ReactorUnitTests, Pack)
auto routine = function("one"); auto routine = function("one");
if(routine) unsigned int out[6][2];
{
unsigned int out[6][2];
memset(&out, 0, sizeof(out)); memset(&out, 0, sizeof(out));
routine(&out); routine(&out);
EXPECT_EQ(out[0][0], 0x0201FEFFu); EXPECT_EQ(out[0][0], 0x0201FEFFu);
EXPECT_EQ(out[0][1], 0xFCFD0403u); EXPECT_EQ(out[0][1], 0xFCFD0403u);
EXPECT_EQ(out[1][0], 0x02010000u); EXPECT_EQ(out[1][0], 0x02010000u);
EXPECT_EQ(out[1][1], 0x00000403u); EXPECT_EQ(out[1][1], 0x00000403u);
EXPECT_EQ(out[2][0], 0xFFFEFFFFu); EXPECT_EQ(out[2][0], 0xFFFEFFFFu);
EXPECT_EQ(out[2][1], 0x00020001u); EXPECT_EQ(out[2][1], 0x00020001u);
EXPECT_EQ(out[3][0], 0x00040003u); EXPECT_EQ(out[3][0], 0x00040003u);
EXPECT_EQ(out[3][1], 0xFFFCFFFDu); EXPECT_EQ(out[3][1], 0xFFFCFFFDu);
EXPECT_EQ(out[4][0], 0x00000000u); EXPECT_EQ(out[4][0], 0x00000000u);
EXPECT_EQ(out[4][1], 0x00020001u); EXPECT_EQ(out[4][1], 0x00020001u);
EXPECT_EQ(out[5][0], 0x00040003u); EXPECT_EQ(out[5][0], 0x00040003u);
EXPECT_EQ(out[5][1], 0x00000000u); EXPECT_EQ(out[5][1], 0x00000000u);
}
} }
TEST(ReactorUnitTests, MulHigh) TEST(ReactorUnitTests, MulHigh)
...@@ -1186,40 +1127,37 @@ TEST(ReactorUnitTests, MulHigh) ...@@ -1186,40 +1127,37 @@ TEST(ReactorUnitTests, MulHigh)
auto routine = function("one"); auto routine = function("one");
if(routine) unsigned int out[6][4];
{
unsigned int out[6][4];
memset(&out, 0, sizeof(out)); memset(&out, 0, sizeof(out));
routine(&out); routine(&out);
EXPECT_EQ(out[0][0], 0x00080002u); EXPECT_EQ(out[0][0], 0x00080002u);
EXPECT_EQ(out[0][1], 0x008D000Fu); EXPECT_EQ(out[0][1], 0x008D000Fu);
EXPECT_EQ(out[1][0], 0x00080002u); EXPECT_EQ(out[1][0], 0x00080002u);
EXPECT_EQ(out[1][1], 0xE8C0000Fu); EXPECT_EQ(out[1][1], 0xE8C0000Fu);
EXPECT_EQ(out[2][0], 0x00000000u); EXPECT_EQ(out[2][0], 0x00000000u);
EXPECT_EQ(out[2][1], 0xFFFFFE9Cu); EXPECT_EQ(out[2][1], 0xFFFFFE9Cu);
EXPECT_EQ(out[2][2], 0xFFFFFF23u); EXPECT_EQ(out[2][2], 0xFFFFFF23u);
EXPECT_EQ(out[2][3], 0x01480000u); EXPECT_EQ(out[2][3], 0x01480000u);
EXPECT_EQ(out[3][0], 0x00000000u); EXPECT_EQ(out[3][0], 0x00000000u);
EXPECT_EQ(out[3][1], 0x00000179u); EXPECT_EQ(out[3][1], 0x00000179u);
EXPECT_EQ(out[3][2], 0x00000311u); EXPECT_EQ(out[3][2], 0x00000311u);
EXPECT_EQ(out[3][3], 0xB5680000u); EXPECT_EQ(out[3][3], 0xB5680000u);
EXPECT_EQ(out[4][0], 0x3FFFFFFFu); EXPECT_EQ(out[4][0], 0x3FFFFFFFu);
EXPECT_EQ(out[4][1], 0xC0000000u); EXPECT_EQ(out[4][1], 0xC0000000u);
EXPECT_EQ(out[4][2], 0x3FFF8000u); EXPECT_EQ(out[4][2], 0x3FFF8000u);
EXPECT_EQ(out[4][3], 0x00000000u); EXPECT_EQ(out[4][3], 0x00000000u);
EXPECT_EQ(out[5][0], 0x3FFFFFFFu); EXPECT_EQ(out[5][0], 0x3FFFFFFFu);
EXPECT_EQ(out[5][1], 0x3FFFFFFFu); EXPECT_EQ(out[5][1], 0x3FFFFFFFu);
EXPECT_EQ(out[5][2], 0x40008000u); EXPECT_EQ(out[5][2], 0x40008000u);
EXPECT_EQ(out[5][3], 0xFFFFFFFEu); EXPECT_EQ(out[5][3], 0xFFFFFFFEu);
}
} }
TEST(ReactorUnitTests, MulAdd) TEST(ReactorUnitTests, MulAdd)
...@@ -1238,17 +1176,14 @@ TEST(ReactorUnitTests, MulAdd) ...@@ -1238,17 +1176,14 @@ TEST(ReactorUnitTests, MulAdd)
auto routine = function("one"); auto routine = function("one");
if(routine) unsigned int out[1][2];
{
unsigned int out[1][2];
memset(&out, 0, sizeof(out)); memset(&out, 0, sizeof(out));
routine(&out); routine(&out);
EXPECT_EQ(out[0][0], 0x000AE34Au); EXPECT_EQ(out[0][0], 0x000AE34Au);
EXPECT_EQ(out[0][1], 0x009D5254u); EXPECT_EQ(out[0][1], 0x009D5254u);
}
} }
TEST(ReactorUnitTests, PointersEqual) TEST(ReactorUnitTests, PointersEqual)
...@@ -1501,11 +1436,8 @@ TEST(ReactorUnitTests, Call_Args4) ...@@ -1501,11 +1436,8 @@ TEST(ReactorUnitTests, Call_Args4)
auto routine = function("one"); auto routine = function("one");
if(routine) int res = routine();
{ EXPECT_EQ(res, 1 + 2 + 3 + 4);
int res = routine();
EXPECT_EQ(res, 1 + 2 + 3 + 4);
}
} }
} }
...@@ -1528,11 +1460,8 @@ TEST(ReactorUnitTests, Call_Args5) ...@@ -1528,11 +1460,8 @@ TEST(ReactorUnitTests, Call_Args5)
auto routine = function("one"); auto routine = function("one");
if(routine) int res = routine();
{ EXPECT_EQ(res, 1 + 2 + 3 + 4 + 5);
int res = routine();
EXPECT_EQ(res, 1 + 2 + 3 + 4 + 5);
}
} }
} }
...@@ -1555,11 +1484,8 @@ TEST(ReactorUnitTests, Call_ArgsMany) ...@@ -1555,11 +1484,8 @@ TEST(ReactorUnitTests, Call_ArgsMany)
auto routine = function("one"); auto routine = function("one");
if(routine) int res = routine();
{ EXPECT_EQ(res, 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8);
int res = routine();
EXPECT_EQ(res, 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8);
}
} }
} }
...@@ -1586,11 +1512,8 @@ TEST(ReactorUnitTests, Call_ArgsMixed) ...@@ -1586,11 +1512,8 @@ TEST(ReactorUnitTests, Call_ArgsMixed)
auto routine = function("one"); auto routine = function("one");
if(routine) int res = routine();
{ EXPECT_EQ(res, 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8);
int res = routine();
EXPECT_EQ(res, 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8);
}
} }
} }
...@@ -1614,11 +1537,8 @@ TEST(ReactorUnitTests, Call_ArgsPointer) ...@@ -1614,11 +1537,8 @@ TEST(ReactorUnitTests, Call_ArgsPointer)
auto routine = function("one"); auto routine = function("one");
if(routine) int res = routine();
{ EXPECT_EQ(res, 12345);
int res = routine();
EXPECT_EQ(res, 12345);
}
} }
} }
...@@ -1781,12 +1701,9 @@ TYPED_TEST(CToReactorTCastTest, Casts) ...@@ -1781,12 +1701,9 @@ TYPED_TEST(CToReactorTCastTest, Casts)
routine = function("one"); routine = function("one");
if(routine) auto callable = (int (*)(CType))routine->getEntry();
{ CType in = {};
auto callable = (int (*)(CType))routine->getEntry(); EXPECT_EQ(callable(in), 1);
CType in = {};
EXPECT_EQ(callable(in), 1);
}
} }
} }
...@@ -1847,32 +1764,29 @@ TYPED_TEST(GEPTest, PtrOffsets) ...@@ -1847,32 +1764,29 @@ TYPED_TEST(GEPTest, PtrOffsets)
routine = function("one"); routine = function("one");
if(routine) auto callable = (CType * (*)(CType *, unsigned int)) routine->getEntry();
{
auto callable = (CType * (*)(CType *, unsigned int)) routine->getEntry();
union PtrInt union PtrInt
{ {
CType *p; CType *p;
size_t i; size_t i;
}; };
PtrInt base; PtrInt base;
base.i = 0x10000; base.i = 0x10000;
for(int i = 0; i < 5; i++) for(int i = 0; i < 5; i++)
{ {
PtrInt reference; PtrInt reference;
reference.p = &base.p[i]; reference.p = &base.p[i];
PtrInt result; PtrInt result;
result.p = callable(base.p, i); result.p = callable(base.p, i);
auto expect = reference.i - base.i; auto expect = reference.i - base.i;
auto got = result.i - base.i; auto got = result.i - base.i;
EXPECT_EQ(got, expect) << "i:" << i; EXPECT_EQ(got, expect) << "i:" << i;
}
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment