Added register documentation for arm64
This commit is contained in:
parent
f231d92de5
commit
b96abd2fe4
2 changed files with 33 additions and 38 deletions
|
@ -113,9 +113,8 @@ func (c *compiler) ARM(x asm.Instruction) {
|
|||
operands := c.assembler.Param.MemoryNumber[x.Index]
|
||||
|
||||
if operands.Address.OffsetRegister < 0 {
|
||||
tmp := arm.X28
|
||||
c.code = arm.MoveRegisterNumber(c.code, tmp, operands.Number)
|
||||
c.append(arm.StoreRegister(tmp, operands.Address.Base, int(operands.Address.Offset), operands.Address.Length))
|
||||
c.code = arm.MoveRegisterNumber(c.code, arm.TMP, operands.Number)
|
||||
c.append(arm.StoreRegister(arm.TMP, operands.Address.Base, int(operands.Address.Offset), operands.Address.Length))
|
||||
} else {
|
||||
panic("not implemented")
|
||||
}
|
||||
|
@ -155,9 +154,8 @@ func (c *compiler) ARM(x asm.Instruction) {
|
|||
if encodable {
|
||||
c.append(code)
|
||||
} else {
|
||||
tmp := arm.X28
|
||||
c.code = arm.MoveRegisterNumberMI(c.code, tmp, operand.Number)
|
||||
c.append(arm.AndRegisterRegister(operand.Register, operand.Register, tmp))
|
||||
c.code = arm.MoveRegisterNumberMI(c.code, arm.TMP, operand.Number)
|
||||
c.append(arm.AndRegisterRegister(operand.Register, operand.Register, arm.TMP))
|
||||
}
|
||||
case asm.TypeRegisterRegister:
|
||||
operand := c.assembler.Param.RegisterRegister[x.Index]
|
||||
|
@ -173,9 +171,8 @@ func (c *compiler) ARM(x asm.Instruction) {
|
|||
if encodable {
|
||||
c.append(code)
|
||||
} else {
|
||||
tmp := arm.X28
|
||||
c.code = arm.MoveRegisterNumberMI(c.code, tmp, operand.Number)
|
||||
c.append(arm.OrRegisterRegister(operand.Register, operand.Register, tmp))
|
||||
c.code = arm.MoveRegisterNumberMI(c.code, arm.TMP, operand.Number)
|
||||
c.append(arm.OrRegisterRegister(operand.Register, operand.Register, arm.TMP))
|
||||
}
|
||||
case asm.TypeRegisterRegister:
|
||||
operand := c.assembler.Param.RegisterRegister[x.Index]
|
||||
|
@ -191,9 +188,8 @@ func (c *compiler) ARM(x asm.Instruction) {
|
|||
if encodable {
|
||||
c.append(code)
|
||||
} else {
|
||||
tmp := arm.X28
|
||||
c.code = arm.MoveRegisterNumberMI(c.code, tmp, operand.Number)
|
||||
c.append(arm.XorRegisterRegister(operand.Register, operand.Register, tmp))
|
||||
c.code = arm.MoveRegisterNumberMI(c.code, arm.TMP, operand.Number)
|
||||
c.append(arm.XorRegisterRegister(operand.Register, operand.Register, arm.TMP))
|
||||
}
|
||||
case asm.TypeRegisterRegister:
|
||||
operand := c.assembler.Param.RegisterRegister[x.Index]
|
||||
|
@ -209,9 +205,8 @@ func (c *compiler) ARM(x asm.Instruction) {
|
|||
if encodable {
|
||||
c.append(code)
|
||||
} else {
|
||||
tmp := arm.X28
|
||||
c.code = arm.MoveRegisterNumber(c.code, tmp, operand.Number)
|
||||
c.append(arm.AddRegisterRegister(operand.Register, operand.Register, tmp))
|
||||
c.code = arm.MoveRegisterNumber(c.code, arm.TMP, operand.Number)
|
||||
c.append(arm.AddRegisterRegister(operand.Register, operand.Register, arm.TMP))
|
||||
}
|
||||
case asm.TypeRegisterRegister:
|
||||
operand := c.assembler.Param.RegisterRegister[x.Index]
|
||||
|
@ -227,9 +222,8 @@ func (c *compiler) ARM(x asm.Instruction) {
|
|||
if encodable {
|
||||
c.append(code)
|
||||
} else {
|
||||
tmp := arm.X28
|
||||
c.code = arm.MoveRegisterNumber(c.code, tmp, operand.Number)
|
||||
c.append(arm.SubRegisterRegister(operand.Register, operand.Register, tmp))
|
||||
c.code = arm.MoveRegisterNumber(c.code, arm.TMP, operand.Number)
|
||||
c.append(arm.SubRegisterRegister(operand.Register, operand.Register, arm.TMP))
|
||||
}
|
||||
case asm.TypeRegisterRegister:
|
||||
operand := c.assembler.Param.RegisterRegister[x.Index]
|
||||
|
@ -245,9 +239,8 @@ func (c *compiler) ARM(x asm.Instruction) {
|
|||
if encodable {
|
||||
c.append(code)
|
||||
} else {
|
||||
tmp := arm.X28
|
||||
c.code = arm.MoveRegisterNumber(c.code, tmp, operand.Number)
|
||||
c.append(arm.CompareRegisterRegister(operand.Register, tmp))
|
||||
c.code = arm.MoveRegisterNumber(c.code, arm.TMP, operand.Number)
|
||||
c.append(arm.CompareRegisterRegister(operand.Register, arm.TMP))
|
||||
}
|
||||
case asm.TypeRegisterRegister:
|
||||
operand := c.assembler.Param.RegisterRegister[x.Index]
|
||||
|
@ -270,18 +263,16 @@ func (c *compiler) ARM(x asm.Instruction) {
|
|||
c.append(arm.MulRegisterRegister(operand.Destination, operand.Destination, operand.Source))
|
||||
case asm.TypeRegisterNumber:
|
||||
operand := c.assembler.Param.RegisterNumber[x.Index]
|
||||
tmp := arm.X28
|
||||
c.code = arm.MoveRegisterNumber(c.code, tmp, operand.Number)
|
||||
c.append(arm.MulRegisterRegister(operand.Register, operand.Register, tmp))
|
||||
c.code = arm.MoveRegisterNumber(c.code, arm.TMP, operand.Number)
|
||||
c.append(arm.MulRegisterRegister(operand.Register, operand.Register, arm.TMP))
|
||||
}
|
||||
|
||||
case asm.MODULO:
|
||||
switch x.Type {
|
||||
case asm.TypeRegisterRegister:
|
||||
operand := c.assembler.Param.RegisterRegister[x.Index]
|
||||
tmp := arm.X28
|
||||
c.append(arm.DivSigned(tmp, operand.Destination, operand.Source))
|
||||
c.append(arm.MultiplySubtract(operand.Destination, tmp, operand.Source, operand.Destination))
|
||||
c.append(arm.DivSigned(arm.TMP, operand.Destination, operand.Source))
|
||||
c.append(arm.MultiplySubtract(operand.Destination, arm.TMP, operand.Source, operand.Destination))
|
||||
case asm.TypeRegisterNumber:
|
||||
panic("not implemented")
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue