package core import ( "fmt" "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.cpu.IsFree(register) { return } var variable *Variable for _, v := range f.variables { if v.Register == register { variable = v break } } if variable == nil || variable.Alive == 0 { return } newRegister := f.cpu.MustUseFree(f.cpu.General) if config.Comments { f.assembler.Comment(fmt.Sprintf("save %s to %s", register, newRegister)) } f.assembler.RegisterRegister(asm.MOVE, newRegister, register) f.cpu.Free(register) variable.Register = newRegister }