Implemented more arm64 instructions

This commit is contained in:
2025-03-13 13:17:58 +01:00
parent dc664dbf5a
commit 5a5061c5d7
23 changed files with 290 additions and 53 deletions

View File

@ -1,8 +1,6 @@
package asmc
import (
"math"
"git.urbach.dev/cli/q/src/asm"
"git.urbach.dev/cli/q/src/config"
"git.urbach.dev/cli/q/src/x86"
@ -13,7 +11,7 @@ func (c *compiler) store(x asm.Instruction) {
case asm.TypeMemoryNumber:
operands := c.assembler.Param.MemoryNumber[x.Index]
if operands.Address.OffsetRegister == math.MaxUint8 {
if operands.Address.OffsetRegister < 0 {
c.code = x86.StoreNumber(c.code, operands.Address.Base, operands.Address.Offset, operands.Address.Length, operands.Number)
} else {
c.code = x86.StoreDynamicNumber(c.code, operands.Address.Base, operands.Address.OffsetRegister, operands.Address.Length, operands.Number)
@ -22,7 +20,7 @@ func (c *compiler) store(x asm.Instruction) {
operands := c.assembler.Param.MemoryLabel[x.Index]
start := len(c.code)
if operands.Address.OffsetRegister == math.MaxUint8 {
if operands.Address.OffsetRegister < 0 {
c.code = x86.StoreNumber(c.code, operands.Address.Base, operands.Address.Offset, operands.Address.Length, 0b00_00_00_00)
} else {
c.code = x86.StoreDynamicNumber(c.code, operands.Address.Base, operands.Address.OffsetRegister, operands.Address.Length, 0b00_00_00_00)
@ -48,7 +46,7 @@ func (c *compiler) store(x asm.Instruction) {
case asm.TypeMemoryRegister:
operands := c.assembler.Param.MemoryRegister[x.Index]
if operands.Address.OffsetRegister == math.MaxUint8 {
if operands.Address.OffsetRegister < 0 {
c.code = x86.StoreRegister(c.code, operands.Address.Base, operands.Address.Offset, operands.Address.Length, operands.Register)
} else {
c.code = x86.StoreDynamicRegister(c.code, operands.Address.Base, operands.Address.OffsetRegister, operands.Address.Length, operands.Register)