let (Just ret) = lookup str conds
return $ ret
+carry :: Parser Word32
+carry = do { char 'c'; return 1} <|> do {string ""; return 0}
+
+updateDisable :: Parser Word32
+updateDisable = do { char 'd'; return 1} <|> do {string ""; return 0}
+
+highlow :: Parser Word32
+highlow = do { char 'h'; return 1} <|> do {char 'l'; return 0} <|> do {string ""; return 0}
+
+fill :: Parser Word32
+fill = do { char 'f'; return 1} <|> do {string ""; return 0}
+
+sign :: Parser Word32
+sign = do { char 's'; return 1} <|> do {string ""; return 0}
+
+branchpred :: Parser Word32
+branchpred = do { char '+'; return 1} <|> do {char '-'; return 0} <|> do {string ""; return 0}
+
+shiftArith :: Parser Word32
+shiftArith = do { char 'a'; return 1} <|> do {string ""; return 0}
+
(<.>) p n = p<*comma<*>n
(<%>) p n = p<*space<*>n
(<@>) p n = p<*char '('<*>n<*char ')'
dform'a opcd rt ra d = pack [(opcd,6),(rt,11),(ra,16),(d,0)]
-}
-add = ins "add" csv3 $ aform 0 0 0
+add = ins "add" csv3 $ aform 0
---
ins m form e = mnem m>>form e
v1 f = f<$>iLit
csv2 f =f<$>iLit<.>iLit
-csv3 f = f<$>condition<%>reg<.>reg<.>reg
+csv3 f = f<$>carry<*>updateDisable<*>condition<%>reg<.>reg<.>reg
csv4 f = f<$>iLit<.>iLit<.>iLit<.>iLit
csv5 f = f<$>iLit<.>iLit<.>iLit<.>iLit<.>iLit