39 lines
1.1 KiB
Go
39 lines
1.1 KiB
Go
package arm_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"git.urbach.dev/cli/q/src/arm"
|
|
"git.urbach.dev/cli/q/src/cpu"
|
|
"git.urbach.dev/go/assert"
|
|
)
|
|
|
|
func TestLoadRegister(t *testing.T) {
|
|
usagePatterns := []struct {
|
|
Destination cpu.Register
|
|
Base cpu.Register
|
|
Offset int
|
|
Length byte
|
|
Code uint32
|
|
}{
|
|
{arm.X0, arm.X1, -8, 1, 0x385F8020},
|
|
{arm.X1, arm.X0, -8, 1, 0x385F8001},
|
|
{arm.X0, arm.X1, -8, 2, 0x785F8020},
|
|
{arm.X1, arm.X0, -8, 2, 0x785F8001},
|
|
{arm.X0, arm.X1, -8, 4, 0xB85F8020},
|
|
{arm.X1, arm.X0, -8, 4, 0xB85F8001},
|
|
{arm.X0, arm.X1, -8, 8, 0xF85F8020},
|
|
{arm.X1, arm.X0, -8, 8, 0xF85F8001},
|
|
{arm.X2, arm.X1, -8, 8, 0xF85F8022},
|
|
{arm.X2, arm.X1, 0, 8, 0xF8400022},
|
|
{arm.X2, arm.X1, 8, 8, 0xF8408022},
|
|
{arm.X2, arm.X1, -256, 8, 0xF8500022},
|
|
{arm.X2, arm.X1, 255, 8, 0xF84FF022},
|
|
}
|
|
|
|
for _, pattern := range usagePatterns {
|
|
t.Logf("ldur %s, [%s, %d] %db", pattern.Destination, pattern.Base, pattern.Offset, pattern.Length)
|
|
code := arm.LoadRegister(pattern.Destination, pattern.Base, pattern.Offset, pattern.Length)
|
|
assert.Equal(t, code, pattern.Code)
|
|
}
|
|
}
|