From e706b5e42140d961ccda780c044152017c21912f Mon Sep 17 00:00:00 2001 From: inglorion Date: Sun, 10 Feb 2013 16:48:34 +0100 Subject: [PATCH] keep track of saved registers on MIPS --- lib/voodoo/generators/mips_gas_generator.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/voodoo/generators/mips_gas_generator.rb b/lib/voodoo/generators/mips_gas_generator.rb index 10e2e44..cf1a690 100644 --- a/lib/voodoo/generators/mips_gas_generator.rb +++ b/lib/voodoo/generators/mips_gas_generator.rb @@ -353,6 +353,7 @@ module Voodoo @frame_size = @frame_size + (nlocals * @WORDSIZE + 7) / 8 * 8 end grow_stack @frame_size + @saved_registers = [] end def emit_align alignment @@ -409,6 +410,7 @@ module Voodoo [@NREGISTER_LOCALS, @environment.locals].min.times do |n| emit "lw #{local_register n}, #{local_reference n}\n" end + @saved_registers = [] # Load return address emit "lw $31, #{@RA_OFFSET}($fp)\n" # Restore stack pointer @@ -428,6 +430,7 @@ module Voodoo # If we are returning to top level, restore stack pointer if @environment.parent == @top_level grow_stack -@frame_size + @saved_registers = [] end # Restore old value of @environment @@ -630,6 +633,7 @@ module Voodoo @environment.add_local symbol, register # Save current value of register emit "sw #{register}, #{ref}\n" + @saved_registers << register # Set new value eval_expr expr, register else -- 2.11.4.GIT