Improved separation of concerns

This commit is contained in:
Eduard Urbach 2024-07-23 16:41:21 +02:00
parent dc5456b820
commit abba962455
Signed by: eduard
GPG key ID: 49226B848C78F6C8
36 changed files with 243 additions and 236 deletions

View file

@ -1,36 +0,0 @@
package core
import (
"git.akyoto.dev/cli/q/src/build/asm"
"git.akyoto.dev/cli/q/src/build/config"
"git.akyoto.dev/cli/q/src/build/cpu"
)
// SaveRegister attempts to move a variable occupying this register to another register.
func (f *Function) SaveRegister(register cpu.Register) {
if !f.CurrentScope().IsUsed(register) {
return
}
for _, general := range f.cpu.General {
if register == general {
return
}
}
variable := f.VariableInRegister(register)
if variable == nil || variable.Alive == 0 {
return
}
newRegister := f.CurrentScope().MustFindFree(f.cpu.General)
f.CurrentScope().Reserve(newRegister)
if config.Comments {
f.Comment("save %s to %s", register, newRegister)
}
f.RegisterRegister(asm.MOVE, newRegister, register)
variable.Register = newRegister
}