Implemented more move instructions on arm64
This commit is contained in:
parent
ea575e3256
commit
22cbc15cdd
5 changed files with 81 additions and 16 deletions
|
@ -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]
|
||||
|
|
16
src/asmc/movARM.go
Normal file
16
src/asmc/movARM.go
Normal file
|
@ -0,0 +1,16 @@
|
|||
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
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue