From: Christiaan Baaij Date: Wed, 3 Mar 2010 09:09:09 +0000 (+0100) Subject: Reduce code-size of higher-order cpu X-Git-Url: https://git.stderr.nl/gitweb?a=commitdiff_plain;h=04826a331fd930f2657850390efe332f18c40424;p=matthijs%2Fmaster-project%2Fdsd-paper.git Reduce code-size of higher-order cpu --- diff --git a/HigherOrderCPU.hs b/HigherOrderCPU.hs index fd7471b..94bb7b6 100644 --- a/HigherOrderCPU.hs +++ b/HigherOrderCPU.hs @@ -12,15 +12,8 @@ import CLasH.Translator.Annotations type Word = SizedInt D16 type Index = RangedWord -const :: a -> a -> a const a b = a -fu :: ( PositiveT p, NaturalT n, (p :>: n) ~ True) => - (a -> a -> a) - -> Vector p a - -> (Index n, Index n) - -> a - -> (a, a) fu op inputs (addr1, addr2) out = (out', out) where @@ -42,8 +35,8 @@ cpu input addrs (State fuss) = where fures = (fu const inputs (addrs!(0 :: Index D3)) (fuss!(0 :: Index D3))) +> ( (fu (+) inputs (addrs!(1 :: Index D3)) (fuss!(1 :: Index D3))) +> ( - (fu (-) inputs (addrs!(2 :: Index D3)) (fuss!(2 :: Index D3))) +> ( singleton - (fu (*) inputs (addrs!(3 :: Index D3)) (fuss!(3 :: Index D3)))))) + (fu (-) inputs (addrs!(2 :: Index D3)) (fuss!(2 :: Index D3))) +> ( + (fu (*) inputs (addrs!(3 :: Index D3)) (fuss!(3 :: Index D3))) +> empty))) (fuss', outputs) = unzip fures inputs = 0 +> (1 +> (input +> outputs)) out = head outputs diff --git "a/c\316\273ash.lhs" "b/c\316\273ash.lhs" index e02b16d..3bcf41e 100644 --- "a/c\316\273ash.lhs" +++ "b/c\316\273ash.lhs" @@ -1192,11 +1192,6 @@ the vectors of the \acro{FIR} code to a length of 4, is depicted in \subsection{Higher order CPU} \begin{code} -fu :: (a -> a -> a) - -> [a | n] - -> (Index (n - 1), Index (n - 1)) - -> a - -> (a, a) fu op inputs (addr1, addr2) (State out) = (State out', out) where @@ -1206,12 +1201,8 @@ fu op inputs (addr1, addr2) (State out) = \end{code} \begin{code} -type CpuState = State [Word | 4] - -cpu :: Word - -> [(Index 6, Index 6) | 4] - -> CpuState - -> (CpuState, Word) +cpu :: Word -> [(Index 6, Index 6) | 4] + -> State [Word | 4] -> (State [Word | 4], Word) cpu input addrs (State fuss) = (State fuss', out) where fures = [ fu const inputs (addrs!0) (fuss!0)