diff --git a/src/backend/core/CMakeLists.txt b/src/backend/core/CMakeLists.txt index 5cf653d6..e658ad0c 100644 --- a/src/backend/core/CMakeLists.txt +++ b/src/backend/core/CMakeLists.txt @@ -2,7 +2,7 @@ file(GLOB SOURCES *.cpp) file(GLOB HEADERS *.hpp) add_subdirectory(interpreter) -if(NOT ARM_APPLE) +if(NOT ARM64) add_subdirectory(jit) endif() add_subdirectory(mem) @@ -12,6 +12,6 @@ add_subdirectory(rsp) add_library(core ${SOURCES} ${HEADERS}) target_link_libraries(core PRIVATE interpreter mem mmio unarr registers rsp) -if(NOT ARM_APPLE) +if(NOT ARM64) target_link_libraries(core PRIVATE jit) endif() \ No newline at end of file diff --git a/src/backend/core/mmio/PIF.cpp b/src/backend/core/mmio/PIF.cpp index 79f830a6..b6c66823 100644 --- a/src/backend/core/mmio/PIF.cpp +++ b/src/backend/core/mmio/PIF.cpp @@ -354,202 +354,202 @@ void PIF::HLE(const bool pal, const CICType cicType) const { Util::warn("Unknown CIC type!"); break; case CIC_NUS_6101: - regs.Write(0, 0x0000000000000000); - regs.Write(1, 0x0000000000000000); - regs.Write(2, 0xFFFFFFFFDF6445CC); - regs.Write(3, 0xFFFFFFFFDF6445CC); - regs.Write(4, 0x00000000000045CC); - regs.Write(5, 0x0000000073EE317A); - regs.Write(6, 0xFFFFFFFFA4001F0C); - regs.Write(7, 0xFFFFFFFFA4001F08); - regs.Write(8, 0x00000000000000C0); - regs.Write(9, 0x0000000000000000); - regs.Write(10, 0x0000000000000040); - regs.Write(11, 0xFFFFFFFFA4000040); - regs.Write(12, 0xFFFFFFFFC7601FAC); - regs.Write(13, 0xFFFFFFFFC7601FAC); - regs.Write(14, 0xFFFFFFFFB48E2ED6); - regs.Write(15, 0xFFFFFFFFBA1A7D4B); - regs.Write(16, 0x0000000000000000); - regs.Write(17, 0x0000000000000000); - regs.Write(18, 0x0000000000000000); - regs.Write(19, 0x0000000000000000); - regs.Write(20, 0x0000000000000001); - regs.Write(21, 0x0000000000000000); - regs.Write(23, 0x0000000000000001); - regs.Write(24, 0x0000000000000002); - regs.Write(25, 0xFFFFFFFF905F4718); - regs.Write(26, 0x0000000000000000); - regs.Write(27, 0x0000000000000000); - regs.Write(28, 0x0000000000000000); - regs.Write(29, 0xFFFFFFFFA4001FF0); - regs.Write(30, 0x0000000000000000); - regs.Write(31, 0xFFFFFFFFA4001550); + regs.Write(0, 0x0000000000000000); + regs.Write(1, 0x0000000000000000); + regs.Write(2, 0xFFFFFFFFDF6445CC); + regs.Write(3, 0xFFFFFFFFDF6445CC); + regs.Write(4, 0x00000000000045CC); + regs.Write(5, 0x0000000073EE317A); + regs.Write(6, 0xFFFFFFFFA4001F0C); + regs.Write(7, 0xFFFFFFFFA4001F08); + regs.Write(8, 0x00000000000000C0); + regs.Write(9, 0x0000000000000000); + regs.Write(10, 0x0000000000000040); + regs.Write(11, 0xFFFFFFFFA4000040); + regs.Write(12, 0xFFFFFFFFC7601FAC); + regs.Write(13, 0xFFFFFFFFC7601FAC); + regs.Write(14, 0xFFFFFFFFB48E2ED6); + regs.Write(15, 0xFFFFFFFFBA1A7D4B); + regs.Write(16, 0x0000000000000000); + regs.Write(17, 0x0000000000000000); + regs.Write(18, 0x0000000000000000); + regs.Write(19, 0x0000000000000000); + regs.Write(20, 0x0000000000000001); + regs.Write(21, 0x0000000000000000); + regs.Write(23, 0x0000000000000001); + regs.Write(24, 0x0000000000000002); + regs.Write(25, 0xFFFFFFFF905F4718); + regs.Write(26, 0x0000000000000000); + regs.Write(27, 0x0000000000000000); + regs.Write(28, 0x0000000000000000); + regs.Write(29, 0xFFFFFFFFA4001FF0); + regs.Write(30, 0x0000000000000000); + regs.Write(31, 0xFFFFFFFFA4001550); regs.lo = 0xFFFFFFFFBA1A7D4Bll; regs.hi = 0xFFFFFFFF997EC317ll; break; case CIC_NUS_7102: - regs.Write(0, 0x0000000000000000); - regs.Write(1, 0x0000000000000001); - regs.Write(2, 0x000000001E324416); - regs.Write(3, 0x000000001E324416); - regs.Write(4, 0x0000000000004416); - regs.Write(5, 0x000000000EC5D9AF); - regs.Write(6, 0xFFFFFFFFA4001F0C); - regs.Write(7, 0xFFFFFFFFA4001F08); - regs.Write(8, 0x00000000000000C0); - regs.Write(9, 0x0000000000000000); - regs.Write(10, 0x0000000000000040); - regs.Write(11, 0xFFFFFFFFA4000040); - regs.Write(12, 0x00000000495D3D7B); - regs.Write(13, 0xFFFFFFFF8B3DFA1E); - regs.Write(14, 0x000000004798E4D4); - regs.Write(15, 0xFFFFFFFFF1D30682); - regs.Write(16, 0x0000000000000000); - regs.Write(17, 0x0000000000000000); - regs.Write(18, 0x0000000000000000); - regs.Write(19, 0x0000000000000000); - regs.Write(20, 0x0000000000000000); - regs.Write(21, 0x0000000000000000); - regs.Write(22, 0x000000000000003F); - regs.Write(23, 0x0000000000000007); - regs.Write(24, 0x0000000000000000); - regs.Write(25, 0x0000000013D05CAB); - regs.Write(26, 0x0000000000000000); - regs.Write(27, 0x0000000000000000); - regs.Write(28, 0x0000000000000000); - regs.Write(29, 0xFFFFFFFFA4001FF0); - regs.Write(30, 0x0000000000000000); - regs.Write(31, 0xFFFFFFFFA4001554); + regs.Write(0, 0x0000000000000000); + regs.Write(1, 0x0000000000000001); + regs.Write(2, 0x000000001E324416); + regs.Write(3, 0x000000001E324416); + regs.Write(4, 0x0000000000004416); + regs.Write(5, 0x000000000EC5D9AF); + regs.Write(6, 0xFFFFFFFFA4001F0C); + regs.Write(7, 0xFFFFFFFFA4001F08); + regs.Write(8, 0x00000000000000C0); + regs.Write(9, 0x0000000000000000); + regs.Write(10, 0x0000000000000040); + regs.Write(11, 0xFFFFFFFFA4000040); + regs.Write(12, 0x00000000495D3D7B); + regs.Write(13, 0xFFFFFFFF8B3DFA1E); + regs.Write(14, 0x000000004798E4D4); + regs.Write(15, 0xFFFFFFFFF1D30682); + regs.Write(16, 0x0000000000000000); + regs.Write(17, 0x0000000000000000); + regs.Write(18, 0x0000000000000000); + regs.Write(19, 0x0000000000000000); + regs.Write(20, 0x0000000000000000); + regs.Write(21, 0x0000000000000000); + regs.Write(22, 0x000000000000003F); + regs.Write(23, 0x0000000000000007); + regs.Write(24, 0x0000000000000000); + regs.Write(25, 0x0000000013D05CAB); + regs.Write(26, 0x0000000000000000); + regs.Write(27, 0x0000000000000000); + regs.Write(28, 0x0000000000000000); + regs.Write(29, 0xFFFFFFFFA4001FF0); + regs.Write(30, 0x0000000000000000); + regs.Write(31, 0xFFFFFFFFA4001554); regs.lo = 0xFFFFFFFFF1D30682ll; regs.hi = 0x0000000010054A98; break; case CIC_NUS_6102_7101: - regs.Write(0, 0x0000000000000000); - regs.Write(1, 0x0000000000000001); - regs.Write(2, 0x000000000EBDA536); - regs.Write(3, 0x000000000EBDA536); - regs.Write(4, 0x000000000000A536); - regs.Write(5, 0xFFFFFFFFC0F1D859); - regs.Write(6, 0xFFFFFFFFA4001F0C); - regs.Write(7, 0xFFFFFFFFA4001F08); - regs.Write(8, 0x00000000000000C0); - regs.Write(9, 0x0000000000000000); - regs.Write(10, 0x0000000000000040); - regs.Write(11, 0xFFFFFFFFA4000040); - regs.Write(12, 0xFFFFFFFFED10D0B3); - regs.Write(13, 0x000000001402A4CC); - regs.Write(14, 0x000000002DE108EA); - regs.Write(15, 0x000000003103E121); - regs.Write(16, 0x0000000000000000); - regs.Write(17, 0x0000000000000000); - regs.Write(18, 0x0000000000000000); - regs.Write(19, 0x0000000000000000); - regs.Write(20, 0x0000000000000001); - regs.Write(21, 0x0000000000000000); - regs.Write(23, 0x0000000000000000); - regs.Write(24, 0x0000000000000000); - regs.Write(25, 0xFFFFFFFF9DEBB54F); - regs.Write(26, 0x0000000000000000); - regs.Write(27, 0x0000000000000000); - regs.Write(28, 0x0000000000000000); - regs.Write(29, 0xFFFFFFFFA4001FF0); - regs.Write(30, 0x0000000000000000); - regs.Write(31, 0xFFFFFFFFA4001550); + regs.Write(0, 0x0000000000000000); + regs.Write(1, 0x0000000000000001); + regs.Write(2, 0x000000000EBDA536); + regs.Write(3, 0x000000000EBDA536); + regs.Write(4, 0x000000000000A536); + regs.Write(5, 0xFFFFFFFFC0F1D859); + regs.Write(6, 0xFFFFFFFFA4001F0C); + regs.Write(7, 0xFFFFFFFFA4001F08); + regs.Write(8, 0x00000000000000C0); + regs.Write(9, 0x0000000000000000); + regs.Write(10, 0x0000000000000040); + regs.Write(11, 0xFFFFFFFFA4000040); + regs.Write(12, 0xFFFFFFFFED10D0B3); + regs.Write(13, 0x000000001402A4CC); + regs.Write(14, 0x000000002DE108EA); + regs.Write(15, 0x000000003103E121); + regs.Write(16, 0x0000000000000000); + regs.Write(17, 0x0000000000000000); + regs.Write(18, 0x0000000000000000); + regs.Write(19, 0x0000000000000000); + regs.Write(20, 0x0000000000000001); + regs.Write(21, 0x0000000000000000); + regs.Write(23, 0x0000000000000000); + regs.Write(24, 0x0000000000000000); + regs.Write(25, 0xFFFFFFFF9DEBB54F); + regs.Write(26, 0x0000000000000000); + regs.Write(27, 0x0000000000000000); + regs.Write(28, 0x0000000000000000); + regs.Write(29, 0xFFFFFFFFA4001FF0); + regs.Write(30, 0x0000000000000000); + regs.Write(31, 0xFFFFFFFFA4001550); regs.hi = 0x000000003FC18657; regs.lo = 0x000000003103E121; if (pal) { - regs.Write(20, 0x0000000000000000); - regs.Write(23, 0x0000000000000006); - regs.Write(31, 0xFFFFFFFFA4001554); + regs.Write(20, 0x0000000000000000); + regs.Write(23, 0x0000000000000006); + regs.Write(31, 0xFFFFFFFFA4001554); } break; case CIC_NUS_6103_7103: - regs.Write(0, 0x0000000000000000); - regs.Write(1, 0x0000000000000001); - regs.Write(2, 0x0000000049A5EE96); - regs.Write(3, 0x0000000049A5EE96); - regs.Write(4, 0x000000000000EE96); - regs.Write(5, 0xFFFFFFFFD4646273); - regs.Write(6, 0xFFFFFFFFA4001F0C); - regs.Write(7, 0xFFFFFFFFA4001F08); - regs.Write(8, 0x00000000000000C0); - regs.Write(9, 0x0000000000000000); - regs.Write(10, 0x0000000000000040); - regs.Write(11, 0xFFFFFFFFA4000040); - regs.Write(12, 0xFFFFFFFFCE9DFBF7); - regs.Write(13, 0xFFFFFFFFCE9DFBF7); - regs.Write(14, 0x000000001AF99984); - regs.Write(15, 0x0000000018B63D28); - regs.Write(16, 0x0000000000000000); - regs.Write(17, 0x0000000000000000); - regs.Write(18, 0x0000000000000000); - regs.Write(19, 0x0000000000000000); - regs.Write(20, 0x0000000000000001); - regs.Write(21, 0x0000000000000000); - regs.Write(23, 0x0000000000000000); - regs.Write(24, 0x0000000000000000); - regs.Write(25, 0xFFFFFFFF825B21C9); - regs.Write(26, 0x0000000000000000); - regs.Write(27, 0x0000000000000000); - regs.Write(28, 0x0000000000000000); - regs.Write(29, 0xFFFFFFFFA4001FF0); - regs.Write(30, 0x0000000000000000); - regs.Write(31, 0xFFFFFFFFA4001550); + regs.Write(0, 0x0000000000000000); + regs.Write(1, 0x0000000000000001); + regs.Write(2, 0x0000000049A5EE96); + regs.Write(3, 0x0000000049A5EE96); + regs.Write(4, 0x000000000000EE96); + regs.Write(5, 0xFFFFFFFFD4646273); + regs.Write(6, 0xFFFFFFFFA4001F0C); + regs.Write(7, 0xFFFFFFFFA4001F08); + regs.Write(8, 0x00000000000000C0); + regs.Write(9, 0x0000000000000000); + regs.Write(10, 0x0000000000000040); + regs.Write(11, 0xFFFFFFFFA4000040); + regs.Write(12, 0xFFFFFFFFCE9DFBF7); + regs.Write(13, 0xFFFFFFFFCE9DFBF7); + regs.Write(14, 0x000000001AF99984); + regs.Write(15, 0x0000000018B63D28); + regs.Write(16, 0x0000000000000000); + regs.Write(17, 0x0000000000000000); + regs.Write(18, 0x0000000000000000); + regs.Write(19, 0x0000000000000000); + regs.Write(20, 0x0000000000000001); + regs.Write(21, 0x0000000000000000); + regs.Write(23, 0x0000000000000000); + regs.Write(24, 0x0000000000000000); + regs.Write(25, 0xFFFFFFFF825B21C9); + regs.Write(26, 0x0000000000000000); + regs.Write(27, 0x0000000000000000); + regs.Write(28, 0x0000000000000000); + regs.Write(29, 0xFFFFFFFFA4001FF0); + regs.Write(30, 0x0000000000000000); + regs.Write(31, 0xFFFFFFFFA4001550); regs.lo = 0x0000000018B63D28; regs.hi = 0x00000000625C2BBE; if (pal) { - regs.Write(20, 0x0000000000000000); - regs.Write(23, 0x0000000000000006); - regs.Write(31, 0xFFFFFFFFA4001554); + regs.Write(20, 0x0000000000000000); + regs.Write(23, 0x0000000000000006); + regs.Write(31, 0xFFFFFFFFA4001554); } break; case CIC_NUS_6105_7105: - regs.Write(0, 0x0000000000000000); - regs.Write(1, 0x0000000000000000); - regs.Write(2, 0xFFFFFFFFF58B0FBF); - regs.Write(3, 0xFFFFFFFFF58B0FBF); - regs.Write(4, 0x0000000000000FBF); - regs.Write(5, 0xFFFFFFFFDECAAAD1); - regs.Write(6, 0xFFFFFFFFA4001F0C); - regs.Write(7, 0xFFFFFFFFA4001F08); - regs.Write(8, 0x00000000000000C0); - regs.Write(9, 0x0000000000000000); - regs.Write(10, 0x0000000000000040); - regs.Write(11, 0xFFFFFFFFA4000040); - regs.Write(12, 0xFFFFFFFF9651F81E); - regs.Write(13, 0x000000002D42AAC5); - regs.Write(14, 0x00000000489B52CF); - regs.Write(15, 0x0000000056584D60); - regs.Write(16, 0x0000000000000000); - regs.Write(17, 0x0000000000000000); - regs.Write(18, 0x0000000000000000); - regs.Write(19, 0x0000000000000000); - regs.Write(20, 0x0000000000000001); - regs.Write(21, 0x0000000000000000); - regs.Write(23, 0x0000000000000000); - regs.Write(24, 0x0000000000000002); - regs.Write(25, 0xFFFFFFFFCDCE565F); - regs.Write(26, 0x0000000000000000); - regs.Write(27, 0x0000000000000000); - regs.Write(28, 0x0000000000000000); - regs.Write(29, 0xFFFFFFFFA4001FF0); - regs.Write(30, 0x0000000000000000); - regs.Write(31, 0xFFFFFFFFA4001550); + regs.Write(0, 0x0000000000000000); + regs.Write(1, 0x0000000000000000); + regs.Write(2, 0xFFFFFFFFF58B0FBF); + regs.Write(3, 0xFFFFFFFFF58B0FBF); + regs.Write(4, 0x0000000000000FBF); + regs.Write(5, 0xFFFFFFFFDECAAAD1); + regs.Write(6, 0xFFFFFFFFA4001F0C); + regs.Write(7, 0xFFFFFFFFA4001F08); + regs.Write(8, 0x00000000000000C0); + regs.Write(9, 0x0000000000000000); + regs.Write(10, 0x0000000000000040); + regs.Write(11, 0xFFFFFFFFA4000040); + regs.Write(12, 0xFFFFFFFF9651F81E); + regs.Write(13, 0x000000002D42AAC5); + regs.Write(14, 0x00000000489B52CF); + regs.Write(15, 0x0000000056584D60); + regs.Write(16, 0x0000000000000000); + regs.Write(17, 0x0000000000000000); + regs.Write(18, 0x0000000000000000); + regs.Write(19, 0x0000000000000000); + regs.Write(20, 0x0000000000000001); + regs.Write(21, 0x0000000000000000); + regs.Write(23, 0x0000000000000000); + regs.Write(24, 0x0000000000000002); + regs.Write(25, 0xFFFFFFFFCDCE565F); + regs.Write(26, 0x0000000000000000); + regs.Write(27, 0x0000000000000000); + regs.Write(28, 0x0000000000000000); + regs.Write(29, 0xFFFFFFFFA4001FF0); + regs.Write(30, 0x0000000000000000); + regs.Write(31, 0xFFFFFFFFA4001550); regs.lo = 0x0000000056584D60; regs.hi = 0x000000004BE35D1F; if (pal) { - regs.Write(20, 0x0000000000000000); - regs.Write(23, 0x0000000000000006); - regs.Write(31, 0xFFFFFFFFA4001554); + regs.Write(20, 0x0000000000000000); + regs.Write(23, 0x0000000000000006); + regs.Write(31, 0xFFFFFFFFA4001554); } mem.Write(regs, IMEM_REGION_START + 0x00, 0x3C0DBFC0); @@ -562,49 +562,49 @@ void PIF::HLE(const bool pal, const CICType cicType) const { mem.Write(regs, IMEM_REGION_START + 0x1C, 0x3C0BB000); break; case CIC_NUS_6106_7106: - regs.Write(0, 0x0000000000000000); - regs.Write(1, 0x0000000000000000); - regs.Write(2, 0xFFFFFFFFA95930A4); - regs.Write(3, 0xFFFFFFFFA95930A4); - regs.Write(4, 0x00000000000030A4); - regs.Write(5, 0xFFFFFFFFB04DC903); - regs.Write(6, 0xFFFFFFFFA4001F0C); - regs.Write(7, 0xFFFFFFFFA4001F08); - regs.Write(8, 0x00000000000000C0); - regs.Write(9, 0x0000000000000000); - regs.Write(10, 0x0000000000000040); - regs.Write(11, 0xFFFFFFFFA4000040); - regs.Write(12, 0xFFFFFFFFBCB59510); - regs.Write(13, 0xFFFFFFFFBCB59510); - regs.Write(14, 0x000000000CF85C13); - regs.Write(15, 0x000000007A3C07F4); - regs.Write(16, 0x0000000000000000); - regs.Write(17, 0x0000000000000000); - regs.Write(18, 0x0000000000000000); - regs.Write(19, 0x0000000000000000); - regs.Write(20, 0x0000000000000001); - regs.Write(21, 0x0000000000000000); - regs.Write(23, 0x0000000000000000); - regs.Write(24, 0x0000000000000002); - regs.Write(25, 0x00000000465E3F72); - regs.Write(26, 0x0000000000000000); - regs.Write(27, 0x0000000000000000); - regs.Write(28, 0x0000000000000000); - regs.Write(29, 0xFFFFFFFFA4001FF0); - regs.Write(30, 0x0000000000000000); - regs.Write(31, 0xFFFFFFFFA4001550); + regs.Write(0, 0x0000000000000000); + regs.Write(1, 0x0000000000000000); + regs.Write(2, 0xFFFFFFFFA95930A4); + regs.Write(3, 0xFFFFFFFFA95930A4); + regs.Write(4, 0x00000000000030A4); + regs.Write(5, 0xFFFFFFFFB04DC903); + regs.Write(6, 0xFFFFFFFFA4001F0C); + regs.Write(7, 0xFFFFFFFFA4001F08); + regs.Write(8, 0x00000000000000C0); + regs.Write(9, 0x0000000000000000); + regs.Write(10, 0x0000000000000040); + regs.Write(11, 0xFFFFFFFFA4000040); + regs.Write(12, 0xFFFFFFFFBCB59510); + regs.Write(13, 0xFFFFFFFFBCB59510); + regs.Write(14, 0x000000000CF85C13); + regs.Write(15, 0x000000007A3C07F4); + regs.Write(16, 0x0000000000000000); + regs.Write(17, 0x0000000000000000); + regs.Write(18, 0x0000000000000000); + regs.Write(19, 0x0000000000000000); + regs.Write(20, 0x0000000000000001); + regs.Write(21, 0x0000000000000000); + regs.Write(23, 0x0000000000000000); + regs.Write(24, 0x0000000000000002); + regs.Write(25, 0x00000000465E3F72); + regs.Write(26, 0x0000000000000000); + regs.Write(27, 0x0000000000000000); + regs.Write(28, 0x0000000000000000); + regs.Write(29, 0xFFFFFFFFA4001FF0); + regs.Write(30, 0x0000000000000000); + regs.Write(31, 0xFFFFFFFFA4001550); regs.lo = 0x000000007A3C07F4; regs.hi = 0x0000000023953898; if (pal) { - regs.Write(20, 0x0000000000000000); - regs.Write(23, 0x0000000000000006); - regs.Write(31, 0xFFFFFFFFA4001554); + regs.Write(20, 0x0000000000000000); + regs.Write(23, 0x0000000000000006); + regs.Write(31, 0xFFFFFFFFA4001554); } break; } - regs.Write(22, (cicSeeds[cicType] >> 8) & 0xFF); + regs.Write(22, (cicSeeds[cicType] >> 8) & 0xFF); regs.cop0.Reset(); mem.Write(regs, 0x04300004, 0x01010101); std::copy_n(mem.rom.cart.begin(), 0x1000, mem.mmio.rsp.dmem.begin()); diff --git a/src/backend/core/registers/Cop0.cpp b/src/backend/core/registers/Cop0.cpp index e0ef2077..f3b94bb1 100644 --- a/src/backend/core/registers/Cop0.cpp +++ b/src/backend/core/registers/Cop0.cpp @@ -455,17 +455,12 @@ template void Cop0::decode(T &cpu, u32 instr) { if constexpr (std::is_same_v) { decodeInterp(instr); - } else if constexpr (std::is_same_v) { - decodeJIT(cpu, instr); } else { Util::panic("What the fuck did you just give me?!!"); } } template void Cop0::decode(Interpreter &, u32); -template void Cop0::decode(JIT &, u32); - -void Cop0::decodeJIT(JIT &cpu, u32 instr) {} void Cop0::decodeInterp(const u32 instr) { const u8 mask_cop = instr >> 21 & 0x1F; diff --git a/src/backend/core/registers/Cop0.hpp b/src/backend/core/registers/Cop0.hpp index f7294cd2..862c504a 100644 --- a/src/backend/core/registers/Cop0.hpp +++ b/src/backend/core/registers/Cop0.hpp @@ -277,7 +277,6 @@ private: [[nodiscard]] FORCE_INLINE u32 GetCount() const { return u32(u64(count >> 1)); } void decodeInterp(u32); - void decodeJIT(JIT &, u32); void mtc0(u32); void dmtc0(u32); void mfc0(u32); diff --git a/src/backend/core/rsp/instructions.cpp b/src/backend/core/rsp/instructions.cpp index cc00d2d4..432c8c7d 100644 --- a/src/backend/core/rsp/instructions.cpp +++ b/src/backend/core/rsp/instructions.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include namespace n64 { diff --git a/src/common.hpp b/src/common.hpp index 6c7053a7..f3a616e5 100644 --- a/src/common.hpp +++ b/src/common.hpp @@ -1,7 +1,7 @@ #pragma once #include #include -#ifdef __aarch64__ +#ifdef USE_NEON #include #else #include diff --git a/src/frontend/CMakeLists.txt b/src/frontend/CMakeLists.txt index 76a3c090..d3c416a0 100644 --- a/src/frontend/CMakeLists.txt +++ b/src/frontend/CMakeLists.txt @@ -11,6 +11,7 @@ if (WIN32) endif () if(APPLE) + set(CMAKE_OSX_DEPLOYMENT_TARGET 11.0) enable_language(OBJC) endif() @@ -51,20 +52,34 @@ option(BUILD_SHARED_LIBS OFF) include(CheckCCompilerFlag) -check_c_compiler_flag(-msse4.1 HAS_SIMD) -if(NOT HAS_SIMD) - check_c_compiler_flag(-mfpu=neon HAS_SIMD) - if(APPLE AND HAS_SIMD) - set(ARM_APPLE ON) - message("Compiling on ARM MacOS, very experimental and cool!") - endif() +if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)") + set(X86 TRUE) + message("Compiling on x86") +else() + set(X86 FALSE) 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) + message("Defining SIMD_SUPPORT...") add_compile_definitions(SIMD_SUPPORT) - if(ARM_APPLE) - add_compile_options(-mfpu=neon) - else() + if(NOT ARM64) add_compile_options(-msse3 -msse4.1) endif() endif ()