From 5b3769a0db8310f1e82e34099c95d06ebb499a66 Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Thu, 13 Mar 2025 17:20:11 +0100 Subject: [PATCH] Fixed push and pop on arm64 --- src/arm/Sub_test.go | 1 + src/asmc/compileARM.go | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) 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: