summaryrefslogtreecommitdiff
path: root/riscv
diff options
context:
space:
mode:
authorAlasdair Armstrong2018-12-11 19:54:14 +0000
committerAlasdair Armstrong2018-12-11 19:54:57 +0000
commitab4b9ca4f7cab45b6a2a13d0ef125dcf9c276a06 (patch)
tree509443d368b072e31c2fe3472641282750629e28 /riscv
parentc0500a16891e57b2856e47a3c233cd0c1d247a70 (diff)
Fix all tests with type checking changes
Diffstat (limited to 'riscv')
-rw-r--r--riscv/Makefile4
-rw-r--r--riscv/prelude.sail46
2 files changed, 15 insertions, 35 deletions
diff --git a/riscv/Makefile b/riscv/Makefile
index ae86adbe..82b838b9 100644
--- a/riscv/Makefile
+++ b/riscv/Makefile
@@ -64,13 +64,13 @@ coverage: _sbuild/coverage.native
mkdir coverage && bisect-ppx-report -html coverage/ -I _sbuild/ bisect/bisect*.out
riscv.c: $(SAIL_SRCS) main.sail Makefile
- $(SAIL) -O -memo_z3 -c -c_include riscv_prelude.h -c_include riscv_platform.h $(SAIL_SRCS) main.sail 1> $@
+ $(SAIL) $(SAIL_FLAGS) -O -memo_z3 -c -c_include riscv_prelude.h -c_include riscv_platform.h $(SAIL_SRCS) main.sail 1> $@
riscv_c: riscv.c $(C_INCS) $(C_SRCS) Makefile
gcc $(C_WARNINGS) -O2 riscv.c $(C_SRCS) ../lib/*.c -lgmp -lz -I ../lib -o riscv_c
riscv_model.c: $(SAIL_SRCS) main.sail Makefile
- $(SAIL) -O -memo_z3 -c -c_include riscv_prelude.h -c_include riscv_platform.h -c_no_main $(SAIL_SRCS) main.sail 1> $@
+ $(SAIL) $(SAIL_FLAGS) -O -memo_z3 -c -c_include riscv_prelude.h -c_include riscv_platform.h -c_no_main $(SAIL_SRCS) main.sail 1> $@
riscv_sim: riscv_model.c riscv_sim.c $(C_INCS) $(C_SRCS) $(CPP_SRCS) Makefile
gcc -g $(C_WARNINGS) $(C_FLAGS) -O2 riscv_model.c riscv_sim.c $(C_SRCS) ../lib/*.c $(C_LIBS) -o $@
diff --git a/riscv/prelude.sail b/riscv/prelude.sail
index a2117bec..5779609d 100644
--- a/riscv/prelude.sail
+++ b/riscv/prelude.sail
@@ -710,16 +710,6 @@ function hex_bits_64_backwards s =
Some (bv, n) if n == string_length(s) => bv
}
-
-val eq_atom = {ocaml: "eq_int", lem: "eq", c: "eq_int", coq: "Z.eqb"} : forall 'n 'm. (atom('n), atom('m)) -> bool
-val lteq_atom = {coq: "Z.leb", _: "lteq"} : forall 'n 'm. (atom('n), atom('m)) -> bool
-val gteq_atom = {coq: "Z.geb", _: "gteq"} : forall 'n 'm. (atom('n), atom('m)) -> bool
-val lt_atom = {coq: "Z.ltb", _: "lt"} : forall 'n 'm. (atom('n), atom('m)) -> bool
-val gt_atom = {coq: "Z.gtb", _: "gt"} : forall 'n 'm. (atom('n), atom('m)) -> bool
-
-val eq_int = {ocaml: "eq_int", lem: "eq", coq: "Z.eqb", c: "eq_int"} : (int, int) -> bool
-val eq_bit = {ocaml: "eq_bit", lem: "eq", interpreter: "eq_anything", c: "eq_bit", coq: "eq_bit"} : (bit, bit) -> bool
-
val eq_vec = {ocaml: "eq_list", lem: "eq_vec", coq: "eq_vec", c: "eq_bits"} : forall 'n. (bits('n), bits('n)) -> bool
val eq_string = {c: "eq_string", ocaml: "eq_string", lem: "eq", coq: "generic_eq"} : (string, string) -> bool
@@ -738,7 +728,7 @@ val "reg_deref" : forall ('a : Type). register('a) -> 'a effect {rreg}
/* sneaky deref with no effect necessary for bitfield writes */
val _reg_deref = "reg_deref" : forall ('a : Type). register('a) -> 'a
-overload operator == = {eq_atom, eq_int, eq_bit, eq_vec, eq_string, eq_real, eq_anything}
+overload operator == = {eq_vec, eq_string, eq_real, eq_anything}
val vector_subrange = {
ocaml: "subrange",
@@ -866,10 +856,8 @@ val real_power = {ocaml: "real_power", lem: "realPowInteger"} : (real, int) -> r
overload operator ^ = {xor_vec, int_power, real_power, concat_str}
-val add_range = {ocaml: "add_int", c: "add_int", lem: "integerAdd", coq: "add_range"} : forall 'n 'm 'o 'p.
- (range('n, 'm), range('o, 'p)) -> range('n + 'o, 'm + 'p)
-
-val add_int = {ocaml: "add_int", c: "add_int", lem: "integerAdd", coq: "Z.add"} : (int, int) -> int
+val add_atom = {ocaml: "add_int", lem: "integerAdd", c: "add_int", coq: "Z.add"} : forall 'n 'm.
+ (int('n), int('m)) -> int('n + 'm)
val add_vec = {c: "add_bits", _: "add_vec"} : forall 'n. (bits('n), bits('n)) -> bits('n)
@@ -877,10 +865,10 @@ val add_vec_int = {c: "add_bits_int", _: "add_vec_int"} : forall 'n. (bits('n),
val add_real = {ocaml: "add_real", lem: "realAdd"} : (real, real) -> real
-overload operator + = {add_range, add_int, add_vec, add_vec_int, add_real}
+overload operator + = {add_atom, add_vec, add_vec_int, add_real}
-val sub_range = {ocaml: "sub_int", c: "sub_int", lem: "integerMinus", coq: "sub_range"} : forall 'n 'm 'o 'p.
- (range('n, 'm), range('o, 'p)) -> range('n - 'p, 'm - 'o)
+val sub_atom = {ocaml: "sub_int", c: "sub_int", lem: "integerMinus", coq: "sub_range"} : forall 'n 'm.
+ (int('n), int('m)) -> int('n - 'm)
val sub_int = {ocaml: "sub_int", c: "sub_int", lem: "integerMinus", coq: "Z.sub"} : (int, int) -> int
val sub_nat = {ocaml: "(fun (x,y) -> let n = sub_int (x,y) in if Big_int.less_equal n Big_int.zero then Big_int.zero else n)",
@@ -893,13 +881,13 @@ val sub_vec_int = {c: "sub_bits_int", _: "sub_vec_int"} : forall 'n. (bits('n),
val sub_real = {ocaml: "sub_real", lem: "realMinus"} : (real, real) -> real
-val negate_range = {ocaml: "negate", lem: "integerNegate", coq: "negate_range"} : forall 'n 'm. range('n, 'm) -> range(- 'm, - 'n)
+val negate_atom = {ocaml: "negate", lem: "integerNegate", coq: "negate_range"} : forall 'n 'm. atom('n) -> atom(- 'n)
val negate_int = {ocaml: "negate", lem: "integerNegate", coq: "Z.opp"} : int -> int
val negate_real = {ocaml: "Num.minus_num", lem: "realNegate"} : real -> real
-overload operator - = {sub_range, sub_int, sub_vec, sub_vec_int, sub_real}
+overload operator - = {sub_atom, sub_int, sub_vec, sub_vec_int, sub_real}
overload negate = {negate_range, negate_int, negate_real}
@@ -914,29 +902,21 @@ overload operator * = {mult_atom, mult_int, mult_real}
val Sqrt = {ocaml: "sqrt_real", lem: "realSqrt"} : real -> real
-val gteq_int = {coq: "Z.geb", _: "gteq"} : (int, int) -> bool
-
val gteq_real = {ocaml: "gteq_real", lem: "gteq"} : (real, real) -> bool
-overload operator >= = {gteq_atom, gteq_int, gteq_real}
-
-val lteq_int = {coq: "Z.leb", _: "lteq"} : (int, int) -> bool
+overload operator >= = {gteq_real}
val lteq_real = {ocaml: "lteq_real", lem: "lteq"} : (real, real) -> bool
-overload operator <= = {lteq_atom, lteq_int, lteq_real}
-
-val gt_int = {coq: "Z.gtb", _: "gt"} : (int, int) -> bool
+overload operator <= = {lteq_real}
val gt_real = {ocaml: "gt_real", lem: "gt"} : (real, real) -> bool
-overload operator > = {gt_atom, gt_int, gt_real}
-
-val lt_int = {coq: "Z.ltb", _: "lt"} : (int, int) -> bool
+overload operator > = {gt_real}
val lt_real = {ocaml: "lt_real", lem: "lt"} : (real, real) -> bool
-overload operator < = {lt_atom, lt_int, lt_real}
+overload operator < = {lt_real}
val RoundDown = {ocaml: "round_down", lem: "realFloor"} : real -> int
@@ -1137,7 +1117,7 @@ function shift_right_arith32 (v : bits(32), shift : bits(5)) -> bits(32) =
val zero_extend_type_hack = "zero_extend" : forall 'n 'm, 'm >= 'n. (bits('n), atom('m)) -> bits('m)
-val n_leading_spaces : string -> nat
+val n_leading_spaces : string -> {'n, 'n >= 0. int('n)}
function n_leading_spaces s =
match s {
"" => 0,