mirror of
https://github.com/open-goal/jak-project
synced 2026-09-02 02:02:51 -04:00
arm64: Apple Silicon support (#4390)
Got OpenGOAL building and running natively on Apple Silicon. This is the rest of the port after the smaller arm64 emitter PRs. I was told pushing one big PR was okay. This covers goalc, the runtime, linker, kernel and the GOAL asm. The new paths have native tests. I also found four more emitter bugs while running it. They're in scalar sqrt, 128-bit stores, scalar max and indexed stores above 4 GB. Spent a while cleaning it up so it's easier to read. 4am gotta sleep lol Closes #3841 --------- Co-authored-by: Tyler Wilding <xtvaser@gmail.com>
This commit is contained in:
@@ -238,18 +238,32 @@ TEST(CodeTester, execute_push_pop_simd_x86) {
|
||||
|
||||
TEST(CodeTester, execute_push_pop_simd_arm64) {
|
||||
CodeTester tester(emitter::InstructionSet::ARM64);
|
||||
tester.init_code_buffer(512);
|
||||
tester.init_code_buffer(1024);
|
||||
tester.emit_push_all_simd();
|
||||
tester.emit_pop_all_simd();
|
||||
tester.emit_return();
|
||||
EXPECT_EQ(
|
||||
tester.dump_to_hex_string(true),
|
||||
"FF4300D1E003803DFF4300D1E103803DFF4300D1E203803DFF4300D1E303803DFF4300D1E403803DFF4300D1E503"
|
||||
"803DFF4300D1E603803DFF4300D1E703803DFF4300D1E803803DFF4300D1E903803DFF4300D1EA03803DFF4300D1"
|
||||
"EB03803DFF4300D1EC03803DFF4300D1ED03803DFF4300D1EE03803DFF4300D1EF03803DEF03C03DFF430091EE03"
|
||||
"C03DFF430091ED03C03DFF430091EC03C03DFF430091EB03C03DFF430091EA03C03DFF430091E903C03DFF430091"
|
||||
"E803C03DFF430091E703C03DFF430091E603C03DFF430091E503C03DFF430091E403C03DFF430091E303C03DFF43"
|
||||
"0091E203C03DFF430091E103C03DFF430091E003C03DFF430091C0035FD6");
|
||||
EXPECT_EQ(tester.dump_to_hex_string(true),
|
||||
"FF4300D1E003803DFF4300D1E103803DFF4300D1E203803DFF4300D1E303803DFF4300D1E403803DFF4300"
|
||||
"D1E503803DFF43"
|
||||
"00D1E603803DFF4300D1E703803DFF4300D1E803803DFF4300D1E903803DFF4300D1EA03803DFF4300D1EB"
|
||||
"03803DFF4300D1"
|
||||
"EC03803DFF4300D1ED03803DFF4300D1EE03803DFF4300D1EF03803DFF4300D1F003803DFF4300D1F10380"
|
||||
"3DFF4300D1F203"
|
||||
"803DFF4300D1F303803DFF4300D1F403803DFF4300D1F503803DFF4300D1F603803DFF4300D1F703803DFF"
|
||||
"4300D1F803803D"
|
||||
"FF4300D1F903803DFF4300D1FA03803DFF4300D1FB03803DFF4300D1FC03803DFF4300D1FD03803DFF4300"
|
||||
"D1FE03803DFF43"
|
||||
"00D1FF03803DFF03C03DFF430091FE03C03DFF430091FD03C03DFF430091FC03C03DFF430091FB03C03DFF"
|
||||
"430091FA03C03D"
|
||||
"FF430091F903C03DFF430091F803C03DFF430091F703C03DFF430091F603C03DFF430091F503C03DFF4300"
|
||||
"91F403C03DFF43"
|
||||
"0091F303C03DFF430091F203C03DFF430091F103C03DFF430091F003C03DFF430091EF03C03DFF430091EE"
|
||||
"03C03DFF430091"
|
||||
"ED03C03DFF430091EC03C03DFF430091EB03C03DFF430091EA03C03DFF430091E903C03DFF430091E803C0"
|
||||
"3DFF430091E703"
|
||||
"C03DFF430091E603C03DFF430091E503C03DFF430091E403C03DFF430091E303C03DFF430091E203C03DFF"
|
||||
"430091E103C03D"
|
||||
"FF430091E003C03DFF430091C0035FD6");
|
||||
execute_tester(tester);
|
||||
}
|
||||
|
||||
@@ -278,7 +292,7 @@ TEST(CodeTester, execute_push_pop_all_the_things_x86) {
|
||||
|
||||
TEST(CodeTester, execute_push_pop_all_the_things_arm64) {
|
||||
CodeTester tester(emitter::InstructionSet::ARM64);
|
||||
tester.init_code_buffer(512);
|
||||
tester.init_code_buffer(1024);
|
||||
tester.emit_push_all_simd();
|
||||
tester.emit_push_all_gprs();
|
||||
|
||||
@@ -288,17 +302,36 @@ TEST(CodeTester, execute_push_pop_all_the_things_arm64) {
|
||||
tester.emit_return();
|
||||
EXPECT_EQ(tester.dump_to_hex_string(true),
|
||||
"FF4300D1E003803DFF4300D1E103803DFF4300D1E203803DFF4300D1E303803DFF4300D1E403803DFF4300"
|
||||
"D1E503803DFF4300D1E603803DFF4300D1E703803DFF4300D1E803803DFF4300D1E903803DFF4300D1EA03"
|
||||
"803DFF4300D1EB03803DFF4300D1EC03803DFF4300D1ED03803DFF4300D1EE03803DFF4300D1EF03803DE0"
|
||||
"0F1FF8E10F1FF8E20F1FF8E30F1FF8E40F1FF8E50F1FF8E60F1FF8E70F1FF8E80F1FF8E90F1FF8EA0F1FF8"
|
||||
"D1E503803DFF43"
|
||||
"00D1E603803DFF4300D1E703803DFF4300D1E803803DFF4300D1E903803DFF4300D1EA03803DFF4300D1EB"
|
||||
"03803DFF4300D1"
|
||||
"EC03803DFF4300D1ED03803DFF4300D1EE03803DFF4300D1EF03803DFF4300D1F003803DFF4300D1F10380"
|
||||
"3DFF4300D1F203"
|
||||
"803DFF4300D1F303803DFF4300D1F403803DFF4300D1F503803DFF4300D1F603803DFF4300D1F703803DFF"
|
||||
"4300D1F803803D"
|
||||
"FF4300D1F903803DFF4300D1FA03803DFF4300D1FB03803DFF4300D1FC03803DFF4300D1FD03803DFF4300"
|
||||
"D1FE03803DFF43"
|
||||
"00D1FF03803DE00F1FF8E10F1FF8E20F1FF8E30F1FF8E40F1FF8E50F1FF8E60F1FF8E70F1FF8E80F1FF8E9"
|
||||
"0F1FF8EA0F1FF8"
|
||||
"EB0F1FF8EC0F1FF8ED0F1FF8EE0F1FF8EF0F1FF8F00F1FF8F10F1FF8F20F1FF8F30F1FF8F40F1FF8F50F1F"
|
||||
"F8F60F1FF8F70F1FF8F80F1FF8F90F1FF8FA0F1FF8FB0F1FF8FC0F1FF8FD0F1FF8FE0F1FF8FE0741F8FD07"
|
||||
"41F8FC0741F8FB0741F8FA0741F8F90741F8F80741F8F70741F8F60741F8F50741F8F40741F8F30741F8F2"
|
||||
"0741F8F10741F8F00741F8EF0741F8EE0741F8ED0741F8EC0741F8EB0741F8EA0741F8E90741F8E80741F8"
|
||||
"E70741F8E60741F8E50741F8E40741F8E30741F8E20741F8E10741F8E00741F8EF03C03DFF430091EE03C0"
|
||||
"3DFF430091ED03C03DFF430091EC03C03DFF430091EB03C03DFF430091EA03C03DFF430091E903C03DFF43"
|
||||
"0091E803C03DFF430091E703C03DFF430091E603C03DFF430091E503C03DFF430091E403C03DFF430091E3"
|
||||
"03C03DFF430091E203C03DFF430091E103C03DFF430091E003C03DFF430091C0035FD6");
|
||||
"F8F60F1FF8F70F"
|
||||
"1FF8F80F1FF8F90F1FF8FA0F1FF8FB0F1FF8FC0F1FF8FD0F1FF8FE0F1FF8FE0741F8FD0741F8FC0741F8FB"
|
||||
"0741F8FA0741F8"
|
||||
"F90741F8F80741F8F70741F8F60741F8F50741F8F40741F8F30741F8F20741F8F10741F8F00741F8EF0741"
|
||||
"F8EE0741F8ED07"
|
||||
"41F8EC0741F8EB0741F8EA0741F8E90741F8E80741F8E70741F8E60741F8E50741F8E40741F8E30741F8E2"
|
||||
"0741F8E10741F8"
|
||||
"E00741F8FF03C03DFF430091FE03C03DFF430091FD03C03DFF430091FC03C03DFF430091FB03C03DFF4300"
|
||||
"91FA03C03DFF43"
|
||||
"0091F903C03DFF430091F803C03DFF430091F703C03DFF430091F603C03DFF430091F503C03DFF430091F4"
|
||||
"03C03DFF430091"
|
||||
"F303C03DFF430091F203C03DFF430091F103C03DFF430091F003C03DFF430091EF03C03DFF430091EE03C0"
|
||||
"3DFF430091ED03"
|
||||
"C03DFF430091EC03C03DFF430091EB03C03DFF430091EA03C03DFF430091E903C03DFF430091E803C03DFF"
|
||||
"430091E703C03D"
|
||||
"FF430091E603C03DFF430091E503C03DFF430091E403C03DFF430091E303C03DFF430091E203C03DFF4300"
|
||||
"91E103C03DFF43"
|
||||
"0091E003C03DFF430091C0035FD6");
|
||||
execute_tester(tester);
|
||||
}
|
||||
|
||||
@@ -354,4 +387,4 @@ TEST(CodeTester, execute_push_pop_gprs_arm64) {
|
||||
"ec 07 41 f8 eb 07 41 f8 ea 07 41 f8 e9 07 41 f8 e8 07 41 f8 e7 07 41 f8 e6 07 41 f8 "
|
||||
"e5 07 41 f8 e4 07 41 f8 e3 07 41 f8 e2 07 41 f8 e1 07 41 f8 e0 07 41 f8 c0 03 5f d6");
|
||||
execute_tester(tester);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user