summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Norton2017-03-27 17:00:06 +0100
committerRobert Norton2017-03-27 17:01:55 +0100
commit1c191c09c458c37453013c26ff39da06f211b38f (patch)
tree4d429eaa83da39f776a87490bc7478304842c78a
parenteb2fdf02e244873ef5d1ac74e37f7b00931e7c2d (diff)
fix bitshift operators. I think these should be independent of vector order...
-rw-r--r--src/gen_lib/sail_values.ml21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/gen_lib/sail_values.ml b/src/gen_lib/sail_values.ml
index e8622a09..401f78ae 100644
--- a/src/gen_lib/sail_values.ml
+++ b/src/gen_lib/sail_values.ml
@@ -840,17 +840,20 @@ let shift_op_vec_int op (l,r) =
let len = Array.length array in
(match op with
| "<<" ->
- let right_vec = Vvector(Array.make r Vzero,0,true) in
- let left_vec = vector_subrange_int l r (if ord then len + start else start - len) in
- vector_concat left_vec right_vec
+ let left = Array.sub array r (len - r) in
+ let right = Array.make r Vzero in
+ let result = Array.append left right in
+ Vvector(result, start, ord)
| ">>" ->
- let right_vec = vector_subrange_int l start r in
- let left_vec = Vvector(Array.make r Vzero,0,true) in
- vector_concat left_vec right_vec
+ let left = Array.make r Vzero in
+ let right = Array.sub array 0 (len - r) in
+ let result = Array.append left right in
+ Vvector(result, start, ord)
| "<<<" ->
- let left_vec = vector_subrange_int l r (if ord then len + start else start - len) in
- let right_vec = vector_subrange_int l start r in
- vector_concat left_vec right_vec
+ let left = Array.sub array r (len - r) in
+ let right = Array.sub array 0 r in
+ let result = Array.append left right in
+ Vvector(result, start, ord)
| _ -> assert false)
| _ -> assert false