Implemented more arm64 instructions

This commit is contained in:
2025-03-06 23:13:14 +01:00
parent cb908e7b31
commit 0ac7fc9a85
26 changed files with 232 additions and 73 deletions

View File

@ -8,19 +8,36 @@ import (
"git.urbach.dev/go/assert"
)
func TestMoveRegisterRegister(t *testing.T) {
usagePatterns := []struct {
Destination cpu.Register
Source cpu.Register
Code uint32
}{
{arm.X0, arm.X1, 0xAA0103E0},
{arm.X1, arm.X0, 0xAA0003E1},
}
for _, pattern := range usagePatterns {
t.Logf("mov %s, %s", pattern.Destination, pattern.Source)
code := arm.MoveRegisterRegister(pattern.Destination, pattern.Source)
assert.DeepEqual(t, code, pattern.Code)
}
}
func TestMoveKeep(t *testing.T) {
usagePatterns := []struct {
Register cpu.Register
Number uint16
Code []byte
Code uint32
}{
{arm.X0, 0, []byte{0x00, 0x00, 0x80, 0xF2}},
{arm.X0, 1, []byte{0x20, 0x00, 0x80, 0xF2}},
{arm.X0, 0, 0xF2800000},
{arm.X0, 1, 0xF2800020},
}
for _, pattern := range usagePatterns {
t.Logf("movk %s, %x", pattern.Register, pattern.Number)
code := arm.MoveKeep(nil, pattern.Register, 0, pattern.Number)
code := arm.MoveKeep(pattern.Register, 0, pattern.Number)
assert.DeepEqual(t, code, pattern.Code)
}
}
@ -29,15 +46,15 @@ func TestMoveZero(t *testing.T) {
usagePatterns := []struct {
Register cpu.Register
Number uint16
Code []byte
Code uint32
}{
{arm.X0, 0, []byte{0x00, 0x00, 0x80, 0xD2}},
{arm.X0, 1, []byte{0x20, 0x00, 0x80, 0xD2}},
{arm.X0, 0, 0xD2800000},
{arm.X0, 1, 0xD2800020},
}
for _, pattern := range usagePatterns {
t.Logf("movz %s, %x", pattern.Register, pattern.Number)
code := arm.MoveZero(nil, pattern.Register, 0, pattern.Number)
code := arm.MoveZero(pattern.Register, 0, pattern.Number)
assert.DeepEqual(t, code, pattern.Code)
}
}