File: union_split.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 (23 lines) | stat: -rw-r--r-- 491 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
default Order dec
$include <prelude.sail>

/* Simple case split example on a variant datatype */

union ast = {
  SomeOp : {'n, 'n in {8,16}. (int('n),bits('n))}
}

val execute : ast -> bits(32)

function execute(SomeOp(n as int('n),v)) = {
  a : bits('n) = sail_zero_extend(0x12,n);
  b : bits('n) = and_vec(v, a);
  sail_zero_extend(b,32)
}

val run : unit -> unit

function run () = {
  assert(execute(SomeOp(8,0x11)) == 0x00000010);
  assert(execute(SomeOp(16,0x3333)) == 0x00000012);
}