diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2024-10-27 22:31:38 -0600 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2024-10-27 22:31:38 -0600 |
commit | 4b85b09593fae1b72a6d64b09a7843f9a28dbe99 (patch) | |
tree | c66fbdf882d70a4228311a174736d52908d903b4 /src/Language/Fiddle/Ast/Internal/SyntaxTree.hs | |
parent | 5d3f21123b585fb1c43da9d854b04c61678405df (diff) | |
download | fiddle-4b85b09593fae1b72a6d64b09a7843f9a28dbe99.tar.gz fiddle-4b85b09593fae1b72a6d64b09a7843f9a28dbe99.tar.bz2 fiddle-4b85b09593fae1b72a6d64b09a7843f9a28dbe99.zip |
Enforce that registers are either 8, 16, 32, or 64 bits.
Fixed the issues where the output C code did not use correct register
sizes.
Diffstat (limited to 'src/Language/Fiddle/Ast/Internal/SyntaxTree.hs')
-rw-r--r-- | src/Language/Fiddle/Ast/Internal/SyntaxTree.hs | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/Language/Fiddle/Ast/Internal/SyntaxTree.hs b/src/Language/Fiddle/Ast/Internal/SyntaxTree.hs index 0d0bc32..b597a25 100644 --- a/src/Language/Fiddle/Ast/Internal/SyntaxTree.hs +++ b/src/Language/Fiddle/Ast/Internal/SyntaxTree.hs @@ -18,6 +18,7 @@ module Language.Fiddle.Ast.Internal.SyntaxTree FieldSpan (..), QRegMetadata (..), QBitsMetadata (..), + RegSz(..), -- Witness Types Witness (..), -- AST Types @@ -50,6 +51,7 @@ module Language.Fiddle.Ast.Internal.SyntaxTree EnumConstantDecl (..), PackageBody (..), -- Helper Functions + regSzToBits, mapDirected, mapDirectedM, asDirected, @@ -105,6 +107,15 @@ deriving instance (FromJSON (When s (FieldSpan Bytes))) => FromJSON (QRegMetadata s) +data RegSz = RegSz8 | RegSz16 | RegSz32 | RegSz64 + deriving (Eq, Ord, Show, Enum, Generic, ToJSON, FromJSON) + +regSzToBits :: RegSz -> N Bits +regSzToBits RegSz8 = 8 +regSzToBits RegSz16 = 16 +regSzToBits RegSz32 = 32 +regSzToBits RegSz64 = 64 + data QBitsMetadata (checkStage :: Bool) where QBitsMetadata :: { bitsSpan :: When checkStage (FieldSpan Bits), @@ -520,7 +531,7 @@ data ObjTypeDecl stage f a where -- doesn't exist. regIdent :: Guaranteed (stage .>= Qualified) (Identifier f a), -- | Size of the register. - regSize :: Expression Bits stage f a, + regSize :: Variant (stage .>= Qualified) RegSz (Expression Bits stage f a), -- | Optional register body. regBody :: Maybe (RegisterBody stage f a), -- | Annotation for the register declaration. |