Implemented more move instructions on arm64
This commit is contained in:
@ -33,15 +33,36 @@ func TestMoveRegisterNumber(t *testing.T) {
|
||||
Number int
|
||||
Code uint32
|
||||
}{
|
||||
// MOVZ
|
||||
{arm.X0, 0, 0xD2800000},
|
||||
{arm.X0, 1, 0xD2800020},
|
||||
|
||||
// MOV (bitmask immediate)
|
||||
{arm.X0, 0x1FFFF, 0xB24043E0},
|
||||
{arm.X0, 0x7FFFFFFF, 0xB2407BE0},
|
||||
{arm.X0, 0xFFFFFFFF, 0xB2407FE0},
|
||||
|
||||
// MOV (inverted wide immediate)
|
||||
{arm.X0, -1, 0x92800000},
|
||||
{arm.X0, 0x7FFFFFFFFFFFFFFF, 0x92F00000},
|
||||
{arm.X0, 0x2FFFFFFFF, 0x92DFFFA0}, // not encodable in the GNU assembler
|
||||
{arm.X0, 0x2FFFF, 0x92BFFFA0}, // not encodable in the GNU assembler
|
||||
|
||||
// Not encodable
|
||||
{arm.X0, 0xCAFEBABE, 0},
|
||||
{arm.X0, 0xDEADC0DE, 0},
|
||||
}
|
||||
|
||||
for _, pattern := range usagePatterns {
|
||||
t.Logf("mov %s, %d", pattern.Register, pattern.Number)
|
||||
code := arm.MoveRegisterNumber(pattern.Register, pattern.Number)
|
||||
assert.DeepEqual(t, code, pattern.Code)
|
||||
code, encodable := arm.MoveRegisterNumber(pattern.Register, pattern.Number)
|
||||
|
||||
if pattern.Code != 0 {
|
||||
assert.True(t, encodable)
|
||||
assert.DeepEqual(t, code, pattern.Code)
|
||||
} else {
|
||||
assert.False(t, encodable)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user