summaryrefslogtreecommitdiff
path: root/Source/UnitTests/DivUtilsTest.cpp
diff options
context:
space:
mode:
authorSintendo <bram.speeckaert@gmail.com>2021-03-03 23:48:28 +0100
committerSintendo <bram.speeckaert@gmail.com>2021-03-07 18:27:36 +0100
commit5bb8798df614fc1b03a69529a9c1b7b0cf6f49b7 (patch)
tree079a20f920c6fbfa096aa2bded94ca58d7be59da /Source/UnitTests/DivUtilsTest.cpp
parentc9adc60d730812c1cb09bcce9bf7b4ace91883c3 (diff)
JitCommon: Signed 32-bit division magic constants
Add a function to calculate the magic constants required to optimize signed 32-bit division. Since this optimization is not exclusive to any particular architecture, JitCommon seemed like a good place to put this.
Diffstat (limited to 'Source/UnitTests/DivUtilsTest.cpp')
-rw-r--r--Source/UnitTests/DivUtilsTest.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/Source/UnitTests/DivUtilsTest.cpp b/Source/UnitTests/DivUtilsTest.cpp
new file mode 100644
index 0000000000..7802fc8496
--- /dev/null
+++ b/Source/UnitTests/DivUtilsTest.cpp
@@ -0,0 +1,33 @@
+// Copyright 2021 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#include <gtest/gtest.h>
+
+#include "Core/PowerPC/JitCommon/DivUtils.h"
+
+using namespace JitCommon;
+
+TEST(DivUtils, Signed)
+{
+ Magic m3 = SignedDivisionConstants(3);
+ Magic m5 = SignedDivisionConstants(5);
+ Magic m7 = SignedDivisionConstants(7);
+ Magic minus3 = SignedDivisionConstants(-3);
+ Magic minus5 = SignedDivisionConstants(-5);
+ Magic minus7 = SignedDivisionConstants(-7);
+
+ EXPECT_EQ(0x55555556, m3.multiplier);
+ EXPECT_EQ(0, m3.shift);
+ EXPECT_EQ(0x66666667, m5.multiplier);
+ EXPECT_EQ(1, m5.shift);
+ EXPECT_EQ(-0x6DB6DB6D, m7.multiplier);
+ EXPECT_EQ(2, m7.shift);
+
+ EXPECT_EQ(-0x55555556, minus3.multiplier);
+ EXPECT_EQ(0, minus3.shift);
+ EXPECT_EQ(-0x66666667, minus5.multiplier);
+ EXPECT_EQ(1, minus5.shift);
+ EXPECT_EQ(0x6DB6DB6D, minus7.multiplier);
+ EXPECT_EQ(2, minus7.shift);
+}