diff options
Diffstat (limited to 'lib/sail.h')
| -rw-r--r-- | lib/sail.h | 29 |
1 files changed, 27 insertions, 2 deletions
@@ -8,6 +8,16 @@ #include<time.h> +static inline void *sail_malloc(size_t size) +{ + return malloc(size); +} + +static inline void sail_free(void *ptr) +{ + free(ptr); +} + /* * Called by the RTS to initialise and clear any library state. */ @@ -84,6 +94,8 @@ bool EQUAL(mach_int)(const mach_int, const mach_int); typedef mpz_t sail_int; +uint64_t sail_int_get_ui(const sail_int); + #define SAIL_INT_FUNCTION(fname, rtype, ...) void fname(rtype*, __VA_ARGS__) SAIL_BUILTIN_TYPE(sail_int); @@ -127,6 +139,7 @@ SAIL_INT_FUNCTION(shr_int, sail_int, const sail_int, const sail_int); * constraints. */ SAIL_INT_FUNCTION(undefined_int, sail_int, const int); +SAIL_INT_FUNCTION(undefined_nat, sail_int, const unit); SAIL_INT_FUNCTION(undefined_range, sail_int, const sail_int, const sail_int); /* @@ -164,6 +177,11 @@ typedef uint64_t fbits; bool eq_bit(const fbits a, const fbits b); +static inline bool bit_to_bool(const fbits a) +{ + return (bool) a; +} + bool EQUAL(fbits)(const fbits, const fbits); typedef struct { @@ -215,7 +233,7 @@ void CONVERT_OF(lbits, sbits)(lbits *, const sbits, const bool); sbits CONVERT_OF(sbits, fbits)(const fbits, const uint64_t, const bool); sbits CONVERT_OF(sbits, lbits)(const lbits, const bool); -void UNDEFINED(lbits)(lbits *, const sail_int len, const fbits bit); +void UNDEFINED(lbits)(lbits *, const sail_int len); fbits UNDEFINED(fbits)(const unit); sbits undefined_sbits(void); @@ -254,6 +272,7 @@ fbits fast_sign_extend(const fbits op, const uint64_t n, const uint64_t m); fbits fast_sign_extend2(const sbits op, const uint64_t m); void length_lbits(sail_int *rop, const lbits op); +void count_leading_zeros(sail_int *rop, const lbits op); bool eq_bits(const lbits op1, const lbits op2); bool EQUAL(lbits)(const lbits op1, const lbits op2); @@ -316,19 +335,24 @@ void set_slice(lbits *rop, const sail_int start_mpz, const lbits slice); - void shift_bits_left(lbits *rop, const lbits op1, const lbits op2); void shift_bits_right(lbits *rop, const lbits op1, const lbits op2); void shift_bits_right_arith(lbits *rop, const lbits op1, const lbits op2); void shiftl(lbits *rop, const lbits op1, const sail_int op2); void shiftr(lbits *rop, const lbits op1, const sail_int op2); +void arith_shiftr(lbits *rop, const lbits op1, const sail_int op2); void reverse_endianness(lbits*, lbits); bool eq_sbits(const sbits op1, const sbits op2); bool neq_sbits(const sbits op1, const sbits op2); +sbits not_sbits(const sbits op); sbits xor_sbits(const sbits op1, const sbits op2); +sbits or_sbits(const sbits op1, const sbits op2); +sbits and_sbits(const sbits op1, const sbits op2); +sbits add_sbits(const sbits op1, const sbits op2); +sbits sub_sbits(const sbits op1, const sbits op2); /* ***** Sail reals ***** */ @@ -376,6 +400,7 @@ void string_length(sail_int *len, sail_string s); void string_drop(sail_string *dst, sail_string s, sail_int len); void string_take(sail_string *dst, sail_string s, sail_int len); + /* ***** Printing ***** */ void string_of_int(sail_string *str, const sail_int i); |
