Implemented more move instructions on arm64

This commit is contained in:
2025-03-14 21:16:35 +01:00
parent 5f339187e6
commit 99ef02bbd6
5 changed files with 81 additions and 16 deletions

View File

@ -76,8 +76,9 @@ func (c *compiler) compileARM(x asm.Instruction) {
operands := c.assembler.Param.MemoryNumber[x.Index]
if operands.Address.OffsetRegister < 0 {
c.append(arm.MoveRegisterNumber(arm.X0, operands.Number))
c.append(arm.StoreRegister(arm.X0, operands.Address.Base, int(operands.Address.Offset), operands.Address.Length))
tmp := arm.X28
c.moveRegisterNumberARM(tmp, operands.Number)
c.append(arm.StoreRegister(tmp, operands.Address.Base, int(operands.Address.Offset), operands.Address.Length))
} else {
panic("not implemented")
}
@ -109,7 +110,7 @@ func (c *compiler) compileARM(x asm.Instruction) {
c.append(code)
} else {
tmp := arm.X28
c.append(arm.MoveRegisterNumber(tmp, operand.Number))
c.moveRegisterNumberARM(tmp, operand.Number)
c.append(arm.AndRegisterRegister(operand.Register, operand.Register, tmp))
}
case asm.TypeRegisterRegister:
@ -127,7 +128,7 @@ func (c *compiler) compileARM(x asm.Instruction) {
c.append(code)
} else {
tmp := arm.X28
c.append(arm.MoveRegisterNumber(tmp, operand.Number))
c.moveRegisterNumberARM(tmp, operand.Number)
c.append(arm.OrRegisterRegister(operand.Register, operand.Register, tmp))
}
case asm.TypeRegisterRegister:
@ -145,7 +146,7 @@ func (c *compiler) compileARM(x asm.Instruction) {
c.append(code)
} else {
tmp := arm.X28
c.append(arm.MoveRegisterNumber(tmp, operand.Number))
c.moveRegisterNumberARM(tmp, operand.Number)
c.append(arm.XorRegisterRegister(operand.Register, operand.Register, tmp))
}
case asm.TypeRegisterRegister:
@ -200,7 +201,7 @@ func (c *compiler) compileARM(x asm.Instruction) {
case asm.TypeRegisterNumber:
operand := c.assembler.Param.RegisterNumber[x.Index]
tmp := arm.X28
c.append(arm.MoveRegisterNumber(tmp, operand.Number))
c.moveRegisterNumberARM(tmp, operand.Number)
c.append(arm.MulRegisterRegister(operand.Register, operand.Register, tmp))
}
@ -226,7 +227,7 @@ func (c *compiler) compileARM(x asm.Instruction) {
case asm.TypeRegisterNumber:
operands := c.assembler.Param.RegisterNumber[x.Index]
c.append(arm.MoveRegisterNumber(operands.Register, operands.Number))
c.moveRegisterNumberARM(operands.Register, operands.Number)
case asm.TypeRegisterLabel:
operands := c.assembler.Param.RegisterLabel[x.Index]