File: encdec_subrange.sail

package info (click to toggle)
sail-ocaml 0.19.1%2Bdfsg5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 18,008 kB
  • sloc: ml: 75,941; ansic: 8,848; python: 1,342; exp: 560; sh: 474; makefile: 218; cpp: 36
file content (31 lines) | stat: -rw-r--r-- 589 bytes parent folder | download
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
27
28
29
30
31
default Order dec

$include <prelude.sail>

scattered union instr

val encdec : instr <-> bits(32)

scattered mapping encdec

union clause instr = X : bits(21)

mapping clause encdec = X(imm20 @ 0b0)
  <-> 0xF @ imm20[9..0] @ 0x00 @ imm20[19..10]

val main : unit -> unit

function main() = {
  let x = encdec(X(0xFFFFF @ 0b0));
  print_bits("x = ", x);
  let x = encdec(X(0x00000 @ 0b0));
  print_bits("x = ", x);
  let x = encdec(X(0b00 @ 0x00AB @ 0b00 @ 0b0));
  print_bits("x = ", x);

  match encdec(0xFFFC03FF) {
    X(y) => assert(y == 0xFFFFF @ 0b0),
  };

  print_endline("ok");
}