Changeset 3039 for src/ASM/Interpret2.ma
- Timestamp:
- Mar 29, 2013, 5:45:14 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ASM/Interpret2.ma
r2999 r3039 51 51 (* Move next function in interpret? *) 52 52 definition execute_1_pseudo_instruction': 53 ∀cm. ∀sigma,policy.PseudoStatus cm → PseudoStatus cm ≝ 54 λcm,sigma,policy,status. 53 ∀cm.(Identifier → Word) → (Identifier → Word) → 54 ∀sigma,policy.PseudoStatus cm → PseudoStatus cm ≝ 55 λcm,addr_of_label,addr_of_symbol,sigma,policy,status. 55 56 execute_1_pseudo_instruction cm 56 (ticks_of cm sigma policy) status ….57 (ticks_of cm sigma policy) addr_of_label addr_of_symbol status …. 57 58 cases daemon (*CSC: we need to prove that we remain inside the program 58 59 (code closed), which is impossible in case of function pointers. … … 68 69 | Jmp _ ⇒ cl_other 69 70 | Jnz _ _ _ ⇒ cl_jump 70 | MovSuccessor _ _ _ ⇒ cl_other71 71 | Call _ ⇒ cl_call 72 | Mov _ _ ⇒ cl_other ].72 | Mov _ _ _ ⇒ cl_other ]. 73 73 74 74 definition ASM_classify: ∀cm. PseudoStatus cm → status_class ≝ … … 108 108 109 109 definition ASM_as_call_ident: 110 ∀prog,sigma,policy.(Σs:PseudoStatus prog. ASM_classify … s = cl_call) → ident 110 ∀prog.(Identifier → Word) → (Identifier → Word) → 111 ∀sigma,policy.(Σs:PseudoStatus prog. ASM_classify … s = cl_call) → ident 111 112 ≝ 112 λprog,sigma,policy,s0. 113 let st ≝ execute_1_pseudo_instruction' prog sigma policy s0 in 113 λprog,addr_of_label,addr_of_symbol,sigma,policy,s0. 114 let st ≝ execute_1_pseudo_instruction' prog addr_of_label addr_of_symbol 115 sigma policy s0 in 114 116 let 〈lbl, instr〉 ≝ nth_safe … (nat_of_bitvector ? (program_counter … st)) … (code prog) ? in 115 117 match lbl with … … 122 124 123 125 definition ASM_abstract_status: 124 ∀prog:pseudo_assembly_program.∀sigma,policy.abstract_status ≝ 125 λprog,sigma,policy. 126 ∀prog:pseudo_assembly_program. 127 (Identifier → Word) → 128 (Identifier → Word) → 129 ∀sigma,policy.abstract_status ≝ 130 λprog,addr_of_label,addr_of_symbol,sigma,policy. 126 131 mk_abstract_status 127 132 (PseudoStatus prog) 128 (λs1,s2. execute_1_pseudo_instruction' … sigma policy s1 = s2) 133 (λs1,s2. execute_1_pseudo_instruction' … addr_of_label addr_of_symbol 134 sigma policy s1 = s2) 129 135 word_deqset 130 136 (program_counter …) … … 133 139 (ASM_next_instruction_properly_relates_program_counters prog) 134 140 (ASM_as_result …) 135 (ASM_as_call_ident prog sigma policy …)141 (ASM_as_call_ident prog addr_of_label addr_of_symbol sigma policy …) 136 142 ?. 137 143 * #st whd in ⊢ (??%? → ?); cases (\fst (fetch_pseudo_instruction ???)) [*] … … 142 148 pseudo_assembly_program → ∀sigma,policy. preclassified_system ≝ 143 149 λc,sigma,policy. 150 let label_map ≝ \fst (create_label_cost_map (code … c)) in 151 let symbol_map ≝ construct_datalabels (preamble … c) in 152 let addr_of_label ≝ λx.bitvector_of_nat ? (lookup_def … label_map x 0) in 153 let addr_of_symbol ≝ λx.lookup_def … symbol_map x (addr_of_label x) in 144 154 mk_preclassified_system_of_abstract_status 145 155 (pseudo_assembly_program × (Word → Word) × (Word → bool)) 146 (ASM_abstract_status c sigma policy)147 (λst. return (execute_1_pseudo_instruction' … sigma policy st))156 (ASM_abstract_status c addr_of_label addr_of_symbol sigma policy) 157 (λst. return (execute_1_pseudo_instruction' … addr_of_label addr_of_symbol sigma policy st)) 148 158 (initialise_status … c).
Note: See TracChangeset
for help on using the changeset viewer.