summaryrefslogtreecommitdiff
path: root/src/lem_interp
diff options
context:
space:
mode:
authorKathy Gray2015-12-08 21:32:34 +0000
committerKathy Gray2015-12-08 21:32:34 +0000
commit4636890b0d4fd133fc2a860d179d5829650fe6ed (patch)
tree73dfb08e4d479cbd6fece09a4d6ebebe5ed99727 /src/lem_interp
parentf2bf1191947480b03fdfb945b7c08fbdf9010a3d (diff)
wreg effects and tags now proper for LEXP_field, LEXP_vector LEXP_vector_range for sub register writes.
Closes issue #23
Diffstat (limited to 'src/lem_interp')
-rw-r--r--src/lem_interp/interp.lem7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/lem_interp/interp.lem b/src/lem_interp/interp.lem
index ac4fd347..0eaf2741 100644
--- a/src/lem_interp/interp.lem
+++ b/src/lem_interp/interp.lem
@@ -2550,6 +2550,13 @@ and create_write_message_or_update mode t_level value l_env l_mem is_top_level (
update_vector_slice mode.track_lmem v value n1 n2 lm, l_env), Nothing)
| (V_vector m inc vs,false) ->
((Value (slice_vector v n1 n2),lm,l_env), Just (next_builder lexp_builder))
+ | (V_register regform,true) ->
+ let start_pos = reg_start_pos regform in
+ let reg_size = reg_size regform in
+ ((Action (Write_reg regform (Just (n1,n2)) (update_vector_start default_dir start_pos reg_size v))
+ (mk_thunk l annot t_level l_env l_mem),
+ l_mem,l_env),
+ Just (next_builder lexp_builder))
| (V_unknown,_) ->
let inc = n1 < n2 in
let start = if inc then n1 else (n2-1) in