summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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