Added builtin copy function
authorChristiaan Baaij <christiaan.baaij@gmail.com>
Tue, 23 Jun 2009 13:55:00 +0000 (15:55 +0200)
committerChristiaan Baaij <christiaan.baaij@gmail.com>
Tue, 23 Jun 2009 13:55:00 +0000 (15:55 +0200)
Generate.hs
GlobalNameTable.hs

index 9a3a48cb791045280920b85f772f4a6acd0fc156..5c1ca08ba7fd2f4137b42c44ce5d675dced638cc 100644 (file)
@@ -76,6 +76,7 @@ genUnconsVectorFuns elemTM vectorTM  =
   , AST.SubProgBody plusgtSpec  [AST.SPVD plusgtVar] [plusgtExpr, plusgtRet]
   , AST.SubProgBody emptySpec   [AST.SPVD emptyVar] [emptyExpr]
   , AST.SubProgBody singletonSpec [AST.SPVD singletonVar] [singletonRet] 
+  , AST.SubProgBody copySpec    [AST.SPVD copyVar]      [copyExpr]
   ]
   where 
     ixPar   = AST.unsafeVHDLBasicId "ix"
@@ -233,4 +234,18 @@ genUnconsVectorFuns elemTM vectorTM  =
                 [AST.ToRange (AST.PrimLit "0") (AST.PrimLit "0")]))
              (Just $ AST.Aggregate [AST.ElemAssoc (Just AST.Others) 
                                           (AST.PrimName $ AST.NSimple aPar)])
-    singletonRet = AST.ReturnSm (Just $ AST.PrimName $ AST.NSimple resId)
\ No newline at end of file
+    singletonRet = AST.ReturnSm (Just $ AST.PrimName $ AST.NSimple resId)
+    copySpec = AST.Function copyId [AST.IfaceVarDec nPar   naturalTM,
+                                   AST.IfaceVarDec aPar   elemTM   ] vectorTM 
+    -- variable res : fsvec_x (0 to n-1) := (others => a);
+    copyVar = 
+      AST.VarDec resId 
+             (AST.SubtypeIn vectorTM
+               (Just $ AST.ConstraintIndex $ AST.IndexConstraint 
+                [AST.ToRange (AST.PrimLit "0")
+                            ((AST.PrimName (AST.NSimple nPar)) AST.:-:
+                             (AST.PrimLit "1"))   ]))
+             (Just $ AST.Aggregate [AST.ElemAssoc (Just AST.Others) 
+                                          (AST.PrimName $ AST.NSimple aPar)])
+    -- return res
+    copyExpr = AST.ReturnSm (Just $ AST.PrimName $ AST.NSimple resId)
\ No newline at end of file
index 429b9660d7e38434657635f1e97208e2452938c2..45eed895d89970629dd15c8bf0f8a4a58cecf6ff 100644 (file)
@@ -29,6 +29,7 @@ globalNameTable = mkGlobalNameTable
   , ("map"            , (2, Right $ genMapCall                            ) )
   , ("empty"          , (0, Left $ genExprFCall emptyId                   ) )
   , ("singleton"      , (1, Left $ genExprFCall singletonId               ) )
+  , ("copy"           , (2, Left $ genExprFCall copyId                    ) )
   , ("hwxor"          , (2, Left $ genExprOp2 AST.Xor                     ) )
   , ("hwand"          , (2, Left $ genExprOp2 AST.And                     ) )
   , ("hwor"           , (2, Left $ genExprOp2 AST.Or                      ) )