blob: b08af90f6d039a227f5e514b254024367c9e2237 (
plain)
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
|
// Tests for -mono_rewrites
default Order dec
$include <prelude.sail>
$include <mono_rewrites.sail>
// The preconditions for this rewrite require a non-constant size somewhere, so
// pull the example out into a separate function.
val sign_ext_fun : forall 'z 'n, 'z >= 0 & 'n >= 4 + 'z. (bits(12), int('z), int('n)) -> bits('n)
function sign_ext_fun(y, z, n) = {
sail_sign_extend(y[7..4] @ sail_zeros(z), n)
}
val run : unit -> unit effect {escape}
function run() = {
let x : bits(12) = 0x123;
let y : bits(12) = 0x987;
let 'i = 7;
let 'j = 4;
let 'z = 8;
assert(sail_zero_extend(x[7..4] @ sail_zeros(8), 32) == 0x00000200);
assert(sign_ext_fun(x, z, 32) == 0x00000200);
assert(sail_zero_extend(y[7..4] @ sail_zeros(8), 32) == 0x00000800);
assert(sign_ext_fun(y, z, 32) == 0xfffff800);
}
|