diff options
| -rw-r--r-- | lib/vector_dec.sail | 2 | ||||
| -rw-r--r-- | src/gen_lib/sail_operators.lem | 12 | ||||
| -rw-r--r-- | src/gen_lib/sail_operators_bitlists.lem | 17 | ||||
| -rw-r--r-- | src/gen_lib/sail_operators_mwords.lem | 17 | ||||
| -rw-r--r-- | test/builtins/get_slice_int.sail | 36 | ||||
| -rwxr-xr-x | test/builtins/run_tests.sh | 48 | ||||
| -rw-r--r-- | test/builtins/set_slice_bits.sail | 2 | ||||
| -rw-r--r-- | test/builtins/signed.sail | 120 | ||||
| -rw-r--r-- | test/builtins/test_extras.lem | 22 | ||||
| -rw-r--r-- | test/builtins/unsigned6.sail | 392 | ||||
| -rw-r--r-- | test/typecheck/pass/simple_record_access.sail | 1 |
11 files changed, 403 insertions, 266 deletions
diff --git a/lib/vector_dec.sail b/lib/vector_dec.sail index 1307bb56..17603e03 100644 --- a/lib/vector_dec.sail +++ b/lib/vector_dec.sail @@ -68,11 +68,13 @@ val vector_update = { val add_bits = { ocaml: "add_vec", + lem: "add_vec", c: "add_bits" } : forall 'n. (bits('n), bits('n)) -> bits('n) val add_bits_int = { ocaml: "add_vec_int", + lem: "add_vec_int", c: "add_bits_int" } : forall 'n. (bits('n), int) -> bits('n) diff --git a/src/gen_lib/sail_operators.lem b/src/gen_lib/sail_operators.lem index d4275c87..78aab65e 100644 --- a/src/gen_lib/sail_operators.lem +++ b/src/gen_lib/sail_operators.lem @@ -223,3 +223,15 @@ let inline ucmp_mword cmp l r = cmp (unsignedIntegerFromWord l) (unsignedInteger val scmp_mword : forall 'a. Size 'a => (integer -> integer -> bool) -> mword 'a -> mword 'a -> bool let inline scmp_mword cmp l r = cmp (signedIntegerFromWord l) (signedIntegerFromWord r) + +val get_slice_int_bv : forall 'a. Bitvector 'a => integer -> integer -> integer -> 'a +let get_slice_int_bv len n lo = + let hi = lo + len - 1 in + let bs = bools_of_int (hi + 1) n in + of_bools (subrange_list false bs hi lo) + +val set_slice_int_bv : forall 'a. Bitvector 'a => integer -> integer -> integer -> 'a -> integer +let set_slice_int_bv len n lo v = + let hi = lo + len - 1 in + let bs = bits_of_int (hi + 1) n in + maybe_failwith (signed_of_bits (update_subrange_list false bs hi lo (bits_of v))) diff --git a/src/gen_lib/sail_operators_bitlists.lem b/src/gen_lib/sail_operators_bitlists.lem index b0a29b5e..fed293b4 100644 --- a/src/gen_lib/sail_operators_bitlists.lem +++ b/src/gen_lib/sail_operators_bitlists.lem @@ -35,6 +35,9 @@ let zero_extend bits len = extz_bits len bits val sign_extend : list bitU -> integer -> list bitU let sign_extend bits len = exts_bits len bits +val zeros : integer -> list bitU +let zeros len = repeat [B0] len + val vector_truncate : list bitU -> integer -> list bitU let vector_truncate bs len = extz_bv len bs @@ -289,6 +292,20 @@ let duplicate_oracle b n = val reverse_endianness : list bitU -> list bitU let reverse_endianness v = reverse_endianness_list v +val get_slice_int : integer -> integer -> integer -> list bitU +let get_slice_int = get_slice_int_bv + +val set_slice_int : integer -> integer -> integer -> list bitU -> integer +let set_slice_int = set_slice_int_bv + +val slice : list bitU -> integer -> integer -> list bitU +let slice v lo len = + subrange_vec_dec v (lo + len - 1) lo + +val set_slice : integer -> integer -> list bitU -> integer -> list bitU -> list bitU +let set_slice (out_len:ii) (slice_len:ii) out (n:ii) v = + update_subrange_vec_dec out (n + slice_len - 1) n v + val eq_vec : list bitU -> list bitU -> bool val neq_vec : list bitU -> list bitU -> bool val ult_vec : list bitU -> list bitU -> bool diff --git a/src/gen_lib/sail_operators_mwords.lem b/src/gen_lib/sail_operators_mwords.lem index 8bcc0319..077dfb02 100644 --- a/src/gen_lib/sail_operators_mwords.lem +++ b/src/gen_lib/sail_operators_mwords.lem @@ -76,6 +76,9 @@ let zero_extend w _ = Machine_word.zeroExtend w val sign_extend : forall 'a 'b. Size 'a, Size 'b => mword 'a -> integer -> mword 'b let sign_extend w _ = Machine_word.signExtend w +val zeros : forall 'a. Size 'a => integer -> mword 'a +let zeros _ = Machine_word.wordFromNatural 0 + val vector_truncate : forall 'a 'b. Size 'a, Size 'b => mword 'a -> integer -> mword 'b let vector_truncate w _ = Machine_word.zeroExtend w @@ -310,6 +313,20 @@ let duplicate b n = maybe_failwith (duplicate_maybe b n) val reverse_endianness : forall 'a. Size 'a => mword 'a -> mword 'a let reverse_endianness v = wordFromBitlist (reverse_endianness_list (bitlistFromWord v)) +val get_slice_int : forall 'a. Size 'a => integer -> integer -> integer -> mword 'a +let get_slice_int = get_slice_int_bv + +val set_slice_int : forall 'a. Size 'a => integer -> integer -> integer -> mword 'a -> integer +let set_slice_int = set_slice_int_bv + +val slice : forall 'a 'b. Size 'a, Size 'b => mword 'a -> integer -> integer -> mword 'b +let slice v lo len = + subrange_vec_dec v (lo + len - 1) lo + +val set_slice : forall 'a 'b. Size 'a, Size 'b => integer -> integer -> mword 'a -> integer -> mword 'b -> mword 'a +let set_slice (out_len:ii) (slice_len:ii) out (n:ii) v = + update_subrange_vec_dec out (n + slice_len - 1) n v + val eq_vec : forall 'a. Size 'a => mword 'a -> mword 'a -> bool val neq_vec : forall 'a. Size 'a => mword 'a -> mword 'a -> bool val ult_vec : forall 'a. Size 'a => mword 'a -> mword 'a -> bool diff --git a/test/builtins/get_slice_int.sail b/test/builtins/get_slice_int.sail index 70894155..73c495fa 100644 --- a/test/builtins/get_slice_int.sail +++ b/test/builtins/get_slice_int.sail @@ -4,6 +4,12 @@ $include <exception_basic.sail> $include <flow.sail> $include <vector_dec.sail> +val int_of_string = { + ocaml: "Nat_big_num.of_string", + lem: "integerOfString", + c: "reinit_mpz_t_of_sail_string" +} : string -> int + function main (() : unit) -> unit = { assert(get_slice_int(1, -10, 6) == 1^0x1, "get_slice_int(1, -10, 6) == 1^0x1"); assert(get_slice_int(1, -1, 6) == 1^0x1, "get_slice_int(1, -1, 6) == 1^0x1"); @@ -251,20 +257,20 @@ function main (() : unit) -> unit = { assert(get_slice_int(64, 173015152, 0) == 64^0xa500070, "get_slice_int(64, 173015152, 0) == 64^0xa500070"); assert(get_slice_int(64, 173015156, 0) == 64^0xa500074, "get_slice_int(64, 173015156, 0) == 64^0xa500074"); assert(get_slice_int(64, 180224, 0) == 64^0x2c000, "get_slice_int(64, 180224, 0) == 64^0x2c000"); - assert(get_slice_int(64, 18446708893632421888, 0) == 64^0xffffe000ffffe000, "get_slice_int(64, 18446708893632421888, 0) == 64^0xffffe000ffffe000"); - assert(get_slice_int(64, 18446744073658712064, 0) == 64^0xfffffffffcf84000, "get_slice_int(64, 18446744073658712064, 0) == 64^0xfffffffffcf84000"); - assert(get_slice_int(64, 18446744073658777600, 0) == 64^0xfffffffffcf94000, "get_slice_int(64, 18446744073658777600, 0) == 64^0xfffffffffcf94000"); - assert(get_slice_int(64, 18446744073658843136, 0) == 64^0xfffffffffcfa4000, "get_slice_int(64, 18446744073658843136, 0) == 64^0xfffffffffcfa4000"); - assert(get_slice_int(64, 18446744073660252160, 0) == 64^0xfffffffffd0fc000, "get_slice_int(64, 18446744073660252160, 0) == 64^0xfffffffffd0fc000"); - assert(get_slice_int(64, 18446744073660317696, 0) == 64^0xfffffffffd10c000, "get_slice_int(64, 18446744073660317696, 0) == 64^0xfffffffffd10c000"); - assert(get_slice_int(64, 18446744073660465152, 0) == 64^0xfffffffffd130000, "get_slice_int(64, 18446744073660465152, 0) == 64^0xfffffffffd130000"); - assert(get_slice_int(64, 18446744073660530688, 0) == 64^0xfffffffffd140000, "get_slice_int(64, 18446744073660530688, 0) == 64^0xfffffffffd140000"); - assert(get_slice_int(64, 18446744073660727296, 0) == 64^0xfffffffffd170000, "get_slice_int(64, 18446744073660727296, 0) == 64^0xfffffffffd170000"); - assert(get_slice_int(64, 18446744073660841984, 0) == 64^0xfffffffffd18c000, "get_slice_int(64, 18446744073660841984, 0) == 64^0xfffffffffd18c000"); - assert(get_slice_int(64, 18446744073708961792, 0) == 64^0xfffffffffff70000, "get_slice_int(64, 18446744073708961792, 0) == 64^0xfffffffffff70000"); - assert(get_slice_int(64, 18446744073709027328, 0) == 64^0xfffffffffff80000, "get_slice_int(64, 18446744073709027328, 0) == 64^0xfffffffffff80000"); - assert(get_slice_int(64, 18446744073709289472, 0) == 64^0xfffffffffffc0000, "get_slice_int(64, 18446744073709289472, 0) == 64^0xfffffffffffc0000"); - assert(get_slice_int(64, 18446744073709355008, 0) == 64^0xfffffffffffd0000, "get_slice_int(64, 18446744073709355008, 0) == 64^0xfffffffffffd0000"); + assert(get_slice_int(64, int_of_string("18446708893632421888"), 0) == 64^0xffffe000ffffe000, "get_slice_int(64, 18446708893632421888, 0) == 64^0xffffe000ffffe000"); + assert(get_slice_int(64, int_of_string("18446744073658712064"), 0) == 64^0xfffffffffcf84000, "get_slice_int(64, 18446744073658712064, 0) == 64^0xfffffffffcf84000"); + assert(get_slice_int(64, int_of_string("18446744073658777600"), 0) == 64^0xfffffffffcf94000, "get_slice_int(64, 18446744073658777600, 0) == 64^0xfffffffffcf94000"); + assert(get_slice_int(64, int_of_string("18446744073658843136"), 0) == 64^0xfffffffffcfa4000, "get_slice_int(64, 18446744073658843136, 0) == 64^0xfffffffffcfa4000"); + assert(get_slice_int(64, int_of_string("18446744073660252160"), 0) == 64^0xfffffffffd0fc000, "get_slice_int(64, 18446744073660252160, 0) == 64^0xfffffffffd0fc000"); + assert(get_slice_int(64, int_of_string("18446744073660317696"), 0) == 64^0xfffffffffd10c000, "get_slice_int(64, 18446744073660317696, 0) == 64^0xfffffffffd10c000"); + assert(get_slice_int(64, int_of_string("18446744073660465152"), 0) == 64^0xfffffffffd130000, "get_slice_int(64, 18446744073660465152, 0) == 64^0xfffffffffd130000"); + assert(get_slice_int(64, int_of_string("18446744073660530688"), 0) == 64^0xfffffffffd140000, "get_slice_int(64, 18446744073660530688, 0) == 64^0xfffffffffd140000"); + assert(get_slice_int(64, int_of_string("18446744073660727296"), 0) == 64^0xfffffffffd170000, "get_slice_int(64, 18446744073660727296, 0) == 64^0xfffffffffd170000"); + assert(get_slice_int(64, int_of_string("18446744073660841984"), 0) == 64^0xfffffffffd18c000, "get_slice_int(64, 18446744073660841984, 0) == 64^0xfffffffffd18c000"); + assert(get_slice_int(64, int_of_string("18446744073708961792"), 0) == 64^0xfffffffffff70000, "get_slice_int(64, 18446744073708961792, 0) == 64^0xfffffffffff70000"); + assert(get_slice_int(64, int_of_string("18446744073709027328"), 0) == 64^0xfffffffffff80000, "get_slice_int(64, 18446744073709027328, 0) == 64^0xfffffffffff80000"); + assert(get_slice_int(64, int_of_string("18446744073709289472"), 0) == 64^0xfffffffffffc0000, "get_slice_int(64, 18446744073709289472, 0) == 64^0xfffffffffffc0000"); + assert(get_slice_int(64, int_of_string("18446744073709355008"), 0) == 64^0xfffffffffffd0000, "get_slice_int(64, 18446744073709355008, 0) == 64^0xfffffffffffd0000"); assert(get_slice_int(64, 75248, 0) == 64^0x125f0, "get_slice_int(64, 75248, 0) == 64^0x125f0"); assert(get_slice_int(64, 75252, 0) == 64^0x125f4, "get_slice_int(64, 75252, 0) == 64^0x125f4"); assert(get_slice_int(64, 75256, 0) == 64^0x125f8, "get_slice_int(64, 75256, 0) == 64^0x125f8"); @@ -465,4 +471,4 @@ function main (() : unit) -> unit = { assert(get_slice_int(64, 91820, 0) == 64^0x166ac, "get_slice_int(64, 91820, 0) == 64^0x166ac"); assert(get_slice_int(64, 91824, 0) == 64^0x166b0, "get_slice_int(64, 91824, 0) == 64^0x166b0"); assert(get_slice_int(64, 91828, 0) == 64^0x166b4, "get_slice_int(64, 91828, 0) == 64^0x166b4"); -}
\ No newline at end of file +} diff --git a/test/builtins/run_tests.sh b/test/builtins/run_tests.sh index b1d19639..1fe2d182 100755 --- a/test/builtins/run_tests.sh +++ b/test/builtins/run_tests.sh @@ -5,6 +5,7 @@ set -e DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd $DIR SAILDIR="$DIR/../.." +LEMBUILDDIR="$DIR/_lembuild" RED='\033[0;31m' GREEN='\033[0;32m' @@ -81,7 +82,54 @@ do red "compiling $(basename $file) (OCaml)" "fail" fi; + mkdir -p "$LEMBUILDDIR" + + if "$SAILDIR/sail" -no_warn -lem -lem_mwords -lem_lib Test_extras -undefined_gen -o out "$file" 1> /dev/null 2> /dev/null; + then + mv out.lem out_types.lem "$LEMBUILDDIR" + if lem -ocaml -lib "$SAILDIR/src/lem_interp" \ + -outdir "$LEMBUILDDIR" \ + "$SAILDIR/src/gen_lib/sail_values.lem" \ + "$SAILDIR/src/gen_lib/sail_operators.lem" \ + "$SAILDIR/src/gen_lib/sail_operators_mwords.lem" \ + "$SAILDIR/src/lem_interp/sail_instr_kinds.lem" \ + "$SAILDIR/src/gen_lib/prompt.lem" \ + "$SAILDIR/src/gen_lib/state_monad.lem" \ + "$SAILDIR/src/gen_lib/state.lem" \ + "$SAILDIR/src/gen_lib/prompt_monad.lem" \ + "test_extras.lem" "$LEMBUILDDIR/out_types.lem" "$LEMBUILDDIR/out.lem" 1> /dev/null 2> /dev/null; + then + cd "$LEMBUILDDIR" + if ocamlfind ocamlc -linkpkg -package zarith -package lem \ + sail_values.ml sail_operators.ml \ + sail_instr_kinds.ml prompt_monad.ml prompt.ml \ + sail_operators_mwords.ml state_monad.ml state.ml \ + test_extras.ml out_types.ml out.ml ../test.ml \ + -o test 1> /dev/null 2> /dev/null + then + green "compiling $(basename $file) (Lem)" "ok" + if ./test 1> /dev/null 2> /dev/null + then + green "tested $(basename ${file%.sail}) (Lem)" "ok" + else + red "tested $(basename ${file%.sail}) (Lem)" "fail" + fi + else + red "compiling $(basename $file) (Sail->Lem->Ocaml->Bytecode)" "fail" + fi + cd "$DIR" + else + red "compiling $(basename $file) (Sail->Lem->Ocaml)" "fail" + fi + else + red "compiling $(basename $file) (Sail->Lem)" "fail" + fi; + rm -rf $DIR/_sbuild/; + rm -rf "$LEMBUILDDIR"; + rm -f Out_lemmas.thy; + rm -f out_types.lem; + rm -f out.lem; rm -f ${file%.sail}.c; rm -f a.out; rm -f out diff --git a/test/builtins/set_slice_bits.sail b/test/builtins/set_slice_bits.sail index 67b11cdf..07c01e5b 100644 --- a/test/builtins/set_slice_bits.sail +++ b/test/builtins/set_slice_bits.sail @@ -680,4 +680,4 @@ function main (() : unit) -> unit = { assert(set_slice_bits(64, 9, 64^0x0, 14, 9^0x0) == 64^0x0, "set_slice_bits(64, 9, 64^0x0, 14, 9^0x0) == 64^0x0"); assert(set_slice_bits(64, 9, 64^0x0, 32, 9^0x0) == 64^0x0, "set_slice_bits(64, 9, 64^0x0, 32, 9^0x0) == 64^0x0"); assert(set_slice_bits(64, 9, 64^0x80800000, 14, 9^0x0) == 64^0x80800000, "set_slice_bits(64, 9, 64^0x80800000, 14, 9^0x0) == 64^0x80800000"); -}
\ No newline at end of file +} diff --git a/test/builtins/signed.sail b/test/builtins/signed.sail index 7b9160f7..21524e2f 100644 --- a/test/builtins/signed.sail +++ b/test/builtins/signed.sail @@ -3,6 +3,12 @@ default Order dec $include <exception_basic.sail> $include <vector_dec.sail> +val int_of_string = { + ocaml: "Nat_big_num.of_string", + lem: "integerOfString", + c: "reinit_mpz_t_of_sail_string" +} : string -> int + function main (() : unit) -> unit = { assert(signed(zero_extend(0x0, 32)) == 0); assert(signed(zero_extend(0x1, 32)) == 1); @@ -1352,8 +1358,8 @@ function main (() : unit) -> unit = { assert(signed(zero_extend(0x5a5a, 64)) == 23130); assert(signed(zero_extend(0x5a5a5a59, 64)) == 1515870809); assert(signed(zero_extend(0x5a5a5a5a, 64)) == 1515870810); - assert(signed(zero_extend(0x5a5a5a5a5a5a5a59, 64)) == 6510615555426900569); - assert(signed(zero_extend(0x5a5a5a5a5a5a5a5a, 64)) == 6510615555426900570); + assert(signed(zero_extend(0x5a5a5a5a5a5a5a59, 64)) == int_of_string("6510615555426900569")); + assert(signed(zero_extend(0x5a5a5a5a5a5a5a5a, 64)) == int_of_string("6510615555426900570")); assert(signed(zero_extend(0x5b, 64)) == 91); assert(signed(zero_extend(0x5c, 64)) == 92); assert(signed(zero_extend(0x5c000, 64)) == 376832); @@ -1398,10 +1404,10 @@ function main (() : unit) -> unit = { assert(signed(zero_extend(0x6c, 64)) == 108); assert(signed(zero_extend(0x6d, 64)) == 109); assert(signed(zero_extend(0x6e, 64)) == 110); - assert(signed(zero_extend(0x6ede4cbc6ede4cbb, 64)) == 7988907161199463611); + assert(signed(zero_extend(0x6ede4cbc6ede4cbb, 64)) == int_of_string("7988907161199463611")); assert(signed(zero_extend(0x6f, 64)) == 111); - assert(signed(zero_extend(0x6ffffffffffffffe, 64)) == 8070450532247928830); - assert(signed(zero_extend(0x6fffffffffffffff, 64)) == 8070450532247928831); + assert(signed(zero_extend(0x6ffffffffffffffe, 64)) == int_of_string("8070450532247928830")); + assert(signed(zero_extend(0x6fffffffffffffff, 64)) == int_of_string("8070450532247928831")); assert(signed(zero_extend(0x7, 64)) == 7); assert(signed(zero_extend(0x70, 64)) == 112); assert(signed(zero_extend(0x71, 64)) == 113); @@ -1412,10 +1418,10 @@ function main (() : unit) -> unit = { assert(signed(zero_extend(0x76, 64)) == 118); assert(signed(zero_extend(0x764c321, 64)) == 124044065); assert(signed(zero_extend(0x77, 64)) == 119); - assert(signed(zero_extend(0x7765554377655542, 64)) == 8603376411415500098); - assert(signed(zero_extend(0x7766554477665542, 64)) == 8603657890687243586); + assert(signed(zero_extend(0x7765554377655542, 64)) == int_of_string("8603376411415500098")); + assert(signed(zero_extend(0x7766554477665542, 64)) == int_of_string("8603657890687243586")); assert(signed(zero_extend(0x78, 64)) == 120); - assert(signed(zero_extend(0x789abcdef0123456, 64)) == 8690466096661279830); + assert(signed(zero_extend(0x789abcdef0123456, 64)) == int_of_string("8690466096661279830")); assert(signed(zero_extend(0x79, 64)) == 121); assert(signed(zero_extend(0x7a, 64)) == 122); assert(signed(zero_extend(0x7b, 64)) == 123); @@ -1428,54 +1434,54 @@ function main (() : unit) -> unit = { assert(signed(zero_extend(0x7ffe, 64)) == 32766); assert(signed(zero_extend(0x7fff, 64)) == 32767); assert(signed(zero_extend(0x7fff7fff, 64)) == 2147450879); - assert(signed(zero_extend(0x7fff7fff7fff7ffd, 64)) == 9223231297218904061); - assert(signed(zero_extend(0x7fff7fff7fff7fff, 64)) == 9223231297218904063); + assert(signed(zero_extend(0x7fff7fff7fff7ffd, 64)) == int_of_string("9223231297218904061")); + assert(signed(zero_extend(0x7fff7fff7fff7fff, 64)) == int_of_string("9223231297218904063")); assert(signed(zero_extend(0x7fffffc, 64)) == 134217724); assert(signed(zero_extend(0x7ffffffe, 64)) == 2147483646); assert(signed(zero_extend(0x7fffffff, 64)) == 2147483647); - assert(signed(zero_extend(0x7fffffff00000000, 64)) == 9223372032559808512); - assert(signed(zero_extend(0x7fffffff00000001, 64)) == 9223372032559808513); - assert(signed(zero_extend(0x7fffffff7ffffffe, 64)) == 9223372034707292158); - assert(signed(zero_extend(0x7fffffff7fffffff, 64)) == 9223372034707292159); - assert(signed(zero_extend(0x7fffffff80000000, 64)) == 9223372034707292160); - assert(signed(zero_extend(0x7fffffff80000001, 64)) == 9223372034707292161); - assert(signed(zero_extend(0x7fffffffffff0000, 64)) == 9223372036854710272); - assert(signed(zero_extend(0x7fffffffffff0001, 64)) == 9223372036854710273); - assert(signed(zero_extend(0x7fffffffffff7ffe, 64)) == 9223372036854743038); - assert(signed(zero_extend(0x7fffffffffff7fff, 64)) == 9223372036854743039); - assert(signed(zero_extend(0x7fffffffffff8000, 64)) == 9223372036854743040); - assert(signed(zero_extend(0x7fffffffffff8001, 64)) == 9223372036854743041); - assert(signed(zero_extend(0x7ffffffffffffffc, 64)) == 9223372036854775804); - assert(signed(zero_extend(0x7ffffffffffffffd, 64)) == 9223372036854775805); - assert(signed(zero_extend(0x7ffffffffffffffe, 64)) == 9223372036854775806); - assert(signed(zero_extend(0x7fffffffffffffff, 64)) == 9223372036854775807); + assert(signed(zero_extend(0x7fffffff00000000, 64)) == int_of_string("9223372032559808512")); + assert(signed(zero_extend(0x7fffffff00000001, 64)) == int_of_string("9223372032559808513")); + assert(signed(zero_extend(0x7fffffff7ffffffe, 64)) == int_of_string("9223372034707292158")); + assert(signed(zero_extend(0x7fffffff7fffffff, 64)) == int_of_string("9223372034707292159")); + assert(signed(zero_extend(0x7fffffff80000000, 64)) == int_of_string("9223372034707292160")); + assert(signed(zero_extend(0x7fffffff80000001, 64)) == int_of_string("9223372034707292161")); + assert(signed(zero_extend(0x7fffffffffff0000, 64)) == int_of_string("9223372036854710272")); + assert(signed(zero_extend(0x7fffffffffff0001, 64)) == int_of_string("9223372036854710273")); + assert(signed(zero_extend(0x7fffffffffff7ffe, 64)) == int_of_string("9223372036854743038")); + assert(signed(zero_extend(0x7fffffffffff7fff, 64)) == int_of_string("9223372036854743039")); + assert(signed(zero_extend(0x7fffffffffff8000, 64)) == int_of_string("9223372036854743040")); + assert(signed(zero_extend(0x7fffffffffff8001, 64)) == int_of_string("9223372036854743041")); + assert(signed(zero_extend(0x7ffffffffffffffc, 64)) == int_of_string("9223372036854775804")); + assert(signed(zero_extend(0x7ffffffffffffffd, 64)) == int_of_string("9223372036854775805")); + assert(signed(zero_extend(0x7ffffffffffffffe, 64)) == int_of_string("9223372036854775806")); + assert(signed(zero_extend(0x7fffffffffffffff, 64)) == int_of_string("9223372036854775807")); assert(signed(zero_extend(0x8, 64)) == 8); assert(signed(zero_extend(0x80, 64)) == 128); assert(signed(zero_extend(0x800, 64)) == 2048); assert(signed(zero_extend(0x8000, 64)) == 32768); assert(signed(zero_extend(0x80000000, 64)) == 2147483648); - assert(signed(zero_extend(0x8000000000000000, 64)) == -9223372036854775808); - assert(signed(zero_extend(0x8000000000000001, 64)) == -9223372036854775807); - assert(signed(zero_extend(0x8000000000000002, 64)) == -9223372036854775806); - assert(signed(zero_extend(0x8000000000000003, 64)) == -9223372036854775805); - assert(signed(zero_extend(0x8000000000007ffe, 64)) == -9223372036854743042); - assert(signed(zero_extend(0x8000000000007fff, 64)) == -9223372036854743041); - assert(signed(zero_extend(0x8000000000008000, 64)) == -9223372036854743040); - assert(signed(zero_extend(0x8000000000008001, 64)) == -9223372036854743039); - assert(signed(zero_extend(0x800000000000fffe, 64)) == -9223372036854710274); - assert(signed(zero_extend(0x800000000000ffff, 64)) == -9223372036854710273); - assert(signed(zero_extend(0x800000007ffffffe, 64)) == -9223372034707292162); - assert(signed(zero_extend(0x800000007fffffff, 64)) == -9223372034707292161); - assert(signed(zero_extend(0x8000000080000000, 64)) == -9223372034707292160); - assert(signed(zero_extend(0x8000000080000001, 64)) == -9223372034707292159); - assert(signed(zero_extend(0x80000000fffffffe, 64)) == -9223372032559808514); - assert(signed(zero_extend(0x80000000ffffffff, 64)) == -9223372032559808513); + assert(signed(zero_extend(0x8000000000000000, 64)) == int_of_string("-9223372036854775808")); + assert(signed(zero_extend(0x8000000000000001, 64)) == int_of_string("-9223372036854775807")); + assert(signed(zero_extend(0x8000000000000002, 64)) == int_of_string("-9223372036854775806")); + assert(signed(zero_extend(0x8000000000000003, 64)) == int_of_string("-9223372036854775805")); + assert(signed(zero_extend(0x8000000000007ffe, 64)) == int_of_string("-9223372036854743042")); + assert(signed(zero_extend(0x8000000000007fff, 64)) == int_of_string("-9223372036854743041")); + assert(signed(zero_extend(0x8000000000008000, 64)) == int_of_string("-9223372036854743040")); + assert(signed(zero_extend(0x8000000000008001, 64)) == int_of_string("-9223372036854743039")); + assert(signed(zero_extend(0x800000000000fffe, 64)) == int_of_string("-9223372036854710274")); + assert(signed(zero_extend(0x800000000000ffff, 64)) == int_of_string("-9223372036854710273")); + assert(signed(zero_extend(0x800000007ffffffe, 64)) == int_of_string("-9223372034707292162")); + assert(signed(zero_extend(0x800000007fffffff, 64)) == int_of_string("-9223372034707292161")); + assert(signed(zero_extend(0x8000000080000000, 64)) == int_of_string("-9223372034707292160")); + assert(signed(zero_extend(0x8000000080000001, 64)) == int_of_string("-9223372034707292159")); + assert(signed(zero_extend(0x80000000fffffffe, 64)) == int_of_string("-9223372032559808514")); + assert(signed(zero_extend(0x80000000ffffffff, 64)) == int_of_string("-9223372032559808513")); assert(signed(zero_extend(0x80000001, 64)) == 2147483649); assert(signed(zero_extend(0x80000002, 64)) == 2147483650); assert(signed(zero_extend(0x80000003, 64)) == 2147483651); assert(signed(zero_extend(0x80008000, 64)) == 2147516416); - assert(signed(zero_extend(0x8000800080008000, 64)) == -9223231297218904064); - assert(signed(zero_extend(0x8000800080008002, 64)) == -9223231297218904062); + assert(signed(zero_extend(0x8000800080008000, 64)) == int_of_string("-9223231297218904064")); + assert(signed(zero_extend(0x8000800080008002, 64)) == int_of_string("-9223231297218904062")); assert(signed(zero_extend(0x8001, 64)) == 32769); assert(signed(zero_extend(0x80010003, 64)) == 2147549187); assert(signed(zero_extend(0x8002, 64)) == 32770); @@ -1503,26 +1509,26 @@ function main (() : unit) -> unit = { assert(signed(zero_extend(0x86, 64)) == 134); assert(signed(zero_extend(0x87, 64)) == 135); assert(signed(zero_extend(0x87654321, 64)) == 2271560481); - assert(signed(zero_extend(0x876543210fedcba9, 64)) == -8690466096661279831); + assert(signed(zero_extend(0x876543210fedcba9, 64)) == int_of_string("-8690466096661279831")); assert(signed(zero_extend(0x88, 64)) == 136); assert(signed(zero_extend(0x8899aabb, 64)) == 2291772091); - assert(signed(zero_extend(0x8899aabb8899aabb, 64)) == -8603657890687243589); - assert(signed(zero_extend(0x8899aabb8899aabd, 64)) == -8603657890687243587); - assert(signed(zero_extend(0x889aaabc889aaabd, 64)) == -8603376411415500099); + assert(signed(zero_extend(0x8899aabb8899aabb, 64)) == int_of_string("-8603657890687243589")); + assert(signed(zero_extend(0x8899aabb8899aabd, 64)) == int_of_string("-8603657890687243587")); + assert(signed(zero_extend(0x889aaabc889aaabd, 64)) == int_of_string("-8603376411415500099")); assert(signed(zero_extend(0x89, 64)) == 137); assert(signed(zero_extend(0x89ab, 64)) == 35243); assert(signed(zero_extend(0x8a, 64)) == 138); assert(signed(zero_extend(0x8b, 64)) == 139); assert(signed(zero_extend(0x8c, 64)) == 140); assert(signed(zero_extend(0x8d, 64)) == 141); - assert(signed(zero_extend(0x8fffffffffffffff, 64)) == -8070450532247928833); + assert(signed(zero_extend(0x8fffffffffffffff, 64)) == int_of_string("-8070450532247928833")); assert(signed(zero_extend(0x9, 64)) == 9); assert(signed(zero_extend(0x90, 64)) == 144); assert(signed(zero_extend(0x90000000, 64)) == 2415919104); - assert(signed(zero_extend(0x9000000000000000, 64)) == -8070450532247928832); - assert(signed(zero_extend(0x9000000000000001, 64)) == -8070450532247928831); + assert(signed(zero_extend(0x9000000000000000, 64)) == int_of_string("-8070450532247928832")); + assert(signed(zero_extend(0x9000000000000001, 64)) == int_of_string("-8070450532247928831")); assert(signed(zero_extend(0x90000001, 64)) == 2415919105); - assert(signed(zero_extend(0x9121b3439121b344, 64)) == -7988907161199463612); + assert(signed(zero_extend(0x9121b3439121b344, 64)) == int_of_string("-7988907161199463612")); assert(signed(zero_extend(0x9200040, 64)) == 153092160); assert(signed(zero_extend(0x920005c, 64)) == 153092188); assert(signed(zero_extend(0x9200060, 64)) == 153092192); @@ -1540,7 +1546,7 @@ function main (() : unit) -> unit = { assert(signed(zero_extend(0xa500074, 64)) == 173015156); assert(signed(zero_extend(0xa5a5, 64)) == 42405); assert(signed(zero_extend(0xa5a5a5a5, 64)) == 2779096485); - assert(signed(zero_extend(0xa5a5a5a5a5a5a5a5, 64)) == -6510615555426900571); + assert(signed(zero_extend(0xa5a5a5a5a5a5a5a5, 64)) == int_of_string("-6510615555426900571")); assert(signed(zero_extend(0xa8, 64)) == 168); assert(signed(zero_extend(0xb, 64)) == 11); assert(signed(zero_extend(0xb0, 64)) == 176); @@ -1550,13 +1556,13 @@ function main (() : unit) -> unit = { assert(signed(zero_extend(0xc00fefff, 64)) == 3222269951); assert(signed(zero_extend(0xd, 64)) == 13); assert(signed(zero_extend(0xd0, 64)) == 208); - assert(signed(zero_extend(0xdddddddddddddddc, 64)) == -2459565876494606884); + assert(signed(zero_extend(0xdddddddddddddddc, 64)) == int_of_string("-2459565876494606884")); assert(signed(zero_extend(0xe, 64)) == 14); assert(signed(zero_extend(0xe0, 64)) == 224); - assert(signed(zero_extend(0xedcba9876543210e, 64)) == -1311768467463790322); + assert(signed(zero_extend(0xedcba9876543210e, 64)) == int_of_string("-1311768467463790322")); assert(signed(zero_extend(0xf, 64)) == 15); assert(signed(zero_extend(0xf00, 64)) == 3840); - assert(signed(zero_extend(0xf000000000000000, 64)) == -1152921504606846976); + assert(signed(zero_extend(0xf000000000000000, 64)) == int_of_string("-1152921504606846976")); assert(signed(zero_extend(0xff, 64)) == 255); assert(signed(zero_extend(0xfffe, 64)) == 65534); assert(signed(zero_extend(0xffff, 64)) == 65535); @@ -1704,4 +1710,4 @@ function main (() : unit) -> unit = { assert(signed(zero_extend(0xfffffffffffffffd, 64)) == -3); assert(signed(zero_extend(0xfffffffffffffffe, 64)) == -2); assert(signed(zero_extend(0xffffffffffffffff, 64)) == -1); -}
\ No newline at end of file +} diff --git a/test/builtins/test_extras.lem b/test/builtins/test_extras.lem new file mode 100644 index 00000000..136f680e --- /dev/null +++ b/test/builtins/test_extras.lem @@ -0,0 +1,22 @@ +open import Pervasives_extra +open import Sail_instr_kinds +open import Sail_values +open import Sail_operators_mwords +open import Prompt_monad +open import State + +type ty0 +instance (Size ty0) let size = 0 end +declare isabelle target_rep type ty1 = `0` + +val undefined_int : forall 'rv 'e. unit -> monad 'rv integer 'e +let undefined_int () = return 0 + +val undefined_bitvector : forall 'rv 'a 'e. Size 'a => integer -> monad 'rv (mword 'a) 'e +let undefined_bitvector len = return (zeros(len)) + +val undefined_unit : forall 'rv 'e. unit -> monad 'rv unit 'e +let undefined_unit () = return () + +val internal_pick : forall 'rv 'a 'e. list 'a -> monad 'rv 'a 'e +let internal_pick xs = return (List_extra.head xs) diff --git a/test/builtins/unsigned6.sail b/test/builtins/unsigned6.sail index 556b0db6..ec2635d6 100644 --- a/test/builtins/unsigned6.sail +++ b/test/builtins/unsigned6.sail @@ -3,6 +3,12 @@ default Order dec $include <exception_basic.sail> $include <vector_dec.sail> +val int_of_string = { + ocaml: "Nat_big_num.of_string", + lem: "integerOfString", + c: "reinit_mpz_t_of_sail_string" +} : string -> int + function main (() : unit) -> unit = { assert(unsigned(zero_extend(0x2e015f0, 64)) == 48240112); assert(unsigned(zero_extend(0x2e015f8, 64)) == 48240120); @@ -2057,8 +2063,8 @@ function main (() : unit) -> unit = { assert(unsigned(zero_extend(0x5a5a, 64)) == 23130); assert(unsigned(zero_extend(0x5a5a5a59, 64)) == 1515870809); assert(unsigned(zero_extend(0x5a5a5a5a, 64)) == 1515870810); - assert(unsigned(zero_extend(0x5a5a5a5a5a5a5a59, 64)) == 6510615555426900569); - assert(unsigned(zero_extend(0x5a5a5a5a5a5a5a5a, 64)) == 6510615555426900570); + assert(unsigned(zero_extend(0x5a5a5a5a5a5a5a59, 64)) == int_of_string("6510615555426900569")); + assert(unsigned(zero_extend(0x5a5a5a5a5a5a5a5a, 64)) == int_of_string("6510615555426900570")); assert(unsigned(zero_extend(0x5b, 64)) == 91); assert(unsigned(zero_extend(0x5c, 64)) == 92); assert(unsigned(zero_extend(0x5c000, 64)) == 376832); @@ -2147,10 +2153,10 @@ function main (() : unit) -> unit = { assert(unsigned(zero_extend(0x6c, 64)) == 108); assert(unsigned(zero_extend(0x6d, 64)) == 109); assert(unsigned(zero_extend(0x6e, 64)) == 110); - assert(unsigned(zero_extend(0x6ede4cbc6ede4cbb, 64)) == 7988907161199463611); + assert(unsigned(zero_extend(0x6ede4cbc6ede4cbb, 64)) == int_of_string("7988907161199463611")); assert(unsigned(zero_extend(0x6f, 64)) == 111); - assert(unsigned(zero_extend(0x6ffffffffffffffe, 64)) == 8070450532247928830); - assert(unsigned(zero_extend(0x6fffffffffffffff, 64)) == 8070450532247928831); + assert(unsigned(zero_extend(0x6ffffffffffffffe, 64)) == int_of_string("8070450532247928830")); + assert(unsigned(zero_extend(0x6fffffffffffffff, 64)) == int_of_string("8070450532247928831")); assert(unsigned(zero_extend(0x7, 64)) == 7); assert(unsigned(zero_extend(0x70, 64)) == 112); assert(unsigned(zero_extend(0x71, 64)) == 113); @@ -2161,10 +2167,10 @@ function main (() : unit) -> unit = { assert(unsigned(zero_extend(0x76, 64)) == 118); assert(unsigned(zero_extend(0x764c321, 64)) == 124044065); assert(unsigned(zero_extend(0x77, 64)) == 119); - assert(unsigned(zero_extend(0x7765554377655542, 64)) == 8603376411415500098); - assert(unsigned(zero_extend(0x7766554477665542, 64)) == 8603657890687243586); + assert(unsigned(zero_extend(0x7765554377655542, 64)) == int_of_string("8603376411415500098")); + assert(unsigned(zero_extend(0x7766554477665542, 64)) == int_of_string("8603657890687243586")); assert(unsigned(zero_extend(0x78, 64)) == 120); - assert(unsigned(zero_extend(0x789abcdef0123456, 64)) == 8690466096661279830); + assert(unsigned(zero_extend(0x789abcdef0123456, 64)) == int_of_string("8690466096661279830")); assert(unsigned(zero_extend(0x79, 64)) == 121); assert(unsigned(zero_extend(0x7a, 64)) == 122); assert(unsigned(zero_extend(0x7b, 64)) == 123); @@ -2177,54 +2183,54 @@ function main (() : unit) -> unit = { assert(unsigned(zero_extend(0x7ffe, 64)) == 32766); assert(unsigned(zero_extend(0x7fff, 64)) == 32767); assert(unsigned(zero_extend(0x7fff7fff, 64)) == 2147450879); - assert(unsigned(zero_extend(0x7fff7fff7fff7ffd, 64)) == 9223231297218904061); - assert(unsigned(zero_extend(0x7fff7fff7fff7fff, 64)) == 9223231297218904063); + assert(unsigned(zero_extend(0x7fff7fff7fff7ffd, 64)) == int_of_string("9223231297218904061")); + assert(unsigned(zero_extend(0x7fff7fff7fff7fff, 64)) == int_of_string("9223231297218904063")); assert(unsigned(zero_extend(0x7fffffc, 64)) == 134217724); assert(unsigned(zero_extend(0x7ffffffe, 64)) == 2147483646); assert(unsigned(zero_extend(0x7fffffff, 64)) == 2147483647); - assert(unsigned(zero_extend(0x7fffffff00000000, 64)) == 9223372032559808512); - assert(unsigned(zero_extend(0x7fffffff00000001, 64)) == 9223372032559808513); - assert(unsigned(zero_extend(0x7fffffff7ffffffe, 64)) == 9223372034707292158); - assert(unsigned(zero_extend(0x7fffffff7fffffff, 64)) == 9223372034707292159); - assert(unsigned(zero_extend(0x7fffffff80000000, 64)) == 9223372034707292160); - assert(unsigned(zero_extend(0x7fffffff80000001, 64)) == 9223372034707292161); - assert(unsigned(zero_extend(0x7fffffffffff0000, 64)) == 9223372036854710272); - assert(unsigned(zero_extend(0x7fffffffffff0001, 64)) == 9223372036854710273); - assert(unsigned(zero_extend(0x7fffffffffff7ffe, 64)) == 9223372036854743038); - assert(unsigned(zero_extend(0x7fffffffffff7fff, 64)) == 9223372036854743039); - assert(unsigned(zero_extend(0x7fffffffffff8000, 64)) == 9223372036854743040); - assert(unsigned(zero_extend(0x7fffffffffff8001, 64)) == 9223372036854743041); - assert(unsigned(zero_extend(0x7ffffffffffffffc, 64)) == 9223372036854775804); - assert(unsigned(zero_extend(0x7ffffffffffffffd, 64)) == 9223372036854775805); - assert(unsigned(zero_extend(0x7ffffffffffffffe, 64)) == 9223372036854775806); - assert(unsigned(zero_extend(0x7fffffffffffffff, 64)) == 9223372036854775807); + assert(unsigned(zero_extend(0x7fffffff00000000, 64)) == int_of_string("9223372032559808512")); + assert(unsigned(zero_extend(0x7fffffff00000001, 64)) == int_of_string("9223372032559808513")); + assert(unsigned(zero_extend(0x7fffffff7ffffffe, 64)) == int_of_string("9223372034707292158")); + assert(unsigned(zero_extend(0x7fffffff7fffffff, 64)) == int_of_string("9223372034707292159")); + assert(unsigned(zero_extend(0x7fffffff80000000, 64)) == int_of_string("9223372034707292160")); + assert(unsigned(zero_extend(0x7fffffff80000001, 64)) == int_of_string("9223372034707292161")); + assert(unsigned(zero_extend(0x7fffffffffff0000, 64)) == int_of_string("9223372036854710272")); + assert(unsigned(zero_extend(0x7fffffffffff0001, 64)) == int_of_string("9223372036854710273")); + assert(unsigned(zero_extend(0x7fffffffffff7ffe, 64)) == int_of_string("9223372036854743038")); + assert(unsigned(zero_extend(0x7fffffffffff7fff, 64)) == int_of_string("9223372036854743039")); + assert(unsigned(zero_extend(0x7fffffffffff8000, 64)) == int_of_string("9223372036854743040")); + assert(unsigned(zero_extend(0x7fffffffffff8001, 64)) == int_of_string("9223372036854743041")); + assert(unsigned(zero_extend(0x7ffffffffffffffc, 64)) == int_of_string("9223372036854775804")); + assert(unsigned(zero_extend(0x7ffffffffffffffd, 64)) == int_of_string("9223372036854775805")); + assert(unsigned(zero_extend(0x7ffffffffffffffe, 64)) == int_of_string("9223372036854775806")); + assert(unsigned(zero_extend(0x7fffffffffffffff, 64)) == int_of_string("9223372036854775807")); assert(unsigned(zero_extend(0x8, 64)) == 8); assert(unsigned(zero_extend(0x80, 64)) == 128); assert(unsigned(zero_extend(0x800, 64)) == 2048); assert(unsigned(zero_extend(0x8000, 64)) == 32768); assert(unsigned(zero_extend(0x80000000, 64)) == 2147483648); - assert(unsigned(zero_extend(0x8000000000000000, 64)) == 9223372036854775808); - assert(unsigned(zero_extend(0x8000000000000001, 64)) == 9223372036854775809); - assert(unsigned(zero_extend(0x8000000000000002, 64)) == 9223372036854775810); - assert(unsigned(zero_extend(0x8000000000000003, 64)) == 9223372036854775811); - assert(unsigned(zero_extend(0x8000000000007ffe, 64)) == 9223372036854808574); - assert(unsigned(zero_extend(0x8000000000007fff, 64)) == 9223372036854808575); - assert(unsigned(zero_extend(0x8000000000008000, 64)) == 9223372036854808576); - assert(unsigned(zero_extend(0x8000000000008001, 64)) == 9223372036854808577); - assert(unsigned(zero_extend(0x800000000000fffe, 64)) == 9223372036854841342); - assert(unsigned(zero_extend(0x800000000000ffff, 64)) == 9223372036854841343); - assert(unsigned(zero_extend(0x800000007ffffffe, 64)) == 9223372039002259454); - assert(unsigned(zero_extend(0x800000007fffffff, 64)) == 9223372039002259455); - assert(unsigned(zero_extend(0x8000000080000000, 64)) == 9223372039002259456); - assert(unsigned(zero_extend(0x8000000080000001, 64)) == 9223372039002259457); - assert(unsigned(zero_extend(0x80000000fffffffe, 64)) == 9223372041149743102); - assert(unsigned(zero_extend(0x80000000ffffffff, 64)) == 9223372041149743103); + assert(unsigned(zero_extend(0x8000000000000000, 64)) == int_of_string("9223372036854775808")); + assert(unsigned(zero_extend(0x8000000000000001, 64)) == int_of_string("9223372036854775809")); + assert(unsigned(zero_extend(0x8000000000000002, 64)) == int_of_string("9223372036854775810")); + assert(unsigned(zero_extend(0x8000000000000003, 64)) == int_of_string("9223372036854775811")); + assert(unsigned(zero_extend(0x8000000000007ffe, 64)) == int_of_string("9223372036854808574")); + assert(unsigned(zero_extend(0x8000000000007fff, 64)) == int_of_string("9223372036854808575")); + assert(unsigned(zero_extend(0x8000000000008000, 64)) == int_of_string("9223372036854808576")); + assert(unsigned(zero_extend(0x8000000000008001, 64)) == int_of_string("9223372036854808577")); + assert(unsigned(zero_extend(0x800000000000fffe, 64)) == int_of_string("9223372036854841342")); + assert(unsigned(zero_extend(0x800000000000ffff, 64)) == int_of_string("9223372036854841343")); + assert(unsigned(zero_extend(0x800000007ffffffe, 64)) == int_of_string("9223372039002259454")); + assert(unsigned(zero_extend(0x800000007fffffff, 64)) == int_of_string("9223372039002259455")); + assert(unsigned(zero_extend(0x8000000080000000, 64)) == int_of_string("9223372039002259456")); + assert(unsigned(zero_extend(0x8000000080000001, 64)) == int_of_string("9223372039002259457")); + assert(unsigned(zero_extend(0x80000000fffffffe, 64)) == int_of_string("9223372041149743102")); + assert(unsigned(zero_extend(0x80000000ffffffff, 64)) == int_of_string("9223372041149743103")); assert(unsigned(zero_extend(0x80000001, 64)) == 2147483649); assert(unsigned(zero_extend(0x80000002, 64)) == 2147483650); assert(unsigned(zero_extend(0x80000003, 64)) == 2147483651); assert(unsigned(zero_extend(0x80008000, 64)) == 2147516416); - assert(unsigned(zero_extend(0x8000800080008000, 64)) == 9223512776490647552); - assert(unsigned(zero_extend(0x8000800080008002, 64)) == 9223512776490647554); + assert(unsigned(zero_extend(0x8000800080008000, 64)) == int_of_string("9223512776490647552")); + assert(unsigned(zero_extend(0x8000800080008002, 64)) == int_of_string("9223512776490647554")); assert(unsigned(zero_extend(0x8001, 64)) == 32769); assert(unsigned(zero_extend(0x80010003, 64)) == 2147549187); assert(unsigned(zero_extend(0x8002, 64)) == 32770); @@ -2252,26 +2258,26 @@ function main (() : unit) -> unit = { assert(unsigned(zero_extend(0x86, 64)) == 134); assert(unsigned(zero_extend(0x87, 64)) == 135); assert(unsigned(zero_extend(0x87654321, 64)) == 2271560481); - assert(unsigned(zero_extend(0x876543210fedcba9, 64)) == 9756277977048271785); + assert(unsigned(zero_extend(0x876543210fedcba9, 64)) == int_of_string("9756277977048271785")); assert(unsigned(zero_extend(0x88, 64)) == 136); assert(unsigned(zero_extend(0x8899aabb, 64)) == 2291772091); - assert(unsigned(zero_extend(0x8899aabb8899aabb, 64)) == 9843086183022308027); - assert(unsigned(zero_extend(0x8899aabb8899aabd, 64)) == 9843086183022308029); - assert(unsigned(zero_extend(0x889aaabc889aaabd, 64)) == 9843367662294051517); + assert(unsigned(zero_extend(0x8899aabb8899aabb, 64)) == int_of_string("9843086183022308027")); + assert(unsigned(zero_extend(0x8899aabb8899aabd, 64)) == int_of_string("9843086183022308029")); + assert(unsigned(zero_extend(0x889aaabc889aaabd, 64)) == int_of_string("9843367662294051517")); assert(unsigned(zero_extend(0x89, 64)) == 137); assert(unsigned(zero_extend(0x89ab, 64)) == 35243); assert(unsigned(zero_extend(0x8a, 64)) == 138); assert(unsigned(zero_extend(0x8b, 64)) == 139); assert(unsigned(zero_extend(0x8c, 64)) == 140); assert(unsigned(zero_extend(0x8d, 64)) == 141); - assert(unsigned(zero_extend(0x8fffffffffffffff, 64)) == 10376293541461622783); + assert(unsigned(zero_extend(0x8fffffffffffffff, 64)) == int_of_string("10376293541461622783")); assert(unsigned(zero_extend(0x9, 64)) == 9); assert(unsigned(zero_extend(0x90, 64)) == 144); assert(unsigned(zero_extend(0x90000000, 64)) == 2415919104); - assert(unsigned(zero_extend(0x9000000000000000, 64)) == 10376293541461622784); - assert(unsigned(zero_extend(0x9000000000000001, 64)) == 10376293541461622785); + assert(unsigned(zero_extend(0x9000000000000000, 64)) == int_of_string("10376293541461622784")); + assert(unsigned(zero_extend(0x9000000000000001, 64)) == int_of_string("10376293541461622785")); assert(unsigned(zero_extend(0x90000001, 64)) == 2415919105); - assert(unsigned(zero_extend(0x9121b3439121b344, 64)) == 10457836912510088004); + assert(unsigned(zero_extend(0x9121b3439121b344, 64)) == int_of_string("10457836912510088004")); assert(unsigned(zero_extend(0x9200000, 64)) == 153092096); assert(unsigned(zero_extend(0x9200004, 64)) == 153092100); assert(unsigned(zero_extend(0x9200008, 64)) == 153092104); @@ -2355,7 +2361,7 @@ function main (() : unit) -> unit = { assert(unsigned(zero_extend(0xa500074, 64)) == 173015156); assert(unsigned(zero_extend(0xa5a5, 64)) == 42405); assert(unsigned(zero_extend(0xa5a5a5a5, 64)) == 2779096485); - assert(unsigned(zero_extend(0xa5a5a5a5a5a5a5a5, 64)) == 11936128518282651045); + assert(unsigned(zero_extend(0xa5a5a5a5a5a5a5a5, 64)) == int_of_string("11936128518282651045")); assert(unsigned(zero_extend(0xa8, 64)) == 168); assert(unsigned(zero_extend(0xb, 64)) == 11); assert(unsigned(zero_extend(0xb0, 64)) == 176); @@ -2365,160 +2371,160 @@ function main (() : unit) -> unit = { assert(unsigned(zero_extend(0xc00fefff, 64)) == 3222269951); assert(unsigned(zero_extend(0xd, 64)) == 13); assert(unsigned(zero_extend(0xd0, 64)) == 208); - assert(unsigned(zero_extend(0xdddddddddddddddc, 64)) == 15987178197214944732); + assert(unsigned(zero_extend(0xdddddddddddddddc, 64)) == int_of_string("15987178197214944732")); assert(unsigned(zero_extend(0xe, 64)) == 14); assert(unsigned(zero_extend(0xe0, 64)) == 224); - assert(unsigned(zero_extend(0xedcba9876543210e, 64)) == 17134975606245761294); + assert(unsigned(zero_extend(0xedcba9876543210e, 64)) == int_of_string("17134975606245761294")); assert(unsigned(zero_extend(0xf, 64)) == 15); assert(unsigned(zero_extend(0xf00, 64)) == 3840); - assert(unsigned(zero_extend(0xf000000000000000, 64)) == 17293822569102704640); + assert(unsigned(zero_extend(0xf000000000000000, 64)) == int_of_string("17293822569102704640")); assert(unsigned(zero_extend(0xff, 64)) == 255); assert(unsigned(zero_extend(0xfffe, 64)) == 65534); assert(unsigned(zero_extend(0xffff, 64)) == 65535); assert(unsigned(zero_extend(0xffff8000, 64)) == 4294934528); assert(unsigned(zero_extend(0xffffc, 64)) == 1048572); - assert(unsigned(zero_extend(0xffffe000ffffe000, 64)) == 18446708893632421888); + assert(unsigned(zero_extend(0xffffe000ffffe000, 64)) == int_of_string("18446708893632421888")); assert(unsigned(zero_extend(0xfffffff, 64)) == 268435455); assert(unsigned(zero_extend(0xfffffffe, 64)) == 4294967294); - assert(unsigned(zero_extend(0xfffffffe77665544, 64)) == 18446744067122812228); - assert(unsigned(zero_extend(0xfffffffe7fffffff, 64)) == 18446744067267100671); - assert(unsigned(zero_extend(0xfffffffe80000000, 64)) == 18446744067267100672); - assert(unsigned(zero_extend(0xfffffffef89b3cde, 64)) == 18446744069290540254); - assert(unsigned(zero_extend(0xfffffffefffffffe, 64)) == 18446744069414584318); - assert(unsigned(zero_extend(0xfffffffeffffffff, 64)) == 18446744069414584319); + assert(unsigned(zero_extend(0xfffffffe77665544, 64)) == int_of_string("18446744067122812228")); + assert(unsigned(zero_extend(0xfffffffe7fffffff, 64)) == int_of_string("18446744067267100671")); + assert(unsigned(zero_extend(0xfffffffe80000000, 64)) == int_of_string("18446744067267100672")); + assert(unsigned(zero_extend(0xfffffffef89b3cde, 64)) == int_of_string("18446744069290540254")); + assert(unsigned(zero_extend(0xfffffffefffffffe, 64)) == int_of_string("18446744069414584318")); + assert(unsigned(zero_extend(0xfffffffeffffffff, 64)) == int_of_string("18446744069414584319")); assert(unsigned(zero_extend(0xffffffff, 64)) == 4294967295); - assert(unsigned(zero_extend(0xffffffff00000000, 64)) == 18446744069414584320); - assert(unsigned(zero_extend(0xffffffff00000001, 64)) == 18446744069414584321); - assert(unsigned(zero_extend(0xffffffff00007fff, 64)) == 18446744069414617087); - assert(unsigned(zero_extend(0xffffffff3ff01000, 64)) == 18446744070487281664); - assert(unsigned(zero_extend(0xffffffff5fffffff, 64)) == 18446744071025197055); - assert(unsigned(zero_extend(0xffffffff6dcba985, 64)) == 18446744071256648069); - assert(unsigned(zero_extend(0xffffffff6ffffffe, 64)) == 18446744071293632510); - assert(unsigned(zero_extend(0xffffffff6fffffff, 64)) == 18446744071293632511); - assert(unsigned(zero_extend(0xffffffff77665544, 64)) == 18446744071417779524); - assert(unsigned(zero_extend(0xffffffff7ffefffc, 64)) == 18446744071562002428); - assert(unsigned(zero_extend(0xffffffff7ffffffc, 64)) == 18446744071562067964); - assert(unsigned(zero_extend(0xffffffff7ffffffd, 64)) == 18446744071562067965); - assert(unsigned(zero_extend(0xffffffff7ffffffe, 64)) == 18446744071562067966); - assert(unsigned(zero_extend(0xffffffff7fffffff, 64)) == 18446744071562067967); - assert(unsigned(zero_extend(0xffffffff80000000, 64)) == 18446744071562067968); - assert(unsigned(zero_extend(0xffffffff80000001, 64)) == 18446744071562067969); - assert(unsigned(zero_extend(0xffffffff94837260, 64)) == 18446744071906226784); - assert(unsigned(zero_extend(0xffffffffdfffffff, 64)) == 18446744073172680703); - assert(unsigned(zero_extend(0xffffffffed9fff7f, 64)) == 18446744073401270143); - assert(unsigned(zero_extend(0xffffffffedafff8f, 64)) == 18446744073402318735); - assert(unsigned(zero_extend(0xfffffffff0000000, 64)) == 18446744073441116160); - assert(unsigned(zero_extend(0xfffffffff7ffffff, 64)) == 18446744073575333887); - assert(unsigned(zero_extend(0xfffffffff89b3cde, 64)) == 18446744073585507550); - assert(unsigned(zero_extend(0xfffffffffcefffff, 64)) == 18446744073658171391); - assert(unsigned(zero_extend(0xfffffffffcf0ffff, 64)) == 18446744073658236927); - assert(unsigned(zero_extend(0xfffffffffcf1ffff, 64)) == 18446744073658302463); - assert(unsigned(zero_extend(0xfffffffffcf84000, 64)) == 18446744073658712064); - assert(unsigned(zero_extend(0xfffffffffcf94000, 64)) == 18446744073658777600); - assert(unsigned(zero_extend(0xfffffffffcfa4000, 64)) == 18446744073658843136); - assert(unsigned(zero_extend(0xfffffffffd0affff, 64)) == 18446744073659940863); - assert(unsigned(zero_extend(0xfffffffffd0bffff, 64)) == 18446744073660006399); - assert(unsigned(zero_extend(0xfffffffffd0fc000, 64)) == 18446744073660252160); - assert(unsigned(zero_extend(0xfffffffffd10c000, 64)) == 18446744073660317696); - assert(unsigned(zero_extend(0xfffffffffd10ffff, 64)) == 18446744073660334079); - assert(unsigned(zero_extend(0xfffffffffd11ffff, 64)) == 18446744073660399615); - assert(unsigned(zero_extend(0xfffffffffd130000, 64)) == 18446744073660465152); - assert(unsigned(zero_extend(0xfffffffffd13ffff, 64)) == 18446744073660530687); - assert(unsigned(zero_extend(0xfffffffffd140000, 64)) == 18446744073660530688); - assert(unsigned(zero_extend(0xfffffffffd14ffff, 64)) == 18446744073660596223); - assert(unsigned(zero_extend(0xfffffffffd170000, 64)) == 18446744073660727296); - assert(unsigned(zero_extend(0xfffffffffd18c000, 64)) == 18446744073660841984); - assert(unsigned(zero_extend(0xfffffffffebffe6b, 64)) == 18446744073688579691); - assert(unsigned(zero_extend(0xfffffffffebffefb, 64)) == 18446744073688579835); - assert(unsigned(zero_extend(0xfffffffffebfff3b, 64)) == 18446744073688579899); - assert(unsigned(zero_extend(0xffffffffffefffff, 64)) == 18446744073708503039); + assert(unsigned(zero_extend(0xffffffff00000000, 64)) == int_of_string("18446744069414584320")); + assert(unsigned(zero_extend(0xffffffff00000001, 64)) == int_of_string("18446744069414584321")); + assert(unsigned(zero_extend(0xffffffff00007fff, 64)) == int_of_string("18446744069414617087")); + assert(unsigned(zero_extend(0xffffffff3ff01000, 64)) == int_of_string("18446744070487281664")); + assert(unsigned(zero_extend(0xffffffff5fffffff, 64)) == int_of_string("18446744071025197055")); + assert(unsigned(zero_extend(0xffffffff6dcba985, 64)) == int_of_string("18446744071256648069")); + assert(unsigned(zero_extend(0xffffffff6ffffffe, 64)) == int_of_string("18446744071293632510")); + assert(unsigned(zero_extend(0xffffffff6fffffff, 64)) == int_of_string("18446744071293632511")); + assert(unsigned(zero_extend(0xffffffff77665544, 64)) == int_of_string("18446744071417779524")); + assert(unsigned(zero_extend(0xffffffff7ffefffc, 64)) == int_of_string("18446744071562002428")); + assert(unsigned(zero_extend(0xffffffff7ffffffc, 64)) == int_of_string("18446744071562067964")); + assert(unsigned(zero_extend(0xffffffff7ffffffd, 64)) == int_of_string("18446744071562067965")); + assert(unsigned(zero_extend(0xffffffff7ffffffe, 64)) == int_of_string("18446744071562067966")); + assert(unsigned(zero_extend(0xffffffff7fffffff, 64)) == int_of_string("18446744071562067967")); + assert(unsigned(zero_extend(0xffffffff80000000, 64)) == int_of_string("18446744071562067968")); + assert(unsigned(zero_extend(0xffffffff80000001, 64)) == int_of_string("18446744071562067969")); + assert(unsigned(zero_extend(0xffffffff94837260, 64)) == int_of_string("18446744071906226784")); + assert(unsigned(zero_extend(0xffffffffdfffffff, 64)) == int_of_string("18446744073172680703")); + assert(unsigned(zero_extend(0xffffffffed9fff7f, 64)) == int_of_string("18446744073401270143")); + assert(unsigned(zero_extend(0xffffffffedafff8f, 64)) == int_of_string("18446744073402318735")); + assert(unsigned(zero_extend(0xfffffffff0000000, 64)) == int_of_string("18446744073441116160")); + assert(unsigned(zero_extend(0xfffffffff7ffffff, 64)) == int_of_string("18446744073575333887")); + assert(unsigned(zero_extend(0xfffffffff89b3cde, 64)) == int_of_string("18446744073585507550")); + assert(unsigned(zero_extend(0xfffffffffcefffff, 64)) == int_of_string("18446744073658171391")); + assert(unsigned(zero_extend(0xfffffffffcf0ffff, 64)) == int_of_string("18446744073658236927")); + assert(unsigned(zero_extend(0xfffffffffcf1ffff, 64)) == int_of_string("18446744073658302463")); + assert(unsigned(zero_extend(0xfffffffffcf84000, 64)) == int_of_string("18446744073658712064")); + assert(unsigned(zero_extend(0xfffffffffcf94000, 64)) == int_of_string("18446744073658777600")); + assert(unsigned(zero_extend(0xfffffffffcfa4000, 64)) == int_of_string("18446744073658843136")); + assert(unsigned(zero_extend(0xfffffffffd0affff, 64)) == int_of_string("18446744073659940863")); + assert(unsigned(zero_extend(0xfffffffffd0bffff, 64)) == int_of_string("18446744073660006399")); + assert(unsigned(zero_extend(0xfffffffffd0fc000, 64)) == int_of_string("18446744073660252160")); + assert(unsigned(zero_extend(0xfffffffffd10c000, 64)) == int_of_string("18446744073660317696")); + assert(unsigned(zero_extend(0xfffffffffd10ffff, 64)) == int_of_string("18446744073660334079")); + assert(unsigned(zero_extend(0xfffffffffd11ffff, 64)) == int_of_string("18446744073660399615")); + assert(unsigned(zero_extend(0xfffffffffd130000, 64)) == int_of_string("18446744073660465152")); + assert(unsigned(zero_extend(0xfffffffffd13ffff, 64)) == int_of_string("18446744073660530687")); + assert(unsigned(zero_extend(0xfffffffffd140000, 64)) == int_of_string("18446744073660530688")); + assert(unsigned(zero_extend(0xfffffffffd14ffff, 64)) == int_of_string("18446744073660596223")); + assert(unsigned(zero_extend(0xfffffffffd170000, 64)) == int_of_string("18446744073660727296")); + assert(unsigned(zero_extend(0xfffffffffd18c000, 64)) == int_of_string("18446744073660841984")); + assert(unsigned(zero_extend(0xfffffffffebffe6b, 64)) == int_of_string("18446744073688579691")); + assert(unsigned(zero_extend(0xfffffffffebffefb, 64)) == int_of_string("18446744073688579835")); + assert(unsigned(zero_extend(0xfffffffffebfff3b, 64)) == int_of_string("18446744073688579899")); + assert(unsigned(zero_extend(0xffffffffffefffff, 64)) == int_of_string("18446744073708503039")); assert(unsigned(zero_extend(0xfffffffffff, 64)) == 17592186044415); - assert(unsigned(zero_extend(0xfffffffffff70000, 64)) == 18446744073708961792); - assert(unsigned(zero_extend(0xfffffffffff80000, 64)) == 18446744073709027328); - assert(unsigned(zero_extend(0xfffffffffffc0000, 64)) == 18446744073709289472); - assert(unsigned(zero_extend(0xfffffffffffd0000, 64)) == 18446744073709355008); - assert(unsigned(zero_extend(0xfffffffffffdffff, 64)) == 18446744073709420543); - assert(unsigned(zero_extend(0xfffffffffffe0000, 64)) == 18446744073709420544); - assert(unsigned(zero_extend(0xfffffffffffe7ffe, 64)) == 18446744073709453310); - assert(unsigned(zero_extend(0xfffffffffffe7fff, 64)) == 18446744073709453311); - assert(unsigned(zero_extend(0xfffffffffffe8000, 64)) == 18446744073709453312); - assert(unsigned(zero_extend(0xfffffffffffe8001, 64)) == 18446744073709453313); - assert(unsigned(zero_extend(0xfffffffffffefffe, 64)) == 18446744073709486078); - assert(unsigned(zero_extend(0xfffffffffffeffff, 64)) == 18446744073709486079); - assert(unsigned(zero_extend(0xffffffffffff0000, 64)) == 18446744073709486080); - assert(unsigned(zero_extend(0xffffffffffff0001, 64)) == 18446744073709486081); - assert(unsigned(zero_extend(0xffffffffffff641f, 64)) == 18446744073709511711); - assert(unsigned(zero_extend(0xffffffffffff7ffc, 64)) == 18446744073709518844); - assert(unsigned(zero_extend(0xffffffffffff7ffd, 64)) == 18446744073709518845); - assert(unsigned(zero_extend(0xffffffffffff7ffe, 64)) == 18446744073709518846); - assert(unsigned(zero_extend(0xffffffffffff7fff, 64)) == 18446744073709518847); - assert(unsigned(zero_extend(0xffffffffffff8000, 64)) == 18446744073709518848); - assert(unsigned(zero_extend(0xffffffffffff8001, 64)) == 18446744073709518849); - assert(unsigned(zero_extend(0xffffffffffffbeff, 64)) == 18446744073709534975); - assert(unsigned(zero_extend(0xffffffffffffbf40, 64)) == 18446744073709535040); - assert(unsigned(zero_extend(0xffffffffffffbf41, 64)) == 18446744073709535041); - assert(unsigned(zero_extend(0xffffffffffffbfff, 64)) == 18446744073709535231); - assert(unsigned(zero_extend(0xffffffffffffc22c, 64)) == 18446744073709535788); - assert(unsigned(zero_extend(0xffffffffffffc24c, 64)) == 18446744073709535820); - assert(unsigned(zero_extend(0xffffffffffffd220, 64)) == 18446744073709539872); - assert(unsigned(zero_extend(0xffffffffffffd23c, 64)) == 18446744073709539900); - assert(unsigned(zero_extend(0xffffffffffffe220, 64)) == 18446744073709543968); - assert(unsigned(zero_extend(0xffffffffffffe23c, 64)) == 18446744073709543996); - assert(unsigned(zero_extend(0xffffffffffffefff, 64)) == 18446744073709547519); - assert(unsigned(zero_extend(0xfffffffffffffeef, 64)) == 18446744073709551343); - assert(unsigned(zero_extend(0xfffffffffffffeff, 64)) == 18446744073709551359); - assert(unsigned(zero_extend(0xffffffffffffff1f, 64)) == 18446744073709551391); - assert(unsigned(zero_extend(0xffffffffffffff2f, 64)) == 18446744073709551407); - assert(unsigned(zero_extend(0xffffffffffffff4f, 64)) == 18446744073709551439); - assert(unsigned(zero_extend(0xffffffffffffff6f, 64)) == 18446744073709551471); - assert(unsigned(zero_extend(0xffffffffffffff80, 64)) == 18446744073709551488); - assert(unsigned(zero_extend(0xffffffffffffff8f, 64)) == 18446744073709551503); - assert(unsigned(zero_extend(0xffffffffffffff9f, 64)) == 18446744073709551519); - assert(unsigned(zero_extend(0xffffffffffffffa0, 64)) == 18446744073709551520); - assert(unsigned(zero_extend(0xffffffffffffffaf, 64)) == 18446744073709551535); - assert(unsigned(zero_extend(0xffffffffffffffbf, 64)) == 18446744073709551551); - assert(unsigned(zero_extend(0xffffffffffffffc2, 64)) == 18446744073709551554); - assert(unsigned(zero_extend(0xffffffffffffffc4, 64)) == 18446744073709551556); - assert(unsigned(zero_extend(0xffffffffffffffc6, 64)) == 18446744073709551558); - assert(unsigned(zero_extend(0xffffffffffffffc8, 64)) == 18446744073709551560); - assert(unsigned(zero_extend(0xffffffffffffffca, 64)) == 18446744073709551562); - assert(unsigned(zero_extend(0xffffffffffffffcc, 64)) == 18446744073709551564); - assert(unsigned(zero_extend(0xffffffffffffffce, 64)) == 18446744073709551566); - assert(unsigned(zero_extend(0xffffffffffffffcf, 64)) == 18446744073709551567); - assert(unsigned(zero_extend(0xffffffffffffffd0, 64)) == 18446744073709551568); - assert(unsigned(zero_extend(0xffffffffffffffd2, 64)) == 18446744073709551570); - assert(unsigned(zero_extend(0xffffffffffffffd4, 64)) == 18446744073709551572); - assert(unsigned(zero_extend(0xffffffffffffffd6, 64)) == 18446744073709551574); - assert(unsigned(zero_extend(0xffffffffffffffd8, 64)) == 18446744073709551576); - assert(unsigned(zero_extend(0xffffffffffffffda, 64)) == 18446744073709551578); - assert(unsigned(zero_extend(0xffffffffffffffdb, 64)) == 18446744073709551579); - assert(unsigned(zero_extend(0xffffffffffffffdc, 64)) == 18446744073709551580); - assert(unsigned(zero_extend(0xffffffffffffffde, 64)) == 18446744073709551582); - assert(unsigned(zero_extend(0xffffffffffffffdf, 64)) == 18446744073709551583); - assert(unsigned(zero_extend(0xffffffffffffffe0, 64)) == 18446744073709551584); - assert(unsigned(zero_extend(0xffffffffffffffe2, 64)) == 18446744073709551586); - assert(unsigned(zero_extend(0xffffffffffffffe4, 64)) == 18446744073709551588); - assert(unsigned(zero_extend(0xffffffffffffffe6, 64)) == 18446744073709551590); - assert(unsigned(zero_extend(0xffffffffffffffe7, 64)) == 18446744073709551591); - assert(unsigned(zero_extend(0xffffffffffffffe8, 64)) == 18446744073709551592); - assert(unsigned(zero_extend(0xffffffffffffffea, 64)) == 18446744073709551594); - assert(unsigned(zero_extend(0xffffffffffffffec, 64)) == 18446744073709551596); - assert(unsigned(zero_extend(0xffffffffffffffee, 64)) == 18446744073709551598); - assert(unsigned(zero_extend(0xffffffffffffffef, 64)) == 18446744073709551599); + assert(unsigned(zero_extend(0xfffffffffff70000, 64)) == int_of_string("18446744073708961792")); + assert(unsigned(zero_extend(0xfffffffffff80000, 64)) == int_of_string("18446744073709027328")); + assert(unsigned(zero_extend(0xfffffffffffc0000, 64)) == int_of_string("18446744073709289472")); + assert(unsigned(zero_extend(0xfffffffffffd0000, 64)) == int_of_string("18446744073709355008")); + assert(unsigned(zero_extend(0xfffffffffffdffff, 64)) == int_of_string("18446744073709420543")); + assert(unsigned(zero_extend(0xfffffffffffe0000, 64)) == int_of_string("18446744073709420544")); + assert(unsigned(zero_extend(0xfffffffffffe7ffe, 64)) == int_of_string("18446744073709453310")); + assert(unsigned(zero_extend(0xfffffffffffe7fff, 64)) == int_of_string("18446744073709453311")); + assert(unsigned(zero_extend(0xfffffffffffe8000, 64)) == int_of_string("18446744073709453312")); + assert(unsigned(zero_extend(0xfffffffffffe8001, 64)) == int_of_string("18446744073709453313")); + assert(unsigned(zero_extend(0xfffffffffffefffe, 64)) == int_of_string("18446744073709486078")); + assert(unsigned(zero_extend(0xfffffffffffeffff, 64)) == int_of_string("18446744073709486079")); + assert(unsigned(zero_extend(0xffffffffffff0000, 64)) == int_of_string("18446744073709486080")); + assert(unsigned(zero_extend(0xffffffffffff0001, 64)) == int_of_string("18446744073709486081")); + assert(unsigned(zero_extend(0xffffffffffff641f, 64)) == int_of_string("18446744073709511711")); + assert(unsigned(zero_extend(0xffffffffffff7ffc, 64)) == int_of_string("18446744073709518844")); + assert(unsigned(zero_extend(0xffffffffffff7ffd, 64)) == int_of_string("18446744073709518845")); + assert(unsigned(zero_extend(0xffffffffffff7ffe, 64)) == int_of_string("18446744073709518846")); + assert(unsigned(zero_extend(0xffffffffffff7fff, 64)) == int_of_string("18446744073709518847")); + assert(unsigned(zero_extend(0xffffffffffff8000, 64)) == int_of_string("18446744073709518848")); + assert(unsigned(zero_extend(0xffffffffffff8001, 64)) == int_of_string("18446744073709518849")); + assert(unsigned(zero_extend(0xffffffffffffbeff, 64)) == int_of_string("18446744073709534975")); + assert(unsigned(zero_extend(0xffffffffffffbf40, 64)) == int_of_string("18446744073709535040")); + assert(unsigned(zero_extend(0xffffffffffffbf41, 64)) == int_of_string("18446744073709535041")); + assert(unsigned(zero_extend(0xffffffffffffbfff, 64)) == int_of_string("18446744073709535231")); + assert(unsigned(zero_extend(0xffffffffffffc22c, 64)) == int_of_string("18446744073709535788")); + assert(unsigned(zero_extend(0xffffffffffffc24c, 64)) == int_of_string("18446744073709535820")); + assert(unsigned(zero_extend(0xffffffffffffd220, 64)) == int_of_string("18446744073709539872")); + assert(unsigned(zero_extend(0xffffffffffffd23c, 64)) == int_of_string("18446744073709539900")); + assert(unsigned(zero_extend(0xffffffffffffe220, 64)) == int_of_string("18446744073709543968")); + assert(unsigned(zero_extend(0xffffffffffffe23c, 64)) == int_of_string("18446744073709543996")); + assert(unsigned(zero_extend(0xffffffffffffefff, 64)) == int_of_string("18446744073709547519")); + assert(unsigned(zero_extend(0xfffffffffffffeef, 64)) == int_of_string("18446744073709551343")); + assert(unsigned(zero_extend(0xfffffffffffffeff, 64)) == int_of_string("18446744073709551359")); + assert(unsigned(zero_extend(0xffffffffffffff1f, 64)) == int_of_string("18446744073709551391")); + assert(unsigned(zero_extend(0xffffffffffffff2f, 64)) == int_of_string("18446744073709551407")); + assert(unsigned(zero_extend(0xffffffffffffff4f, 64)) == int_of_string("18446744073709551439")); + assert(unsigned(zero_extend(0xffffffffffffff6f, 64)) == int_of_string("18446744073709551471")); + assert(unsigned(zero_extend(0xffffffffffffff80, 64)) == int_of_string("18446744073709551488")); + assert(unsigned(zero_extend(0xffffffffffffff8f, 64)) == int_of_string("18446744073709551503")); + assert(unsigned(zero_extend(0xffffffffffffff9f, 64)) == int_of_string("18446744073709551519")); + assert(unsigned(zero_extend(0xffffffffffffffa0, 64)) == int_of_string("18446744073709551520")); + assert(unsigned(zero_extend(0xffffffffffffffaf, 64)) == int_of_string("18446744073709551535")); + assert(unsigned(zero_extend(0xffffffffffffffbf, 64)) == int_of_string("18446744073709551551")); + assert(unsigned(zero_extend(0xffffffffffffffc2, 64)) == int_of_string("18446744073709551554")); + assert(unsigned(zero_extend(0xffffffffffffffc4, 64)) == int_of_string("18446744073709551556")); + assert(unsigned(zero_extend(0xffffffffffffffc6, 64)) == int_of_string("18446744073709551558")); + assert(unsigned(zero_extend(0xffffffffffffffc8, 64)) == int_of_string("18446744073709551560")); + assert(unsigned(zero_extend(0xffffffffffffffca, 64)) == int_of_string("18446744073709551562")); + assert(unsigned(zero_extend(0xffffffffffffffcc, 64)) == int_of_string("18446744073709551564")); + assert(unsigned(zero_extend(0xffffffffffffffce, 64)) == int_of_string("18446744073709551566")); + assert(unsigned(zero_extend(0xffffffffffffffcf, 64)) == int_of_string("18446744073709551567")); + assert(unsigned(zero_extend(0xffffffffffffffd0, 64)) == int_of_string("18446744073709551568")); + assert(unsigned(zero_extend(0xffffffffffffffd2, 64)) == int_of_string("18446744073709551570")); + assert(unsigned(zero_extend(0xffffffffffffffd4, 64)) == int_of_string("18446744073709551572")); + assert(unsigned(zero_extend(0xffffffffffffffd6, 64)) == int_of_string("18446744073709551574")); + assert(unsigned(zero_extend(0xffffffffffffffd8, 64)) == int_of_string("18446744073709551576")); + assert(unsigned(zero_extend(0xffffffffffffffda, 64)) == int_of_string("18446744073709551578")); + assert(unsigned(zero_extend(0xffffffffffffffdb, 64)) == int_of_string("18446744073709551579")); + assert(unsigned(zero_extend(0xffffffffffffffdc, 64)) == int_of_string("18446744073709551580")); + assert(unsigned(zero_extend(0xffffffffffffffde, 64)) == int_of_string("18446744073709551582")); + assert(unsigned(zero_extend(0xffffffffffffffdf, 64)) == int_of_string("18446744073709551583")); + assert(unsigned(zero_extend(0xffffffffffffffe0, 64)) == int_of_string("18446744073709551584")); + assert(unsigned(zero_extend(0xffffffffffffffe2, 64)) == int_of_string("18446744073709551586")); + assert(unsigned(zero_extend(0xffffffffffffffe4, 64)) == int_of_string("18446744073709551588")); + assert(unsigned(zero_extend(0xffffffffffffffe6, 64)) == int_of_string("18446744073709551590")); + assert(unsigned(zero_extend(0xffffffffffffffe7, 64)) == int_of_string("18446744073709551591")); + assert(unsigned(zero_extend(0xffffffffffffffe8, 64)) == int_of_string("18446744073709551592")); + assert(unsigned(zero_extend(0xffffffffffffffea, 64)) == int_of_string("18446744073709551594")); + assert(unsigned(zero_extend(0xffffffffffffffec, 64)) == int_of_string("18446744073709551596")); + assert(unsigned(zero_extend(0xffffffffffffffee, 64)) == int_of_string("18446744073709551598")); + assert(unsigned(zero_extend(0xffffffffffffffef, 64)) == int_of_string("18446744073709551599")); assert(unsigned(zero_extend(0xfffffffffffffff, 64)) == 1152921504606846975); - assert(unsigned(zero_extend(0xfffffffffffffff0, 64)) == 18446744073709551600); - assert(unsigned(zero_extend(0xfffffffffffffff1, 64)) == 18446744073709551601); - assert(unsigned(zero_extend(0xfffffffffffffff2, 64)) == 18446744073709551602); - assert(unsigned(zero_extend(0xfffffffffffffff4, 64)) == 18446744073709551604); - assert(unsigned(zero_extend(0xfffffffffffffff6, 64)) == 18446744073709551606); - assert(unsigned(zero_extend(0xfffffffffffffff7, 64)) == 18446744073709551607); - assert(unsigned(zero_extend(0xfffffffffffffff8, 64)) == 18446744073709551608); - assert(unsigned(zero_extend(0xfffffffffffffffa, 64)) == 18446744073709551610); - assert(unsigned(zero_extend(0xfffffffffffffffb, 64)) == 18446744073709551611); - assert(unsigned(zero_extend(0xfffffffffffffffc, 64)) == 18446744073709551612); - assert(unsigned(zero_extend(0xfffffffffffffffd, 64)) == 18446744073709551613); - assert(unsigned(zero_extend(0xfffffffffffffffe, 64)) == 18446744073709551614); - assert(unsigned(zero_extend(0xffffffffffffffff, 64)) == 18446744073709551615); + assert(unsigned(zero_extend(0xfffffffffffffff0, 64)) == int_of_string("18446744073709551600")); + assert(unsigned(zero_extend(0xfffffffffffffff1, 64)) == int_of_string("18446744073709551601")); + assert(unsigned(zero_extend(0xfffffffffffffff2, 64)) == int_of_string("18446744073709551602")); + assert(unsigned(zero_extend(0xfffffffffffffff4, 64)) == int_of_string("18446744073709551604")); + assert(unsigned(zero_extend(0xfffffffffffffff6, 64)) == int_of_string("18446744073709551606")); + assert(unsigned(zero_extend(0xfffffffffffffff7, 64)) == int_of_string("18446744073709551607")); + assert(unsigned(zero_extend(0xfffffffffffffff8, 64)) == int_of_string("18446744073709551608")); + assert(unsigned(zero_extend(0xfffffffffffffffa, 64)) == int_of_string("18446744073709551610")); + assert(unsigned(zero_extend(0xfffffffffffffffb, 64)) == int_of_string("18446744073709551611")); + assert(unsigned(zero_extend(0xfffffffffffffffc, 64)) == int_of_string("18446744073709551612")); + assert(unsigned(zero_extend(0xfffffffffffffffd, 64)) == int_of_string("18446744073709551613")); + assert(unsigned(zero_extend(0xfffffffffffffffe, 64)) == int_of_string("18446744073709551614")); + assert(unsigned(zero_extend(0xffffffffffffffff, 64)) == int_of_string("18446744073709551615")); assert(unsigned(zero_extend(0x0, 8)) == 0); assert(unsigned(zero_extend(0x20, 8)) == 32); assert(unsigned(zero_extend(0x28, 8)) == 40); diff --git a/test/typecheck/pass/simple_record_access.sail b/test/typecheck/pass/simple_record_access.sail index a6e34c8b..76cbbaed 100644 --- a/test/typecheck/pass/simple_record_access.sail +++ b/test/typecheck/pass/simple_record_access.sail @@ -1,4 +1,5 @@ $include <flow.sail> +$include <vector_inc.sail> enum signal = {LOW, HIGH} |
