3a_asm: add parsers for flags
authorBernhard Urban <lewurm@gmail.com>
Sun, 31 Oct 2010 23:40:38 +0000 (00:40 +0100)
committerBernhard Urban <lewurm@gmail.com>
Sun, 31 Oct 2010 23:40:38 +0000 (00:40 +0100)
3a_asm/DT.hs

index 582d1812b55805d76ac03eefba4c95300f7ab26f..61f12f56a271b97aad27d812abb65f8ad05541b4 100644 (file)
@@ -49,6 +49,27 @@ condition = do
        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 ')'
@@ -61,14 +82,14 @@ addi = ins "addi" csv3 $ aform
 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