[project @ 1999-04-29 11:53:12 by simonpj]
[ghc-hetmet.git] / ghc / tests / programs / jeff-bug / Processor.hs
1 module Processor where
2
3
4 import Hawk
5 import Trans 
6 import qualified TransSig as T
7 import qualified PreludeSig as Signaled
8 import Word
9
10
11 import Utils
12 import DLX
13
14 import Predict
15
16 import IFU(ifu)
17 import RS(rs)
18 import ROB(rob)
19 import EUs
20
21 processor ((pgm,pgmdata),startingPC) =  retired -- retired 
22   where
23
24       (instrs,pc') = ifu (5,pgm) pc ([5,5] `before` space)
25       instrs' = probe "UFO" instrs
26
27       --testTrans = lift1 (\n -> [pcTrans n]) space
28
29       pc   = delay (pcTrans startingPC) npc
30       npc = if' miss then' (Signaled.last retired ) 
31                      else' pc'
32
33       annotated = delay [] (
34                     if' miss then' (lift0 []) 
35                              else' (annotate $ filterOut isNop $ instrs)
36                     )
37
38       (retired,ready,space,miss) = rob 100 (annotated, computed)
39       --miss' = if' miss then' (lift0 $ pcTrans 1) else' (lift0 $ pcTrans 0)
40   
41       computed = rs (150,execUnits) (delay False miss, delay [] ready)
42
43
44 execUnits :: Word a => [EU DLX_Op (DLX_Cell (Virtual DLXReg Int) a)]
45 execUnits = [addUnit,addUnit,subUnit,jumpUnit,jumpUnit,multUnit,divUnit,cmpUnit,moveUnit]
46
47 multUnit' b s = probe "mu_out" out
48         where b' = probe "mu_cnt" b
49               s' = probe "mu_in" s
50               out = multUnit b' s'