69 open Hints_declaration
111 open StructuredTraces
115 (** val execute_1_preinstruction :
116 (Nat.nat, Nat.nat) Types.prod -> 'a2 -> ('a1 -> 'a2 Status.preStatus ->
117 BitVector.word) -> 'a1 ASM.preinstruction -> 'a2 Status.preStatus -> 'a2
119 let execute_1_preinstruction ticks cm addr_of instr s =
120 let add_ticks1 = fun s0 ->
121 Status.set_clock cm s0 (Nat.plus ticks.Types.fst s0.Status.clock)
123 let add_ticks2 = fun s0 ->
124 Status.set_clock cm s0 (Nat.plus ticks.Types.snd s0.Status.clock)
127 | ASM.ADD (addr1, addr2) ->
129 let s0 = add_ticks1 s in
130 let { Types.fst = result; Types.snd = flags } =
131 Arithmetic.add_8_with_carry
132 (Status.get_arg_8 cm s0 Bool.False
133 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
134 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
135 Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
136 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
137 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))), ASM.Direct,
138 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
139 (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect, (Vector.VCons
140 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
141 Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
142 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a, (Vector.VCons
143 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
144 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
145 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
146 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
147 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
148 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
149 Vector.VEmpty)))))))))))))))))))) addr1))
150 (Status.get_arg_8 cm s0 Bool.False
151 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
152 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
153 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
154 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Registr, (Vector.VCons
155 ((Nat.S (Nat.S Nat.O)), ASM.Direct, (Vector.VCons ((Nat.S
156 Nat.O), ASM.Indirect, (Vector.VCons (Nat.O, ASM.Data,
157 Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
158 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
159 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
160 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
161 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
162 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S
163 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
164 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
165 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
166 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
167 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
168 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
169 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
170 Vector.VEmpty)))))))))))))))))))) addr2)) Bool.False
172 let cy_flag = Vector.get_index' Nat.O (Nat.S (Nat.S Nat.O)) flags in
173 let ac_flag = Vector.get_index' (Nat.S Nat.O) (Nat.S Nat.O) flags in
174 let ov_flag = Vector.get_index' (Nat.S (Nat.S Nat.O)) Nat.O flags in
175 let s1 = Status.set_arg_8 cm s0 ASM.ACC_A result in
176 Status.set_flags cm s1 cy_flag (Types.Some ac_flag) ov_flag)
177 | ASM.ADDC (addr1, addr2) ->
179 let s0 = add_ticks1 s in
180 let old_cy_flag = Status.get_cy_flag cm s0 in
181 let { Types.fst = result; Types.snd = flags } =
182 Arithmetic.add_8_with_carry
183 (Status.get_arg_8 cm s0 Bool.False
184 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
185 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
186 Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
187 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
188 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))), ASM.Direct,
189 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
190 (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect, (Vector.VCons
191 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
192 Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
193 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a, (Vector.VCons
194 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
195 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
196 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
197 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
198 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
199 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
200 Vector.VEmpty)))))))))))))))))))) addr1))
201 (Status.get_arg_8 cm s0 Bool.False
202 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
203 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
204 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
205 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Registr, (Vector.VCons
206 ((Nat.S (Nat.S Nat.O)), ASM.Direct, (Vector.VCons ((Nat.S
207 Nat.O), ASM.Indirect, (Vector.VCons (Nat.O, ASM.Data,
208 Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
209 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
210 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
211 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
212 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
213 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S
214 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
215 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
216 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
217 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
218 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
219 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
220 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
221 Vector.VEmpty)))))))))))))))))))) addr2)) old_cy_flag
223 let cy_flag = Vector.get_index' Nat.O (Nat.S (Nat.S Nat.O)) flags in
224 let ac_flag = Vector.get_index' (Nat.S Nat.O) (Nat.S Nat.O) flags in
225 let ov_flag = Vector.get_index' (Nat.S (Nat.S Nat.O)) Nat.O flags in
226 let s1 = Status.set_arg_8 cm s0 ASM.ACC_A result in
227 Status.set_flags cm s1 cy_flag (Types.Some ac_flag) ov_flag)
228 | ASM.SUBB (addr1, addr2) ->
230 let s0 = add_ticks1 s in
231 let old_cy_flag = Status.get_cy_flag cm s0 in
232 let { Types.fst = result; Types.snd = flags } =
233 Arithmetic.sub_8_with_carry
234 (Status.get_arg_8 cm s0 Bool.False
235 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
236 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
237 Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
238 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
239 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))), ASM.Direct,
240 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
241 (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect, (Vector.VCons
242 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
243 Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
244 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a, (Vector.VCons
245 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
246 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
247 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
248 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
249 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
250 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
251 Vector.VEmpty)))))))))))))))))))) addr1))
252 (Status.get_arg_8 cm s0 Bool.False
253 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
254 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
255 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
256 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Registr, (Vector.VCons
257 ((Nat.S (Nat.S Nat.O)), ASM.Direct, (Vector.VCons ((Nat.S
258 Nat.O), ASM.Indirect, (Vector.VCons (Nat.O, ASM.Data,
259 Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
260 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
261 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
262 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
263 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
264 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S
265 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
266 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
267 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
268 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
269 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
270 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
271 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
272 Vector.VEmpty)))))))))))))))))))) addr2)) old_cy_flag
274 let cy_flag = Vector.get_index' Nat.O (Nat.S (Nat.S Nat.O)) flags in
275 let ac_flag = Vector.get_index' (Nat.S Nat.O) (Nat.S Nat.O) flags in
276 let ov_flag = Vector.get_index' (Nat.S (Nat.S Nat.O)) Nat.O flags in
277 let s1 = Status.set_arg_8 cm s0 ASM.ACC_A result in
278 Status.set_flags cm s1 cy_flag (Types.Some ac_flag) ov_flag)
281 (match ASM.subaddressing_modeel (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))
282 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
283 ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
284 ASM.Registr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
285 ASM.Direct, (Vector.VCons ((Nat.S Nat.O), ASM.Indirect,
286 (Vector.VCons (Nat.O, ASM.Dptr, Vector.VEmpty)))))))))) addr with
289 let s' = add_ticks1 s in
291 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
293 (Status.get_arg_8 cm s' Bool.True (ASM.DIRECT d))
294 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
295 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
297 Status.set_arg_8 cm s' (ASM.DIRECT d) result)
300 let s' = add_ticks1 s in
302 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
304 (Status.get_arg_8 cm s' Bool.True (ASM.INDIRECT i))
305 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
306 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
308 Status.set_arg_8 cm s' (ASM.INDIRECT i) result)
309 | ASM.EXT_INDIRECT x -> (fun _ -> assert false (* absurd case *))
312 let s' = add_ticks1 s in
314 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
316 (Status.get_arg_8 cm s' Bool.True (ASM.REGISTER r))
317 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
318 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
320 Status.set_arg_8 cm s' (ASM.REGISTER r) result)
323 let s' = add_ticks1 s in
325 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
327 (Status.get_arg_8 cm s' Bool.True ASM.ACC_A)
328 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
329 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
331 Status.set_arg_8 cm s' ASM.ACC_A result)
332 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
335 let s' = add_ticks1 s in
336 let { Types.fst = carry; Types.snd = bl } =
337 Arithmetic.half_add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
338 (Nat.S (Nat.S Nat.O))))))))
339 (Status.get_8051_sfr cm s' Status.SFR_DPL)
340 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
341 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
343 let { Types.fst = carry0; Types.snd = bu } =
344 Arithmetic.full_add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
345 (Nat.S (Nat.S Nat.O))))))))
346 (Status.get_8051_sfr cm s' Status.SFR_DPH)
347 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
348 (Nat.S (Nat.S Nat.O))))))))) carry
350 let s'' = Status.set_8051_sfr cm s' Status.SFR_DPL bl in
351 Status.set_8051_sfr cm s'' Status.SFR_DPH bu)
352 | ASM.DATA x -> (fun _ -> assert false (* absurd case *))
353 | ASM.DATA16 x -> (fun _ -> assert false (* absurd case *))
354 | ASM.ACC_DPTR -> (fun _ -> assert false (* absurd case *))
355 | ASM.ACC_PC -> (fun _ -> assert false (* absurd case *))
356 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
357 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
358 | ASM.CARRY -> (fun _ -> assert false (* absurd case *))
359 | ASM.BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
360 | ASM.N_BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
361 | ASM.RELATIVE x -> (fun _ -> assert false (* absurd case *))
362 | ASM.ADDR11 x -> (fun _ -> assert false (* absurd case *))
363 | ASM.ADDR16 x -> (fun _ -> assert false (* absurd case *))) __)
366 let s0 = add_ticks1 s in
367 let { Types.fst = result; Types.snd = flags } =
368 Arithmetic.sub_8_with_carry
369 (Status.get_arg_8 cm s0 Bool.True
370 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
371 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
372 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
373 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a, (Vector.VCons
374 ((Nat.S (Nat.S Nat.O)), ASM.Registr, (Vector.VCons ((Nat.S
375 Nat.O), ASM.Direct, (Vector.VCons (Nat.O, ASM.Indirect,
376 Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
377 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
378 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
379 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
380 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
381 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S
382 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
383 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
384 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
385 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
386 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
387 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
388 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
389 Vector.VEmpty)))))))))))))))))))) addr))
390 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
391 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
393 Status.set_arg_8 cm s0
394 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S (Nat.S
395 (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
396 Nat.O)))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
397 ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Registr,
398 (Vector.VCons ((Nat.S Nat.O), ASM.Direct, (Vector.VCons (Nat.O,
399 ASM.Indirect, Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S
400 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct, (Vector.VCons
401 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Indirect,
402 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
403 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
404 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b, (Vector.VCons
405 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
406 ASM.Ext_indirect_dptr, Vector.VEmpty)))))))))))))) addr) result)
407 | ASM.MUL (addr1, addr2) ->
409 let s0 = add_ticks1 s in
411 Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
412 (Nat.S (Nat.S (Nat.S Nat.O))))))))
413 (Status.get_8051_sfr cm s0 Status.SFR_ACC_A)
416 Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
417 (Nat.S (Nat.S (Nat.S Nat.O))))))))
418 (Status.get_8051_sfr cm s0 Status.SFR_ACC_B)
420 let product = Nat.times acc_a_nat acc_b_nat in
422 Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
423 (Nat.S (Nat.S (Nat.S Nat.O))))))))
424 (Util.modulus product (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
425 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
426 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
427 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
428 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
429 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
430 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
431 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
432 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
433 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
434 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
435 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
436 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
437 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
438 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
439 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
440 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
441 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
442 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
443 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
444 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
445 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
446 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
447 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
448 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
449 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
450 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
451 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
452 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
453 Nat.O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
456 Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
457 (Nat.S (Nat.S (Nat.S Nat.O))))))))
458 (Util.division product (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
459 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
460 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
461 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
462 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
463 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
464 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
465 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
466 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
467 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
468 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
469 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
470 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
471 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
472 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
473 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
474 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
475 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
476 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
477 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
478 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
479 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
480 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
481 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
482 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
483 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
484 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
485 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
486 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
487 Nat.O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
489 let s1 = Status.set_8051_sfr cm s0 Status.SFR_ACC_A low in
490 Status.set_8051_sfr cm s1 Status.SFR_ACC_B high)
491 | ASM.DIV (addr1, addr2) ->
493 let s0 = add_ticks1 s in
495 Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
496 (Nat.S (Nat.S (Nat.S Nat.O))))))))
497 (Status.get_8051_sfr cm s0 Status.SFR_ACC_A)
500 Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
501 (Nat.S (Nat.S (Nat.S Nat.O))))))))
502 (Status.get_8051_sfr cm s0 Status.SFR_ACC_B)
504 (match acc_b_nat with
505 | Nat.O -> Status.set_flags cm s0 Bool.False Types.None Bool.True
508 Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
509 (Nat.S (Nat.S (Nat.S Nat.O))))))))
510 (Util.division acc_a_nat (Nat.S o))
513 Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
514 (Nat.S (Nat.S (Nat.S Nat.O))))))))
515 (Util.modulus acc_a_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
516 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
517 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
518 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
519 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
520 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
521 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
522 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
523 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
524 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
525 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
526 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
527 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
528 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
529 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
530 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
531 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
532 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
533 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
534 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
535 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
536 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
537 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
538 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
539 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
540 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
541 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
542 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
543 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
544 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
545 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
546 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
548 Nat.O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
550 let s1 = Status.set_8051_sfr cm s0 Status.SFR_ACC_A q in
551 let s2 = Status.set_8051_sfr cm s1 Status.SFR_ACC_B r in
552 Status.set_flags cm s2 Bool.False Types.None Bool.False))
555 let s0 = add_ticks1 s in
556 let { Types.fst = acc_nu; Types.snd = acc_nl } =
557 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
558 (Nat.S (Nat.S Nat.O))))
559 (Status.get_8051_sfr cm s0 Status.SFR_ACC_A)
563 (Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S
564 Nat.O)))) acc_nl) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
565 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))))
566 (Status.get_ac_flag cm s0) with
568 let { Types.fst = result; Types.snd = flags } =
569 Arithmetic.add_8_with_carry
570 (Status.get_8051_sfr cm s0 Status.SFR_ACC_A)
571 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
572 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S
573 (Nat.S (Nat.S (Nat.S Nat.O))))))) Bool.False
575 let cy_flag = Vector.get_index' Nat.O (Nat.S (Nat.S Nat.O)) flags
577 let { Types.fst = acc_nu'; Types.snd = acc_nl' } =
578 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
579 (Nat.S (Nat.S Nat.O)))) result
583 (Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S
584 Nat.O)))) acc_nu') (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
585 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))))) cy_flag with
588 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) acc_nu'
589 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
590 Nat.O)))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
594 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S
595 (Nat.S (Nat.S (Nat.S Nat.O)))) nu acc_nl'
597 let s1 = Status.set_8051_sfr cm s0 Status.SFR_ACC_A new_acc in
598 Status.set_flags cm s1 cy_flag (Types.Some
599 (Status.get_ac_flag cm s1)) (Status.get_ov_flag cm s1)
604 match Status.get_cy_flag cm s with
606 let s0 = add_ticks1 s in
607 Status.set_program_counter cm s0 (addr_of addr s0)
608 | Bool.False -> let s0 = add_ticks2 s in s0)
611 match Bool.notb (Status.get_cy_flag cm s) with
613 let s0 = add_ticks1 s in
614 Status.set_program_counter cm s0 (addr_of addr s0)
615 | Bool.False -> let s0 = add_ticks2 s in s0)
616 | ASM.JB (addr1, addr2) ->
618 match Status.get_arg_1 cm s
619 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
620 (Nat.S (Nat.S Nat.O)) (Vector.VCons (Nat.O, ASM.Bit_addr,
621 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
622 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O), ASM.N_bit_addr,
623 (Vector.VCons (Nat.O, ASM.Carry, Vector.VEmpty)))))) addr1)
626 let s0 = add_ticks1 s in
627 Status.set_program_counter cm s0 (addr_of addr2 s0)
628 | Bool.False -> let s0 = add_ticks2 s in s0)
629 | ASM.JNB (addr1, addr2) ->
632 (Status.get_arg_1 cm s
633 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
634 (Nat.S (Nat.S Nat.O)) (Vector.VCons (Nat.O, ASM.Bit_addr,
635 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
636 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O),
637 ASM.N_bit_addr, (Vector.VCons (Nat.O, ASM.Carry,
638 Vector.VEmpty)))))) addr1) Bool.False) with
640 let s0 = add_ticks1 s in
641 Status.set_program_counter cm s0 (addr_of addr2 s0)
642 | Bool.False -> let s0 = add_ticks2 s in s0)
643 | ASM.JBC (addr1, addr2) ->
646 Status.set_arg_1 cm s
647 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
648 Nat.O) (Vector.VCons (Nat.O, ASM.Bit_addr, Vector.VEmpty))
649 (Vector.VCons ((Nat.S Nat.O), ASM.Bit_addr, (Vector.VCons
650 (Nat.O, ASM.Carry, Vector.VEmpty)))) addr1) Bool.False
652 (match Status.get_arg_1 cm s0
653 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
654 (Nat.S (Nat.S Nat.O)) (Vector.VCons (Nat.O, ASM.Bit_addr,
655 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
656 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O), ASM.N_bit_addr,
657 (Vector.VCons (Nat.O, ASM.Carry, Vector.VEmpty)))))) addr1)
660 let s1 = add_ticks1 s0 in
661 Status.set_program_counter cm s1 (addr_of addr2 s1)
662 | Bool.False -> let s1 = add_ticks2 s0 in s1))
665 match BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
667 (Status.get_8051_sfr cm s Status.SFR_ACC_A)
668 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
669 (Nat.S (Nat.S Nat.O))))))))) with
671 let s0 = add_ticks1 s in
672 Status.set_program_counter cm s0 (addr_of addr s0)
673 | Bool.False -> let s0 = add_ticks2 s in s0)
677 (BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
678 (Nat.S (Nat.S Nat.O))))))))
679 (Status.get_8051_sfr cm s Status.SFR_ACC_A)
680 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
681 (Nat.S (Nat.S Nat.O)))))))))) with
683 let s0 = add_ticks1 s in
684 Status.set_program_counter cm s0 (addr_of addr s0)
685 | Bool.False -> let s0 = add_ticks2 s in s0)
686 | ASM.CJNE (addr1, addr2) ->
690 let { Types.fst = addr10; Types.snd = addr2' } = l in
693 (Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
694 (Nat.S (Nat.S (Nat.S Nat.O))))))))
695 (Status.get_arg_8 cm s Bool.False
696 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
697 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
698 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
699 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
700 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
701 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
702 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
703 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
704 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
705 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
706 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
707 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
708 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
709 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S
710 (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
711 ASM.Ext_indirect, (Vector.VCons (Nat.O,
712 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
714 (Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
715 (Nat.S (Nat.S (Nat.S Nat.O))))))))
716 (Status.get_arg_8 cm s Bool.False
717 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
718 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
719 (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S Nat.O),
720 ASM.Direct, (Vector.VCons (Nat.O, ASM.Data,
721 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
722 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
723 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
724 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
725 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
726 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
727 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
728 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
729 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
730 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
731 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S
732 (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
733 ASM.Ext_indirect, (Vector.VCons (Nat.O,
734 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
738 (BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
739 (Nat.S (Nat.S Nat.O))))))))
740 (Status.get_arg_8 cm s Bool.False
741 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
742 Nat.O (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
743 (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
744 (Nat.O, ASM.Acc_a, Vector.VEmpty)) (Vector.VCons
745 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
746 (Nat.S (Nat.S Nat.O))))))))), ASM.Direct,
747 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
748 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
749 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
750 (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
751 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
752 (Nat.S Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S
753 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
754 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
755 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
756 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
757 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
758 ASM.Ext_indirect, (Vector.VCons (Nat.O,
759 ASM.Ext_indirect_dptr,
760 Vector.VEmpty)))))))))))))))))))) addr10))
761 (Status.get_arg_8 cm s Bool.False
762 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
763 (Nat.S Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
764 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))))
765 (Vector.VCons ((Nat.S Nat.O), ASM.Direct,
766 (Vector.VCons (Nat.O, ASM.Data, Vector.VEmpty))))
767 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
768 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
769 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
770 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
771 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S
772 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))),
773 ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
774 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
775 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
776 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S
777 (Nat.S (Nat.S Nat.O)))), ASM.Data, (Vector.VCons
778 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_dptr,
779 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_pc,
780 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
781 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
782 Vector.VEmpty)))))))))))))))))))) addr2'))) with
784 let s0 = add_ticks1 s in
785 let s1 = Status.set_program_counter cm s0 (addr_of addr2 s0) in
786 Status.set_flags cm s1 new_cy Types.None
787 (Status.get_ov_flag cm s1)
789 let s0 = add_ticks2 s in
790 Status.set_flags cm s0 new_cy Types.None
791 (Status.get_ov_flag cm s0))
793 let { Types.fst = addr10; Types.snd = addr2' } = r' in
796 (Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
797 (Nat.S (Nat.S (Nat.S Nat.O))))))))
798 (Status.get_arg_8 cm s Bool.False
799 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
800 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
801 (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S Nat.O),
802 ASM.Registr, (Vector.VCons (Nat.O, ASM.Indirect,
803 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
804 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
805 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
806 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
807 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
808 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
809 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
810 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
811 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
812 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
813 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S
814 (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
815 ASM.Ext_indirect, (Vector.VCons (Nat.O,
816 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
818 (Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
819 (Nat.S (Nat.S (Nat.S Nat.O))))))))
820 (Status.get_arg_8 cm s Bool.False
821 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
822 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
823 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Data,
824 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
825 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
826 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
827 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
828 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
829 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
830 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
831 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
832 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
833 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
834 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S
835 (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
836 ASM.Ext_indirect, (Vector.VCons (Nat.O,
837 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
841 (BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
842 (Nat.S (Nat.S Nat.O))))))))
843 (Status.get_arg_8 cm s Bool.False
844 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
845 (Nat.S Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
846 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))))
847 (Vector.VCons ((Nat.S Nat.O), ASM.Registr,
848 (Vector.VCons (Nat.O, ASM.Indirect, Vector.VEmpty))))
849 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
850 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
851 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
852 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
853 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S
854 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))),
855 ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
856 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
857 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
858 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S
859 (Nat.S (Nat.S Nat.O)))), ASM.Data, (Vector.VCons
860 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_dptr,
861 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_pc,
862 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
863 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
864 Vector.VEmpty)))))))))))))))))))) addr10))
865 (Status.get_arg_8 cm s Bool.False
866 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
867 Nat.O (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
868 (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
869 (Nat.O, ASM.Data, Vector.VEmpty)) (Vector.VCons
870 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
871 (Nat.S (Nat.S Nat.O))))))))), ASM.Direct,
872 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
873 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
874 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
875 (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
876 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
877 (Nat.S Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S
878 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
879 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
880 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
881 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
882 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
883 ASM.Ext_indirect, (Vector.VCons (Nat.O,
884 ASM.Ext_indirect_dptr,
885 Vector.VEmpty)))))))))))))))))))) addr2'))) with
887 let s0 = add_ticks1 s in
888 let s1 = Status.set_program_counter cm s0 (addr_of addr2 s0) in
889 Status.set_flags cm s1 new_cy Types.None
890 (Status.get_ov_flag cm s1)
892 let s0 = add_ticks2 s in
893 Status.set_flags cm s0 new_cy Types.None
894 (Status.get_ov_flag cm s0)))
895 | ASM.DJNZ (addr1, addr2) ->
897 let { Types.fst = result; Types.snd = flags } =
898 Arithmetic.sub_8_with_carry
899 (Status.get_arg_8 cm s Bool.True
900 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
901 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
902 (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S Nat.O),
903 ASM.Registr, (Vector.VCons (Nat.O, ASM.Direct,
904 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
905 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))), ASM.Direct,
906 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
907 (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect, (Vector.VCons
908 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
909 Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
910 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a, (Vector.VCons
911 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
912 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
913 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
914 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
915 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
916 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
917 Vector.VEmpty)))))))))))))))))))) addr1))
918 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
919 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
922 Status.set_arg_8 cm s
923 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S Nat.O)
924 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
925 (Vector.VCons ((Nat.S Nat.O), ASM.Registr, (Vector.VCons (Nat.O,
926 ASM.Direct, Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S
927 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct,
928 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
929 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
930 Nat.O)))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
931 Nat.O))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
932 ASM.Acc_b, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
933 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
934 Vector.VEmpty)))))))))))))) addr1) result
937 (BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
938 (Nat.S (Nat.S Nat.O)))))))) result
939 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
940 (Nat.S (Nat.S Nat.O)))))))))) with
942 let s1 = add_ticks1 s0 in
943 Status.set_program_counter cm s1 (addr_of addr2 s1)
944 | Bool.False -> let s1 = add_ticks2 s0 in s1))
947 let s0 = add_ticks1 s in
952 let { Types.fst = addr1; Types.snd = addr2 } = l' in
954 BitVector.conjunction_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
955 (Nat.S (Nat.S (Nat.S Nat.O))))))))
956 (Status.get_arg_8 cm s0 Bool.True
957 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
958 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
959 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
960 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S
961 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
962 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
963 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
964 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
965 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
966 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
967 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
968 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
969 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
970 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
971 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
972 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
973 ASM.Ext_indirect, (Vector.VCons (Nat.O,
974 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
976 (Status.get_arg_8 cm s0 Bool.True
977 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
978 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S
979 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))))
980 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
981 ASM.Registr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
982 ASM.Direct, (Vector.VCons ((Nat.S Nat.O), ASM.Indirect,
983 (Vector.VCons (Nat.O, ASM.Data, Vector.VEmpty))))))))
984 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
985 (Nat.S (Nat.S (Nat.S Nat.O))))))))), ASM.Direct,
986 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
987 (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect, (Vector.VCons
988 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
989 Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S
990 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
991 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
992 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S
993 (Nat.S (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S
994 (Nat.S (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons
995 ((Nat.S (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons
996 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
997 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1000 Status.set_arg_8 cm s0
1001 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1002 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
1003 (Vector.VCons (Nat.O, ASM.Acc_a, Vector.VEmpty))
1004 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1005 Nat.O)))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1006 (Nat.S (Nat.S Nat.O))))), ASM.Indirect, (Vector.VCons
1007 ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
1008 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
1009 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b,
1010 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
1011 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
1012 Vector.VEmpty)))))))))))))) addr1) and_val
1014 let { Types.fst = addr1; Types.snd = addr2 } = r in
1016 BitVector.conjunction_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1017 (Nat.S (Nat.S (Nat.S Nat.O))))))))
1018 (Status.get_arg_8 cm s0 Bool.True
1019 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1020 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1021 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Direct,
1022 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S
1023 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1024 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
1025 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
1026 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1027 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
1028 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1029 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
1030 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
1031 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
1032 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
1033 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1034 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
1035 ASM.Ext_indirect, (Vector.VCons (Nat.O,
1036 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1038 (Status.get_arg_8 cm s0 Bool.True
1039 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
1040 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1041 (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S
1042 Nat.O), ASM.Acc_a, (Vector.VCons (Nat.O, ASM.Data,
1043 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
1044 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1045 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
1046 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
1047 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1048 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
1049 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1050 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
1051 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
1052 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
1053 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
1054 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1055 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
1056 ASM.Ext_indirect, (Vector.VCons (Nat.O,
1057 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1060 Status.set_arg_8 cm s0
1061 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1062 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
1063 (Vector.VCons (Nat.O, ASM.Direct, Vector.VEmpty))
1064 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1065 Nat.O)))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1066 (Nat.S (Nat.S Nat.O))))), ASM.Indirect, (Vector.VCons
1067 ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
1068 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
1069 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b,
1070 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
1071 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
1072 Vector.VEmpty)))))))))))))) addr1) and_val)
1074 let { Types.fst = addr1; Types.snd = addr2 } = r in
1076 Bool.andb (Status.get_cy_flag cm s0)
1077 (Status.get_arg_1 cm s0
1078 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
1079 Nat.O) (Nat.S (Nat.S Nat.O)) (Vector.VCons ((Nat.S Nat.O),
1080 ASM.Bit_addr, (Vector.VCons (Nat.O, ASM.N_bit_addr,
1081 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1082 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O), ASM.N_bit_addr,
1083 (Vector.VCons (Nat.O, ASM.Carry, Vector.VEmpty)))))) addr2)
1086 Status.set_flags cm s0 and_val Types.None
1087 (Status.get_ov_flag cm s0)))
1090 let s0 = add_ticks1 s in
1095 let { Types.fst = addr1; Types.snd = addr2 } = l' in
1097 BitVector.inclusive_disjunction_bv (Nat.S (Nat.S (Nat.S (Nat.S
1098 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))
1099 (Status.get_arg_8 cm s0 Bool.True
1100 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1101 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1102 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
1103 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S
1104 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1105 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
1106 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
1107 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1108 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
1109 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1110 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
1111 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
1112 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
1113 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
1114 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1115 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
1116 ASM.Ext_indirect, (Vector.VCons (Nat.O,
1117 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1119 (Status.get_arg_8 cm s0 Bool.True
1120 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
1121 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S
1122 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))))
1123 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
1124 ASM.Registr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1125 ASM.Data, (Vector.VCons ((Nat.S Nat.O), ASM.Direct,
1126 (Vector.VCons (Nat.O, ASM.Indirect,
1127 Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S
1128 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1129 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
1130 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
1131 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1132 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
1133 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1134 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
1135 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
1136 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
1137 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
1138 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1139 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
1140 ASM.Ext_indirect, (Vector.VCons (Nat.O,
1141 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1144 Status.set_arg_8 cm s0
1145 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1146 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
1147 (Vector.VCons (Nat.O, ASM.Acc_a, Vector.VEmpty))
1148 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1149 Nat.O)))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1150 (Nat.S (Nat.S Nat.O))))), ASM.Indirect, (Vector.VCons
1151 ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
1152 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
1153 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b,
1154 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
1155 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
1156 Vector.VEmpty)))))))))))))) addr1) or_val
1158 let { Types.fst = addr1; Types.snd = addr2 } = r in
1160 BitVector.inclusive_disjunction_bv (Nat.S (Nat.S (Nat.S (Nat.S
1161 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))
1162 (Status.get_arg_8 cm s0 Bool.True
1163 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1164 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1165 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Direct,
1166 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S
1167 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1168 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
1169 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
1170 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1171 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
1172 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1173 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
1174 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
1175 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
1176 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
1177 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1178 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
1179 ASM.Ext_indirect, (Vector.VCons (Nat.O,
1180 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1182 (Status.get_arg_8 cm s0 Bool.True
1183 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
1184 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1185 (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S
1186 Nat.O), ASM.Acc_a, (Vector.VCons (Nat.O, ASM.Data,
1187 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
1188 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1189 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
1190 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
1191 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1192 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
1193 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1194 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
1195 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
1196 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
1197 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
1198 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1199 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
1200 ASM.Ext_indirect, (Vector.VCons (Nat.O,
1201 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1204 Status.set_arg_8 cm s0
1205 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1206 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
1207 (Vector.VCons (Nat.O, ASM.Direct, Vector.VEmpty))
1208 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1209 Nat.O)))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1210 (Nat.S (Nat.S Nat.O))))), ASM.Indirect, (Vector.VCons
1211 ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
1212 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
1213 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b,
1214 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
1215 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
1216 Vector.VEmpty)))))))))))))) addr1) or_val)
1218 let { Types.fst = addr1; Types.snd = addr2 } = r in
1220 Bool.orb (Status.get_cy_flag cm s0)
1221 (Status.get_arg_1 cm s0
1222 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
1223 Nat.O) (Nat.S (Nat.S Nat.O)) (Vector.VCons ((Nat.S Nat.O),
1224 ASM.Bit_addr, (Vector.VCons (Nat.O, ASM.N_bit_addr,
1225 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1226 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O), ASM.N_bit_addr,
1227 (Vector.VCons (Nat.O, ASM.Carry, Vector.VEmpty)))))) addr2)
1230 Status.set_flags cm s0 or_val Types.None (Status.get_ov_flag cm s0)))
1233 let s0 = add_ticks1 s in
1236 let { Types.fst = addr1; Types.snd = addr2 } = l' in
1238 BitVector.exclusive_disjunction_bv (Nat.S (Nat.S (Nat.S (Nat.S
1239 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))
1240 (Status.get_arg_8 cm s0 Bool.True
1241 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1242 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1243 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
1244 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1245 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
1246 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1247 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
1248 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1249 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
1250 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
1251 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1252 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1253 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
1254 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
1255 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
1256 ASM.Ext_indirect, (Vector.VCons (Nat.O,
1257 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1259 (Status.get_arg_8 cm s0 Bool.True
1260 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
1261 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1262 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
1263 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Data, (Vector.VCons
1264 ((Nat.S (Nat.S Nat.O)), ASM.Registr, (Vector.VCons ((Nat.S
1265 Nat.O), ASM.Direct, (Vector.VCons (Nat.O, ASM.Indirect,
1266 Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
1267 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
1268 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1269 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
1270 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1271 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
1272 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
1273 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1274 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1275 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
1276 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
1277 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
1278 ASM.Ext_indirect, (Vector.VCons (Nat.O,
1279 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1282 Status.set_arg_8 cm s0
1283 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
1284 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))) (Vector.VCons
1285 (Nat.O, ASM.Acc_a, Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S
1286 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct,
1287 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
1288 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1289 Nat.O)))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1290 Nat.O))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1291 ASM.Acc_b, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
1292 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
1293 Vector.VEmpty)))))))))))))) addr1) xor_val
1295 let { Types.fst = addr1; Types.snd = addr2 } = r in
1297 BitVector.exclusive_disjunction_bv (Nat.S (Nat.S (Nat.S (Nat.S
1298 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))
1299 (Status.get_arg_8 cm s0 Bool.True
1300 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1301 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1302 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Direct,
1303 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1304 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
1305 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1306 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
1307 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1308 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
1309 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
1310 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1311 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1312 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
1313 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
1314 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
1315 ASM.Ext_indirect, (Vector.VCons (Nat.O,
1316 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1318 (Status.get_arg_8 cm s0 Bool.True
1319 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
1320 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1321 (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S Nat.O),
1322 ASM.Acc_a, (Vector.VCons (Nat.O, ASM.Data,
1323 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
1324 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
1325 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1326 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
1327 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1328 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
1329 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
1330 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1331 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1332 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
1333 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
1334 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
1335 ASM.Ext_indirect, (Vector.VCons (Nat.O,
1336 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1339 Status.set_arg_8 cm s0
1340 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
1341 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))) (Vector.VCons
1342 (Nat.O, ASM.Direct, Vector.VEmpty)) (Vector.VCons ((Nat.S
1343 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct,
1344 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
1345 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1346 Nat.O)))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1347 Nat.O))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1348 ASM.Acc_b, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
1349 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
1350 Vector.VEmpty)))))))))))))) addr1) xor_val))
1353 (match ASM.subaddressing_modeel (Nat.S (Nat.S Nat.O)) (Vector.VCons
1354 ((Nat.S (Nat.S Nat.O)), ASM.Acc_a, (Vector.VCons ((Nat.S
1355 Nat.O), ASM.Carry, (Vector.VCons (Nat.O, ASM.Bit_addr,
1356 Vector.VEmpty)))))) addr with
1357 | ASM.DIRECT x -> (fun _ -> assert false (* absurd case *))
1358 | ASM.INDIRECT x -> (fun _ -> assert false (* absurd case *))
1359 | ASM.EXT_INDIRECT x -> (fun _ -> assert false (* absurd case *))
1360 | ASM.REGISTER x -> (fun _ -> assert false (* absurd case *))
1363 let s0 = add_ticks1 s in
1364 Status.set_arg_8 cm s0 ASM.ACC_A
1365 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1366 (Nat.S (Nat.S Nat.O))))))))))
1367 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
1368 | ASM.DPTR -> (fun _ -> assert false (* absurd case *))
1369 | ASM.DATA x -> (fun _ -> assert false (* absurd case *))
1370 | ASM.DATA16 x -> (fun _ -> assert false (* absurd case *))
1371 | ASM.ACC_DPTR -> (fun _ -> assert false (* absurd case *))
1372 | ASM.ACC_PC -> (fun _ -> assert false (* absurd case *))
1373 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
1374 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
1377 let s0 = add_ticks1 s in
1378 Status.set_arg_1 cm s0 ASM.CARRY Bool.False)
1381 let s0 = add_ticks1 s in
1382 Status.set_arg_1 cm s0 (ASM.BIT_ADDR b) Bool.False)
1383 | ASM.N_BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
1384 | ASM.RELATIVE x -> (fun _ -> assert false (* absurd case *))
1385 | ASM.ADDR11 x -> (fun _ -> assert false (* absurd case *))
1386 | ASM.ADDR16 x -> (fun _ -> assert false (* absurd case *))) __)
1389 (match ASM.subaddressing_modeel (Nat.S (Nat.S Nat.O)) (Vector.VCons
1390 ((Nat.S (Nat.S Nat.O)), ASM.Acc_a, (Vector.VCons ((Nat.S
1391 Nat.O), ASM.Carry, (Vector.VCons (Nat.O, ASM.Bit_addr,
1392 Vector.VEmpty)))))) addr with
1393 | ASM.DIRECT x -> (fun _ -> assert false (* absurd case *))
1394 | ASM.INDIRECT x -> (fun _ -> assert false (* absurd case *))
1395 | ASM.EXT_INDIRECT x -> (fun _ -> assert false (* absurd case *))
1396 | ASM.REGISTER x -> (fun _ -> assert false (* absurd case *))
1399 let s0 = add_ticks1 s in
1400 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
1402 BitVector.negation_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1403 (Nat.S (Nat.S Nat.O)))))))) old_acc
1405 Status.set_8051_sfr cm s0 Status.SFR_ACC_A new_acc)
1406 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
1407 | ASM.DPTR -> (fun _ -> assert false (* absurd case *))
1408 | ASM.DATA x -> (fun _ -> assert false (* absurd case *))
1409 | ASM.DATA16 x -> (fun _ -> assert false (* absurd case *))
1410 | ASM.ACC_DPTR -> (fun _ -> assert false (* absurd case *))
1411 | ASM.ACC_PC -> (fun _ -> assert false (* absurd case *))
1412 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
1413 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
1416 let s0 = add_ticks1 s in
1417 let old_cy_flag = Status.get_arg_1 cm s0 ASM.CARRY Bool.True in
1418 let new_cy_flag = Bool.notb old_cy_flag in
1419 Status.set_arg_1 cm s0 ASM.CARRY new_cy_flag)
1422 let s0 = add_ticks1 s in
1423 let old_bit = Status.get_arg_1 cm s0 (ASM.BIT_ADDR b) Bool.True
1425 let new_bit = Bool.notb old_bit in
1426 Status.set_arg_1 cm s0 (ASM.BIT_ADDR b) new_bit)
1427 | ASM.N_BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
1428 | ASM.RELATIVE x -> (fun _ -> assert false (* absurd case *))
1429 | ASM.ADDR11 x -> (fun _ -> assert false (* absurd case *))
1430 | ASM.ADDR16 x -> (fun _ -> assert false (* absurd case *))) __)
1433 let s0 = add_ticks1 s in
1434 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
1436 Vector.rotate_left (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1437 (Nat.S Nat.O)))))))) (Nat.S Nat.O) old_acc
1439 Status.set_8051_sfr cm s0 Status.SFR_ACC_A new_acc)
1442 let s0 = add_ticks1 s in
1443 let old_cy_flag = Status.get_cy_flag cm s0 in
1444 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
1446 Vector.get_index' Nat.O (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1447 (Nat.S Nat.O))))))) old_acc
1450 Vector.shift_left (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1451 (Nat.S Nat.O)))))))) (Nat.S Nat.O) old_acc old_cy_flag
1453 let s1 = Status.set_arg_1 cm s0 ASM.CARRY new_cy_flag in
1454 Status.set_8051_sfr cm s1 Status.SFR_ACC_A new_acc)
1457 let s0 = add_ticks1 s in
1458 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
1460 Vector.rotate_right (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1461 (Nat.S Nat.O)))))))) (Nat.S Nat.O) old_acc
1463 Status.set_8051_sfr cm s0 Status.SFR_ACC_A new_acc)
1466 let s0 = add_ticks1 s in
1467 let old_cy_flag = Status.get_cy_flag cm s0 in
1468 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
1470 Vector.get_index' (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1471 Nat.O))))))) Nat.O old_acc
1474 Vector.shift_right (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1475 Nat.O))))))) (Nat.S Nat.O) old_acc old_cy_flag
1477 let s1 = Status.set_arg_1 cm s0 ASM.CARRY new_cy_flag in
1478 Status.set_8051_sfr cm s1 Status.SFR_ACC_A new_acc)
1481 let s0 = add_ticks1 s in
1482 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
1483 let { Types.fst = nu; Types.snd = nl } =
1484 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
1485 (Nat.S (Nat.S Nat.O)))) old_acc
1488 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
1489 (Nat.S (Nat.S Nat.O)))) nl nu
1491 Status.set_8051_sfr cm s0 Status.SFR_ACC_A new_acc)
1494 let s0 = add_ticks1 s in
1504 | Types.Inl l'''' ->
1505 let { Types.fst = addr1; Types.snd = addr2 } = l'''' in
1506 Status.set_arg_8 cm s0
1507 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
1508 Nat.O (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1509 Nat.O)))))) (Vector.VCons (Nat.O, ASM.Acc_a,
1510 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S
1511 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct,
1512 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1513 Nat.O))))), ASM.Indirect, (Vector.VCons ((Nat.S
1514 (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
1515 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
1516 ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1517 ASM.Acc_b, (Vector.VCons ((Nat.S Nat.O),
1518 ASM.Ext_indirect, (Vector.VCons (Nat.O,
1519 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))
1521 (Status.get_arg_8 cm s0 Bool.False
1522 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
1523 (Nat.S (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S
1524 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1525 Nat.O))))))))) (Vector.VCons ((Nat.S (Nat.S
1526 (Nat.S Nat.O))), ASM.Registr, (Vector.VCons
1527 ((Nat.S (Nat.S Nat.O)), ASM.Direct, (Vector.VCons
1528 ((Nat.S Nat.O), ASM.Indirect, (Vector.VCons
1529 (Nat.O, ASM.Data, Vector.VEmpty))))))))
1530 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1531 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
1532 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1533 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
1534 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1535 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))),
1536 ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1537 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
1538 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1539 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S
1540 (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Data,
1541 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
1542 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
1543 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S
1544 Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
1545 ASM.Ext_indirect_dptr,
1546 Vector.VEmpty)))))))))))))))))))) addr2))
1547 | Types.Inr r'''' ->
1548 let { Types.fst = addr1; Types.snd = addr2 } = r'''' in
1549 Status.set_arg_8 cm s0
1550 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
1551 (Nat.S Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1552 (Nat.S Nat.O)))))) (Vector.VCons ((Nat.S Nat.O),
1553 ASM.Registr, (Vector.VCons (Nat.O, ASM.Indirect,
1554 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S
1555 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))),
1556 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1557 (Nat.S (Nat.S Nat.O))))), ASM.Indirect,
1558 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1559 Nat.O)))), ASM.Registr, (Vector.VCons ((Nat.S
1560 (Nat.S (Nat.S Nat.O))), ASM.Acc_a, (Vector.VCons
1561 ((Nat.S (Nat.S Nat.O)), ASM.Acc_b, (Vector.VCons
1562 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons
1563 (Nat.O, ASM.Ext_indirect_dptr,
1564 Vector.VEmpty)))))))))))))) addr1)
1565 (Status.get_arg_8 cm s0 Bool.False
1566 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
1567 (Nat.S (Nat.S Nat.O)) (Nat.S (Nat.S (Nat.S (Nat.S
1568 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))))
1569 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_a,
1570 (Vector.VCons ((Nat.S Nat.O), ASM.Direct,
1571 (Vector.VCons (Nat.O, ASM.Data,
1572 Vector.VEmpty)))))) (Vector.VCons ((Nat.S (Nat.S
1573 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1574 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S
1575 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1576 Nat.O)))))))), ASM.Indirect, (Vector.VCons
1577 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1578 Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
1579 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))),
1580 ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1581 (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
1582 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1583 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
1584 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons
1585 ((Nat.S (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons
1586 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons
1587 (Nat.O, ASM.Ext_indirect_dptr,
1588 Vector.VEmpty)))))))))))))))))))) addr2)))
1590 let { Types.fst = addr1; Types.snd = addr2 } = r''' in
1591 Status.set_arg_8 cm s0
1592 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
1593 Nat.O (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1594 Nat.O)))))) (Vector.VCons (Nat.O, ASM.Direct,
1595 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S
1596 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct,
1597 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1598 Nat.O))))), ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S
1599 (Nat.S (Nat.S Nat.O)))), ASM.Registr, (Vector.VCons
1600 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
1601 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b,
1602 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
1603 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
1604 Vector.VEmpty)))))))))))))) addr1)
1605 (Status.get_arg_8 cm s0 Bool.False
1606 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
1607 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
1608 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1609 Nat.O))))))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
1610 (Nat.S Nat.O)))), ASM.Acc_a, (Vector.VCons ((Nat.S
1611 (Nat.S (Nat.S Nat.O))), ASM.Registr, (Vector.VCons
1612 ((Nat.S (Nat.S Nat.O)), ASM.Direct, (Vector.VCons
1613 ((Nat.S Nat.O), ASM.Indirect, (Vector.VCons (Nat.O,
1614 ASM.Data, Vector.VEmpty)))))))))) (Vector.VCons
1615 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1616 (Nat.S (Nat.S Nat.O))))))))), ASM.Direct,
1617 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1618 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
1619 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1620 (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
1621 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1622 (Nat.S Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S
1623 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
1624 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1625 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
1626 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S
1627 (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S
1628 Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
1629 ASM.Ext_indirect_dptr,
1630 Vector.VEmpty)))))))))))))))))))) addr2)))
1632 let { Types.fst = addr1; Types.snd = addr2 } = r'' in
1633 Status.set_arg_16 cm s0
1634 (Status.get_arg_16 cm s0
1635 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1636 (Nat.S Nat.O) (Vector.VCons (Nat.O, ASM.Data16,
1637 Vector.VEmpty)) (Vector.VCons ((Nat.S Nat.O),
1638 ASM.Data16, (Vector.VCons (Nat.O, ASM.Acc_dptr,
1639 Vector.VEmpty)))) addr2)) addr1)
1641 let { Types.fst = addr1; Types.snd = addr2 } = r in
1642 Status.set_arg_1 cm s0
1643 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1644 (Nat.S Nat.O) (Vector.VCons (Nat.O, ASM.Carry,
1645 Vector.VEmpty)) (Vector.VCons ((Nat.S Nat.O), ASM.Bit_addr,
1646 (Vector.VCons (Nat.O, ASM.Carry, Vector.VEmpty)))) addr1)
1647 (Status.get_arg_1 cm s0
1648 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1649 (Nat.S (Nat.S Nat.O)) (Vector.VCons (Nat.O, ASM.Bit_addr,
1650 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1651 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O),
1652 ASM.N_bit_addr, (Vector.VCons (Nat.O, ASM.Carry,
1653 Vector.VEmpty)))))) addr2) Bool.False))
1655 let { Types.fst = addr1; Types.snd = addr2 } = r in
1656 Status.set_arg_1 cm s0
1657 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
1658 Nat.O) (Vector.VCons (Nat.O, ASM.Bit_addr, Vector.VEmpty))
1659 (Vector.VCons ((Nat.S Nat.O), ASM.Bit_addr, (Vector.VCons
1660 (Nat.O, ASM.Carry, Vector.VEmpty)))) addr1)
1661 (Status.get_arg_1 cm s0
1662 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1663 (Nat.S (Nat.S Nat.O)) (Vector.VCons (Nat.O, ASM.Carry,
1664 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1665 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O), ASM.N_bit_addr,
1666 (Vector.VCons (Nat.O, ASM.Carry, Vector.VEmpty)))))) addr2)
1670 let s0 = add_ticks1 s in
1673 let { Types.fst = addr1; Types.snd = addr2 } = l in
1674 Status.set_arg_8 cm s0
1675 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
1676 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))) (Vector.VCons
1677 (Nat.O, ASM.Acc_a, Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S
1678 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct,
1679 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
1680 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1681 Nat.O)))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1682 Nat.O))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1683 ASM.Acc_b, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
1684 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
1685 Vector.VEmpty)))))))))))))) addr1)
1686 (Status.get_arg_8 cm s0 Bool.False
1687 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
1688 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1689 (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S Nat.O),
1690 ASM.Ext_indirect, (Vector.VCons (Nat.O,
1691 ASM.Ext_indirect_dptr, Vector.VEmpty)))) (Vector.VCons
1692 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1693 (Nat.S Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S
1694 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1695 Nat.O)))))))), ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S
1696 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
1697 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1698 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1699 (Nat.S (Nat.S Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S
1700 (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Data, (Vector.VCons
1701 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons
1702 ((Nat.S (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S
1703 Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
1704 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1707 let { Types.fst = addr1; Types.snd = addr2 } = r in
1708 Status.set_arg_8 cm s0
1709 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S Nat.O)
1710 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
1711 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons
1712 (Nat.O, ASM.Ext_indirect_dptr, Vector.VEmpty)))) (Vector.VCons
1713 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))),
1714 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1715 Nat.O))))), ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1716 (Nat.S Nat.O)))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S
1717 (Nat.S Nat.O))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
1718 Nat.O)), ASM.Acc_b, (Vector.VCons ((Nat.S Nat.O),
1719 ASM.Ext_indirect, (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
1720 Vector.VEmpty)))))))))))))) addr1)
1721 (Status.get_arg_8 cm s0 Bool.False
1722 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1723 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1724 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
1725 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1726 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
1727 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1728 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
1729 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1730 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
1731 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
1732 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
1733 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1734 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1735 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1736 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
1737 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
1738 Vector.VEmpty)))))))))))))))))))) addr2))))
1741 let s0 = add_ticks1 s in
1742 Status.set_arg_1 cm s0
1743 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S Nat.O)
1744 (Nat.S Nat.O) (Vector.VCons ((Nat.S Nat.O), ASM.Carry,
1745 (Vector.VCons (Nat.O, ASM.Bit_addr, Vector.VEmpty))))
1746 (Vector.VCons ((Nat.S Nat.O), ASM.Bit_addr, (Vector.VCons (Nat.O,
1747 ASM.Carry, Vector.VEmpty)))) b) Bool.False)
1750 let s0 = add_ticks1 s in
1752 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1753 (Nat.S Nat.O)))))))) (Status.get_8051_sfr cm s0 Status.SFR_SP)
1754 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1755 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
1757 let s1 = Status.set_8051_sfr cm s0 Status.SFR_SP new_sp in
1758 Status.write_at_stack_pointer cm s1
1759 (Status.get_arg_8 cm s1 Bool.False
1760 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
1761 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1762 Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Direct, Vector.VEmpty))
1763 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1764 (Nat.S (Nat.S Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S
1765 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
1766 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1767 (Nat.S (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
1768 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
1769 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
1770 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
1771 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
1772 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_pc,
1773 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons
1774 (Nat.O, ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1778 let s0 = add_ticks1 s in
1779 let contents = Status.read_at_stack_pointer cm s0 in
1780 let { Types.fst = new_sp; Types.snd = flags } =
1781 Arithmetic.sub_8_with_carry
1782 (Status.get_8051_sfr cm s0 Status.SFR_SP)
1783 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1784 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
1786 let s1 = Status.set_8051_sfr cm s0 Status.SFR_SP new_sp in
1787 Status.set_arg_8 cm s1
1788 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
1789 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))) (Vector.VCons
1790 (Nat.O, ASM.Direct, Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S
1791 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct, (Vector.VCons
1792 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Indirect,
1793 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
1794 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
1795 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b, (Vector.VCons
1796 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
1797 ASM.Ext_indirect_dptr, Vector.VEmpty)))))))))))))) addr) contents)
1798 | ASM.XCH (addr1, addr2) ->
1800 let s0 = add_ticks1 s in
1802 Status.get_arg_8 cm s0 Bool.False
1803 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S (Nat.S
1804 Nat.O)) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1805 (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1806 ASM.Registr, (Vector.VCons ((Nat.S Nat.O), ASM.Direct,
1807 (Vector.VCons (Nat.O, ASM.Indirect, Vector.VEmpty))))))
1808 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1809 (Nat.S (Nat.S Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S
1810 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
1811 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1812 (Nat.S (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
1813 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
1814 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
1815 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
1816 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
1817 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_pc,
1818 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons
1819 (Nat.O, ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
1822 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
1823 let s1 = Status.set_8051_sfr cm s0 Status.SFR_ACC_A old_addr in
1824 Status.set_arg_8 cm s1
1825 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S (Nat.S
1826 Nat.O)) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
1827 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Registr, (Vector.VCons
1828 ((Nat.S Nat.O), ASM.Direct, (Vector.VCons (Nat.O, ASM.Indirect,
1829 Vector.VEmpty)))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1830 (Nat.S (Nat.S Nat.O)))))), ASM.Direct, (Vector.VCons ((Nat.S
1831 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Indirect,
1832 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
1833 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
1834 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b, (Vector.VCons
1835 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
1836 ASM.Ext_indirect_dptr, Vector.VEmpty)))))))))))))) addr2) old_acc)
1837 | ASM.XCHD (addr1, addr2) ->
1839 let s0 = add_ticks1 s in
1840 let { Types.fst = acc_nu; Types.snd = acc_nl } =
1841 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
1842 (Nat.S (Nat.S Nat.O))))
1843 (Status.get_8051_sfr cm s0 Status.SFR_ACC_A)
1845 let { Types.fst = arg_nu; Types.snd = arg_nl } =
1846 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
1847 (Nat.S (Nat.S Nat.O))))
1848 (Status.get_arg_8 cm s0 Bool.False
1849 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
1850 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1851 Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Indirect,
1852 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1853 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))), ASM.Direct,
1854 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1855 (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect, (Vector.VCons
1856 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1857 Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1858 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a, (Vector.VCons
1859 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
1860 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
1861 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
1862 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1863 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
1864 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
1865 Vector.VEmpty)))))))))))))))))))) addr2))
1868 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
1869 (Nat.S (Nat.S Nat.O)))) acc_nu arg_nl
1872 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
1873 (Nat.S (Nat.S Nat.O)))) arg_nu acc_nl
1875 let s1 = Status.set_8051_sfr cm s0 Status.SFR_ACC_A new_acc in
1876 Status.set_arg_8 cm s1
1877 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
1878 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))) (Vector.VCons
1879 (Nat.O, ASM.Indirect, Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S
1880 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct, (Vector.VCons
1881 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Indirect,
1882 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
1883 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
1884 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b, (Vector.VCons
1885 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
1886 ASM.Ext_indirect_dptr, Vector.VEmpty)))))))))))))) addr2) new_arg)
1889 let s0 = add_ticks1 s in
1890 let high_bits = Status.read_at_stack_pointer cm s0 in
1891 let { Types.fst = new_sp; Types.snd = flags } =
1892 Arithmetic.sub_8_with_carry
1893 (Status.get_8051_sfr cm s0 Status.SFR_SP)
1894 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1895 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
1897 let s1 = Status.set_8051_sfr cm s0 Status.SFR_SP new_sp in
1898 let low_bits = Status.read_at_stack_pointer cm s1 in
1899 let { Types.fst = new_sp0; Types.snd = flags0 } =
1900 Arithmetic.sub_8_with_carry
1901 (Status.get_8051_sfr cm s1 Status.SFR_SP)
1902 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1903 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
1905 let s2 = Status.set_8051_sfr cm s1 Status.SFR_SP new_sp0 in
1907 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1908 (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1909 (Nat.S (Nat.S Nat.O)))))))) high_bits low_bits
1911 Status.set_program_counter cm s2 new_pc)
1914 let s0 = add_ticks1 s in
1915 let high_bits = Status.read_at_stack_pointer cm s0 in
1916 let { Types.fst = new_sp; Types.snd = flags } =
1917 Arithmetic.sub_8_with_carry
1918 (Status.get_8051_sfr cm s0 Status.SFR_SP)
1919 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1920 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
1922 let s1 = Status.set_8051_sfr cm s0 Status.SFR_SP new_sp in
1923 let low_bits = Status.read_at_stack_pointer cm s1 in
1924 let { Types.fst = new_sp0; Types.snd = flags0 } =
1925 Arithmetic.sub_8_with_carry
1926 (Status.get_8051_sfr cm s1 Status.SFR_SP)
1927 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1928 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
1930 let s2 = Status.set_8051_sfr cm s1 Status.SFR_SP new_sp0 in
1932 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1933 (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1934 (Nat.S (Nat.S Nat.O)))))))) high_bits low_bits
1936 Status.set_program_counter cm s2 new_pc)
1937 | ASM.NOP -> (fun _ -> let s0 = add_ticks1 s in s0)
1938 | ASM.JMP acc_dptr ->
1940 let s0 = add_ticks1 s in
1942 Status.get_arg_16 cm s0
1943 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
1944 Nat.O) (Vector.VCons (Nat.O, ASM.Acc_dptr, Vector.VEmpty))
1945 (Vector.VCons ((Nat.S Nat.O), ASM.Data16, (Vector.VCons (Nat.O,
1946 ASM.Acc_dptr, Vector.VEmpty)))) acc_dptr)
1948 Status.set_program_counter cm s0 jmp_addr)) __
1950 (** val execute_1_preinstruction_ok' :
1951 (Nat.nat, Nat.nat) Types.prod -> 'a2 -> ('a1 -> 'a2 Status.preStatus ->
1952 BitVector.word) -> 'a1 ASM.preinstruction -> 'a2 Status.preStatus -> 'a2
1953 Status.preStatus Types.sig0 **)
1954 let execute_1_preinstruction_ok' ticks cm addr_of instr s =
1955 let add_ticks1 = fun s0 ->
1956 Status.set_clock cm s0 (Nat.plus ticks.Types.fst s0.Status.clock)
1958 let add_ticks2 = fun s0 ->
1959 Status.set_clock cm s0 (Nat.plus ticks.Types.snd s0.Status.clock)
1962 | ASM.ADD (addr1, addr2) ->
1964 let s0 = add_ticks1 s in
1965 (let { Types.fst = result; Types.snd = flags } =
1966 Arithmetic.add_8_with_carry
1967 (Status.get_arg_8 cm s0 Bool.False
1968 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
1969 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1970 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
1971 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1972 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
1973 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1974 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
1975 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1976 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
1977 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
1978 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
1979 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
1980 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
1981 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
1982 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
1983 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
1984 Vector.VEmpty)))))))))))))))))))) addr1))
1985 (Status.get_arg_8 cm s0 Bool.False
1986 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
1987 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1988 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
1989 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Registr, (Vector.VCons
1990 ((Nat.S (Nat.S Nat.O)), ASM.Direct, (Vector.VCons ((Nat.S
1991 Nat.O), ASM.Indirect, (Vector.VCons (Nat.O, ASM.Data,
1992 Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
1993 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
1994 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1995 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
1996 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
1997 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
1998 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
1999 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
2000 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2001 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2002 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2003 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
2004 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
2005 Vector.VEmpty)))))))))))))))))))) addr2)) Bool.False
2008 let cy_flag = Vector.get_index' Nat.O (Nat.S (Nat.S Nat.O)) flags in
2009 let ac_flag = Vector.get_index' (Nat.S Nat.O) (Nat.S Nat.O) flags in
2010 let ov_flag = Vector.get_index' (Nat.S (Nat.S Nat.O)) Nat.O flags in
2011 let s1 = Status.set_arg_8 cm s0 ASM.ACC_A result in
2012 Status.set_flags cm s1 cy_flag (Types.Some ac_flag) ov_flag)) __)
2013 | ASM.ADDC (addr1, addr2) ->
2015 let s0 = add_ticks1 s in
2016 let old_cy_flag = Status.get_cy_flag cm s0 in
2017 (let { Types.fst = result; Types.snd = flags } =
2018 Arithmetic.add_8_with_carry
2019 (Status.get_arg_8 cm s0 Bool.False
2020 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
2021 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2022 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
2023 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2024 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
2025 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2026 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
2027 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2028 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
2029 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
2030 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
2031 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2032 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2033 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2034 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
2035 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
2036 Vector.VEmpty)))))))))))))))))))) addr1))
2037 (Status.get_arg_8 cm s0 Bool.False
2038 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
2039 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2040 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
2041 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Registr, (Vector.VCons
2042 ((Nat.S (Nat.S Nat.O)), ASM.Direct, (Vector.VCons ((Nat.S
2043 Nat.O), ASM.Indirect, (Vector.VCons (Nat.O, ASM.Data,
2044 Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
2045 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
2046 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2047 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
2048 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2049 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
2050 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
2051 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
2052 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2053 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2054 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2055 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
2056 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
2057 Vector.VEmpty)))))))))))))))))))) addr2)) old_cy_flag
2060 let cy_flag = Vector.get_index' Nat.O (Nat.S (Nat.S Nat.O)) flags in
2061 let ac_flag = Vector.get_index' (Nat.S Nat.O) (Nat.S Nat.O) flags in
2062 let ov_flag = Vector.get_index' (Nat.S (Nat.S Nat.O)) Nat.O flags in
2063 let s1 = Status.set_arg_8 cm s0 ASM.ACC_A result in
2064 Status.set_flags cm s1 cy_flag (Types.Some ac_flag) ov_flag)) __)
2065 | ASM.SUBB (addr1, addr2) ->
2067 let s0 = add_ticks1 s in
2068 let old_cy_flag = Status.get_cy_flag cm s0 in
2069 (let { Types.fst = result; Types.snd = flags } =
2070 Arithmetic.sub_8_with_carry
2071 (Status.get_arg_8 cm s0 Bool.False
2072 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
2073 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2074 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
2075 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2076 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
2077 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2078 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
2079 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2080 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
2081 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
2082 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
2083 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2084 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2085 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2086 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
2087 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
2088 Vector.VEmpty)))))))))))))))))))) addr1))
2089 (Status.get_arg_8 cm s0 Bool.False
2090 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
2091 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2092 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
2093 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Registr, (Vector.VCons
2094 ((Nat.S (Nat.S Nat.O)), ASM.Direct, (Vector.VCons ((Nat.S
2095 Nat.O), ASM.Indirect, (Vector.VCons (Nat.O, ASM.Data,
2096 Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
2097 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
2098 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2099 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
2100 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2101 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
2102 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
2103 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
2104 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2105 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2106 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2107 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
2108 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
2109 Vector.VEmpty)))))))))))))))))))) addr2)) old_cy_flag
2112 let cy_flag = Vector.get_index' Nat.O (Nat.S (Nat.S Nat.O)) flags in
2113 let ac_flag = Vector.get_index' (Nat.S Nat.O) (Nat.S Nat.O) flags in
2114 let ov_flag = Vector.get_index' (Nat.S (Nat.S Nat.O)) Nat.O flags in
2115 let s1 = Status.set_arg_8 cm s0 ASM.ACC_A result in
2116 Status.set_flags cm s1 cy_flag (Types.Some ac_flag) ov_flag)) __)
2119 (match ASM.subaddressing_modeel (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))
2120 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
2121 ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
2122 ASM.Registr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2123 ASM.Direct, (Vector.VCons ((Nat.S Nat.O), ASM.Indirect,
2124 (Vector.VCons (Nat.O, ASM.Dptr, Vector.VEmpty)))))))))) addr with
2127 let s' = add_ticks1 s in
2129 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2130 (Nat.S Nat.O))))))))
2131 (Status.get_arg_8 cm s' Bool.True (ASM.DIRECT d))
2132 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
2133 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
2135 Status.set_arg_8 cm s' (ASM.DIRECT d) result)
2138 let s' = add_ticks1 s in
2140 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2141 (Nat.S Nat.O))))))))
2142 (Status.get_arg_8 cm s' Bool.True (ASM.INDIRECT i))
2143 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
2144 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
2146 Status.set_arg_8 cm s' (ASM.INDIRECT i) result)
2147 | ASM.EXT_INDIRECT x -> (fun _ -> assert false (* absurd case *))
2150 let s' = add_ticks1 s in
2152 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2153 (Nat.S Nat.O))))))))
2154 (Status.get_arg_8 cm s' Bool.True (ASM.REGISTER r))
2155 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
2156 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
2158 Status.set_arg_8 cm s' (ASM.REGISTER r) result)
2161 let s' = add_ticks1 s in
2163 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2164 (Nat.S Nat.O))))))))
2165 (Status.get_arg_8 cm s' Bool.True ASM.ACC_A)
2166 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
2167 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
2169 Status.set_arg_8 cm s' ASM.ACC_A result)
2170 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
2173 let s' = add_ticks1 s in
2174 (let { Types.fst = carry; Types.snd = bl } =
2175 Arithmetic.half_add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2176 (Nat.S (Nat.S Nat.O))))))))
2177 (Status.get_8051_sfr cm s' Status.SFR_DPL)
2178 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
2179 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
2182 (let { Types.fst = carry0; Types.snd = bu } =
2183 Arithmetic.full_add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2184 (Nat.S (Nat.S Nat.O))))))))
2185 (Status.get_8051_sfr cm s' Status.SFR_DPH)
2186 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2187 (Nat.S (Nat.S Nat.O))))))))) carry
2190 let s1 = Status.set_8051_sfr cm s' Status.SFR_DPL bl in
2191 Status.set_8051_sfr cm s1 Status.SFR_DPH bu)) __)) __)
2192 | ASM.DATA x -> (fun _ -> assert false (* absurd case *))
2193 | ASM.DATA16 x -> (fun _ -> assert false (* absurd case *))
2194 | ASM.ACC_DPTR -> (fun _ -> assert false (* absurd case *))
2195 | ASM.ACC_PC -> (fun _ -> assert false (* absurd case *))
2196 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
2197 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
2198 | ASM.CARRY -> (fun _ -> assert false (* absurd case *))
2199 | ASM.BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
2200 | ASM.N_BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
2201 | ASM.RELATIVE x -> (fun _ -> assert false (* absurd case *))
2202 | ASM.ADDR11 x -> (fun _ -> assert false (* absurd case *))
2203 | ASM.ADDR16 x -> (fun _ -> assert false (* absurd case *))) __ __)
2206 let s0 = add_ticks1 s in
2207 (let { Types.fst = result; Types.snd = flags } =
2208 Arithmetic.sub_8_with_carry
2209 (Status.get_arg_8 cm s0 Bool.True
2210 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
2211 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2212 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
2213 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a, (Vector.VCons
2214 ((Nat.S (Nat.S Nat.O)), ASM.Registr, (Vector.VCons ((Nat.S
2215 Nat.O), ASM.Direct, (Vector.VCons (Nat.O, ASM.Indirect,
2216 Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
2217 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
2218 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2219 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
2220 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2221 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
2222 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
2223 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
2224 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2225 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2226 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2227 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
2228 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
2229 Vector.VEmpty)))))))))))))))))))) addr))
2230 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2231 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
2234 Status.set_arg_8 cm s0
2235 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S (Nat.S
2236 (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2237 Nat.O)))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
2238 ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Registr,
2239 (Vector.VCons ((Nat.S Nat.O), ASM.Direct, (Vector.VCons (Nat.O,
2240 ASM.Indirect, Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S
2241 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct, (Vector.VCons
2242 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Indirect,
2243 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
2244 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
2245 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b, (Vector.VCons
2246 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
2247 ASM.Ext_indirect_dptr, Vector.VEmpty)))))))))))))) addr) result))
2249 | ASM.MUL (addr1, addr2) ->
2251 let s0 = add_ticks1 s in
2253 Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2254 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2255 (Status.get_8051_sfr cm s0 Status.SFR_ACC_A)
2258 Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2259 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2260 (Status.get_8051_sfr cm s0 Status.SFR_ACC_B)
2262 let product = Nat.times acc_a_nat acc_b_nat in
2264 Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2265 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2266 (Util.modulus product (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2267 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2268 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2269 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2270 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2271 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2272 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2273 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2274 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2275 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2276 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2277 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2278 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2279 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2280 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2281 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2282 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2283 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2284 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2285 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2286 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2287 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2288 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2289 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2290 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2291 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2292 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2293 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2294 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2295 Nat.O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
2298 Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2299 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2300 (Util.division product (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2301 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2302 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2303 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2304 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2305 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2306 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2307 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2308 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2309 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2310 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2311 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2312 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2313 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2314 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2315 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2316 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2317 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2318 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2319 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2320 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2321 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2322 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2323 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2324 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2325 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2326 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2327 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2328 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2329 Nat.O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
2331 let s1 = Status.set_8051_sfr cm s0 Status.SFR_ACC_A low in
2332 Status.set_8051_sfr cm s1 Status.SFR_ACC_B high)
2333 | ASM.DIV (addr1, addr2) ->
2335 let s0 = add_ticks1 s in
2337 Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2338 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2339 (Status.get_8051_sfr cm s0 Status.SFR_ACC_A)
2342 Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2343 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2344 (Status.get_8051_sfr cm s0 Status.SFR_ACC_B)
2346 (match acc_b_nat with
2348 (fun _ -> Status.set_flags cm s0 Bool.False Types.None Bool.True)
2352 Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2353 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2354 (Util.division acc_a_nat (Nat.S o))
2357 Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2358 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2359 (Util.modulus acc_a_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2360 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2361 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2362 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2363 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2364 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2365 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2366 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2367 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2368 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2369 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2370 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2371 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2372 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2373 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2374 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2375 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2376 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2377 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2378 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2379 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2380 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2381 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2382 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2383 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2384 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2385 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2386 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2387 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2388 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2389 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2390 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2391 (Nat.S (Nat.S (Nat.S
2392 Nat.O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
2394 let s1 = Status.set_8051_sfr cm s0 Status.SFR_ACC_A q in
2395 let s2 = Status.set_8051_sfr cm s1 Status.SFR_ACC_B r in
2396 Status.set_flags cm s2 Bool.False Types.None Bool.False)) __)
2399 let s0 = add_ticks1 s in
2400 (let { Types.fst = acc_nu; Types.snd = acc_nl } =
2401 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
2402 (Nat.S (Nat.S Nat.O))))
2403 (Status.get_8051_sfr cm s0 Status.SFR_ACC_A)
2408 (Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S
2409 Nat.O)))) acc_nl) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2410 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))))
2411 (Status.get_ac_flag cm s0) with
2414 (let { Types.fst = result; Types.snd = flags } =
2415 Arithmetic.add_8_with_carry
2416 (Status.get_8051_sfr cm s0 Status.SFR_ACC_A)
2417 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
2418 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S (Nat.S
2419 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))) Bool.False
2422 let cy_flag = Vector.get_index' Nat.O (Nat.S (Nat.S Nat.O)) flags
2424 (let { Types.fst = acc_nu'; Types.snd = acc_nl' } =
2425 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S
2426 (Nat.S (Nat.S (Nat.S Nat.O)))) result
2431 (Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S
2432 (Nat.S Nat.O)))) acc_nu') (Nat.S (Nat.S (Nat.S
2433 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2434 Nat.O)))))))))) cy_flag with
2438 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))
2440 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
2441 Nat.O)))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2445 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S
2446 (Nat.S (Nat.S (Nat.S Nat.O)))) nu acc_nl'
2448 let s1 = Status.set_8051_sfr cm s0 Status.SFR_ACC_A new_acc
2450 Status.set_flags cm s1 cy_flag (Types.Some
2451 (Status.get_ac_flag cm s1)) (Status.get_ov_flag cm s1))
2452 | Bool.False -> (fun _ -> s0)) __)) __)) __)
2453 | Bool.False -> (fun _ -> s0)) __)) __)
2456 (match Status.get_cy_flag cm s with
2459 let s1 = add_ticks1 s in
2460 Status.set_program_counter cm s1 (addr_of addr s1))
2461 | Bool.False -> (fun _ -> let s1 = add_ticks2 s in s1)) __)
2464 (match Bool.notb (Status.get_cy_flag cm s) with
2467 let s1 = add_ticks1 s in
2468 Status.set_program_counter cm s1 (addr_of addr s1))
2469 | Bool.False -> (fun _ -> let s1 = add_ticks2 s in s1)) __)
2470 | ASM.JB (addr1, addr2) ->
2472 (match Status.get_arg_1 cm s
2473 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
2474 (Nat.S (Nat.S Nat.O)) (Vector.VCons (Nat.O, ASM.Bit_addr,
2475 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2476 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O), ASM.N_bit_addr,
2477 (Vector.VCons (Nat.O, ASM.Carry, Vector.VEmpty)))))) addr1)
2481 let s1 = add_ticks1 s in
2482 Status.set_program_counter cm s1 (addr_of addr2 s1))
2483 | Bool.False -> (fun _ -> let s1 = add_ticks2 s in s1)) __)
2484 | ASM.JNB (addr1, addr2) ->
2487 (Status.get_arg_1 cm s
2488 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
2489 (Nat.S (Nat.S Nat.O)) (Vector.VCons (Nat.O, ASM.Bit_addr,
2490 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2491 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O),
2492 ASM.N_bit_addr, (Vector.VCons (Nat.O, ASM.Carry,
2493 Vector.VEmpty)))))) addr1) Bool.False) with
2496 let s1 = add_ticks1 s in
2497 Status.set_program_counter cm s1 (addr_of addr2 s1))
2498 | Bool.False -> (fun _ -> let s1 = add_ticks2 s in s1)) __)
2499 | ASM.JBC (addr1, addr2) ->
2502 Status.set_arg_1 cm s
2503 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
2504 Nat.O) (Vector.VCons (Nat.O, ASM.Bit_addr, Vector.VEmpty))
2505 (Vector.VCons ((Nat.S Nat.O), ASM.Bit_addr, (Vector.VCons
2506 (Nat.O, ASM.Carry, Vector.VEmpty)))) addr1) Bool.False
2508 (match Status.get_arg_1 cm s0
2509 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
2510 (Nat.S (Nat.S Nat.O)) (Vector.VCons (Nat.O, ASM.Bit_addr,
2511 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2512 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O), ASM.N_bit_addr,
2513 (Vector.VCons (Nat.O, ASM.Carry, Vector.VEmpty)))))) addr1)
2517 let s1 = add_ticks1 s0 in
2518 Status.set_program_counter cm s1 (addr_of addr2 s1))
2519 | Bool.False -> (fun _ -> let s1 = add_ticks2 s0 in s1)) __)
2522 (match BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2523 (Nat.S (Nat.S Nat.O))))))))
2524 (Status.get_8051_sfr cm s Status.SFR_ACC_A)
2525 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2526 (Nat.S (Nat.S Nat.O))))))))) with
2529 let s1 = add_ticks1 s in
2530 Status.set_program_counter cm s1 (addr_of addr s1))
2531 | Bool.False -> (fun _ -> let s1 = add_ticks2 s in s1)) __)
2535 (BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2536 (Nat.S (Nat.S Nat.O))))))))
2537 (Status.get_8051_sfr cm s Status.SFR_ACC_A)
2538 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2539 (Nat.S (Nat.S Nat.O)))))))))) with
2542 let s1 = add_ticks1 s in
2543 Status.set_program_counter cm s1 (addr_of addr s1))
2544 | Bool.False -> (fun _ -> let s1 = add_ticks2 s in s1)) __)
2545 | ASM.CJNE (addr1, addr2) ->
2549 let { Types.fst = addr10; Types.snd = addr2' } = l in
2552 (Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2553 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2554 (Status.get_arg_8 cm s Bool.False
2555 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
2556 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2557 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
2558 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2559 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
2560 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2561 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
2562 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2563 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
2564 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
2565 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2566 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2567 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
2568 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S
2569 (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
2570 ASM.Ext_indirect, (Vector.VCons (Nat.O,
2571 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
2573 (Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2574 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2575 (Status.get_arg_8 cm s Bool.False
2576 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
2577 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2578 (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S Nat.O),
2579 ASM.Direct, (Vector.VCons (Nat.O, ASM.Data,
2580 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
2581 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
2582 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2583 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
2584 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2585 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
2586 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
2587 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2588 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2589 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
2590 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S
2591 (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
2592 ASM.Ext_indirect, (Vector.VCons (Nat.O,
2593 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
2597 (BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2598 (Nat.S (Nat.S Nat.O))))))))
2599 (Status.get_arg_8 cm s Bool.False
2600 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
2601 Nat.O (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2602 (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
2603 (Nat.O, ASM.Acc_a, Vector.VEmpty)) (Vector.VCons
2604 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2605 (Nat.S (Nat.S Nat.O))))))))), ASM.Direct,
2606 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2607 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
2608 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2609 (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
2610 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2611 (Nat.S Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S
2612 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
2613 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
2614 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2615 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
2616 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
2617 ASM.Ext_indirect, (Vector.VCons (Nat.O,
2618 ASM.Ext_indirect_dptr,
2619 Vector.VEmpty)))))))))))))))))))) addr10))
2620 (Status.get_arg_8 cm s Bool.False
2621 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
2622 (Nat.S Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2623 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))))
2624 (Vector.VCons ((Nat.S Nat.O), ASM.Direct,
2625 (Vector.VCons (Nat.O, ASM.Data, Vector.VEmpty))))
2626 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2627 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
2628 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2629 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
2630 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2631 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))),
2632 ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2633 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
2634 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2635 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S
2636 (Nat.S (Nat.S Nat.O)))), ASM.Data, (Vector.VCons
2637 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_dptr,
2638 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_pc,
2639 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
2640 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
2641 Vector.VEmpty)))))))))))))))))))) addr2'))) with
2643 let s0 = add_ticks1 s in
2644 let s1 = Status.set_program_counter cm s0 (addr_of addr2 s0) in
2645 Status.set_flags cm s1 new_cy Types.None
2646 (Status.get_ov_flag cm s1)
2648 let s0 = add_ticks2 s in
2649 Status.set_flags cm s0 new_cy Types.None
2650 (Status.get_ov_flag cm s0))
2652 let { Types.fst = addr10; Types.snd = addr2' } = r' in
2655 (Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2656 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2657 (Status.get_arg_8 cm s Bool.False
2658 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
2659 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2660 (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S Nat.O),
2661 ASM.Registr, (Vector.VCons (Nat.O, ASM.Indirect,
2662 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
2663 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
2664 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2665 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
2666 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2667 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
2668 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
2669 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2670 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2671 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
2672 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S
2673 (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
2674 ASM.Ext_indirect, (Vector.VCons (Nat.O,
2675 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
2677 (Arithmetic.nat_of_bitvector (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2678 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2679 (Status.get_arg_8 cm s Bool.False
2680 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
2681 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2682 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Data,
2683 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2684 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
2685 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2686 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
2687 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2688 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
2689 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
2690 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2691 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2692 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
2693 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S
2694 (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
2695 ASM.Ext_indirect, (Vector.VCons (Nat.O,
2696 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
2700 (BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2701 (Nat.S (Nat.S Nat.O))))))))
2702 (Status.get_arg_8 cm s Bool.False
2703 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
2704 (Nat.S Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2705 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))))
2706 (Vector.VCons ((Nat.S Nat.O), ASM.Registr,
2707 (Vector.VCons (Nat.O, ASM.Indirect, Vector.VEmpty))))
2708 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2709 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
2710 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2711 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
2712 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2713 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))),
2714 ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2715 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
2716 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2717 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S
2718 (Nat.S (Nat.S Nat.O)))), ASM.Data, (Vector.VCons
2719 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_dptr,
2720 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_pc,
2721 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
2722 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
2723 Vector.VEmpty)))))))))))))))))))) addr10))
2724 (Status.get_arg_8 cm s Bool.False
2725 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
2726 Nat.O (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2727 (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
2728 (Nat.O, ASM.Data, Vector.VEmpty)) (Vector.VCons
2729 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2730 (Nat.S (Nat.S Nat.O))))))))), ASM.Direct,
2731 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2732 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
2733 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2734 (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
2735 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2736 (Nat.S Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S
2737 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
2738 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
2739 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2740 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
2741 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
2742 ASM.Ext_indirect, (Vector.VCons (Nat.O,
2743 ASM.Ext_indirect_dptr,
2744 Vector.VEmpty)))))))))))))))))))) addr2'))) with
2746 let s0 = add_ticks1 s in
2747 let s1 = Status.set_program_counter cm s0 (addr_of addr2 s0) in
2748 Status.set_flags cm s1 new_cy Types.None
2749 (Status.get_ov_flag cm s1)
2751 let s0 = add_ticks2 s in
2752 Status.set_flags cm s0 new_cy Types.None
2753 (Status.get_ov_flag cm s0)))
2754 | ASM.DJNZ (addr1, addr2) ->
2756 (let { Types.fst = result; Types.snd = flags } =
2757 Arithmetic.sub_8_with_carry
2758 (Status.get_arg_8 cm s Bool.True
2759 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
2760 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2761 (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S Nat.O),
2762 ASM.Registr, (Vector.VCons (Nat.O, ASM.Direct,
2763 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2764 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
2765 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2766 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
2767 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2768 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
2769 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
2770 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
2771 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2772 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2773 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2774 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
2775 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
2776 Vector.VEmpty)))))))))))))))))))) addr1))
2777 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2778 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
2782 Status.set_arg_8 cm s
2783 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S Nat.O)
2784 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
2785 (Vector.VCons ((Nat.S Nat.O), ASM.Registr, (Vector.VCons (Nat.O,
2786 ASM.Direct, Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S
2787 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct,
2788 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
2789 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2790 Nat.O)))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2791 Nat.O))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2792 ASM.Acc_b, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
2793 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
2794 Vector.VEmpty)))))))))))))) addr1) result
2797 (BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2798 (Nat.S (Nat.S Nat.O)))))))) result
2799 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2800 (Nat.S (Nat.S Nat.O)))))))))) with
2803 let s2 = add_ticks1 s1 in
2804 Status.set_program_counter cm s2 (addr_of addr2 s2))
2805 | Bool.False -> (fun _ -> let s2 = add_ticks2 s1 in s2)) __)) __)
2808 let s0 = add_ticks1 s in
2813 let { Types.fst = addr1; Types.snd = addr2 } = l' in
2815 BitVector.conjunction_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2816 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2817 (Status.get_arg_8 cm s0 Bool.True
2818 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
2819 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2820 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
2821 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S
2822 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2823 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
2824 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
2825 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2826 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
2827 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2828 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
2829 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
2830 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
2831 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
2832 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2833 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
2834 ASM.Ext_indirect, (Vector.VCons (Nat.O,
2835 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
2837 (Status.get_arg_8 cm s0 Bool.True
2838 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
2839 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S
2840 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))))
2841 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
2842 ASM.Registr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2843 ASM.Direct, (Vector.VCons ((Nat.S Nat.O), ASM.Indirect,
2844 (Vector.VCons (Nat.O, ASM.Data, Vector.VEmpty))))))))
2845 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2846 (Nat.S (Nat.S (Nat.S Nat.O))))))))), ASM.Direct,
2847 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2848 (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect, (Vector.VCons
2849 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2850 Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S
2851 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
2852 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2853 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S
2854 (Nat.S (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S
2855 (Nat.S (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons
2856 ((Nat.S (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons
2857 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
2858 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
2861 Status.set_arg_8 cm s0
2862 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
2863 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
2864 (Vector.VCons (Nat.O, ASM.Acc_a, Vector.VEmpty))
2865 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2866 Nat.O)))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2867 (Nat.S (Nat.S Nat.O))))), ASM.Indirect, (Vector.VCons
2868 ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
2869 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
2870 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b,
2871 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
2872 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
2873 Vector.VEmpty)))))))))))))) addr1) and_val
2875 let { Types.fst = addr1; Types.snd = addr2 } = r in
2877 BitVector.conjunction_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2878 (Nat.S (Nat.S (Nat.S Nat.O))))))))
2879 (Status.get_arg_8 cm s0 Bool.True
2880 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
2881 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2882 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Direct,
2883 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S
2884 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2885 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
2886 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
2887 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2888 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
2889 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2890 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
2891 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
2892 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
2893 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
2894 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2895 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
2896 ASM.Ext_indirect, (Vector.VCons (Nat.O,
2897 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
2899 (Status.get_arg_8 cm s0 Bool.True
2900 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
2901 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2902 (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S
2903 Nat.O), ASM.Acc_a, (Vector.VCons (Nat.O, ASM.Data,
2904 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
2905 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2906 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
2907 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
2908 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2909 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
2910 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2911 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
2912 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
2913 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
2914 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
2915 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2916 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
2917 ASM.Ext_indirect, (Vector.VCons (Nat.O,
2918 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
2921 Status.set_arg_8 cm s0
2922 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
2923 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
2924 (Vector.VCons (Nat.O, ASM.Direct, Vector.VEmpty))
2925 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2926 Nat.O)))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
2927 (Nat.S (Nat.S Nat.O))))), ASM.Indirect, (Vector.VCons
2928 ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
2929 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
2930 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b,
2931 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
2932 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
2933 Vector.VEmpty)))))))))))))) addr1) and_val)
2935 let { Types.fst = addr1; Types.snd = addr2 } = r in
2937 Bool.andb (Status.get_cy_flag cm s0)
2938 (Status.get_arg_1 cm s0
2939 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
2940 Nat.O) (Nat.S (Nat.S Nat.O)) (Vector.VCons ((Nat.S Nat.O),
2941 ASM.Bit_addr, (Vector.VCons (Nat.O, ASM.N_bit_addr,
2942 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2943 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O), ASM.N_bit_addr,
2944 (Vector.VCons (Nat.O, ASM.Carry, Vector.VEmpty)))))) addr2)
2947 Status.set_flags cm s0 and_val Types.None
2948 (Status.get_ov_flag cm s0)))
2951 let s0 = add_ticks1 s in
2956 let { Types.fst = addr1; Types.snd = addr2 } = l' in
2958 BitVector.inclusive_disjunction_bv (Nat.S (Nat.S (Nat.S (Nat.S
2959 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))
2960 (Status.get_arg_8 cm s0 Bool.True
2961 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
2962 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2963 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
2964 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S
2965 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2966 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
2967 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
2968 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2969 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
2970 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2971 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
2972 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
2973 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
2974 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
2975 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2976 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
2977 ASM.Ext_indirect, (Vector.VCons (Nat.O,
2978 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
2980 (Status.get_arg_8 cm s0 Bool.True
2981 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
2982 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S
2983 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))))
2984 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
2985 ASM.Registr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
2986 ASM.Data, (Vector.VCons ((Nat.S Nat.O), ASM.Direct,
2987 (Vector.VCons (Nat.O, ASM.Indirect,
2988 Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S
2989 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2990 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
2991 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
2992 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
2993 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
2994 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
2995 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
2996 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
2997 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
2998 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
2999 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
3000 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
3001 ASM.Ext_indirect, (Vector.VCons (Nat.O,
3002 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
3005 Status.set_arg_8 cm s0
3006 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
3007 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
3008 (Vector.VCons (Nat.O, ASM.Acc_a, Vector.VEmpty))
3009 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3010 Nat.O)))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3011 (Nat.S (Nat.S Nat.O))))), ASM.Indirect, (Vector.VCons
3012 ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
3013 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
3014 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b,
3015 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
3016 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
3017 Vector.VEmpty)))))))))))))) addr1) or_val
3019 let { Types.fst = addr1; Types.snd = addr2 } = r in
3021 BitVector.inclusive_disjunction_bv (Nat.S (Nat.S (Nat.S (Nat.S
3022 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))
3023 (Status.get_arg_8 cm s0 Bool.True
3024 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
3025 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3026 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Direct,
3027 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S
3028 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3029 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
3030 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
3031 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3032 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
3033 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3034 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
3035 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
3036 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
3037 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
3038 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
3039 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
3040 ASM.Ext_indirect, (Vector.VCons (Nat.O,
3041 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
3043 (Status.get_arg_8 cm s0 Bool.True
3044 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
3045 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3046 (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S
3047 Nat.O), ASM.Acc_a, (Vector.VCons (Nat.O, ASM.Data,
3048 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
3049 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3050 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S
3051 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
3052 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3053 (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
3054 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3055 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
3056 (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
3057 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
3058 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
3059 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
3060 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
3061 ASM.Ext_indirect, (Vector.VCons (Nat.O,
3062 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
3065 Status.set_arg_8 cm s0
3066 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
3067 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
3068 (Vector.VCons (Nat.O, ASM.Direct, Vector.VEmpty))
3069 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3070 Nat.O)))))), ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3071 (Nat.S (Nat.S Nat.O))))), ASM.Indirect, (Vector.VCons
3072 ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
3073 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
3074 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b,
3075 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
3076 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
3077 Vector.VEmpty)))))))))))))) addr1) or_val)
3079 let { Types.fst = addr1; Types.snd = addr2 } = r in
3081 Bool.orb (Status.get_cy_flag cm s0)
3082 (Status.get_arg_1 cm s0
3083 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
3084 Nat.O) (Nat.S (Nat.S Nat.O)) (Vector.VCons ((Nat.S Nat.O),
3085 ASM.Bit_addr, (Vector.VCons (Nat.O, ASM.N_bit_addr,
3086 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
3087 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O), ASM.N_bit_addr,
3088 (Vector.VCons (Nat.O, ASM.Carry, Vector.VEmpty)))))) addr2)
3091 Status.set_flags cm s0 or_val Types.None (Status.get_ov_flag cm s0)))
3094 let s0 = add_ticks1 s in
3097 let { Types.fst = addr1; Types.snd = addr2 } = l' in
3099 BitVector.exclusive_disjunction_bv (Nat.S (Nat.S (Nat.S (Nat.S
3100 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))
3101 (Status.get_arg_8 cm s0 Bool.True
3102 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
3103 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3104 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
3105 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3106 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
3107 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3108 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
3109 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3110 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
3111 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
3112 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3113 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3114 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
3115 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
3116 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
3117 ASM.Ext_indirect, (Vector.VCons (Nat.O,
3118 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
3120 (Status.get_arg_8 cm s0 Bool.True
3121 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
3122 (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3123 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons
3124 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Data, (Vector.VCons
3125 ((Nat.S (Nat.S Nat.O)), ASM.Registr, (Vector.VCons ((Nat.S
3126 Nat.O), ASM.Direct, (Vector.VCons (Nat.O, ASM.Indirect,
3127 Vector.VEmpty)))))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
3128 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
3129 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3130 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
3131 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3132 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
3133 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
3134 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3135 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3136 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
3137 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
3138 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
3139 ASM.Ext_indirect, (Vector.VCons (Nat.O,
3140 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
3143 Status.set_arg_8 cm s0
3144 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
3145 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))) (Vector.VCons
3146 (Nat.O, ASM.Acc_a, Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S
3147 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct,
3148 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
3149 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3150 Nat.O)))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3151 Nat.O))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
3152 ASM.Acc_b, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
3153 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
3154 Vector.VEmpty)))))))))))))) addr1) xor_val
3156 let { Types.fst = addr1; Types.snd = addr2 } = r in
3158 BitVector.exclusive_disjunction_bv (Nat.S (Nat.S (Nat.S (Nat.S
3159 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))
3160 (Status.get_arg_8 cm s0 Bool.True
3161 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
3162 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3163 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Direct,
3164 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3165 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
3166 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3167 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
3168 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3169 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
3170 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
3171 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3172 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3173 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
3174 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
3175 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
3176 ASM.Ext_indirect, (Vector.VCons (Nat.O,
3177 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
3179 (Status.get_arg_8 cm s0 Bool.True
3180 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
3181 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3182 (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S Nat.O),
3183 ASM.Acc_a, (Vector.VCons (Nat.O, ASM.Data,
3184 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
3185 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
3186 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3187 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
3188 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3189 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
3190 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
3191 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3192 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3193 (Nat.S Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
3194 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
3195 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O),
3196 ASM.Ext_indirect, (Vector.VCons (Nat.O,
3197 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
3200 Status.set_arg_8 cm s0
3201 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
3202 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))) (Vector.VCons
3203 (Nat.O, ASM.Direct, Vector.VEmpty)) (Vector.VCons ((Nat.S
3204 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct,
3205 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
3206 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3207 Nat.O)))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3208 Nat.O))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
3209 ASM.Acc_b, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
3210 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
3211 Vector.VEmpty)))))))))))))) addr1) xor_val))
3214 (match ASM.subaddressing_modeel (Nat.S (Nat.S Nat.O)) (Vector.VCons
3215 ((Nat.S (Nat.S Nat.O)), ASM.Acc_a, (Vector.VCons ((Nat.S
3216 Nat.O), ASM.Carry, (Vector.VCons (Nat.O, ASM.Bit_addr,
3217 Vector.VEmpty)))))) addr with
3218 | ASM.DIRECT x -> (fun _ -> assert false (* absurd case *))
3219 | ASM.INDIRECT x -> (fun _ -> assert false (* absurd case *))
3220 | ASM.EXT_INDIRECT x -> (fun _ -> assert false (* absurd case *))
3221 | ASM.REGISTER x -> (fun _ -> assert false (* absurd case *))
3224 let s0 = add_ticks1 s in
3225 Status.set_arg_8 cm s0 ASM.ACC_A
3226 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3227 (Nat.S (Nat.S Nat.O))))))))))
3228 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
3229 | ASM.DPTR -> (fun _ -> assert false (* absurd case *))
3230 | ASM.DATA x -> (fun _ -> assert false (* absurd case *))
3231 | ASM.DATA16 x -> (fun _ -> assert false (* absurd case *))
3232 | ASM.ACC_DPTR -> (fun _ -> assert false (* absurd case *))
3233 | ASM.ACC_PC -> (fun _ -> assert false (* absurd case *))
3234 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3235 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3238 let s0 = add_ticks1 s in
3239 Status.set_arg_1 cm s0 ASM.CARRY Bool.False)
3242 let s0 = add_ticks1 s in
3243 Status.set_arg_1 cm s0 (ASM.BIT_ADDR b) Bool.False)
3244 | ASM.N_BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
3245 | ASM.RELATIVE x -> (fun _ -> assert false (* absurd case *))
3246 | ASM.ADDR11 x -> (fun _ -> assert false (* absurd case *))
3247 | ASM.ADDR16 x -> (fun _ -> assert false (* absurd case *))) __ __)
3250 (match ASM.subaddressing_modeel (Nat.S (Nat.S Nat.O)) (Vector.VCons
3251 ((Nat.S (Nat.S Nat.O)), ASM.Acc_a, (Vector.VCons ((Nat.S
3252 Nat.O), ASM.Carry, (Vector.VCons (Nat.O, ASM.Bit_addr,
3253 Vector.VEmpty)))))) addr with
3254 | ASM.DIRECT x -> (fun _ -> assert false (* absurd case *))
3255 | ASM.INDIRECT x -> (fun _ -> assert false (* absurd case *))
3256 | ASM.EXT_INDIRECT x -> (fun _ -> assert false (* absurd case *))
3257 | ASM.REGISTER x -> (fun _ -> assert false (* absurd case *))
3260 let s0 = add_ticks1 s in
3261 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
3263 BitVector.negation_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3264 (Nat.S (Nat.S Nat.O)))))))) old_acc
3266 Status.set_8051_sfr cm s0 Status.SFR_ACC_A new_acc)
3267 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
3268 | ASM.DPTR -> (fun _ -> assert false (* absurd case *))
3269 | ASM.DATA x -> (fun _ -> assert false (* absurd case *))
3270 | ASM.DATA16 x -> (fun _ -> assert false (* absurd case *))
3271 | ASM.ACC_DPTR -> (fun _ -> assert false (* absurd case *))
3272 | ASM.ACC_PC -> (fun _ -> assert false (* absurd case *))
3273 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3274 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3277 let s0 = add_ticks1 s in
3278 let old_cy_flag = Status.get_arg_1 cm s0 ASM.CARRY Bool.True in
3279 let new_cy_flag = Bool.notb old_cy_flag in
3280 Status.set_arg_1 cm s0 ASM.CARRY new_cy_flag)
3283 let s0 = add_ticks1 s in
3284 let old_bit = Status.get_arg_1 cm s0 (ASM.BIT_ADDR b) Bool.True
3286 let new_bit = Bool.notb old_bit in
3287 Status.set_arg_1 cm s0 (ASM.BIT_ADDR b) new_bit)
3288 | ASM.N_BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
3289 | ASM.RELATIVE x -> (fun _ -> assert false (* absurd case *))
3290 | ASM.ADDR11 x -> (fun _ -> assert false (* absurd case *))
3291 | ASM.ADDR16 x -> (fun _ -> assert false (* absurd case *))) __ __)
3294 let s0 = add_ticks1 s in
3295 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
3297 Vector.rotate_left (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3298 (Nat.S Nat.O)))))))) (Nat.S Nat.O) old_acc
3300 Status.set_8051_sfr cm s0 Status.SFR_ACC_A new_acc)
3303 let s0 = add_ticks1 s in
3304 let old_cy_flag = Status.get_cy_flag cm s0 in
3305 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
3307 Vector.get_index' Nat.O (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3308 (Nat.S Nat.O))))))) old_acc
3311 Vector.shift_left (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3312 (Nat.S Nat.O)))))))) (Nat.S Nat.O) old_acc old_cy_flag
3314 let s1 = Status.set_arg_1 cm s0 ASM.CARRY new_cy_flag in
3315 Status.set_8051_sfr cm s1 Status.SFR_ACC_A new_acc)
3318 let s0 = add_ticks1 s in
3319 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
3321 Vector.rotate_right (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3322 (Nat.S Nat.O)))))))) (Nat.S Nat.O) old_acc
3324 Status.set_8051_sfr cm s0 Status.SFR_ACC_A new_acc)
3327 let s0 = add_ticks1 s in
3328 let old_cy_flag = Status.get_cy_flag cm s0 in
3329 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
3331 Vector.get_index' (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3332 Nat.O))))))) Nat.O old_acc
3335 Vector.shift_right (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3336 Nat.O))))))) (Nat.S Nat.O) old_acc old_cy_flag
3338 let s1 = Status.set_arg_1 cm s0 ASM.CARRY new_cy_flag in
3339 Status.set_8051_sfr cm s1 Status.SFR_ACC_A new_acc)
3342 let s0 = add_ticks1 s in
3343 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
3344 (let { Types.fst = nu; Types.snd = nl } =
3345 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
3346 (Nat.S (Nat.S Nat.O)))) old_acc
3350 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
3351 (Nat.S (Nat.S Nat.O)))) nl nu
3353 Status.set_8051_sfr cm s0 Status.SFR_ACC_A new_acc)) __)
3356 let s0 = add_ticks1 s in
3366 | Types.Inl l'''' ->
3367 let { Types.fst = addr1; Types.snd = addr2 } = l'''' in
3368 Status.set_arg_8 cm s0
3369 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
3370 Nat.O (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3371 Nat.O)))))) (Vector.VCons (Nat.O, ASM.Acc_a,
3372 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S
3373 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct,
3374 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3375 Nat.O))))), ASM.Indirect, (Vector.VCons ((Nat.S
3376 (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
3377 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
3378 ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
3379 ASM.Acc_b, (Vector.VCons ((Nat.S Nat.O),
3380 ASM.Ext_indirect, (Vector.VCons (Nat.O,
3381 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))
3383 (Status.get_arg_8 cm s0 Bool.False
3384 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
3385 (Nat.S (Nat.S (Nat.S Nat.O))) (Nat.S (Nat.S
3386 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3387 Nat.O))))))))) (Vector.VCons ((Nat.S (Nat.S
3388 (Nat.S Nat.O))), ASM.Registr, (Vector.VCons
3389 ((Nat.S (Nat.S Nat.O)), ASM.Direct, (Vector.VCons
3390 ((Nat.S Nat.O), ASM.Indirect, (Vector.VCons
3391 (Nat.O, ASM.Data, Vector.VEmpty))))))))
3392 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3393 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
3394 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3395 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
3396 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3397 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))),
3398 ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3399 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
3400 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3401 Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S
3402 (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Data,
3403 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
3404 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S
3405 Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S
3406 Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
3407 ASM.Ext_indirect_dptr,
3408 Vector.VEmpty)))))))))))))))))))) addr2))
3409 | Types.Inr r'''' ->
3410 let { Types.fst = addr1; Types.snd = addr2 } = r'''' in
3411 Status.set_arg_8 cm s0
3412 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
3413 (Nat.S Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3414 (Nat.S Nat.O)))))) (Vector.VCons ((Nat.S Nat.O),
3415 ASM.Registr, (Vector.VCons (Nat.O, ASM.Indirect,
3416 Vector.VEmpty)))) (Vector.VCons ((Nat.S (Nat.S
3417 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))),
3418 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3419 (Nat.S (Nat.S Nat.O))))), ASM.Indirect,
3420 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3421 Nat.O)))), ASM.Registr, (Vector.VCons ((Nat.S
3422 (Nat.S (Nat.S Nat.O))), ASM.Acc_a, (Vector.VCons
3423 ((Nat.S (Nat.S Nat.O)), ASM.Acc_b, (Vector.VCons
3424 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons
3425 (Nat.O, ASM.Ext_indirect_dptr,
3426 Vector.VEmpty)))))))))))))) addr1)
3427 (Status.get_arg_8 cm s0 Bool.False
3428 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
3429 (Nat.S (Nat.S Nat.O)) (Nat.S (Nat.S (Nat.S (Nat.S
3430 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))))
3431 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_a,
3432 (Vector.VCons ((Nat.S Nat.O), ASM.Direct,
3433 (Vector.VCons (Nat.O, ASM.Data,
3434 Vector.VEmpty)))))) (Vector.VCons ((Nat.S (Nat.S
3435 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3436 Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S
3437 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3438 Nat.O)))))))), ASM.Indirect, (Vector.VCons
3439 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3440 Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
3441 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))),
3442 ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3443 (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
3444 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3445 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
3446 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons
3447 ((Nat.S (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons
3448 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons
3449 (Nat.O, ASM.Ext_indirect_dptr,
3450 Vector.VEmpty)))))))))))))))))))) addr2)))
3452 let { Types.fst = addr1; Types.snd = addr2 } = r''' in
3453 Status.set_arg_8 cm s0
3454 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
3455 Nat.O (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3456 Nat.O)))))) (Vector.VCons (Nat.O, ASM.Direct,
3457 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S
3458 (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct,
3459 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3460 Nat.O))))), ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S
3461 (Nat.S (Nat.S Nat.O)))), ASM.Registr, (Vector.VCons
3462 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
3463 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b,
3464 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
3465 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
3466 Vector.VEmpty)))))))))))))) addr1)
3467 (Status.get_arg_8 cm s0 Bool.False
3468 (ASM.subaddressing_modeel__o__mk_subaddressing_mode
3469 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
3470 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3471 Nat.O))))))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S
3472 (Nat.S Nat.O)))), ASM.Acc_a, (Vector.VCons ((Nat.S
3473 (Nat.S (Nat.S Nat.O))), ASM.Registr, (Vector.VCons
3474 ((Nat.S (Nat.S Nat.O)), ASM.Direct, (Vector.VCons
3475 ((Nat.S Nat.O), ASM.Indirect, (Vector.VCons (Nat.O,
3476 ASM.Data, Vector.VEmpty)))))))))) (Vector.VCons
3477 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3478 (Nat.S (Nat.S Nat.O))))))))), ASM.Direct,
3479 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3480 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
3481 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3482 (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
3483 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3484 (Nat.S Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S
3485 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Acc_b,
3486 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3487 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S
3488 (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S
3489 (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S
3490 Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
3491 ASM.Ext_indirect_dptr,
3492 Vector.VEmpty)))))))))))))))))))) addr2)))
3494 let { Types.fst = addr1; Types.snd = addr2 } = r'' in
3495 Status.set_arg_16 cm s0
3496 (Status.get_arg_16 cm s0
3497 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
3498 (Nat.S Nat.O) (Vector.VCons (Nat.O, ASM.Data16,
3499 Vector.VEmpty)) (Vector.VCons ((Nat.S Nat.O),
3500 ASM.Data16, (Vector.VCons (Nat.O, ASM.Acc_dptr,
3501 Vector.VEmpty)))) addr2)) addr1)
3503 let { Types.fst = addr1; Types.snd = addr2 } = r in
3504 Status.set_arg_1 cm s0
3505 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
3506 (Nat.S Nat.O) (Vector.VCons (Nat.O, ASM.Carry,
3507 Vector.VEmpty)) (Vector.VCons ((Nat.S Nat.O), ASM.Bit_addr,
3508 (Vector.VCons (Nat.O, ASM.Carry, Vector.VEmpty)))) addr1)
3509 (Status.get_arg_1 cm s0
3510 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
3511 (Nat.S (Nat.S Nat.O)) (Vector.VCons (Nat.O, ASM.Bit_addr,
3512 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
3513 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O),
3514 ASM.N_bit_addr, (Vector.VCons (Nat.O, ASM.Carry,
3515 Vector.VEmpty)))))) addr2) Bool.False))
3517 let { Types.fst = addr1; Types.snd = addr2 } = r in
3518 Status.set_arg_1 cm s0
3519 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
3520 Nat.O) (Vector.VCons (Nat.O, ASM.Bit_addr, Vector.VEmpty))
3521 (Vector.VCons ((Nat.S Nat.O), ASM.Bit_addr, (Vector.VCons
3522 (Nat.O, ASM.Carry, Vector.VEmpty)))) addr1)
3523 (Status.get_arg_1 cm s0
3524 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
3525 (Nat.S (Nat.S Nat.O)) (Vector.VCons (Nat.O, ASM.Carry,
3526 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
3527 ASM.Bit_addr, (Vector.VCons ((Nat.S Nat.O), ASM.N_bit_addr,
3528 (Vector.VCons (Nat.O, ASM.Carry, Vector.VEmpty)))))) addr2)
3532 let s0 = add_ticks1 s in
3535 let { Types.fst = addr1; Types.snd = addr2 } = l in
3536 Status.set_arg_8 cm s0
3537 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
3538 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))) (Vector.VCons
3539 (Nat.O, ASM.Acc_a, Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S
3540 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct,
3541 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
3542 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3543 Nat.O)))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3544 Nat.O))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
3545 ASM.Acc_b, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
3546 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
3547 Vector.VEmpty)))))))))))))) addr1)
3548 (Status.get_arg_8 cm s0 Bool.False
3549 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S
3550 Nat.O) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3551 (Nat.S (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S Nat.O),
3552 ASM.Ext_indirect, (Vector.VCons (Nat.O,
3553 ASM.Ext_indirect_dptr, Vector.VEmpty)))) (Vector.VCons
3554 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3555 (Nat.S Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S
3556 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3557 Nat.O)))))))), ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S
3558 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))), ASM.Registr,
3559 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3560 Nat.O)))))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3561 (Nat.S (Nat.S Nat.O))))), ASM.Acc_b, (Vector.VCons ((Nat.S
3562 (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Data, (Vector.VCons
3563 ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_dptr, (Vector.VCons
3564 ((Nat.S (Nat.S Nat.O)), ASM.Acc_pc, (Vector.VCons ((Nat.S
3565 Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
3566 ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
3569 let { Types.fst = addr1; Types.snd = addr2 } = r in
3570 Status.set_arg_8 cm s0
3571 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S Nat.O)
3572 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
3573 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons
3574 (Nat.O, ASM.Ext_indirect_dptr, Vector.VEmpty)))) (Vector.VCons
3575 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))),
3576 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3577 Nat.O))))), ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3578 (Nat.S Nat.O)))), ASM.Registr, (Vector.VCons ((Nat.S (Nat.S
3579 (Nat.S Nat.O))), ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S
3580 Nat.O)), ASM.Acc_b, (Vector.VCons ((Nat.S Nat.O),
3581 ASM.Ext_indirect, (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
3582 Vector.VEmpty)))))))))))))) addr1)
3583 (Status.get_arg_8 cm s0 Bool.False
3584 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
3585 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3586 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Acc_a,
3587 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3588 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
3589 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3590 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
3591 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3592 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
3593 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
3594 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
3595 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3596 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3597 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
3598 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
3599 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
3600 Vector.VEmpty)))))))))))))))))))) addr2))))
3603 let s0 = add_ticks1 s in
3604 Status.set_arg_1 cm s0
3605 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S Nat.O)
3606 (Nat.S Nat.O) (Vector.VCons ((Nat.S Nat.O), ASM.Carry,
3607 (Vector.VCons (Nat.O, ASM.Bit_addr, Vector.VEmpty))))
3608 (Vector.VCons ((Nat.S Nat.O), ASM.Bit_addr, (Vector.VCons (Nat.O,
3609 ASM.Carry, Vector.VEmpty)))) b) Bool.False)
3612 (match ASM.subaddressing_modeel Nat.O (Vector.VCons (Nat.O,
3613 ASM.Direct, Vector.VEmpty)) addr with
3616 let s0 = add_ticks1 s in
3618 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3619 (Nat.S Nat.O))))))))
3620 (Status.get_8051_sfr cm s0 Status.SFR_SP)
3621 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
3622 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
3624 let s1 = Status.set_8051_sfr cm s0 Status.SFR_SP new_sp in
3625 Status.write_at_stack_pointer cm s1
3626 (Status.get_arg_8 cm s1 Bool.False (ASM.DIRECT d)))
3627 | ASM.INDIRECT x -> (fun _ -> assert false (* absurd case *))
3628 | ASM.EXT_INDIRECT x -> (fun _ -> assert false (* absurd case *))
3629 | ASM.REGISTER x -> (fun _ -> assert false (* absurd case *))
3630 | ASM.ACC_A -> (fun _ -> assert false (* absurd case *))
3631 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
3632 | ASM.DPTR -> (fun _ -> assert false (* absurd case *))
3633 | ASM.DATA x -> (fun _ -> assert false (* absurd case *))
3634 | ASM.DATA16 x -> (fun _ -> assert false (* absurd case *))
3635 | ASM.ACC_DPTR -> (fun _ -> assert false (* absurd case *))
3636 | ASM.ACC_PC -> (fun _ -> assert false (* absurd case *))
3637 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3638 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3639 | ASM.CARRY -> (fun _ -> assert false (* absurd case *))
3640 | ASM.BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
3641 | ASM.N_BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
3642 | ASM.RELATIVE x -> (fun _ -> assert false (* absurd case *))
3643 | ASM.ADDR11 x -> (fun _ -> assert false (* absurd case *))
3644 | ASM.ADDR16 x -> (fun _ -> assert false (* absurd case *))) __ __)
3647 let s0 = add_ticks1 s in
3648 let contents = Status.read_at_stack_pointer cm s0 in
3649 (let { Types.fst = new_sp; Types.snd = flags } =
3650 Arithmetic.sub_8_with_carry
3651 (Status.get_8051_sfr cm s0 Status.SFR_SP)
3652 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3653 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
3656 let s1 = Status.set_8051_sfr cm s0 Status.SFR_SP new_sp in
3657 Status.set_arg_8 cm s1
3658 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
3659 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))) (Vector.VCons
3660 (Nat.O, ASM.Direct, Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S
3661 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct, (Vector.VCons
3662 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Indirect,
3663 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
3664 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
3665 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b, (Vector.VCons
3666 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
3667 ASM.Ext_indirect_dptr, Vector.VEmpty)))))))))))))) addr) contents))
3669 | ASM.XCH (addr1, addr2) ->
3671 let s0 = add_ticks1 s in
3673 Status.get_arg_8 cm s0 Bool.False
3674 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S (Nat.S
3675 Nat.O)) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3676 (Nat.S Nat.O))))))))) (Vector.VCons ((Nat.S (Nat.S Nat.O)),
3677 ASM.Registr, (Vector.VCons ((Nat.S Nat.O), ASM.Direct,
3678 (Vector.VCons (Nat.O, ASM.Indirect, Vector.VEmpty))))))
3679 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3680 (Nat.S (Nat.S Nat.O))))))))), ASM.Direct, (Vector.VCons ((Nat.S
3681 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))),
3682 ASM.Indirect, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3683 (Nat.S (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
3684 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
3685 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
3686 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
3687 ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
3688 ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_pc,
3689 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons
3690 (Nat.O, ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))))))))
3693 let old_acc = Status.get_8051_sfr cm s0 Status.SFR_ACC_A in
3694 let s1 = Status.set_8051_sfr cm s0 Status.SFR_ACC_A old_addr in
3695 Status.set_arg_8 cm s1
3696 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S (Nat.S
3697 Nat.O)) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
3698 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Registr, (Vector.VCons
3699 ((Nat.S Nat.O), ASM.Direct, (Vector.VCons (Nat.O, ASM.Indirect,
3700 Vector.VEmpty)))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3701 (Nat.S (Nat.S Nat.O)))))), ASM.Direct, (Vector.VCons ((Nat.S
3702 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Indirect,
3703 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
3704 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
3705 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b, (Vector.VCons
3706 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
3707 ASM.Ext_indirect_dptr, Vector.VEmpty)))))))))))))) addr2) old_acc)
3708 | ASM.XCHD (addr1, addr2) ->
3710 let s0 = add_ticks1 s in
3711 (let { Types.fst = acc_nu; Types.snd = acc_nl } =
3712 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
3713 (Nat.S (Nat.S Nat.O))))
3714 (Status.get_8051_sfr cm s0 Status.SFR_ACC_A)
3717 (let { Types.fst = arg_nu; Types.snd = arg_nl } =
3718 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
3719 (Nat.S (Nat.S Nat.O))))
3720 (Status.get_arg_8 cm s0 Bool.False
3721 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O
3722 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3723 (Nat.S Nat.O))))))))) (Vector.VCons (Nat.O, ASM.Indirect,
3724 Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3725 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))),
3726 ASM.Direct, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3727 (Nat.S (Nat.S (Nat.S Nat.O)))))))), ASM.Indirect,
3728 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3729 (Nat.S Nat.O))))))), ASM.Registr, (Vector.VCons ((Nat.S
3730 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Acc_a,
3731 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))),
3732 ASM.Acc_b, (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
3733 Nat.O)))), ASM.Data, (Vector.VCons ((Nat.S (Nat.S (Nat.S
3734 Nat.O))), ASM.Acc_dptr, (Vector.VCons ((Nat.S (Nat.S Nat.O)),
3735 ASM.Acc_pc, (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect,
3736 (Vector.VCons (Nat.O, ASM.Ext_indirect_dptr,
3737 Vector.VEmpty)))))))))))))))))))) addr2))
3741 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
3742 (Nat.S (Nat.S Nat.O)))) acc_nu arg_nl
3745 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))) (Nat.S (Nat.S
3746 (Nat.S (Nat.S Nat.O)))) arg_nu acc_nl
3748 let s1 = Status.set_8051_sfr cm s0 Status.SFR_ACC_A new_acc in
3749 Status.set_arg_8 cm s1
3750 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
3751 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))) (Vector.VCons
3752 (Nat.O, ASM.Indirect, Vector.VEmpty)) (Vector.VCons ((Nat.S (Nat.S
3753 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))), ASM.Direct, (Vector.VCons
3754 ((Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Indirect,
3755 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), ASM.Registr,
3756 (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), ASM.Acc_a,
3757 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b, (Vector.VCons
3758 ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons (Nat.O,
3759 ASM.Ext_indirect_dptr, Vector.VEmpty)))))))))))))) addr2) new_arg))
3763 let s0 = add_ticks1 s in
3764 let high_bits = Status.read_at_stack_pointer cm s0 in
3765 (let { Types.fst = new_sp; Types.snd = flags } =
3766 Arithmetic.sub_8_with_carry
3767 (Status.get_8051_sfr cm s0 Status.SFR_SP)
3768 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3769 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
3772 let s1 = Status.set_8051_sfr cm s0 Status.SFR_SP new_sp in
3773 let low_bits = Status.read_at_stack_pointer cm s1 in
3774 (let { Types.fst = new_sp0; Types.snd = flags0 } =
3775 Arithmetic.sub_8_with_carry
3776 (Status.get_8051_sfr cm s1 Status.SFR_SP)
3777 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3778 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
3781 let s2 = Status.set_8051_sfr cm s1 Status.SFR_SP new_sp0 in
3783 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3784 (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3785 (Nat.S (Nat.S Nat.O)))))))) high_bits low_bits
3787 Status.set_program_counter cm s2 new_pc)) __)) __)
3790 let s0 = add_ticks1 s in
3791 let high_bits = Status.read_at_stack_pointer cm s0 in
3792 (let { Types.fst = new_sp; Types.snd = flags } =
3793 Arithmetic.sub_8_with_carry
3794 (Status.get_8051_sfr cm s0 Status.SFR_SP)
3795 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3796 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
3799 let s1 = Status.set_8051_sfr cm s0 Status.SFR_SP new_sp in
3800 let low_bits = Status.read_at_stack_pointer cm s1 in
3801 (let { Types.fst = new_sp0; Types.snd = flags0 } =
3802 Arithmetic.sub_8_with_carry
3803 (Status.get_8051_sfr cm s1 Status.SFR_SP)
3804 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3805 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O)) Bool.False
3808 let s2 = Status.set_8051_sfr cm s1 Status.SFR_SP new_sp0 in
3810 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3811 (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3812 (Nat.S (Nat.S Nat.O)))))))) high_bits low_bits
3814 Status.set_program_counter cm s2 new_pc)) __)) __)
3815 | ASM.NOP -> (fun _ -> let s0 = add_ticks2 s in s0)
3816 | ASM.JMP acc_dptr ->
3818 let s0 = add_ticks1 s in
3820 Status.get_arg_16 cm s0
3821 (ASM.subaddressing_modeel__o__mk_subaddressing_mode Nat.O (Nat.S
3822 Nat.O) (Vector.VCons (Nat.O, ASM.Acc_dptr, Vector.VEmpty))
3823 (Vector.VCons ((Nat.S Nat.O), ASM.Data16, (Vector.VCons (Nat.O,
3824 ASM.Acc_dptr, Vector.VEmpty)))) acc_dptr)
3826 Status.set_program_counter cm s0 jmp_addr)) __
3828 (** val compute_target_of_unconditional_jump :
3829 BitVector.word -> ASM.instruction -> BitVector.word **)
3830 let compute_target_of_unconditional_jump program_counter = function
3832 BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3833 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3834 Nat.O))))))))))))))))
3836 BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3837 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3838 Nat.O))))))))))))))))
3841 ((match ASM.subaddressing_modeel Nat.O (Vector.VCons (Nat.O, ASM.Addr11,
3842 Vector.VEmpty)) addr with
3843 | ASM.DIRECT x -> (fun _ -> assert false (* absurd case *))
3844 | ASM.INDIRECT x -> (fun _ -> assert false (* absurd case *))
3845 | ASM.EXT_INDIRECT x -> (fun _ -> assert false (* absurd case *))
3846 | ASM.REGISTER x -> (fun _ -> assert false (* absurd case *))
3847 | ASM.ACC_A -> (fun _ -> assert false (* absurd case *))
3848 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
3849 | ASM.DPTR -> (fun _ -> assert false (* absurd case *))
3850 | ASM.DATA x -> (fun _ -> assert false (* absurd case *))
3851 | ASM.DATA16 x -> (fun _ -> assert false (* absurd case *))
3852 | ASM.ACC_DPTR -> (fun _ -> assert false (* absurd case *))
3853 | ASM.ACC_PC -> (fun _ -> assert false (* absurd case *))
3854 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3855 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3856 | ASM.CARRY -> (fun _ -> assert false (* absurd case *))
3857 | ASM.BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
3858 | ASM.N_BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
3859 | ASM.RELATIVE x -> (fun _ -> assert false (* absurd case *))
3862 (let { Types.fst = pc_bu; Types.snd = pc_bl } =
3863 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))
3864 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3865 (Nat.S (Nat.S Nat.O))))))))))) program_counter
3869 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))
3870 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3871 (Nat.S (Nat.S Nat.O))))))))))) pc_bu a
3874 | ASM.ADDR16 x -> (fun _ -> assert false (* absurd case *))) __)
3877 ((match ASM.subaddressing_modeel Nat.O (Vector.VCons (Nat.O, ASM.Addr16,
3878 Vector.VEmpty)) addr with
3879 | ASM.DIRECT x -> (fun _ -> assert false (* absurd case *))
3880 | ASM.INDIRECT x -> (fun _ -> assert false (* absurd case *))
3881 | ASM.EXT_INDIRECT x -> (fun _ -> assert false (* absurd case *))
3882 | ASM.REGISTER x -> (fun _ -> assert false (* absurd case *))
3883 | ASM.ACC_A -> (fun _ -> assert false (* absurd case *))
3884 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
3885 | ASM.DPTR -> (fun _ -> assert false (* absurd case *))
3886 | ASM.DATA x -> (fun _ -> assert false (* absurd case *))
3887 | ASM.DATA16 x -> (fun _ -> assert false (* absurd case *))
3888 | ASM.ACC_DPTR -> (fun _ -> assert false (* absurd case *))
3889 | ASM.ACC_PC -> (fun _ -> assert false (* absurd case *))
3890 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3891 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3892 | ASM.CARRY -> (fun _ -> assert false (* absurd case *))
3893 | ASM.BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
3894 | ASM.N_BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
3895 | ASM.RELATIVE x -> (fun _ -> assert false (* absurd case *))
3896 | ASM.ADDR11 x -> (fun _ -> assert false (* absurd case *))
3897 | ASM.ADDR16 a -> (fun _ -> a)) __)
3900 ((match ASM.subaddressing_modeel Nat.O (Vector.VCons (Nat.O,
3901 ASM.Relative, Vector.VEmpty)) addr with
3902 | ASM.DIRECT x -> (fun _ -> assert false (* absurd case *))
3903 | ASM.INDIRECT x -> (fun _ -> assert false (* absurd case *))
3904 | ASM.EXT_INDIRECT x -> (fun _ -> assert false (* absurd case *))
3905 | ASM.REGISTER x -> (fun _ -> assert false (* absurd case *))
3906 | ASM.ACC_A -> (fun _ -> assert false (* absurd case *))
3907 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
3908 | ASM.DPTR -> (fun _ -> assert false (* absurd case *))
3909 | ASM.DATA x -> (fun _ -> assert false (* absurd case *))
3910 | ASM.DATA16 x -> (fun _ -> assert false (* absurd case *))
3911 | ASM.ACC_DPTR -> (fun _ -> assert false (* absurd case *))
3912 | ASM.ACC_PC -> (fun _ -> assert false (* absurd case *))
3913 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3914 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3915 | ASM.CARRY -> (fun _ -> assert false (* absurd case *))
3916 | ASM.BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
3917 | ASM.N_BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
3920 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3921 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3922 Nat.O)))))))))))))))) program_counter
3923 (Arithmetic.sign_extension r))
3924 | ASM.ADDR11 x -> (fun _ -> assert false (* absurd case *))
3925 | ASM.ADDR16 x -> (fun _ -> assert false (* absurd case *))) __)
3926 | ASM.MOVC (x, x0) ->
3927 BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3928 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3929 Nat.O))))))))))))))))
3930 | ASM.RealInstruction x ->
3931 BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3932 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3933 Nat.O))))))))))))))))
3935 (** val is_unconditional_jump : ASM.instruction -> Bool.bool **)
3936 let is_unconditional_jump = function
3937 | ASM.ACALL x -> Bool.False
3938 | ASM.LCALL x -> Bool.False
3939 | ASM.AJMP x -> Bool.True
3940 | ASM.LJMP x -> Bool.True
3941 | ASM.SJMP x -> Bool.True
3942 | ASM.MOVC (x, x0) -> Bool.False
3943 | ASM.RealInstruction x -> Bool.False
3945 (** val program_counter_after_other :
3946 BitVector.word -> ASM.instruction -> BitVector.word **)
3947 let program_counter_after_other program_counter instruction =
3948 match is_unconditional_jump instruction with
3950 compute_target_of_unconditional_jump program_counter instruction
3951 | Bool.False -> program_counter
3953 (** val addr_of_relative :
3954 'a1 -> ASM.subaddressing_mode -> 'a1 Status.preStatus -> BitVector.word **)
3955 let addr_of_relative cm x s =
3956 (match ASM.subaddressing_modeel Nat.O (Vector.VCons (Nat.O, ASM.Relative,
3957 Vector.VEmpty)) x with
3958 | ASM.DIRECT x0 -> (fun _ -> assert false (* absurd case *))
3959 | ASM.INDIRECT x0 -> (fun _ -> assert false (* absurd case *))
3960 | ASM.EXT_INDIRECT x0 -> (fun _ -> assert false (* absurd case *))
3961 | ASM.REGISTER x0 -> (fun _ -> assert false (* absurd case *))
3962 | ASM.ACC_A -> (fun _ -> assert false (* absurd case *))
3963 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
3964 | ASM.DPTR -> (fun _ -> assert false (* absurd case *))
3965 | ASM.DATA x0 -> (fun _ -> assert false (* absurd case *))
3966 | ASM.DATA16 x0 -> (fun _ -> assert false (* absurd case *))
3967 | ASM.ACC_DPTR -> (fun _ -> assert false (* absurd case *))
3968 | ASM.ACC_PC -> (fun _ -> assert false (* absurd case *))
3969 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3970 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
3971 | ASM.CARRY -> (fun _ -> assert false (* absurd case *))
3972 | ASM.BIT_ADDR x0 -> (fun _ -> assert false (* absurd case *))
3973 | ASM.N_BIT_ADDR x0 -> (fun _ -> assert false (* absurd case *))
3976 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3977 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
3978 Nat.O)))))))))))))))) s.Status.program_counter
3979 (Arithmetic.sign_extension r))
3980 | ASM.ADDR11 x0 -> (fun _ -> assert false (* absurd case *))
3981 | ASM.ADDR16 x0 -> (fun _ -> assert false (* absurd case *))) __
3983 (** val execute_1_0 :
3984 BitVector.byte BitVectorTrie.bitVectorTrie -> Status.status ->
3985 ((ASM.instruction, BitVector.word) Types.prod, Nat.nat) Types.prod ->
3986 Status.status Types.sig0 **)
3987 let execute_1_0 cm s0 instr_pc_ticks =
3988 (let { Types.fst = instr_pc; Types.snd = ticks } = instr_pc_ticks in
3990 (let { Types.fst = instr; Types.snd = pc } = { Types.fst =
3991 instr_pc.Types.fst; Types.snd = instr_pc.Types.snd }
3994 let s = Status.set_program_counter cm s0 pc in
3998 let s1 = Status.set_clock cm s (Nat.plus ticks s.Status.clock) in
3999 (match ASM.subaddressing_modeel Nat.O (Vector.VCons (Nat.O,
4000 ASM.Addr11, Vector.VEmpty)) addr with
4001 | ASM.DIRECT x -> (fun _ -> assert false (* absurd case *))
4002 | ASM.INDIRECT x -> (fun _ -> assert false (* absurd case *))
4003 | ASM.EXT_INDIRECT x -> (fun _ -> assert false (* absurd case *))
4004 | ASM.REGISTER x -> (fun _ -> assert false (* absurd case *))
4005 | ASM.ACC_A -> (fun _ -> assert false (* absurd case *))
4006 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
4007 | ASM.DPTR -> (fun _ -> assert false (* absurd case *))
4008 | ASM.DATA x -> (fun _ -> assert false (* absurd case *))
4009 | ASM.DATA16 x -> (fun _ -> assert false (* absurd case *))
4010 | ASM.ACC_DPTR -> (fun _ -> assert false (* absurd case *))
4011 | ASM.ACC_PC -> (fun _ -> assert false (* absurd case *))
4012 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
4013 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
4014 | ASM.CARRY -> (fun _ -> assert false (* absurd case *))
4015 | ASM.BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
4016 | ASM.N_BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
4017 | ASM.RELATIVE x -> (fun _ -> assert false (* absurd case *))
4021 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4022 (Nat.S Nat.O))))))))
4023 (Status.get_8051_sfr cm s1 Status.SFR_SP)
4024 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
4025 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
4027 let s2 = Status.set_8051_sfr cm s1 Status.SFR_SP new_sp in
4028 let { Types.fst = pc_bu; Types.snd = pc_bl } =
4029 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4030 (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4031 (Nat.S (Nat.S (Nat.S Nat.O)))))))) s2.Status.program_counter
4033 let s3 = Status.write_at_stack_pointer cm s2 pc_bl in
4035 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4036 (Nat.S Nat.O))))))))
4037 (Status.get_8051_sfr cm s3 Status.SFR_SP)
4038 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
4039 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
4041 let s4 = Status.set_8051_sfr cm s3 Status.SFR_SP new_sp0 in
4042 let s5 = Status.write_at_stack_pointer cm s4 pc_bu in
4043 let { Types.fst = fiv; Types.snd = thr' } =
4044 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))
4045 (Nat.S (Nat.S (Nat.S Nat.O))) pc_bu
4048 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))
4049 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4050 (Nat.S (Nat.S (Nat.S Nat.O))))))))))) fiv a
4052 Status.set_program_counter cm s5 new_addr)
4053 | ASM.ADDR16 x -> (fun _ -> assert false (* absurd case *))) __)
4056 let s1 = Status.set_clock cm s (Nat.plus ticks s.Status.clock) in
4057 (match ASM.subaddressing_modeel Nat.O (Vector.VCons (Nat.O,
4058 ASM.Addr16, Vector.VEmpty)) addr with
4059 | ASM.DIRECT x -> (fun _ -> assert false (* absurd case *))
4060 | ASM.INDIRECT x -> (fun _ -> assert false (* absurd case *))
4061 | ASM.EXT_INDIRECT x -> (fun _ -> assert false (* absurd case *))
4062 | ASM.REGISTER x -> (fun _ -> assert false (* absurd case *))
4063 | ASM.ACC_A -> (fun _ -> assert false (* absurd case *))
4064 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
4065 | ASM.DPTR -> (fun _ -> assert false (* absurd case *))
4066 | ASM.DATA x -> (fun _ -> assert false (* absurd case *))
4067 | ASM.DATA16 x -> (fun _ -> assert false (* absurd case *))
4068 | ASM.ACC_DPTR -> (fun _ -> assert false (* absurd case *))
4069 | ASM.ACC_PC -> (fun _ -> assert false (* absurd case *))
4070 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
4071 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
4072 | ASM.CARRY -> (fun _ -> assert false (* absurd case *))
4073 | ASM.BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
4074 | ASM.N_BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
4075 | ASM.RELATIVE x -> (fun _ -> assert false (* absurd case *))
4076 | ASM.ADDR11 x -> (fun _ -> assert false (* absurd case *))
4080 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4081 (Nat.S Nat.O))))))))
4082 (Status.get_8051_sfr cm s1 Status.SFR_SP)
4083 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
4084 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
4086 let s2 = Status.set_8051_sfr cm s1 Status.SFR_SP new_sp in
4087 let { Types.fst = pc_bu; Types.snd = pc_bl } =
4088 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4089 (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4090 (Nat.S (Nat.S (Nat.S Nat.O)))))))) s2.Status.program_counter
4092 let s3 = Status.write_at_stack_pointer cm s2 pc_bl in
4094 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4095 (Nat.S Nat.O))))))))
4096 (Status.get_8051_sfr cm s3 Status.SFR_SP)
4097 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S
4098 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
4100 let s4 = Status.set_8051_sfr cm s3 Status.SFR_SP new_sp0 in
4101 let s5 = Status.write_at_stack_pointer cm s4 pc_bu in
4102 Status.set_program_counter cm s5 a)) __)
4106 compute_target_of_unconditional_jump s.Status.program_counter instr
4108 let s1 = Status.set_clock cm s (Nat.plus ticks s.Status.clock) in
4109 Status.set_program_counter cm s1 new_pc)
4113 compute_target_of_unconditional_jump s.Status.program_counter instr
4115 let s1 = Status.set_clock cm s (Nat.plus ticks s.Status.clock) in
4116 Status.set_program_counter cm s1 new_pc)
4120 compute_target_of_unconditional_jump s.Status.program_counter instr
4122 let s1 = Status.set_clock cm s (Nat.plus ticks s.Status.clock) in
4123 Status.set_program_counter cm s1 new_pc)
4124 | ASM.MOVC (addr1, addr2) ->
4126 let s1 = Status.set_clock cm s (Nat.plus ticks s.Status.clock) in
4127 (match ASM.subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
4128 Nat.O), ASM.Acc_dptr, (Vector.VCons (Nat.O, ASM.Acc_pc,
4129 Vector.VEmpty)))) addr2 with
4130 | ASM.DIRECT x -> (fun _ -> assert false (* absurd case *))
4131 | ASM.INDIRECT x -> (fun _ -> assert false (* absurd case *))
4132 | ASM.EXT_INDIRECT x -> (fun _ -> assert false (* absurd case *))
4133 | ASM.REGISTER x -> (fun _ -> assert false (* absurd case *))
4134 | ASM.ACC_A -> (fun _ -> assert false (* absurd case *))
4135 | ASM.ACC_B -> (fun _ -> assert false (* absurd case *))
4136 | ASM.DPTR -> (fun _ -> assert false (* absurd case *))
4137 | ASM.DATA x -> (fun _ -> assert false (* absurd case *))
4138 | ASM.DATA16 x -> (fun _ -> assert false (* absurd case *))
4142 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4143 (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4144 (Nat.S (Nat.S (Nat.S Nat.O))))))))
4145 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4146 (Nat.S (Nat.S Nat.O)))))))))
4147 (Status.get_8051_sfr cm s1 Status.SFR_ACC_A)
4150 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4151 (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4152 (Nat.S (Nat.S (Nat.S Nat.O))))))))
4153 (Status.get_8051_sfr cm s1 Status.SFR_DPH)
4154 (Status.get_8051_sfr cm s1 Status.SFR_DPL)
4158 (Nat.plus (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4159 (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4160 (Nat.S (Nat.S (Nat.S Nat.O))))))))) dptr big_acc
4163 BitVectorTrie.lookup
4164 (Nat.plus (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4165 (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4166 (Nat.S (Nat.S (Nat.S Nat.O))))))))) new_addr cm
4167 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4168 (Nat.S (Nat.S Nat.O)))))))))
4170 Status.set_8051_sfr cm s1 Status.SFR_ACC_A result)
4174 Vector.append (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4175 (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4176 (Nat.S (Nat.S (Nat.S Nat.O))))))))
4177 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4178 (Nat.S (Nat.S Nat.O)))))))))
4179 (Status.get_8051_sfr cm s1 Status.SFR_ACC_A)
4182 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4183 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4184 (Nat.S Nat.O)))))))))))))))) s1.Status.program_counter
4188 BitVectorTrie.lookup (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4189 (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4190 (Nat.S (Nat.S Nat.O)))))))))))))))) new_addr cm
4191 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4192 (Nat.S (Nat.S Nat.O)))))))))
4194 Status.set_8051_sfr cm s1 Status.SFR_ACC_A result)
4195 | ASM.EXT_INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
4196 | ASM.INDIRECT_DPTR -> (fun _ -> assert false (* absurd case *))
4197 | ASM.CARRY -> (fun _ -> assert false (* absurd case *))
4198 | ASM.BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
4199 | ASM.N_BIT_ADDR x -> (fun _ -> assert false (* absurd case *))
4200 | ASM.RELATIVE x -> (fun _ -> assert false (* absurd case *))
4201 | ASM.ADDR11 x -> (fun _ -> assert false (* absurd case *))
4202 | ASM.ADDR16 x -> (fun _ -> assert false (* absurd case *))) __)
4203 | ASM.RealInstruction instr' ->
4205 execute_1_preinstruction { Types.fst = ticks; Types.snd = ticks } cm
4206 (addr_of_relative cm) instr' s)) __)) __)) __
4208 (** val current_instruction_cost :
4209 BitVector.byte BitVectorTrie.bitVectorTrie -> Status.status -> Nat.nat **)
4210 let current_instruction_cost cm s =
4211 (Fetch.fetch cm s.Status.program_counter).Types.snd
4213 (** val execute_1' :
4214 BitVector.byte BitVectorTrie.bitVectorTrie -> Status.status ->
4215 Status.status Types.sig0 **)
4216 let execute_1' cm s =
4217 let instr_pc_ticks = Fetch.fetch cm s.Status.program_counter in
4218 Types.pi1 (execute_1_0 cm s instr_pc_ticks)
4221 BitVector.byte BitVectorTrie.bitVectorTrie -> Status.status ->
4223 let execute_1 cm s =
4224 Types.pi1 (execute_1' cm s)
4226 (** val execute_1_pseudo_instruction0 :
4227 (Nat.nat, Nat.nat) Types.prod -> ASM.pseudo_assembly_program ->
4228 (ASM.identifier -> BitVector.word) -> (ASM.identifier -> BitVector.word)
4229 -> Status.pseudoStatus -> ASM.pseudo_instruction -> BitVector.word ->
4230 Status.pseudoStatus **)
4231 let execute_1_pseudo_instruction0 ticks cm addr_of_label addr_of_symbol s instr pc =
4232 let s0 = Status.set_program_counter cm s pc in
4235 | ASM.Instruction instr0 ->
4236 execute_1_preinstruction ticks cm (fun x y -> addr_of_label x) instr0
4238 | ASM.Comment cmt ->
4239 Status.set_clock cm s0 (Nat.plus ticks.Types.fst s0.Status.clock)
4240 | ASM.Cost cst -> s0
4243 Status.set_clock cm s0 (Nat.plus ticks.Types.fst s0.Status.clock)
4245 Status.set_program_counter cm s1 (addr_of_label jmp)
4246 | ASM.Jnz (acc, dst1, dst2) ->
4248 (BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4249 (Nat.S (Nat.S Nat.O))))))))
4250 (Status.get_8051_sfr cm s0 Status.SFR_ACC_A)
4251 (BitVector.zero (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4252 (Nat.S (Nat.S Nat.O)))))))))) with
4255 Status.set_clock cm s0 (Nat.plus ticks.Types.fst s0.Status.clock)
4257 Status.set_program_counter cm s1 (addr_of_label dst1)
4260 Status.set_clock cm s0 (Nat.plus ticks.Types.snd s0.Status.clock)
4262 Status.set_program_counter cm s1 (addr_of_label dst2))
4265 Status.set_clock cm s0 (Nat.plus ticks.Types.fst s0.Status.clock)
4267 let a = addr_of_label call in
4269 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4270 (Nat.S Nat.O)))))))) (Status.get_8051_sfr cm s1 Status.SFR_SP)
4271 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4272 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
4274 let s2 = Status.set_8051_sfr cm s1 Status.SFR_SP new_sp in
4275 let { Types.fst = pc_bu; Types.snd = pc_bl } =
4276 Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4277 Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4278 (Nat.S Nat.O)))))))) s2.Status.program_counter
4280 let s3 = Status.write_at_stack_pointer cm s2 pc_bl in
4282 Arithmetic.add (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4283 (Nat.S Nat.O)))))))) (Status.get_8051_sfr cm s3 Status.SFR_SP)
4284 (Arithmetic.bitvector_of_nat (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4285 (Nat.S (Nat.S (Nat.S Nat.O)))))))) (Nat.S Nat.O))
4287 let s4 = Status.set_8051_sfr cm s3 Status.SFR_SP new_sp0 in
4288 let s5 = Status.write_at_stack_pointer cm s4 pc_bu in
4289 Status.set_program_counter cm s5 a
4290 | ASM.Mov (dst, ident, off) ->
4292 Status.set_clock cm s0 (Nat.plus ticks.Types.fst s0.Status.clock)
4295 (Arithmetic.add_16_with_carry (addr_of_symbol ident) off Bool.False).Types.fst
4298 | Types.Inl dptr -> Status.set_arg_16 cm s1 v dptr
4301 match pr.Types.snd with
4303 (Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4304 (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4305 (Nat.S (Nat.S Nat.O)))))))) v).Types.fst
4307 (Vector.vsplit (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4308 (Nat.S Nat.O)))))))) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
4309 (Nat.S (Nat.S Nat.O)))))))) v).Types.snd
4311 Status.set_arg_8 cm s1
4312 (ASM.subaddressing_modeel__o__mk_subaddressing_mode (Nat.S (Nat.S
4313 Nat.O)) (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))
4314 (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_a, (Vector.VCons
4315 ((Nat.S Nat.O), ASM.Direct, (Vector.VCons (Nat.O, ASM.Registr,
4316 Vector.VEmpty)))))) (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S
4317 (Nat.S (Nat.S Nat.O)))))), ASM.Direct, (Vector.VCons ((Nat.S
4318 (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))), ASM.Indirect,
4319 (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))),
4320 ASM.Registr, (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))),
4321 ASM.Acc_a, (Vector.VCons ((Nat.S (Nat.S Nat.O)), ASM.Acc_b,
4322 (Vector.VCons ((Nat.S Nat.O), ASM.Ext_indirect, (Vector.VCons
4323 (Nat.O, ASM.Ext_indirect_dptr, Vector.VEmpty))))))))))))))
4328 (** val execute_1_pseudo_instruction :
4329 ASM.pseudo_assembly_program -> (BitVector.word -> __ -> (Nat.nat,
4330 Nat.nat) Types.prod) -> (ASM.identifier -> BitVector.word) ->
4331 (ASM.identifier -> BitVector.word) -> Status.pseudoStatus ->
4332 Status.pseudoStatus **)
4333 let execute_1_pseudo_instruction cm ticks_of addr_of_label addr_of_symbol s =
4334 let { Types.fst = instr; Types.snd = pc } =
4335 ASM.fetch_pseudo_instruction cm.ASM.code s.Status.program_counter
4337 let ticks = ticks_of s.Status.program_counter __ in
4338 execute_1_pseudo_instruction0 ticks cm addr_of_label addr_of_symbol s instr
4342 Nat.nat -> BitVector.byte BitVectorTrie.bitVectorTrie -> Status.status ->
4344 let rec execute n cm s =
4347 | Nat.S o -> execute o cm (execute_1 cm s)