8 import qualified AQ as Q
13 import ROB_insert(insert)
14 import ROB_retire(retire)
20 type ROB s i r w = Int ->
21 (s [Trans i r w], s [VTrans r w]) ->
22 (s [Trans i r w], s [VTrans r w], s Int,s Bool)
26 --rob :: (Signal s,Register r,Word w) => ROB s StandardOp r w
27 rob n (fetched,computed)
32 ; step2(fetched,computed)
34 ; instrs <- insert rat q regfile fetched
35 ; (retired,missed) <- retire rat q regfile
36 ; inCase missed $ do { Q.clear q
39 ; capacity <- Q.space q
40 ; let ready = if missed then [] else instrs
41 ; return (retired,ready,capacity,missed)
46 inCase x y = if x then y else return ()
49 -- assumes single register dest ops (not a good assumption)
50 --update :: (Register r,Word w) => AQ s (VTrans r w) -> [VTrans r w] -> ST s ()
53 do { let [Reg (Virtual v (Just r)) val] = getDst t