goalc: Implement the bulk of ARM64 instructions from x86 (#4318)

Less than 100 instructions left to implement, with the vast vast
majority being load-and-stores. These will likely be knocked out quickly
but they require a more involved implementation than just simply
translating the instructions (several need multiple instructions, others
may need reserved registers (x16 or x17 are common for this purpose))

This is a good milestone to get something pushed to master.
This commit is contained in:
Tyler Wilding
2026-06-22 22:25:49 -04:00
committed by GitHub
parent f9a7fba6e2
commit 8daf33492e
17 changed files with 5359 additions and 4587 deletions
+8 -8
View File
@@ -634,20 +634,20 @@ TEST(EmitterAVX, VPSHUFHW) {
TEST(EmitterAVX, movq_to_gpr_from_xmm) {
CodeTester tester;
tester.init_code_buffer(1024);
tester.emit(IGen::movq_gpr64_xmm64(tester.generator(), RSP, XMM0 + 3));
tester.emit(IGen::movq_gpr64_xmm64(tester.generator(), RSP, XMM0 + 13));
tester.emit(IGen::movq_gpr64_xmm64(tester.generator(), R12, XMM0 + 3));
tester.emit(IGen::movq_gpr64_xmm64(tester.generator(), R12, XMM0 + 13));
tester.emit(IGen::movq_gpr64_f64(tester.generator(), RSP, XMM0 + 3));
tester.emit(IGen::movq_gpr64_f64(tester.generator(), RSP, XMM0 + 13));
tester.emit(IGen::movq_gpr64_f64(tester.generator(), R12, XMM0 + 3));
tester.emit(IGen::movq_gpr64_f64(tester.generator(), R12, XMM0 + 13));
EXPECT_EQ(tester.dump_to_hex_string(true), "66480F7EDC664C0F7EEC66490F7EDC664D0F7EEC");
}
TEST(EmitterAVX, movq_to_xmm_from_gpr) {
CodeTester tester;
tester.init_code_buffer(1024);
tester.emit(IGen::movq_xmm64_gpr64(tester.generator(), XMM0 + 3, RSP));
tester.emit(IGen::movq_xmm64_gpr64(tester.generator(), XMM0 + 13, RSP));
tester.emit(IGen::movq_xmm64_gpr64(tester.generator(), XMM0 + 3, R12));
tester.emit(IGen::movq_xmm64_gpr64(tester.generator(), XMM0 + 13, R12));
tester.emit(IGen::movq_f64_gpr64(tester.generator(), XMM0 + 3, RSP));
tester.emit(IGen::movq_f64_gpr64(tester.generator(), XMM0 + 13, RSP));
tester.emit(IGen::movq_f64_gpr64(tester.generator(), XMM0 + 3, R12));
tester.emit(IGen::movq_f64_gpr64(tester.generator(), XMM0 + 13, R12));
EXPECT_EQ(tester.dump_to_hex_string(true), "66480F6EDC664C0F6EEC66490F6EDC664D0F6EEC");
}