Implemented loads with register offsets
This commit is contained in:
@ -93,10 +93,7 @@ func (c *compiler) compile(x asm.Instruction) {
|
||||
c.codeLabels[x.Data.(*asm.Label).Name] = Address(len(c.code))
|
||||
|
||||
case asm.LOAD:
|
||||
switch operands := x.Data.(type) {
|
||||
case *asm.MemoryRegister:
|
||||
c.code = x86.LoadRegister(c.code, operands.Register, operands.Address.Offset, operands.Address.Length, operands.Address.Base)
|
||||
}
|
||||
c.load(x)
|
||||
|
||||
case asm.MOVE:
|
||||
c.move(x)
|
||||
|
19
src/asmc/load.go
Normal file
19
src/asmc/load.go
Normal file
@ -0,0 +1,19 @@
|
||||
package asmc
|
||||
|
||||
import (
|
||||
"math"
|
||||
|
||||
"git.akyoto.dev/cli/q/src/asm"
|
||||
"git.akyoto.dev/cli/q/src/x86"
|
||||
)
|
||||
|
||||
func (c *compiler) load(x asm.Instruction) {
|
||||
switch operands := x.Data.(type) {
|
||||
case *asm.MemoryRegister:
|
||||
if operands.Address.OffsetRegister == math.MaxUint8 {
|
||||
c.code = x86.LoadRegister(c.code, operands.Register, operands.Address.Offset, operands.Address.Length, operands.Address.Base)
|
||||
} else {
|
||||
c.code = x86.LoadDynamicRegister(c.code, operands.Register, operands.Address.OffsetRegister, operands.Address.Length, operands.Address.Base)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user