[Apple Arm] fix remaining issues. Now to figure out how to handle the JIT situation...

This commit is contained in:
SimoneN64
2025-02-09 20:38:25 +01:00
parent e57edb6a9a
commit 921956268e
7 changed files with 228 additions and 220 deletions

View File

@@ -2,7 +2,7 @@ file(GLOB SOURCES *.cpp)
file(GLOB HEADERS *.hpp) file(GLOB HEADERS *.hpp)
add_subdirectory(interpreter) add_subdirectory(interpreter)
if(NOT ARM_APPLE) if(NOT ARM64)
add_subdirectory(jit) add_subdirectory(jit)
endif() endif()
add_subdirectory(mem) add_subdirectory(mem)
@@ -12,6 +12,6 @@ add_subdirectory(rsp)
add_library(core ${SOURCES} ${HEADERS}) add_library(core ${SOURCES} ${HEADERS})
target_link_libraries(core PRIVATE interpreter mem mmio unarr registers rsp) target_link_libraries(core PRIVATE interpreter mem mmio unarr registers rsp)
if(NOT ARM_APPLE) if(NOT ARM64)
target_link_libraries(core PRIVATE jit) target_link_libraries(core PRIVATE jit)
endif() endif()

View File

@@ -354,202 +354,202 @@ void PIF::HLE(const bool pal, const CICType cicType) const {
Util::warn("Unknown CIC type!"); Util::warn("Unknown CIC type!");
break; break;
case CIC_NUS_6101: case CIC_NUS_6101:
regs.Write(0, 0x0000000000000000); regs.Write<u64>(0, 0x0000000000000000);
regs.Write(1, 0x0000000000000000); regs.Write<u64>(1, 0x0000000000000000);
regs.Write(2, 0xFFFFFFFFDF6445CC); regs.Write<u64>(2, 0xFFFFFFFFDF6445CC);
regs.Write(3, 0xFFFFFFFFDF6445CC); regs.Write<u64>(3, 0xFFFFFFFFDF6445CC);
regs.Write(4, 0x00000000000045CC); regs.Write<u64>(4, 0x00000000000045CC);
regs.Write(5, 0x0000000073EE317A); regs.Write<u64>(5, 0x0000000073EE317A);
regs.Write(6, 0xFFFFFFFFA4001F0C); regs.Write<u64>(6, 0xFFFFFFFFA4001F0C);
regs.Write(7, 0xFFFFFFFFA4001F08); regs.Write<u64>(7, 0xFFFFFFFFA4001F08);
regs.Write(8, 0x00000000000000C0); regs.Write<u64>(8, 0x00000000000000C0);
regs.Write(9, 0x0000000000000000); regs.Write<u64>(9, 0x0000000000000000);
regs.Write(10, 0x0000000000000040); regs.Write<u64>(10, 0x0000000000000040);
regs.Write(11, 0xFFFFFFFFA4000040); regs.Write<u64>(11, 0xFFFFFFFFA4000040);
regs.Write(12, 0xFFFFFFFFC7601FAC); regs.Write<u64>(12, 0xFFFFFFFFC7601FAC);
regs.Write(13, 0xFFFFFFFFC7601FAC); regs.Write<u64>(13, 0xFFFFFFFFC7601FAC);
regs.Write(14, 0xFFFFFFFFB48E2ED6); regs.Write<u64>(14, 0xFFFFFFFFB48E2ED6);
regs.Write(15, 0xFFFFFFFFBA1A7D4B); regs.Write<u64>(15, 0xFFFFFFFFBA1A7D4B);
regs.Write(16, 0x0000000000000000); regs.Write<u64>(16, 0x0000000000000000);
regs.Write(17, 0x0000000000000000); regs.Write<u64>(17, 0x0000000000000000);
regs.Write(18, 0x0000000000000000); regs.Write<u64>(18, 0x0000000000000000);
regs.Write(19, 0x0000000000000000); regs.Write<u64>(19, 0x0000000000000000);
regs.Write(20, 0x0000000000000001); regs.Write<u64>(20, 0x0000000000000001);
regs.Write(21, 0x0000000000000000); regs.Write<u64>(21, 0x0000000000000000);
regs.Write(23, 0x0000000000000001); regs.Write<u64>(23, 0x0000000000000001);
regs.Write(24, 0x0000000000000002); regs.Write<u64>(24, 0x0000000000000002);
regs.Write(25, 0xFFFFFFFF905F4718); regs.Write<u64>(25, 0xFFFFFFFF905F4718);
regs.Write(26, 0x0000000000000000); regs.Write<u64>(26, 0x0000000000000000);
regs.Write(27, 0x0000000000000000); regs.Write<u64>(27, 0x0000000000000000);
regs.Write(28, 0x0000000000000000); regs.Write<u64>(28, 0x0000000000000000);
regs.Write(29, 0xFFFFFFFFA4001FF0); regs.Write<u64>(29, 0xFFFFFFFFA4001FF0);
regs.Write(30, 0x0000000000000000); regs.Write<u64>(30, 0x0000000000000000);
regs.Write(31, 0xFFFFFFFFA4001550); regs.Write<u64>(31, 0xFFFFFFFFA4001550);
regs.lo = 0xFFFFFFFFBA1A7D4Bll; regs.lo = 0xFFFFFFFFBA1A7D4Bll;
regs.hi = 0xFFFFFFFF997EC317ll; regs.hi = 0xFFFFFFFF997EC317ll;
break; break;
case CIC_NUS_7102: case CIC_NUS_7102:
regs.Write(0, 0x0000000000000000); regs.Write<u64>(0, 0x0000000000000000);
regs.Write(1, 0x0000000000000001); regs.Write<u64>(1, 0x0000000000000001);
regs.Write(2, 0x000000001E324416); regs.Write<u64>(2, 0x000000001E324416);
regs.Write(3, 0x000000001E324416); regs.Write<u64>(3, 0x000000001E324416);
regs.Write(4, 0x0000000000004416); regs.Write<u64>(4, 0x0000000000004416);
regs.Write(5, 0x000000000EC5D9AF); regs.Write<u64>(5, 0x000000000EC5D9AF);
regs.Write(6, 0xFFFFFFFFA4001F0C); regs.Write<u64>(6, 0xFFFFFFFFA4001F0C);
regs.Write(7, 0xFFFFFFFFA4001F08); regs.Write<u64>(7, 0xFFFFFFFFA4001F08);
regs.Write(8, 0x00000000000000C0); regs.Write<u64>(8, 0x00000000000000C0);
regs.Write(9, 0x0000000000000000); regs.Write<u64>(9, 0x0000000000000000);
regs.Write(10, 0x0000000000000040); regs.Write<u64>(10, 0x0000000000000040);
regs.Write(11, 0xFFFFFFFFA4000040); regs.Write<u64>(11, 0xFFFFFFFFA4000040);
regs.Write(12, 0x00000000495D3D7B); regs.Write<u64>(12, 0x00000000495D3D7B);
regs.Write(13, 0xFFFFFFFF8B3DFA1E); regs.Write<u64>(13, 0xFFFFFFFF8B3DFA1E);
regs.Write(14, 0x000000004798E4D4); regs.Write<u64>(14, 0x000000004798E4D4);
regs.Write(15, 0xFFFFFFFFF1D30682); regs.Write<u64>(15, 0xFFFFFFFFF1D30682);
regs.Write(16, 0x0000000000000000); regs.Write<u64>(16, 0x0000000000000000);
regs.Write(17, 0x0000000000000000); regs.Write<u64>(17, 0x0000000000000000);
regs.Write(18, 0x0000000000000000); regs.Write<u64>(18, 0x0000000000000000);
regs.Write(19, 0x0000000000000000); regs.Write<u64>(19, 0x0000000000000000);
regs.Write(20, 0x0000000000000000); regs.Write<u64>(20, 0x0000000000000000);
regs.Write(21, 0x0000000000000000); regs.Write<u64>(21, 0x0000000000000000);
regs.Write(22, 0x000000000000003F); regs.Write<u64>(22, 0x000000000000003F);
regs.Write(23, 0x0000000000000007); regs.Write<u64>(23, 0x0000000000000007);
regs.Write(24, 0x0000000000000000); regs.Write<u64>(24, 0x0000000000000000);
regs.Write(25, 0x0000000013D05CAB); regs.Write<u64>(25, 0x0000000013D05CAB);
regs.Write(26, 0x0000000000000000); regs.Write<u64>(26, 0x0000000000000000);
regs.Write(27, 0x0000000000000000); regs.Write<u64>(27, 0x0000000000000000);
regs.Write(28, 0x0000000000000000); regs.Write<u64>(28, 0x0000000000000000);
regs.Write(29, 0xFFFFFFFFA4001FF0); regs.Write<u64>(29, 0xFFFFFFFFA4001FF0);
regs.Write(30, 0x0000000000000000); regs.Write<u64>(30, 0x0000000000000000);
regs.Write(31, 0xFFFFFFFFA4001554); regs.Write<u64>(31, 0xFFFFFFFFA4001554);
regs.lo = 0xFFFFFFFFF1D30682ll; regs.lo = 0xFFFFFFFFF1D30682ll;
regs.hi = 0x0000000010054A98; regs.hi = 0x0000000010054A98;
break; break;
case CIC_NUS_6102_7101: case CIC_NUS_6102_7101:
regs.Write(0, 0x0000000000000000); regs.Write<u64>(0, 0x0000000000000000);
regs.Write(1, 0x0000000000000001); regs.Write<u64>(1, 0x0000000000000001);
regs.Write(2, 0x000000000EBDA536); regs.Write<u64>(2, 0x000000000EBDA536);
regs.Write(3, 0x000000000EBDA536); regs.Write<u64>(3, 0x000000000EBDA536);
regs.Write(4, 0x000000000000A536); regs.Write<u64>(4, 0x000000000000A536);
regs.Write(5, 0xFFFFFFFFC0F1D859); regs.Write<u64>(5, 0xFFFFFFFFC0F1D859);
regs.Write(6, 0xFFFFFFFFA4001F0C); regs.Write<u64>(6, 0xFFFFFFFFA4001F0C);
regs.Write(7, 0xFFFFFFFFA4001F08); regs.Write<u64>(7, 0xFFFFFFFFA4001F08);
regs.Write(8, 0x00000000000000C0); regs.Write<u64>(8, 0x00000000000000C0);
regs.Write(9, 0x0000000000000000); regs.Write<u64>(9, 0x0000000000000000);
regs.Write(10, 0x0000000000000040); regs.Write<u64>(10, 0x0000000000000040);
regs.Write(11, 0xFFFFFFFFA4000040); regs.Write<u64>(11, 0xFFFFFFFFA4000040);
regs.Write(12, 0xFFFFFFFFED10D0B3); regs.Write<u64>(12, 0xFFFFFFFFED10D0B3);
regs.Write(13, 0x000000001402A4CC); regs.Write<u64>(13, 0x000000001402A4CC);
regs.Write(14, 0x000000002DE108EA); regs.Write<u64>(14, 0x000000002DE108EA);
regs.Write(15, 0x000000003103E121); regs.Write<u64>(15, 0x000000003103E121);
regs.Write(16, 0x0000000000000000); regs.Write<u64>(16, 0x0000000000000000);
regs.Write(17, 0x0000000000000000); regs.Write<u64>(17, 0x0000000000000000);
regs.Write(18, 0x0000000000000000); regs.Write<u64>(18, 0x0000000000000000);
regs.Write(19, 0x0000000000000000); regs.Write<u64>(19, 0x0000000000000000);
regs.Write(20, 0x0000000000000001); regs.Write<u64>(20, 0x0000000000000001);
regs.Write(21, 0x0000000000000000); regs.Write<u64>(21, 0x0000000000000000);
regs.Write(23, 0x0000000000000000); regs.Write<u64>(23, 0x0000000000000000);
regs.Write(24, 0x0000000000000000); regs.Write<u64>(24, 0x0000000000000000);
regs.Write(25, 0xFFFFFFFF9DEBB54F); regs.Write<u64>(25, 0xFFFFFFFF9DEBB54F);
regs.Write(26, 0x0000000000000000); regs.Write<u64>(26, 0x0000000000000000);
regs.Write(27, 0x0000000000000000); regs.Write<u64>(27, 0x0000000000000000);
regs.Write(28, 0x0000000000000000); regs.Write<u64>(28, 0x0000000000000000);
regs.Write(29, 0xFFFFFFFFA4001FF0); regs.Write<u64>(29, 0xFFFFFFFFA4001FF0);
regs.Write(30, 0x0000000000000000); regs.Write<u64>(30, 0x0000000000000000);
regs.Write(31, 0xFFFFFFFFA4001550); regs.Write<u64>(31, 0xFFFFFFFFA4001550);
regs.hi = 0x000000003FC18657; regs.hi = 0x000000003FC18657;
regs.lo = 0x000000003103E121; regs.lo = 0x000000003103E121;
if (pal) { if (pal) {
regs.Write(20, 0x0000000000000000); regs.Write<u64>(20, 0x0000000000000000);
regs.Write(23, 0x0000000000000006); regs.Write<u64>(23, 0x0000000000000006);
regs.Write(31, 0xFFFFFFFFA4001554); regs.Write<u64>(31, 0xFFFFFFFFA4001554);
} }
break; break;
case CIC_NUS_6103_7103: case CIC_NUS_6103_7103:
regs.Write(0, 0x0000000000000000); regs.Write<u64>(0, 0x0000000000000000);
regs.Write(1, 0x0000000000000001); regs.Write<u64>(1, 0x0000000000000001);
regs.Write(2, 0x0000000049A5EE96); regs.Write<u64>(2, 0x0000000049A5EE96);
regs.Write(3, 0x0000000049A5EE96); regs.Write<u64>(3, 0x0000000049A5EE96);
regs.Write(4, 0x000000000000EE96); regs.Write<u64>(4, 0x000000000000EE96);
regs.Write(5, 0xFFFFFFFFD4646273); regs.Write<u64>(5, 0xFFFFFFFFD4646273);
regs.Write(6, 0xFFFFFFFFA4001F0C); regs.Write<u64>(6, 0xFFFFFFFFA4001F0C);
regs.Write(7, 0xFFFFFFFFA4001F08); regs.Write<u64>(7, 0xFFFFFFFFA4001F08);
regs.Write(8, 0x00000000000000C0); regs.Write<u64>(8, 0x00000000000000C0);
regs.Write(9, 0x0000000000000000); regs.Write<u64>(9, 0x0000000000000000);
regs.Write(10, 0x0000000000000040); regs.Write<u64>(10, 0x0000000000000040);
regs.Write(11, 0xFFFFFFFFA4000040); regs.Write<u64>(11, 0xFFFFFFFFA4000040);
regs.Write(12, 0xFFFFFFFFCE9DFBF7); regs.Write<u64>(12, 0xFFFFFFFFCE9DFBF7);
regs.Write(13, 0xFFFFFFFFCE9DFBF7); regs.Write<u64>(13, 0xFFFFFFFFCE9DFBF7);
regs.Write(14, 0x000000001AF99984); regs.Write<u64>(14, 0x000000001AF99984);
regs.Write(15, 0x0000000018B63D28); regs.Write<u64>(15, 0x0000000018B63D28);
regs.Write(16, 0x0000000000000000); regs.Write<u64>(16, 0x0000000000000000);
regs.Write(17, 0x0000000000000000); regs.Write<u64>(17, 0x0000000000000000);
regs.Write(18, 0x0000000000000000); regs.Write<u64>(18, 0x0000000000000000);
regs.Write(19, 0x0000000000000000); regs.Write<u64>(19, 0x0000000000000000);
regs.Write(20, 0x0000000000000001); regs.Write<u64>(20, 0x0000000000000001);
regs.Write(21, 0x0000000000000000); regs.Write<u64>(21, 0x0000000000000000);
regs.Write(23, 0x0000000000000000); regs.Write<u64>(23, 0x0000000000000000);
regs.Write(24, 0x0000000000000000); regs.Write<u64>(24, 0x0000000000000000);
regs.Write(25, 0xFFFFFFFF825B21C9); regs.Write<u64>(25, 0xFFFFFFFF825B21C9);
regs.Write(26, 0x0000000000000000); regs.Write<u64>(26, 0x0000000000000000);
regs.Write(27, 0x0000000000000000); regs.Write<u64>(27, 0x0000000000000000);
regs.Write(28, 0x0000000000000000); regs.Write<u64>(28, 0x0000000000000000);
regs.Write(29, 0xFFFFFFFFA4001FF0); regs.Write<u64>(29, 0xFFFFFFFFA4001FF0);
regs.Write(30, 0x0000000000000000); regs.Write<u64>(30, 0x0000000000000000);
regs.Write(31, 0xFFFFFFFFA4001550); regs.Write<u64>(31, 0xFFFFFFFFA4001550);
regs.lo = 0x0000000018B63D28; regs.lo = 0x0000000018B63D28;
regs.hi = 0x00000000625C2BBE; regs.hi = 0x00000000625C2BBE;
if (pal) { if (pal) {
regs.Write(20, 0x0000000000000000); regs.Write<u64>(20, 0x0000000000000000);
regs.Write(23, 0x0000000000000006); regs.Write<u64>(23, 0x0000000000000006);
regs.Write(31, 0xFFFFFFFFA4001554); regs.Write<u64>(31, 0xFFFFFFFFA4001554);
} }
break; break;
case CIC_NUS_6105_7105: case CIC_NUS_6105_7105:
regs.Write(0, 0x0000000000000000); regs.Write<u64>(0, 0x0000000000000000);
regs.Write(1, 0x0000000000000000); regs.Write<u64>(1, 0x0000000000000000);
regs.Write(2, 0xFFFFFFFFF58B0FBF); regs.Write<u64>(2, 0xFFFFFFFFF58B0FBF);
regs.Write(3, 0xFFFFFFFFF58B0FBF); regs.Write<u64>(3, 0xFFFFFFFFF58B0FBF);
regs.Write(4, 0x0000000000000FBF); regs.Write<u64>(4, 0x0000000000000FBF);
regs.Write(5, 0xFFFFFFFFDECAAAD1); regs.Write<u64>(5, 0xFFFFFFFFDECAAAD1);
regs.Write(6, 0xFFFFFFFFA4001F0C); regs.Write<u64>(6, 0xFFFFFFFFA4001F0C);
regs.Write(7, 0xFFFFFFFFA4001F08); regs.Write<u64>(7, 0xFFFFFFFFA4001F08);
regs.Write(8, 0x00000000000000C0); regs.Write<u64>(8, 0x00000000000000C0);
regs.Write(9, 0x0000000000000000); regs.Write<u64>(9, 0x0000000000000000);
regs.Write(10, 0x0000000000000040); regs.Write<u64>(10, 0x0000000000000040);
regs.Write(11, 0xFFFFFFFFA4000040); regs.Write<u64>(11, 0xFFFFFFFFA4000040);
regs.Write(12, 0xFFFFFFFF9651F81E); regs.Write<u64>(12, 0xFFFFFFFF9651F81E);
regs.Write(13, 0x000000002D42AAC5); regs.Write<u64>(13, 0x000000002D42AAC5);
regs.Write(14, 0x00000000489B52CF); regs.Write<u64>(14, 0x00000000489B52CF);
regs.Write(15, 0x0000000056584D60); regs.Write<u64>(15, 0x0000000056584D60);
regs.Write(16, 0x0000000000000000); regs.Write<u64>(16, 0x0000000000000000);
regs.Write(17, 0x0000000000000000); regs.Write<u64>(17, 0x0000000000000000);
regs.Write(18, 0x0000000000000000); regs.Write<u64>(18, 0x0000000000000000);
regs.Write(19, 0x0000000000000000); regs.Write<u64>(19, 0x0000000000000000);
regs.Write(20, 0x0000000000000001); regs.Write<u64>(20, 0x0000000000000001);
regs.Write(21, 0x0000000000000000); regs.Write<u64>(21, 0x0000000000000000);
regs.Write(23, 0x0000000000000000); regs.Write<u64>(23, 0x0000000000000000);
regs.Write(24, 0x0000000000000002); regs.Write<u64>(24, 0x0000000000000002);
regs.Write(25, 0xFFFFFFFFCDCE565F); regs.Write<u64>(25, 0xFFFFFFFFCDCE565F);
regs.Write(26, 0x0000000000000000); regs.Write<u64>(26, 0x0000000000000000);
regs.Write(27, 0x0000000000000000); regs.Write<u64>(27, 0x0000000000000000);
regs.Write(28, 0x0000000000000000); regs.Write<u64>(28, 0x0000000000000000);
regs.Write(29, 0xFFFFFFFFA4001FF0); regs.Write<u64>(29, 0xFFFFFFFFA4001FF0);
regs.Write(30, 0x0000000000000000); regs.Write<u64>(30, 0x0000000000000000);
regs.Write(31, 0xFFFFFFFFA4001550); regs.Write<u64>(31, 0xFFFFFFFFA4001550);
regs.lo = 0x0000000056584D60; regs.lo = 0x0000000056584D60;
regs.hi = 0x000000004BE35D1F; regs.hi = 0x000000004BE35D1F;
if (pal) { if (pal) {
regs.Write(20, 0x0000000000000000); regs.Write<u64>(20, 0x0000000000000000);
regs.Write(23, 0x0000000000000006); regs.Write<u64>(23, 0x0000000000000006);
regs.Write(31, 0xFFFFFFFFA4001554); regs.Write<u64>(31, 0xFFFFFFFFA4001554);
} }
mem.Write<u32>(regs, IMEM_REGION_START + 0x00, 0x3C0DBFC0); mem.Write<u32>(regs, IMEM_REGION_START + 0x00, 0x3C0DBFC0);
@@ -562,49 +562,49 @@ void PIF::HLE(const bool pal, const CICType cicType) const {
mem.Write<u32>(regs, IMEM_REGION_START + 0x1C, 0x3C0BB000); mem.Write<u32>(regs, IMEM_REGION_START + 0x1C, 0x3C0BB000);
break; break;
case CIC_NUS_6106_7106: case CIC_NUS_6106_7106:
regs.Write(0, 0x0000000000000000); regs.Write<u64>(0, 0x0000000000000000);
regs.Write(1, 0x0000000000000000); regs.Write<u64>(1, 0x0000000000000000);
regs.Write(2, 0xFFFFFFFFA95930A4); regs.Write<u64>(2, 0xFFFFFFFFA95930A4);
regs.Write(3, 0xFFFFFFFFA95930A4); regs.Write<u64>(3, 0xFFFFFFFFA95930A4);
regs.Write(4, 0x00000000000030A4); regs.Write<u64>(4, 0x00000000000030A4);
regs.Write(5, 0xFFFFFFFFB04DC903); regs.Write<u64>(5, 0xFFFFFFFFB04DC903);
regs.Write(6, 0xFFFFFFFFA4001F0C); regs.Write<u64>(6, 0xFFFFFFFFA4001F0C);
regs.Write(7, 0xFFFFFFFFA4001F08); regs.Write<u64>(7, 0xFFFFFFFFA4001F08);
regs.Write(8, 0x00000000000000C0); regs.Write<u64>(8, 0x00000000000000C0);
regs.Write(9, 0x0000000000000000); regs.Write<u64>(9, 0x0000000000000000);
regs.Write(10, 0x0000000000000040); regs.Write<u64>(10, 0x0000000000000040);
regs.Write(11, 0xFFFFFFFFA4000040); regs.Write<u64>(11, 0xFFFFFFFFA4000040);
regs.Write(12, 0xFFFFFFFFBCB59510); regs.Write<u64>(12, 0xFFFFFFFFBCB59510);
regs.Write(13, 0xFFFFFFFFBCB59510); regs.Write<u64>(13, 0xFFFFFFFFBCB59510);
regs.Write(14, 0x000000000CF85C13); regs.Write<u64>(14, 0x000000000CF85C13);
regs.Write(15, 0x000000007A3C07F4); regs.Write<u64>(15, 0x000000007A3C07F4);
regs.Write(16, 0x0000000000000000); regs.Write<u64>(16, 0x0000000000000000);
regs.Write(17, 0x0000000000000000); regs.Write<u64>(17, 0x0000000000000000);
regs.Write(18, 0x0000000000000000); regs.Write<u64>(18, 0x0000000000000000);
regs.Write(19, 0x0000000000000000); regs.Write<u64>(19, 0x0000000000000000);
regs.Write(20, 0x0000000000000001); regs.Write<u64>(20, 0x0000000000000001);
regs.Write(21, 0x0000000000000000); regs.Write<u64>(21, 0x0000000000000000);
regs.Write(23, 0x0000000000000000); regs.Write<u64>(23, 0x0000000000000000);
regs.Write(24, 0x0000000000000002); regs.Write<u64>(24, 0x0000000000000002);
regs.Write(25, 0x00000000465E3F72); regs.Write<u64>(25, 0x00000000465E3F72);
regs.Write(26, 0x0000000000000000); regs.Write<u64>(26, 0x0000000000000000);
regs.Write(27, 0x0000000000000000); regs.Write<u64>(27, 0x0000000000000000);
regs.Write(28, 0x0000000000000000); regs.Write<u64>(28, 0x0000000000000000);
regs.Write(29, 0xFFFFFFFFA4001FF0); regs.Write<u64>(29, 0xFFFFFFFFA4001FF0);
regs.Write(30, 0x0000000000000000); regs.Write<u64>(30, 0x0000000000000000);
regs.Write(31, 0xFFFFFFFFA4001550); regs.Write<u64>(31, 0xFFFFFFFFA4001550);
regs.lo = 0x000000007A3C07F4; regs.lo = 0x000000007A3C07F4;
regs.hi = 0x0000000023953898; regs.hi = 0x0000000023953898;
if (pal) { if (pal) {
regs.Write(20, 0x0000000000000000); regs.Write<u64>(20, 0x0000000000000000);
regs.Write(23, 0x0000000000000006); regs.Write<u64>(23, 0x0000000000000006);
regs.Write(31, 0xFFFFFFFFA4001554); regs.Write<u64>(31, 0xFFFFFFFFA4001554);
} }
break; break;
} }
regs.Write(22, (cicSeeds[cicType] >> 8) & 0xFF); regs.Write<u8>(22, (cicSeeds[cicType] >> 8) & 0xFF);
regs.cop0.Reset(); regs.cop0.Reset();
mem.Write<u32>(regs, 0x04300004, 0x01010101); mem.Write<u32>(regs, 0x04300004, 0x01010101);
std::copy_n(mem.rom.cart.begin(), 0x1000, mem.mmio.rsp.dmem.begin()); std::copy_n(mem.rom.cart.begin(), 0x1000, mem.mmio.rsp.dmem.begin());

View File

@@ -455,17 +455,12 @@ template <class T>
void Cop0::decode(T &cpu, u32 instr) { void Cop0::decode(T &cpu, u32 instr) {
if constexpr (std::is_same_v<decltype(cpu), Interpreter &>) { if constexpr (std::is_same_v<decltype(cpu), Interpreter &>) {
decodeInterp(instr); decodeInterp(instr);
} else if constexpr (std::is_same_v<decltype(cpu), JIT &>) {
decodeJIT(cpu, instr);
} else { } else {
Util::panic("What the fuck did you just give me?!!"); Util::panic("What the fuck did you just give me?!!");
} }
} }
template void Cop0::decode<Interpreter>(Interpreter &, u32); template void Cop0::decode<Interpreter>(Interpreter &, u32);
template void Cop0::decode<JIT>(JIT &, u32);
void Cop0::decodeJIT(JIT &cpu, u32 instr) {}
void Cop0::decodeInterp(const u32 instr) { void Cop0::decodeInterp(const u32 instr) {
const u8 mask_cop = instr >> 21 & 0x1F; const u8 mask_cop = instr >> 21 & 0x1F;

View File

@@ -277,7 +277,6 @@ private:
[[nodiscard]] FORCE_INLINE u32 GetCount() const { return u32(u64(count >> 1)); } [[nodiscard]] FORCE_INLINE u32 GetCount() const { return u32(u64(count >> 1)); }
void decodeInterp(u32); void decodeInterp(u32);
void decodeJIT(JIT &, u32);
void mtc0(u32); void mtc0(u32);
void dmtc0(u32); void dmtc0(u32);
void mfc0(u32); void mfc0(u32);

View File

@@ -3,7 +3,6 @@
#include <RSP.hpp> #include <RSP.hpp>
#include <RSQ.hpp> #include <RSQ.hpp>
#include <core/registers/Registers.hpp> #include <core/registers/Registers.hpp>
#include <immintrin.h>
#include <log.hpp> #include <log.hpp>
namespace n64 { namespace n64 {

View File

@@ -1,7 +1,7 @@
#pragma once #pragma once
#include <bitset> #include <bitset>
#include <cstdint> #include <cstdint>
#ifdef __aarch64__ #ifdef USE_NEON
#include <sse2neon.h> #include <sse2neon.h>
#else #else
#include <emmintrin.h> #include <emmintrin.h>

View File

@@ -11,6 +11,7 @@ if (WIN32)
endif () endif ()
if(APPLE) if(APPLE)
set(CMAKE_OSX_DEPLOYMENT_TARGET 11.0)
enable_language(OBJC) enable_language(OBJC)
endif() endif()
@@ -51,20 +52,34 @@ option(BUILD_SHARED_LIBS OFF)
include(CheckCCompilerFlag) include(CheckCCompilerFlag)
check_c_compiler_flag(-msse4.1 HAS_SIMD) if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
if(NOT HAS_SIMD) set(X86 TRUE)
check_c_compiler_flag(-mfpu=neon HAS_SIMD) message("Compiling on x86")
if(APPLE AND HAS_SIMD) else()
set(ARM_APPLE ON) set(X86 FALSE)
message("Compiling on ARM MacOS, very experimental and cool!")
endif()
endif() endif()
if(CMAKE_SYSTEM_PROCESSOR MATCHES "(aarch64)|(AARCH64)|(arm64)|(ARM64)")
set(ARM64 TRUE)
message("Compiling on Arm64")
else()
set(ARM64 FALSE)
endif()
if(ARM64 AND APPLE)
message("Defining USE_NEON...")
add_compile_definitions(USE_NEON)
set(HAS_SIMD TRUE)
endif()
if(NOT ARM64)
check_c_compiler_flag(-msse4.1 HAS_SIMD)
endif ()
if (HAS_SIMD) if (HAS_SIMD)
message("Defining SIMD_SUPPORT...")
add_compile_definitions(SIMD_SUPPORT) add_compile_definitions(SIMD_SUPPORT)
if(ARM_APPLE) if(NOT ARM64)
add_compile_options(-mfpu=neon)
else()
add_compile_options(-msse3 -msse4.1) add_compile_options(-msse3 -msse4.1)
endif() endif()
endif () endif ()