Added resize function
authorChristiaan Baaij <christiaan.baaij@gmail.com>
Tue, 14 Jul 2009 08:28:03 +0000 (10:28 +0200)
committerChristiaan Baaij <christiaan.baaij@gmail.com>
Tue, 14 Jul 2009 08:28:03 +0000 (10:28 +0200)
Adders.hs
Constants.hs
Generate.hs
cλash.cabal

index a281ea63467780d4f7e6b7b9a32cfae58061ff22..6529642f4758ad640b1b93e736ef566e4b1f63eb 100644 (file)
--- a/Adders.hs
+++ b/Adders.hs
@@ -181,8 +181,8 @@ xand a b = hwand a b
 functiontest :: TFVec D3 (TFVec D4 Bit) -> TFVec D12 Bit
 functiontest = \v -> let r = concat v in r
 
-functiontest2 :: SizedInt D8 -> SizedInt D8
-functiontest2 = \a -> let r = a + 1 in r
+functiontest2 :: SizedInt D8 -> SizedInt D7
+functiontest2 = \a -> let r = Data.SizedInt.resize a in r
 
 xhwnot x = hwnot x
 
index c392521becb7817da215ee3ad379d976f6b80842..ad87e0a02979645ea1c80ad6789525932c912b10 100644 (file)
@@ -258,6 +258,9 @@ toSignedId = "to_signed"
 toUnsignedId :: String
 toUnsignedId = "to_unsigned"
 
+resizeId :: String
+resizeId = "resize"
+
 ------------------
 -- VHDL type marks
 ------------------
index 4846d58690011e3e3b8d82083feecc67e91c2a19..1af1be33a63c977b0e5630f2fd32c0dec097efc5 100644 (file)
@@ -134,6 +134,22 @@ genFromSizedWord' (Left res) f args = do
              map (\exp -> Nothing AST.:=>: AST.ADExpr exp) args
 genFromSizedWord' (Right name) _ _ = error $ "\nGenerate.genFromSizedWord': Cannot generate builtin function call assigned to a VHDLName: " ++ show name
 
+genResize :: BuiltinBuilder
+genResize = genExprArgs $ genExprRes genResize'
+genResize' :: Either CoreSyn.CoreBndr AST.VHDLName -> CoreSyn.CoreBndr -> [AST.Expr] -> VHDLSession AST.Expr
+genResize' (Left res) f [arg] = do {
+  ; let { ty = Var.varType res
+        ; (tycon, args) = Type.splitTyConApp ty
+        ; name = Name.getOccString (TyCon.tyConName tycon)
+        } ;
+  ; len <- case name of
+      "SizedInt" -> MonadState.lift vsType $ tfp_to_int (sized_int_len_ty ty)
+      "SizedWord" -> MonadState.lift vsType $ tfp_to_int (sized_word_len_ty ty)
+  ; return $ AST.PrimFCall $ AST.FCall (AST.NSimple (mkVHDLBasicId resizeId))
+             [Nothing AST.:=>: AST.ADExpr arg, Nothing AST.:=>: AST.ADExpr( AST.PrimLit (show len))]
+  }
+genResize' (Right name) _ _ = error $ "\nGenerate.genFromSizedWord': Cannot generate builtin function call assigned to a VHDLName: " ++ show name
+
 -- FIXME: I'm calling genLitArgs which is very specific function,
 -- which needs to be fixed as well
 genFromInteger :: BuiltinBuilder
@@ -1026,4 +1042,5 @@ globalNameTable = Map.fromList
   , (minusId          , (2, genOperator2 (AST.:-:)  ) )
   , (fromSizedWordId  , (1, genFromSizedWord        ) )
   , (fromIntegerId    , (1, genFromInteger          ) )
+  , (resizeId         , (1, genResize               ) )
   ]
index b5f497a73a6016303cbbd009f46039b4d6bf49b0..479695692000b85f167f0d24e91e2fa57ad3d95c 100644 (file)
@@ -13,7 +13,7 @@ stability:           alpha
 maintainer:          christiaan.baaij@gmail.com & matthijs@stdin.nl
 build-depends:       base > 4, syb, ghc, ghc-paths, transformers, haskell98,
                      ForSyDe > 3.0, regex-posix ,data-accessor-template, pretty,
-                     data-accessor, containers, prettyclass, tfp > 0.3.1
+                     data-accessor, containers, prettyclass, tfp > 0.3.2
                      tfvec > 0.1.2, QuickCheck, template-haskell, filepath
 
 executable:          clash