Only do State packing once in register_bank.
authorMatthijs Kooijman <m.kooijman@student.utwente.nl>
Wed, 12 Aug 2009 15:09:41 +0000 (17:09 +0200)
committerMatthijs Kooijman <m.kooijman@student.utwente.nl>
Wed, 12 Aug 2009 15:11:28 +0000 (17:11 +0200)
Alu.hs

diff --git a/Alu.hs b/Alu.hs
index 1c60c0414886cbb975d18fb994a286beb46e1c24..edb4d1a7440d63b9447ec7264fdc2595700cdd8a 100644 (file)
--- a/Alu.hs
+++ b/Alu.hs
@@ -37,19 +37,21 @@ register_bank ::
   -> RegisterBankState -> -- State
   (RegisterBankState, Word) -- (State', Output)
 
-register_bank addr we d (State s) =
-  case we of
-    Low -> -- Read
-      let
-        o = case addr of Low -> fst s; High -> snd s
-      in (State s, o) -- Don't change state
-    High -> -- Write
-      let
-        (r0, r1) = s
-        r0' = case addr of Low -> d; High -> r0
-        r1' = case addr of High -> d; Low -> r1
-        s' = (r0', r1')
-      in (State s', 0) -- Don't output anything useful
+register_bank addr we d (State s) = (State s', o)
+  where
+    s' = case we of
+      Low -> s -- Read
+      High -> -- Write
+        let
+          (r0, r1) = s
+          r0' = case addr of Low -> d; High -> r0
+          r1' = case addr of High -> d; Low -> r1
+        in (r0', r1')
+    o = case we of
+      -- Read
+      Low -> case addr of Low -> fst s; High -> snd s
+      -- Write
+      High -> 0 -- Don't output anything useful
 
 -- ALU