X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=HighOrdAlu.hs;h=def77421281ce0362125c266f3887c9d86c9943b;hb=c2f45d330f40225e7e5a1b6606665a16c2883d41;hp=331fa1debd0b4f20a071b126398ee498b552967d;hpb=59b710f483534efd4a293f880235f444a5156451;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git a/HighOrdAlu.hs b/HighOrdAlu.hs index 331fa1d..def7742 100644 --- a/HighOrdAlu.hs +++ b/HighOrdAlu.hs @@ -10,23 +10,24 @@ import Data.RangedWord constant :: e -> Op D4 e constant e a b = - e +> (e +> (e +> (singleton e ))) + (e +> (e +> (e +> (singleton e)))) invop :: Op n Bit invop a b = map hwnot a - andop :: Op n Bit andop a b = zipWith hwand a b -- Is any bit set? --anyset :: (PositiveT n) => Op n Bit -anyset :: Op D4 Bit +anyset :: (Bit -> Bit -> Bit) -> Op D4 Bit --anyset a b = copy undefined (a' `hwor` b') -anyset a b = constant (a' `hwor` b') a b +anyset f a b = constant (a' `hwor` b') a b where - a' = foldl hwor Low a - b' = foldl hwor Low b + a' = foldl f Low a + b' = foldl f Low b + +xhwor = hwor type Op n e = (TFVec n e -> TFVec n e -> TFVec n e) type Opcode = Bit @@ -39,4 +40,4 @@ alu op1 op2 opc a b = actual_alu :: Opcode -> TFVec D4 Bit -> TFVec D4 Bit -> TFVec D4 Bit --actual_alu = alu (constant Low) andop -actual_alu = alu anyset andop +actual_alu = alu (anyset xhwor) andop