packages feed

libriscv-0.1.0.0: lib/LibRISCV/Effects/Expressions/Expr.hs

{-# LANGUAGE TemplateHaskell #-}
-- generateImmediates doesn't generate signatures.
{-# OPTIONS_GHC -Wno-missing-signatures #-}

-- | Defines the expression abstraction to express arithmetic and logic
-- operations within the formal description of RISC-V instructions. The
-- abstraction is just a non-monadic algebraic data type called 'Expr'.
-- In addition to the the data type definition, this module also provides
-- several smart constructors for utilzing the expression lanuage, these
-- are generated using template-haskell.
module LibRISCV.Effects.Expressions.Expr (
    module LibRISCV.Effects.Expressions.Type,
    module LibRISCV.Effects.Expressions.Expr,
) where

import Data.Function (on)
import LibRISCV.Effects.Expressions.Generator
import LibRISCV.Effects.Expressions.Type

-- | Extract shamt value from an expression (lower 5 bits).
regShamt :: Int -> Expr a -> Expr a
regShamt w a = a `And` FromInt w 0x1f

------------------------------------------------------------------------

zextImm :: Int -> a -> Expr a
zextImm w = ZExt w . FromImm

sextImm :: Int -> a -> Expr a
sextImm w = SExt w . FromImm

generateImmediates