Fixed push and pop on arm64
This commit is contained in:
@ -16,6 +16,7 @@ func TestSubRegisterNumber(t *testing.T) {
|
||||
Code uint32
|
||||
}{
|
||||
{arm.X0, arm.X0, 1, 0xD1000400},
|
||||
{arm.SP, arm.SP, 16, 0xD10043FF},
|
||||
}
|
||||
|
||||
for _, pattern := range usagePatterns {
|
||||
|
@ -87,14 +87,16 @@ func (c *compiler) compileARM(x asm.Instruction) {
|
||||
switch x.Type {
|
||||
case asm.TypeRegister:
|
||||
operand := c.assembler.Param.Register[x.Index]
|
||||
c.append(arm.StorePair(operand.Register, operand.Register, arm.SP, -16))
|
||||
c.append(arm.SubRegisterNumber(arm.SP, arm.SP, 16))
|
||||
c.append(arm.StoreRegister(operand.Register, arm.SP, 0, 8))
|
||||
}
|
||||
|
||||
case asm.POP:
|
||||
switch x.Type {
|
||||
case asm.TypeRegister:
|
||||
operand := c.assembler.Param.Register[x.Index]
|
||||
c.append(arm.LoadPair(operand.Register, operand.Register, arm.SP, 16))
|
||||
c.append(arm.LoadRegister(operand.Register, arm.SP, 0, 8))
|
||||
c.append(arm.AddRegisterNumber(arm.SP, arm.SP, 16))
|
||||
}
|
||||
|
||||
case asm.ADD:
|
||||
|
Reference in New Issue
Block a user