{-# LANGUAGE ViewPatterns, PatternSynonyms #-} {-# LANGUAGE ScopedTypeVariables #-} module Data.RiscV.Instruction.I where import Clash.Explicit.Prelude.Safe import Data.RiscV.Instruction pattern R { major, rd, minor, rs1, imm } <- (split -> (split -> (split -> (split -> (imm :: BitVector 12, Register -> rs1), MinorOpcode -> minor), Register -> rd), split -> (0b11 :: BitVector 2, MajorOpcode -> major))) where R (MajorOpcode major) (Register rd) (MinorOpcode minor) (Register rs1) imm = unpack $ imm ++# rs1 ++# minor ++# rd ++# major ++# (0b11 :: BitVector 2)