Fixed move instruction encoding on arm64

This commit is contained in:
Eduard Urbach 2025-03-15 13:49:30 +01:00
parent 22cbc15cdd
commit bdf41ead5c
Signed by: eduard
GPG key ID: 49226B848C78F6C8
7 changed files with 108 additions and 74 deletions

View file

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

View file

@ -1,16 +0,0 @@
package asmc
import (
"git.urbach.dev/cli/q/src/arm"
"git.urbach.dev/cli/q/src/cpu"
)
func (c *compiler) moveRegisterNumberARM(register cpu.Register, number int) {
code, encodable := arm.MoveRegisterNumber(register, number)
if encodable {
c.append(code)
} else {
panic("not implemented") // movz movk
}
}