From 39b4f1eda1ff5f380df1c89f14bc938a0f31b484 Mon Sep 17 00:00:00 2001 From: inglorion Date: Sat, 8 Jan 2011 11:25:51 +0100 Subject: [PATCH] Implemented shift instructions for MIPS --- lib/voodoo/generators/mips_gas_generator.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/voodoo/generators/mips_gas_generator.rb b/lib/voodoo/generators/mips_gas_generator.rb index 561f3e8..922d425 100644 --- a/lib/voodoo/generators/mips_gas_generator.rb +++ b/lib/voodoo/generators/mips_gas_generator.rb @@ -160,7 +160,7 @@ module Voodoo # Test if op is a binary operation def assymetric_binop? op - [:div, :mod, :sub].member?(op) + [:asr, :bsr, :div, :mod, :shl, :shr, :sub].member?(op) end # Test if a value is an at-expression @@ -389,6 +389,10 @@ module Voodoo temporaries.delete y case expr[0] + when :asr + emit "srav #{register}, #{x}, #{y}\n" + when :bsr + emit "srlv #{register}, #{x}, #{y}\n" when :div emit "div $0, #{x}, #{y}\n" emit "mflo #{register}\n" @@ -398,6 +402,10 @@ module Voodoo when :mul emit "mult #{x}, #{y}\n" emit "mflo #{register}\n" + when :shl + emit "sllv #{register}, #{x}, #{y}\n" + when :shr + emit "srlv #{register}, #{x}, #{y}\n" else emit "#{expr[0]} #{register}, #{x}, #{y}\n" end -- 2.11.4.GIT