Only do State packing once in register_bank.
[matthijs/master-project/cλash.git] / Alu.hs
diff --git a/Alu.hs b/Alu.hs
index b7fff900642ca72ae2ec6f70958a4a656591bb51..edb4d1a7440d63b9447ec7264fdc2595700cdd8a 100644 (file)
--- a/Alu.hs
+++ b/Alu.hs
@@ -12,8 +12,6 @@ mainIO = Sim.simulateIO exec initial_state
 
 dontcare = Low
 
-newtype State s = State s deriving (P.Show)
-
 program = [
             -- (addr, we, op)
             (High, Low, High), -- z = r1 and t (0) ; t = r1 (1)
@@ -39,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