1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
default Order dec
$include <prelude.sail>
type regbits = bits(5)
enum iop = {RISCV_ADDI, RISCV_SLTI, RISCV_SLTIU, RISCV_XORI, RISCV_ORI, RISCV_ANDI}
scattered union ast
union clause ast = ITYPE : (bits(12), regbits, regbits, iop)
val decode : bits(32) -> option(ast) effect pure
function clause decode imm : bits(12) @ rs1 : regbits @ 0b000 @ rd : regbits @ 0b0010011
= Some(ITYPE(imm, rs1, rd, RISCV_ADDI))
function clause decode _ = None()
$property
function prop(imm: bits(12), rs1: regbits, rd: regbits) -> bool = {
match decode(imm @ rs1 @ 0b000 @ rd @ 0b0010011) {
Some(ITYPE(_)) => true,
_ => false
}
}
|