Improved code generation
This commit is contained in:
parent
6e22febc01
commit
3c189a025f
23 changed files with 201 additions and 95 deletions
|
@ -18,7 +18,7 @@ func (f *Function) ExpressionToRegister(node *expression.Expression, register cp
|
|||
err := f.CompileCall(node)
|
||||
|
||||
if register != f.cpu.Output[0] {
|
||||
f.assembler.RegisterRegister(asm.MOVE, register, f.cpu.Output[0])
|
||||
f.RegisterRegister(asm.MOVE, register, f.cpu.Output[0])
|
||||
}
|
||||
|
||||
return err
|
||||
|
@ -34,8 +34,6 @@ func (f *Function) ExpressionToRegister(node *expression.Expression, register cp
|
|||
|
||||
if f.UsesRegister(right, register) {
|
||||
register = f.cpu.MustFindFree(f.cpu.General)
|
||||
} else {
|
||||
f.SaveRegister(register)
|
||||
}
|
||||
|
||||
f.cpu.Reserve(register)
|
||||
|
@ -45,11 +43,10 @@ func (f *Function) ExpressionToRegister(node *expression.Expression, register cp
|
|||
return err
|
||||
}
|
||||
|
||||
f.cpu.Use(register)
|
||||
err = f.Execute(node.Token, register, right)
|
||||
|
||||
if register != final {
|
||||
f.assembler.RegisterRegister(asm.MOVE, final, register)
|
||||
f.RegisterRegister(asm.MOVE, final, register)
|
||||
f.cpu.Free(register)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue