summaryrefslogtreecommitdiff
path: root/src/gen_lib/sail_values.lem
diff options
context:
space:
mode:
authorChristopher Pulte2015-11-06 10:31:30 +0000
committerChristopher Pulte2015-11-06 10:31:30 +0000
commit5a33d9f5ec9fae7336933f34363e0eee246242b8 (patch)
tree125492b5cfc56fb73f38508515dfb26b9e4bdf62 /src/gen_lib/sail_values.lem
parentbf36f5273afa8a63adcd739e09f29bd0f64d9527 (diff)
fixes
Diffstat (limited to 'src/gen_lib/sail_values.lem')
-rw-r--r--src/gen_lib/sail_values.lem19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/gen_lib/sail_values.lem b/src/gen_lib/sail_values.lem
index bd295616..c47e763f 100644
--- a/src/gen_lib/sail_values.lem
+++ b/src/gen_lib/sail_values.lem
@@ -13,11 +13,14 @@ let get_elements (Vector elements _) = elements
let get_start (Vector _ s) = s
let length (Vector bs _) = length bs
+let rec nth n xs = match (n,l) with
+ | (0,x :: xs) -> x
+ | (n + 1,x :: xs) -> nth n xs
+end
let vector_access (Vector bs start) n =
- let (Just b) = if is_inc then List.index bs (n - start)
- else List.index bs (start - n) in
- b
+ if is_inc then nth bs (n - start) else nth bs (start - n)
+
let write_two_registers r1 r2 vec =
let size = length_register r1 in
@@ -130,11 +133,11 @@ let rec divide_by_2 bs i (n : integer) =
let rec add_one_bit bs co i =
if i < 0 then bs
- else match (List.index bs i,co) with
- | (Just B0,false) -> replace bs (i,B1)
- | (Just B0,true) -> add_one_bit (replace bs (i,B1)) true (i-1)
- | (Just B1, false) -> add_one_bit (replace bs (i,B0)) true (i-1)
- | (Just B1, true) -> add_one_bit bs true (i-1)
+ else match (nth bs i,co) with
+ | (B0,false) -> replace bs (i,B1)
+ | (B0,true) -> add_one_bit (replace bs (i,B1)) true (i-1)
+ | (B1,false) -> add_one_bit (replace bs (i,B0)) true (i-1)
+ | (B1,true) -> add_one_bit bs true (i-1)
(* | Vundef,_ -> assert false*)
end