summaryrefslogtreecommitdiff
path: root/src/gen_lib/sail_values.ml
diff options
context:
space:
mode:
authorThomas Bauereiss2017-12-06 17:18:36 +0000
committerThomas Bauereiss2017-12-06 17:18:36 +0000
commit2bc281428a3a1d608d56f69e71b50056a25e3da0 (patch)
treedfd8e8a13702696fd9daef64315952b9652f95e8 /src/gen_lib/sail_values.ml
parentc3c3c40a1d4f81448d8356317e88be2b04363df7 (diff)
parent44e9396fa90ab68ee4c8d9674c6bbad6fc851c6d (diff)
Merge remote branch 'experiments' into experiments
Diffstat (limited to 'src/gen_lib/sail_values.ml')
-rw-r--r--src/gen_lib/sail_values.ml27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/gen_lib/sail_values.ml b/src/gen_lib/sail_values.ml
index d160e84a..213acea1 100644
--- a/src/gen_lib/sail_values.ml
+++ b/src/gen_lib/sail_values.ml
@@ -889,18 +889,25 @@ let shift_op_vec_int op (l,r) =
let len = Array.length array in
(match op with
| "<<" ->
- 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)
+ if (r <= len) then
+ 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)
+ else
+ Vvector(Array.make len Vzero, start, ord)
| ">>" ->
- 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)
+ if (r <= len) then
+ 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)
+ else
+ Vvector(Array.make len Vzero, start, ord)
| "<<<" ->
- let left = Array.sub array r (len - r) in
- let right = Array.sub array 0 r in
+ let rmod = r mod len in
+ let left = Array.sub array rmod (len - rmod) in
+ let right = Array.sub array 0 rmod in
let result = Array.append left right in
Vvector(result, start, ord)
| _ -> assert false)