wrench-0.0.6.3
Safe HaskellSafe-Inferred
LanguageHaskell2010

Wrench.Machine.Types

Synopsis

Documentation

data Trace st isa Source #

Constructors

TState

A captured machine state after executing tInstructionCount instructions. tPrevInstruction is the instruction that was just executed to reach this state (Nothing for the initial state before any execution).

Fields

TError Text 
TWarn Text 

Instances

Instances details
(Show isa, Show st) => Show (Trace st isa) Source # 
Instance details

Defined in Wrench.Machine.Types

Methods

showsPrec :: Int -> Trace st isa -> ShowS #

show :: Trace st isa -> String #

showList :: [Trace st isa] -> ShowS #

class Machine st isa w | st -> isa w where Source #

Minimal complete definition

instructionFetch, instructionExecute

Instances

Instances details
IsWord w => Machine (Acc32St w) (Acc32Isa w w) w Source # 
Instance details

Defined in Wrench.Isa.Acc32

IsWord w => Machine (F32aSt w) (F32aIsa w w) w Source # 
Instance details

Defined in Wrench.Isa.F32a

IsWord w => Machine (M68kSt w) (M68kIsa w w) w Source # 
Instance details

Defined in Wrench.Isa.M68k

IsWord w => Machine (RiscIvSt w) (RiscIvIsa w w) w Source # 
Instance details

Defined in Wrench.Isa.RiscIv

IsWord w => Machine (VliwIvSt w) (VliwIvIsa w w) w Source # 
Instance details

Defined in Wrench.Isa.VliwIv

IsWord w => Machine (Wasm32St w) (Wasm32Isa w w) w Source # 
Instance details

Defined in Wrench.Isa.Wasm32.Execute

data Mem isa w Source #

Constructors

Mem 

Fields

Instances

Instances details
Show isa => Show (Mem isa w) Source # 
Instance details

Defined in Wrench.Machine.Types

Methods

showsPrec :: Int -> Mem isa w -> ShowS #

show :: Mem isa w -> String #

showList :: [Mem isa w] -> ShowS #

Eq isa => Eq (Mem isa w) Source # 
Instance details

Defined in Wrench.Machine.Types

Methods

(==) :: Mem isa w -> Mem isa w -> Bool #

(/=) :: Mem isa w -> Mem isa w -> Bool #

(ByteSize isa, IsWord w) => Memory (Mem isa w) isa w Source # 
Instance details

Defined in Wrench.Machine.Memory

Methods

readInstruction :: Mem isa w -> Int -> Either Text (Mem isa w, isa) Source #

readWord :: Mem isa w -> Int -> Either Text (Mem isa w, w) Source #

readByte :: Mem isa w -> Int -> Either Text (Mem isa w, Word8) Source #

writeWord :: Mem isa w -> Int -> w -> Either Text (Mem isa w) Source #

writeByte :: Mem isa w -> Int -> Word8 -> Either Text (Mem isa w) Source #

dumpCells :: Mem isa w -> IntMap (Cell isa w) Source #

memCapacity :: Mem isa w -> Int Source #

ioPorts :: Mem isa w -> [Int] Source #

accessLog :: Mem isa w -> AccessLog Source #

memAccessCount :: Mem isa w -> AccessCount Source #

data IoMem isa w Source #

Constructors

IoMem 

Fields

Instances

Instances details
(Show isa, Show w) => Show (IoMem isa w) Source #

Every field but the mInstrFetchReads function.

Instance details

Defined in Wrench.Machine.Types

Methods

showsPrec :: Int -> IoMem isa w -> ShowS #

show :: IoMem isa w -> String #

showList :: [IoMem isa w] -> ShowS #

(ByteSize isa, IsWord w, Memory (Mem isa w) isa w) => Memory (IoMem isa w) isa w Source # 
Instance details

Defined in Wrench.Machine.Memory

Methods

readInstruction :: IoMem isa w -> Int -> Either Text (IoMem isa w, isa) Source #

readWord :: IoMem isa w -> Int -> Either Text (IoMem isa w, w) Source #

readByte :: IoMem isa w -> Int -> Either Text (IoMem isa w, Word8) Source #

writeWord :: IoMem isa w -> Int -> w -> Either Text (IoMem isa w) Source #

writeByte :: IoMem isa w -> Int -> Word8 -> Either Text (IoMem isa w) Source #

dumpCells :: IoMem isa w -> IntMap (Cell isa w) Source #

memCapacity :: IoMem isa w -> Int Source #

ioPorts :: IoMem isa w -> [Int] Source #

accessLog :: IoMem isa w -> AccessLog Source #

memAccessCount :: IoMem isa w -> AccessCount Source #

mkIoMem :: forall w isa. (ByteSize isa, ByteSizeT w) => IntMap ([w], [w]) -> Mem isa w -> IoMem isa w Source #

data Cell isa w Source #

Constructors

Instruction !isa 
InstructionPart 
Value !Word8 

Instances

Instances details
Show isa => Show (Cell isa w) Source # 
Instance details

Defined in Wrench.Machine.Types

Methods

showsPrec :: Int -> Cell isa w -> ShowS #

show :: Cell isa w -> String #

showList :: [Cell isa w] -> ShowS #

Eq isa => Eq (Cell isa w) Source # 
Instance details

Defined in Wrench.Machine.Types

Methods

(==) :: Cell isa w -> Cell isa w -> Bool #

(/=) :: Cell isa w -> Cell isa w -> Bool #

class InitState st where Source #

Methods

initState :: Int -> MemOf st -> StdGen -> st Source #

Instances

Instances details
IsWord w => InitState (Acc32St w) Source # 
Instance details

Defined in Wrench.Isa.Acc32

Methods

initState :: Int -> MemOf (Acc32St w) -> StdGen -> Acc32St w Source #

IsWord w => InitState (F32aSt w) Source # 
Instance details

Defined in Wrench.Isa.F32a

Methods

initState :: Int -> MemOf (F32aSt w) -> StdGen -> F32aSt w Source #

IsWord w => InitState (M68kSt w) Source # 
Instance details

Defined in Wrench.Isa.M68k

Methods

initState :: Int -> MemOf (M68kSt w) -> StdGen -> M68kSt w Source #

IsWord w => InitState (RiscIvSt w) Source # 
Instance details

Defined in Wrench.Isa.RiscIv

Methods

initState :: Int -> MemOf (RiscIvSt w) -> StdGen -> RiscIvSt w Source #

IsWord w => InitState (VliwIvSt w) Source # 
Instance details

Defined in Wrench.Isa.VliwIv

Methods

initState :: Int -> MemOf (VliwIvSt w) -> StdGen -> VliwIvSt w Source #

IsWord w => InitState (Wasm32St w) Source # 
Instance details

Defined in Wrench.Isa.Wasm32.Execute

Methods

initState :: Int -> MemOf (Wasm32St w) -> StdGen -> Wasm32St w Source #

class Inspectable st where Source #

Minimal complete definition

programCounter, memoryDump, ioStreams, views, isHalted

Associated Types

type WordOf st Source #

type IsaOf st Source #

Methods

programCounter :: st -> Int Source #

memoryDump :: st -> MemOf st Source #

ioStreams :: st -> IntMap ([WordOf st], [WordOf st]) Source #

views :: [View (StateEnv st)] Source #

The ISA's own report views: registers, flags, stacks, run-wide stats.

isaStats :: [Stat (StateEnv st)] Source #

The ISA's run-wide stats, read from the final state; {isa-specific} lists them.

isHalted :: st -> Bool Source #

Instances

Instances details
IsWord w => Inspectable (Acc32St w) Source # 
Instance details

Defined in Wrench.Isa.Acc32

Associated Types

type WordOf (Acc32St w) 
Instance details

Defined in Wrench.Isa.Acc32

type WordOf (Acc32St w) = w
type IsaOf (Acc32St w) 
Instance details

Defined in Wrench.Isa.Acc32

type IsaOf (Acc32St w) = Acc32Isa w w
IsWord w => Inspectable (F32aSt w) Source # 
Instance details

Defined in Wrench.Isa.F32a

Associated Types

type WordOf (F32aSt w) 
Instance details

Defined in Wrench.Isa.F32a

type WordOf (F32aSt w) = w
type IsaOf (F32aSt w) 
Instance details

Defined in Wrench.Isa.F32a

type IsaOf (F32aSt w) = F32aIsa w w
IsWord w => Inspectable (M68kSt w) Source # 
Instance details

Defined in Wrench.Isa.M68k

Associated Types

type WordOf (M68kSt w) 
Instance details

Defined in Wrench.Isa.M68k

type WordOf (M68kSt w) = w
type IsaOf (M68kSt w) 
Instance details

Defined in Wrench.Isa.M68k

type IsaOf (M68kSt w) = M68kIsa w w
IsWord w => Inspectable (RiscIvSt w) Source # 
Instance details

Defined in Wrench.Isa.RiscIv

Associated Types

type WordOf (RiscIvSt w) 
Instance details

Defined in Wrench.Isa.RiscIv

type WordOf (RiscIvSt w) = w
type IsaOf (RiscIvSt w) 
Instance details

Defined in Wrench.Isa.RiscIv

type IsaOf (RiscIvSt w) = RiscIvIsa w w
IsWord w => Inspectable (VliwIvSt w) Source # 
Instance details

Defined in Wrench.Isa.VliwIv

Associated Types

type WordOf (VliwIvSt w) 
Instance details

Defined in Wrench.Isa.VliwIv

type WordOf (VliwIvSt w) = w
type IsaOf (VliwIvSt w) 
Instance details

Defined in Wrench.Isa.VliwIv

type IsaOf (VliwIvSt w) = VliwIvIsa w w
IsWord w => Inspectable (Wasm32St w) Source # 
Instance details

Defined in Wrench.Isa.Wasm32.Report

Associated Types

type WordOf (Wasm32St w) 
Instance details

Defined in Wrench.Isa.Wasm32.Report

type WordOf (Wasm32St w) = w
type IsaOf (Wasm32St w) 
Instance details

Defined in Wrench.Isa.Wasm32.Report

type IsaOf (Wasm32St w) = Wasm32Isa w w

data StateEnv st Source #

What an ISA view sees.

Constructors

StateEnv 

Fields

  • seLabels :: HashMap Text (WordOf st)
     
  • seState :: st

    The state of the record being rendered.

  • seFinal :: st

    The state the run ended in, for run-wide stats: an accumulator read from seState would lag the run.

type family MemOf st Source #

Instances

Instances details
type MemOf (Acc32St w) Source # 
Instance details

Defined in Wrench.Isa.Acc32

type MemOf (Acc32St w) = IoMem (Acc32Isa w w) w
type MemOf (F32aSt w) Source # 
Instance details

Defined in Wrench.Isa.F32a

type MemOf (F32aSt w) = IoMem (F32aIsa w w) w
type MemOf (M68kSt w) Source # 
Instance details

Defined in Wrench.Isa.M68k

type MemOf (M68kSt w) = IoMem (M68kIsa w w) w
type MemOf (RiscIvSt w) Source # 
Instance details

Defined in Wrench.Isa.RiscIv

type MemOf (RiscIvSt w) = IoMem (RiscIvIsa w w) w
type MemOf (VliwIvSt w) Source # 
Instance details

Defined in Wrench.Isa.VliwIv

type MemOf (VliwIvSt w) = IoMem (VliwIvIsa w w) w
type MemOf (Wasm32St w) Source # 
Instance details

Defined in Wrench.Isa.Wasm32.State

type MemOf (Wasm32St w) = IoMem (Wasm32Isa w w) w

newtype Intervals Source #

Sorted, non-overlapping integer address ranges with adjacency merging. Backed by IntervalSet Integer from the data-interval package.

We store each access as the half-open interval [lo, hi+1) so that two integer-adjacent accesses (one ending at N, the next starting at N+1) share a boundary and get merged by insert. On render we convert back to the inclusive "lo..hi" form by subtracting 1 from the upper.

Constructors

Intervals 

Fields

Instances

Instances details
Show Intervals Source # 
Instance details

Defined in Wrench.Machine.Types

Eq Intervals Source # 
Instance details

Defined in Wrench.Machine.Types

recordRange :: Int -> Int -> Intervals -> Intervals Source #

Record an access spanning [addr .. addr+len-1]. Length must be ≥ 1.

renderIntervals :: Intervals -> Text Source #

Decimal-formatted ranges.

inIntervals :: Int -> Intervals -> Bool Source #

Membership test: is addr inside any interval?

intervalsSize :: Intervals -> Int Source #

Total number of bytes covered by all intervals.

intervalsToList :: Intervals -> [(Int, Int)] Source #

Convert intervals back to a list of inclusive (lo, hi) pairs in ascending order.

intervalsRange :: Int -> Int -> Intervals Source #

Build an Intervals covering the inclusive range [lo, hi].

data AccessLog Source #

Runtime access ranges accumulated by IoMem while the program runs.

Constructors

AccessLog 

Fields

Instances

Instances details
Show AccessLog Source # 
Instance details

Defined in Wrench.Machine.Types

Eq AccessLog Source # 
Instance details

Defined in Wrench.Machine.Types

data AccessSet Source #

The raw form of AccessLog that IoMem keeps while the program runs.

Constructors

AccessSet 

Fields

Instances

Instances details
Show AccessSet Source # 
Instance details

Defined in Wrench.Machine.Types

Eq AccessSet Source # 
Instance details

Defined in Wrench.Machine.Types

data Touched Source #

Addresses touched at runtime, cheap to extend on every access; turned into Intervals only when a report asks (toAccessLog). Disjoint, non-adjacent inclusive ranges, keyed by their low end.

Instances

Instances details
Show Touched Source # 
Instance details

Defined in Wrench.Machine.Types

Eq Touched Source # 
Instance details

Defined in Wrench.Machine.Types

Methods

(==) :: Touched -> Touched -> Bool #

(/=) :: Touched -> Touched -> Bool #

touch :: Int -> Int -> Touched -> Touched Source #

Record an access spanning [addr .. addr+len-1]. Length must be ≥ 1.

data AccessCount Source #

Reads and writes served, counted once per operation.

Constructors

AccessCount 

Fields

Instances

Instances details
Show AccessCount Source # 
Instance details

Defined in Wrench.Machine.Types

Eq AccessCount Source # 
Instance details

Defined in Wrench.Machine.Types

acTotal :: AccessCount -> Int Source #

Reads plus writes.

acSince :: AccessCount -> AccessCount -> AccessCount Source #

What happened between two counts.

type IsWord w = (Bits w, FiniteBits w, ByteSize w, ByteSizeT w, Default w, Enum w, FromSign w, Num (Unsign w), Hashable w, Num w, Ord (Unsign w), Ord w, Read w, Show w, WordParts w, Integral w, FromSign w, Bounded w, Bounded (Unsign w)) Source #

class (Bits (Unsign w), Bounded (Unsign w), Integral (Unsign w), Show (Unsign w)) => FromSign w where Source #

Associated Types

type Unsign w Source #

Methods

fromSign :: w -> Unsign w Source #

toSign :: Unsign w -> w Source #

Instances

Instances details
FromSign Int32 Source # 
Instance details

Defined in Wrench.Machine.Types

Associated Types

type Unsign Int32 
Instance details

Defined in Wrench.Machine.Types

FromSign Int8 Source # 
Instance details

Defined in Wrench.Machine.Types

Associated Types

type Unsign Int8 
Instance details

Defined in Wrench.Machine.Types

type RegisterId r = (Hashable r, Show r, Read r) Source #

class ByteSize t where Source #

Methods

byteSize :: t -> Int Source #

Instances

Instances details
ByteSize Int32 Source # 
Instance details

Defined in Wrench.Machine.Types

Methods

byteSize :: Int32 -> Int Source #

ByteSize Int8 Source # 
Instance details

Defined in Wrench.Machine.Types

Methods

byteSize :: Int8 -> Int Source #

ByteSize Word32 Source # 
Instance details

Defined in Wrench.Machine.Types

Methods

byteSize :: Word32 -> Int Source #

ByteSizeT w => ByteSize (DataValue w) Source # 
Instance details

Defined in Wrench.Translator.Types

Methods

byteSize :: DataValue w -> Int Source #

ByteSize (Acc32Isa w l) Source # 
Instance details

Defined in Wrench.Isa.Acc32

Methods

byteSize :: Acc32Isa w l -> Int Source #

ByteSize (F32aIsa w l) Source # 
Instance details

Defined in Wrench.Isa.F32a

Methods

byteSize :: F32aIsa w l -> Int Source #

ByteSizeT w => ByteSize (Argument w l) Source # 
Instance details

Defined in Wrench.Isa.M68k

Methods

byteSize :: Argument w l -> Int Source #

ByteSizeT w => ByteSize (M68kIsa w l) Source # 
Instance details

Defined in Wrench.Isa.M68k

Methods

byteSize :: M68kIsa w l -> Int Source #

ByteSize (RiscIvIsa w l) Source # 
Instance details

Defined in Wrench.Isa.RiscIv

Methods

byteSize :: RiscIvIsa w l -> Int Source #

ByteSize (VliwIvIsa w l) Source # 
Instance details

Defined in Wrench.Isa.VliwIv

Methods

byteSize :: VliwIvIsa w l -> Int Source #

ByteSize (Wasm32Isa w l) Source # 
Instance details

Defined in Wrench.Isa.Wasm32.Instruction

Methods

byteSize :: Wasm32Isa w l -> Int Source #

ByteSize isa => ByteSize (CodeToken isa l) Source # 
Instance details

Defined in Wrench.Translator.Types

Methods

byteSize :: CodeToken isa l -> Int Source #

ByteSizeT w => ByteSize (DataToken w l) Source # 
Instance details

Defined in Wrench.Translator.Types

Methods

byteSize :: DataToken w l -> Int Source #

(ByteSize isa, ByteSizeT w) => ByteSize (Section isa w l) Source # 
Instance details

Defined in Wrench.Translator.Types

Methods

byteSize :: Section isa w l -> Int Source #

class ByteSizeT t where Source #

Methods

byteSizeT :: Int Source #

Instances

Instances details
(ByteSize t, Default t) => ByteSizeT t Source # 
Instance details

Defined in Wrench.Machine.Types

Methods

byteSizeT :: Int Source #

class WordParts w where Source #

Methods

wordSplit :: w -> [Word8] Source #

wordCombine :: [Word8] -> w Source #

byteToWord :: Word8 -> w Source #

Instances

Instances details
WordParts Int32 Source # 
Instance details

Defined in Wrench.Machine.Types

WordParts Int8 Source # 
Instance details

Defined in Wrench.Machine.Types

data RW Source #

Which way an access went.

Constructors

R 
W