summaryrefslogtreecommitdiff
path: root/lib/sail.h
diff options
context:
space:
mode:
authorAlasdair2018-07-05 20:57:44 +0100
committerAlasdair2018-07-05 21:02:08 +0100
commitf62edee6988476ed8ba78424c870461ac8d44256 (patch)
treeb38cfadc19babf0739f27cb468a72f39f3e0c3ab /lib/sail.h
parent9a0cbbedbe281807f70bf2206756624315096642 (diff)
Fix equality comparisons for structs
Add a test case in test/c/eq_struct.sail. Ensure that the macro EQUAL(type) will always give a valid equality function for any builtin type in sail.h.
Diffstat (limited to 'lib/sail.h')
-rw-r--r--lib/sail.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/sail.h b/lib/sail.h
index dce4eea0..dfff7872 100644
--- a/lib/sail.h
+++ b/lib/sail.h
@@ -30,6 +30,7 @@ void cleanup_library(void);
#define COPY(type) copy_ ## type
#define KILL(type) kill_ ## type
#define UNDEFINED(type) undefined_ ## type
+#define EQUAL(type) eq_ ## type
#define SAIL_BUILTIN_TYPE(type)\
void create_ ## type(type *);\
@@ -44,7 +45,7 @@ typedef int unit;
#define UNIT 0
unit UNDEFINED(unit)(const unit);
-bool eq_unit(const unit, const unit);
+bool EQUAL(unit)(const unit, const unit);
unit skip(const unit);
@@ -55,7 +56,7 @@ unit skip(const unit);
* short-circuiting evaluation.
*/
bool not(const bool);
-bool eq_bool(const bool, const bool);
+bool EQUAL(bool)(const bool, const bool);
bool UNDEFINED(bool)(const unit);
/* ***** Sail strings ***** */
@@ -73,6 +74,7 @@ void hex_str(sail_string *str, const mpz_t n);
void undefined_string(sail_string *str, const unit u);
bool eq_string(const sail_string, const sail_string);
+bool EQUAL(sail_string)(const sail_string, const sail_string);
void concat_str(sail_string *stro, const sail_string str1, const sail_string str2);
@@ -114,6 +116,7 @@ typedef __int128 sail_int;
* Comparison operators for integers
*/
bool eq_int(const sail_int, const sail_int);
+bool EQUAL(sail_int)(const sail_int, const sail_int);
bool lt(const sail_int, const sail_int);
bool gt(const sail_int, const sail_int);
@@ -218,6 +221,7 @@ void sign_extend(sail_bits *rop, const sail_bits op, const sail_int len);
void length_sail_bits(sail_int *rop, const sail_bits op);
bool eq_bits(const sail_bits op1, const sail_bits op2);
+bool EQUAL(sail_bits)(const sail_bits op1, const sail_bits op2);
bool neq_bits(const sail_bits op1, const sail_bits op2);
void vector_subrange_sail_bits(sail_bits *rop,
@@ -292,7 +296,7 @@ void round_down(sail_int *rop, const real op);
void to_real(real *rop, const sail_int op);
-bool eq_real(const real op1, const real op2);
+bool EQUAL(real)(const real op1, const real op2);
bool lt_real(const real op1, const real op2);
bool gt_real(const real op1, const real op2);