module X86.Cond ( Cond(..), condUnsigned, condToSigned, condToUnsigned, maybeFlipCond ) where data Cond = ALWAYS -- What's really used? ToDo | EQQ | GE | GEU | GTT | GU | LE | LEU | LTT | LU | NE | NEG | POS | CARRY | OFLO | PARITY | NOTPARITY deriving Eq condUnsigned :: Cond -> Bool condUnsigned GU = True condUnsigned LU = True condUnsigned GEU = True condUnsigned LEU = True condUnsigned _ = False condToSigned :: Cond -> Cond condToSigned GU = GTT condToSigned LU = LTT condToSigned GEU = GE condToSigned LEU = LE condToSigned x = x condToUnsigned :: Cond -> Cond condToUnsigned GTT = GU condToUnsigned LTT = LU condToUnsigned GE = GEU condToUnsigned LE = LEU condToUnsigned x = x -- | @maybeFlipCond c@ returns @Just c'@ if it is possible to flip the -- arguments to the conditional @c@, and the new condition should be @c'@. maybeFlipCond :: Cond -> Maybe Cond maybeFlipCond cond = case cond of EQQ -> Just EQQ NE -> Just NE LU -> Just GU GU -> Just LU LEU -> Just GEU GEU -> Just LEU LTT -> Just GTT GTT -> Just LTT LE -> Just GE GE -> Just LE _other -> Nothing