risc-v-0.0.2.0: Data/RiscV/Instruction/S.hs
{-# LANGUAGE ViewPatterns, PatternSynonyms #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Data.RiscV.Instruction.S where
import Clash.Explicit.Prelude.Safe
import Util
import Data.RiscV.Instruction
pattern S { major, minor, rs1, rs2, imm } <-
(split -> ((split & \ (split -> (imm1 :: BitVector 7, blah), imm0 :: BitVector 5) -> (imm1 ++# imm0, blah)) ->
(imm,
split -> (split -> (Register -> rs1, Register -> rs2),
MinorOpcode -> minor)),
split -> (0b11 :: BitVector 2, MajorOpcode -> major))) where
S (MajorOpcode major) (MinorOpcode minor) (Register rs1) (Register rs2) (split -> (imm1, imm0)) =
unpack $ imm1 ++# rs2 ++# rs1 ++# minor ++# (imm0 :: BitVector 5) ++# major ++# (0b11 :: BitVector 2)