package z import ( "git.akyoto.dev/cli/q/src/build/asm" "git.akyoto.dev/cli/q/src/build/cpu" ) // SaveRegister attempts to move a variable occupying this register to another register. func (f *Compiler) SaveRegister(register cpu.Register) { if !f.CurrentScope().IsUsed(register) { return } for _, general := range f.CPU.General { if register == general { return } } variable := f.VariableByRegister(register) if variable == nil || variable.Alive == 0 { return } newRegister := f.CurrentScope().MustFindFree(f.CPU.General) f.CurrentScope().Reserve(newRegister) f.RegisterRegister(asm.MOVE, newRegister, register) variable.Register = newRegister }