7 data Value a = NotKnown
12 data DLX_Cell r w = Reg r (Value w)
17 instance Cell DLX_Cell where
18 pcNothing = Reg pc NotKnown
23 getVal (Reg _ (Val val)) = val
24 getVal (Imm val) = val
25 getVal cell = error ("No data for getData: " ++
28 putVal cell Nothing = invalidate cell
29 putVal reg@(Reg r x) (Just v)
31 | otherwise = Reg r (Val v)
33 putVal valCell@(Imm _ ) _
34 = error ("Can't put data into a value cell: " ++ show valCell)
37 invalidate reg@(Reg r _ )
39 | otherwise = Reg r Inv
40 invalidate imm@(Imm _ ) = imm
43 isReg (Reg _ _ ) = True
46 isPC (Reg x _) = ispc x
49 isSpecPC (Reg x _)= isspecpc x
58 isInv (Reg _ Inv) = True
61 isAss (Reg _ (Val _ )) = True
65 isComputed (Reg _ NotKnown) = False
69 -- Do the two cells name the same Loc (Reg or PC?)
70 sameLoc (Reg reg1 _ ) (Reg reg2 _ ) = reg1 == reg2
74 cellHazard (Reg precReg pRegVal ) (Reg followReg fRegVal )
75 | readOnly precReg = False
76 | precReg == followReg = pRegVal /= Inv && fRegVal /= Inv
78 cellHazard _ _ = False