summaryrefslogtreecommitdiff
path: root/Source/TestSuite/ASM/source/Helpers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/TestSuite/ASM/source/Helpers.cpp')
-rw-r--r--Source/TestSuite/ASM/source/Helpers.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/Source/TestSuite/ASM/source/Helpers.cpp b/Source/TestSuite/ASM/source/Helpers.cpp
new file mode 100644
index 0000000000..423ba296ee
--- /dev/null
+++ b/Source/TestSuite/ASM/source/Helpers.cpp
@@ -0,0 +1,59 @@
+
+#include "Defines.h"
+
+u32 GetCR0()
+{
+ u32 var;
+ asm(
+ "mfcr %0"
+ : "=&r"(var)
+ );
+ return var;
+}
+
+u32 GetCR(u32 num)
+{
+ u32 var;
+ if(num == 0) // wtf, silly people
+ return GetCR0();
+ else {
+ // TODO: Ugly switch is ugly, was failing otherwise
+ switch (num) {
+ case 1:
+ asm("mcrf 0, 1");
+ break;
+ case 2:
+ asm("mcrf 0, 2");
+ break;
+ case 3:
+ asm("mcrf 0, 3");
+ break;
+ case 4:
+ asm("mcrf 0, 4");
+ break;
+ case 5:
+ asm("mcrf 0, 5");
+ break;
+ case 6:
+ asm("mcrf 0, 6");
+ break;
+ case 7:
+ asm("mcrf 0, 7");
+ break;
+ default:
+ printf("Can this be more than 7?\n");
+ break;
+ }
+ return GetCR0();
+ }
+}
+
+u32 GetXER()
+{
+ u32 var;
+ asm(
+ "mfxer %0"
+ : "=&r"(var)
+ );
+ return var;
+} \ No newline at end of file