diff --git a/src/arm/Sub_test.go b/src/arm/Sub_test.go index d6cb4f6..42c4f4d 100644 --- a/src/arm/Sub_test.go +++ b/src/arm/Sub_test.go @@ -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 { diff --git a/src/asmc/compileARM.go b/src/asmc/compileARM.go index 45a2d73..5379846 100644 --- a/src/asmc/compileARM.go +++ b/src/asmc/compileARM.go @@ -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: