LoadAndStore.thy

Back to the index of JVM0_ASCII
LoadAndStore = Runtime +

(** load and store instructions transfer values between local variables 
    and operand stack **)

datatype load_and_store =
  IAload  ins_type nat  ("_ load _" 30)     (* load int/ref from local variable *)	
| IAstore ins_type nat  ("_ store _" 30)    (* store int into/ref local variable *)
| Bipush int					(* push int *)			
| Aconst_null					(* push null *)


consts
 exec_las :: "[load_and_store,opstack,locvars,p_count] => (opstack * locvars * p_count)" 
primrec
 "exec_las (X load idx) stk vars pc = ((vars ! idx) # stk , vars , pc+1)"

 "exec_las (X store idx) stk vars pc = (tl stk , vars[idx:=hd stk] , pc+1)"	

 "exec_las (Bipush ival) stk vars pc = (Intg ival # stk , vars , pc+1)"

 "exec_las Aconst_null stk vars pc = (Null # stk , vars , pc+1)"

end