From b47d8a0bc4ad911a3f3d0eb78296c31bd4908de0 Mon Sep 17 00:00:00 2001 From: inglorion Date: Sat, 8 Jan 2011 15:56:12 +0100 Subject: [PATCH] Implemented rotate actions for MIPS --- lib/voodoo/generators/mips_gas_generator.rb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/voodoo/generators/mips_gas_generator.rb b/lib/voodoo/generators/mips_gas_generator.rb index 922d425..063b125 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 - [:asr, :bsr, :div, :mod, :shl, :shr, :sub].member?(op) + [:asr, :bsr, :div, :mod, :rol, :ror, :shl, :shr, :sub].member?(op) end # Test if a value is an at-expression @@ -402,6 +402,16 @@ module Voodoo when :mul emit "mult #{x}, #{y}\n" emit "mflo #{register}\n" + when :rol + emit "subu #{@TEMPORARY}, $0, #{y}\n" + emit "srlv #{@TEMPORARY}, #{x}, #{@TEMPORARY}\n" + emit "sllv #{register}, #{x}, #{y}\n" + emit "or #{register}, #{register}, #{@TEMPORARY}\n" + when :ror + emit "subu #{@TEMPORARY}, $0, #{y}\n" + emit "sllv #{@TEMPORARY}, #{x}, #{@TEMPORARY}\n" + emit "srlv #{register}, #{x}, #{y}\n" + emit "or #{register}, #{register}, #{@TEMPORARY}\n" when :shl emit "sllv #{register}, #{x}, #{y}\n" when :shr -- 2.11.4.GIT