diff options
| -rw-r--r-- | lib/sail.c | 14 | ||||
| -rw-r--r-- | lib/sail.h | 2 | ||||
| -rw-r--r-- | test/c/issue37.expect | 1 | ||||
| -rw-r--r-- | test/c/issue37.sail | 9 |
4 files changed, 26 insertions, 0 deletions
@@ -930,6 +930,20 @@ void set_slice_int(sail_int *rop, } } +void update_lbits(lbits *rop, const lbits op, const sail_int n_mpz, const uint64_t bit) +{ + uint64_t n = mpz_get_ui(n_mpz); + + mpz_set(*rop->bits, *op.bits); + rop->len = op.len; + + if (bit == UINT64_C(0)) { + mpz_clrbit(*rop->bits, n); + } else { + mpz_setbit(*rop->bits, n); + } +} + void vector_update_subrange_lbits(lbits *rop, const lbits op, const sail_int n_mpz, @@ -290,6 +290,8 @@ void set_slice_int(sail_int *rop, const sail_int start_mpz, const lbits slice); +void update_lbits(lbits *rop, const lbits op, const sail_int n_mpz, const uint64_t bit); + void vector_update_subrange_lbits(lbits *rop, const lbits op, const sail_int n_mpz, diff --git a/test/c/issue37.expect b/test/c/issue37.expect new file mode 100644 index 00000000..6e77c916 --- /dev/null +++ b/test/c/issue37.expect @@ -0,0 +1 @@ +foo = 0xE diff --git a/test/c/issue37.sail b/test/c/issue37.sail new file mode 100644 index 00000000..404c4ef4 --- /dev/null +++ b/test/c/issue37.sail @@ -0,0 +1,9 @@ +default Order dec + +$include <vector_dec.sail> + +function main () : unit->unit = { + foo = 0xf; + foo[0] = bitzero; + print_bits("foo = ", foo) +}
\ No newline at end of file |
