1 module ROB_insert(insert) where
8 import qualified AQ as Q
20 insert :: (Register r,Word w) =>
21 RAT st r Int -> AQ st (VTrans r w) ->
22 RF st r w -> [Trans StandardOp r w] -> ST st [VTrans r w]
24 insert rat q regfile instrs
25 = mapM setAndSubst instrs
28 do { (reg,alias) <- bind q t
29 ; src <- mapM (RAT.replace rat) $ getSrc t
30 ; let info = map convert $ getInfo t
32 ; RAT.write rat reg alias
33 ; dest <- mapM (RAT.replace rat) $ getDst t
34 ; new <- regRead q regfile $ Trans dest op src info
38 bind q trans = Q.assignAddr q (head . getDstRegs $ trans)
41 regRead :: (Register r,Word w) => AQ s (VTrans r w) -> RF s r w ->
42 VTrans r w -> ST s (VTrans r w)
45 = do { cells <- mapM subst (getSrcRegs t)
46 ; return $ fillInSrcCells t cells
50 = do { v <- liftST $ Q.getQVal q n
52 ; [Reg _ val] <- return $ getDst t
53 ; return $ Reg (Virtual n x) val
55 `handle` (Reg (Virtual n x) NotKnown)
57 = do { val <- RF.read file r
58 ; return $ Reg (Real r) (Val val)