source: extracted/aSM.ml @ 3001

Last change on this file since 3001 was 2999, checked in by sacerdot, 7 years ago

code_memory added to labelled_object_code to avoid recomputing it every time.
This gives a major speed up in the semantics of the extracted code.

File size: 229.8 KB
Line 
1open Preamble
2
3open Proper
4
5open PositiveMap
6
7open Deqsets
8
9open ErrorMessages
10
11open PreIdentifiers
12
13open Errors
14
15open Extralib
16
17open Setoids
18
19open Monad
20
21open Option
22
23open Div_and_mod
24
25open Jmeq
26
27open Russell
28
29open Util
30
31open List
32
33open Lists
34
35open Bool
36
37open Relations
38
39open Nat
40
41open Positive
42
43open Hints_declaration
44
45open Core_notation
46
47open Pts
48
49open Logic
50
51open Types
52
53open Identifiers
54
55open CostLabel
56
57open LabelledObjects
58
59open Exp
60
61open Arithmetic
62
63open Vector
64
65open FoldStuff
66
67open BitVector
68
69open Extranat
70
71open Integers
72
73open AST
74
75open String
76
77open BitVectorTrie
78
79type identifier = PreIdentifiers.identifier
80
81(** val toASM_ident :
82    PreIdentifiers.identifierTag -> PreIdentifiers.identifier -> identifier **)
83let toASM_ident t i =
84  let id = i in id
85
86type addressing_mode =
87| DIRECT of BitVector.byte
88| INDIRECT of BitVector.bit
89| EXT_INDIRECT of BitVector.bit
90| REGISTER of BitVector.bitVector
91| ACC_A
92| ACC_B
93| DPTR
94| DATA of BitVector.byte
95| DATA16 of BitVector.word
96| ACC_DPTR
97| ACC_PC
98| EXT_INDIRECT_DPTR
99| INDIRECT_DPTR
100| CARRY
101| BIT_ADDR of BitVector.byte
102| N_BIT_ADDR of BitVector.byte
103| RELATIVE of BitVector.byte
104| ADDR11 of BitVector.word11
105| ADDR16 of BitVector.word
106
107(** val addressing_mode_rect_Type4 :
108    (BitVector.byte -> 'a1) -> (BitVector.bit -> 'a1) -> (BitVector.bit ->
109    'a1) -> (BitVector.bitVector -> 'a1) -> 'a1 -> 'a1 -> 'a1 ->
110    (BitVector.byte -> 'a1) -> (BitVector.word -> 'a1) -> 'a1 -> 'a1 -> 'a1
111    -> 'a1 -> 'a1 -> (BitVector.byte -> 'a1) -> (BitVector.byte -> 'a1) ->
112    (BitVector.byte -> 'a1) -> (BitVector.word11 -> 'a1) -> (BitVector.word
113    -> 'a1) -> addressing_mode -> 'a1 **)
114let rec addressing_mode_rect_Type4 h_DIRECT h_INDIRECT h_EXT_INDIRECT h_REGISTER h_ACC_A h_ACC_B h_DPTR h_DATA h_DATA16 h_ACC_DPTR h_ACC_PC h_EXT_INDIRECT_DPTR h_INDIRECT_DPTR h_CARRY h_BIT_ADDR h_N_BIT_ADDR h_RELATIVE h_ADDR11 h_ADDR16 = function
115| DIRECT x_33 -> h_DIRECT x_33
116| INDIRECT x_34 -> h_INDIRECT x_34
117| EXT_INDIRECT x_35 -> h_EXT_INDIRECT x_35
118| REGISTER x_36 -> h_REGISTER x_36
119| ACC_A -> h_ACC_A
120| ACC_B -> h_ACC_B
121| DPTR -> h_DPTR
122| DATA x_37 -> h_DATA x_37
123| DATA16 x_38 -> h_DATA16 x_38
124| ACC_DPTR -> h_ACC_DPTR
125| ACC_PC -> h_ACC_PC
126| EXT_INDIRECT_DPTR -> h_EXT_INDIRECT_DPTR
127| INDIRECT_DPTR -> h_INDIRECT_DPTR
128| CARRY -> h_CARRY
129| BIT_ADDR x_39 -> h_BIT_ADDR x_39
130| N_BIT_ADDR x_40 -> h_N_BIT_ADDR x_40
131| RELATIVE x_41 -> h_RELATIVE x_41
132| ADDR11 x_42 -> h_ADDR11 x_42
133| ADDR16 x_43 -> h_ADDR16 x_43
134
135(** val addressing_mode_rect_Type5 :
136    (BitVector.byte -> 'a1) -> (BitVector.bit -> 'a1) -> (BitVector.bit ->
137    'a1) -> (BitVector.bitVector -> 'a1) -> 'a1 -> 'a1 -> 'a1 ->
138    (BitVector.byte -> 'a1) -> (BitVector.word -> 'a1) -> 'a1 -> 'a1 -> 'a1
139    -> 'a1 -> 'a1 -> (BitVector.byte -> 'a1) -> (BitVector.byte -> 'a1) ->
140    (BitVector.byte -> 'a1) -> (BitVector.word11 -> 'a1) -> (BitVector.word
141    -> 'a1) -> addressing_mode -> 'a1 **)
142let rec addressing_mode_rect_Type5 h_DIRECT h_INDIRECT h_EXT_INDIRECT h_REGISTER h_ACC_A h_ACC_B h_DPTR h_DATA h_DATA16 h_ACC_DPTR h_ACC_PC h_EXT_INDIRECT_DPTR h_INDIRECT_DPTR h_CARRY h_BIT_ADDR h_N_BIT_ADDR h_RELATIVE h_ADDR11 h_ADDR16 = function
143| DIRECT x_64 -> h_DIRECT x_64
144| INDIRECT x_65 -> h_INDIRECT x_65
145| EXT_INDIRECT x_66 -> h_EXT_INDIRECT x_66
146| REGISTER x_67 -> h_REGISTER x_67
147| ACC_A -> h_ACC_A
148| ACC_B -> h_ACC_B
149| DPTR -> h_DPTR
150| DATA x_68 -> h_DATA x_68
151| DATA16 x_69 -> h_DATA16 x_69
152| ACC_DPTR -> h_ACC_DPTR
153| ACC_PC -> h_ACC_PC
154| EXT_INDIRECT_DPTR -> h_EXT_INDIRECT_DPTR
155| INDIRECT_DPTR -> h_INDIRECT_DPTR
156| CARRY -> h_CARRY
157| BIT_ADDR x_70 -> h_BIT_ADDR x_70
158| N_BIT_ADDR x_71 -> h_N_BIT_ADDR x_71
159| RELATIVE x_72 -> h_RELATIVE x_72
160| ADDR11 x_73 -> h_ADDR11 x_73
161| ADDR16 x_74 -> h_ADDR16 x_74
162
163(** val addressing_mode_rect_Type3 :
164    (BitVector.byte -> 'a1) -> (BitVector.bit -> 'a1) -> (BitVector.bit ->
165    'a1) -> (BitVector.bitVector -> 'a1) -> 'a1 -> 'a1 -> 'a1 ->
166    (BitVector.byte -> 'a1) -> (BitVector.word -> 'a1) -> 'a1 -> 'a1 -> 'a1
167    -> 'a1 -> 'a1 -> (BitVector.byte -> 'a1) -> (BitVector.byte -> 'a1) ->
168    (BitVector.byte -> 'a1) -> (BitVector.word11 -> 'a1) -> (BitVector.word
169    -> 'a1) -> addressing_mode -> 'a1 **)
170let rec addressing_mode_rect_Type3 h_DIRECT h_INDIRECT h_EXT_INDIRECT h_REGISTER h_ACC_A h_ACC_B h_DPTR h_DATA h_DATA16 h_ACC_DPTR h_ACC_PC h_EXT_INDIRECT_DPTR h_INDIRECT_DPTR h_CARRY h_BIT_ADDR h_N_BIT_ADDR h_RELATIVE h_ADDR11 h_ADDR16 = function
171| DIRECT x_95 -> h_DIRECT x_95
172| INDIRECT x_96 -> h_INDIRECT x_96
173| EXT_INDIRECT x_97 -> h_EXT_INDIRECT x_97
174| REGISTER x_98 -> h_REGISTER x_98
175| ACC_A -> h_ACC_A
176| ACC_B -> h_ACC_B
177| DPTR -> h_DPTR
178| DATA x_99 -> h_DATA x_99
179| DATA16 x_100 -> h_DATA16 x_100
180| ACC_DPTR -> h_ACC_DPTR
181| ACC_PC -> h_ACC_PC
182| EXT_INDIRECT_DPTR -> h_EXT_INDIRECT_DPTR
183| INDIRECT_DPTR -> h_INDIRECT_DPTR
184| CARRY -> h_CARRY
185| BIT_ADDR x_101 -> h_BIT_ADDR x_101
186| N_BIT_ADDR x_102 -> h_N_BIT_ADDR x_102
187| RELATIVE x_103 -> h_RELATIVE x_103
188| ADDR11 x_104 -> h_ADDR11 x_104
189| ADDR16 x_105 -> h_ADDR16 x_105
190
191(** val addressing_mode_rect_Type2 :
192    (BitVector.byte -> 'a1) -> (BitVector.bit -> 'a1) -> (BitVector.bit ->
193    'a1) -> (BitVector.bitVector -> 'a1) -> 'a1 -> 'a1 -> 'a1 ->
194    (BitVector.byte -> 'a1) -> (BitVector.word -> 'a1) -> 'a1 -> 'a1 -> 'a1
195    -> 'a1 -> 'a1 -> (BitVector.byte -> 'a1) -> (BitVector.byte -> 'a1) ->
196    (BitVector.byte -> 'a1) -> (BitVector.word11 -> 'a1) -> (BitVector.word
197    -> 'a1) -> addressing_mode -> 'a1 **)
198let rec addressing_mode_rect_Type2 h_DIRECT h_INDIRECT h_EXT_INDIRECT h_REGISTER h_ACC_A h_ACC_B h_DPTR h_DATA h_DATA16 h_ACC_DPTR h_ACC_PC h_EXT_INDIRECT_DPTR h_INDIRECT_DPTR h_CARRY h_BIT_ADDR h_N_BIT_ADDR h_RELATIVE h_ADDR11 h_ADDR16 = function
199| DIRECT x_126 -> h_DIRECT x_126
200| INDIRECT x_127 -> h_INDIRECT x_127
201| EXT_INDIRECT x_128 -> h_EXT_INDIRECT x_128
202| REGISTER x_129 -> h_REGISTER x_129
203| ACC_A -> h_ACC_A
204| ACC_B -> h_ACC_B
205| DPTR -> h_DPTR
206| DATA x_130 -> h_DATA x_130
207| DATA16 x_131 -> h_DATA16 x_131
208| ACC_DPTR -> h_ACC_DPTR
209| ACC_PC -> h_ACC_PC
210| EXT_INDIRECT_DPTR -> h_EXT_INDIRECT_DPTR
211| INDIRECT_DPTR -> h_INDIRECT_DPTR
212| CARRY -> h_CARRY
213| BIT_ADDR x_132 -> h_BIT_ADDR x_132
214| N_BIT_ADDR x_133 -> h_N_BIT_ADDR x_133
215| RELATIVE x_134 -> h_RELATIVE x_134
216| ADDR11 x_135 -> h_ADDR11 x_135
217| ADDR16 x_136 -> h_ADDR16 x_136
218
219(** val addressing_mode_rect_Type1 :
220    (BitVector.byte -> 'a1) -> (BitVector.bit -> 'a1) -> (BitVector.bit ->
221    'a1) -> (BitVector.bitVector -> 'a1) -> 'a1 -> 'a1 -> 'a1 ->
222    (BitVector.byte -> 'a1) -> (BitVector.word -> 'a1) -> 'a1 -> 'a1 -> 'a1
223    -> 'a1 -> 'a1 -> (BitVector.byte -> 'a1) -> (BitVector.byte -> 'a1) ->
224    (BitVector.byte -> 'a1) -> (BitVector.word11 -> 'a1) -> (BitVector.word
225    -> 'a1) -> addressing_mode -> 'a1 **)
226let rec addressing_mode_rect_Type1 h_DIRECT h_INDIRECT h_EXT_INDIRECT h_REGISTER h_ACC_A h_ACC_B h_DPTR h_DATA h_DATA16 h_ACC_DPTR h_ACC_PC h_EXT_INDIRECT_DPTR h_INDIRECT_DPTR h_CARRY h_BIT_ADDR h_N_BIT_ADDR h_RELATIVE h_ADDR11 h_ADDR16 = function
227| DIRECT x_157 -> h_DIRECT x_157
228| INDIRECT x_158 -> h_INDIRECT x_158
229| EXT_INDIRECT x_159 -> h_EXT_INDIRECT x_159
230| REGISTER x_160 -> h_REGISTER x_160
231| ACC_A -> h_ACC_A
232| ACC_B -> h_ACC_B
233| DPTR -> h_DPTR
234| DATA x_161 -> h_DATA x_161
235| DATA16 x_162 -> h_DATA16 x_162
236| ACC_DPTR -> h_ACC_DPTR
237| ACC_PC -> h_ACC_PC
238| EXT_INDIRECT_DPTR -> h_EXT_INDIRECT_DPTR
239| INDIRECT_DPTR -> h_INDIRECT_DPTR
240| CARRY -> h_CARRY
241| BIT_ADDR x_163 -> h_BIT_ADDR x_163
242| N_BIT_ADDR x_164 -> h_N_BIT_ADDR x_164
243| RELATIVE x_165 -> h_RELATIVE x_165
244| ADDR11 x_166 -> h_ADDR11 x_166
245| ADDR16 x_167 -> h_ADDR16 x_167
246
247(** val addressing_mode_rect_Type0 :
248    (BitVector.byte -> 'a1) -> (BitVector.bit -> 'a1) -> (BitVector.bit ->
249    'a1) -> (BitVector.bitVector -> 'a1) -> 'a1 -> 'a1 -> 'a1 ->
250    (BitVector.byte -> 'a1) -> (BitVector.word -> 'a1) -> 'a1 -> 'a1 -> 'a1
251    -> 'a1 -> 'a1 -> (BitVector.byte -> 'a1) -> (BitVector.byte -> 'a1) ->
252    (BitVector.byte -> 'a1) -> (BitVector.word11 -> 'a1) -> (BitVector.word
253    -> 'a1) -> addressing_mode -> 'a1 **)
254let rec addressing_mode_rect_Type0 h_DIRECT h_INDIRECT h_EXT_INDIRECT h_REGISTER h_ACC_A h_ACC_B h_DPTR h_DATA h_DATA16 h_ACC_DPTR h_ACC_PC h_EXT_INDIRECT_DPTR h_INDIRECT_DPTR h_CARRY h_BIT_ADDR h_N_BIT_ADDR h_RELATIVE h_ADDR11 h_ADDR16 = function
255| DIRECT x_188 -> h_DIRECT x_188
256| INDIRECT x_189 -> h_INDIRECT x_189
257| EXT_INDIRECT x_190 -> h_EXT_INDIRECT x_190
258| REGISTER x_191 -> h_REGISTER x_191
259| ACC_A -> h_ACC_A
260| ACC_B -> h_ACC_B
261| DPTR -> h_DPTR
262| DATA x_192 -> h_DATA x_192
263| DATA16 x_193 -> h_DATA16 x_193
264| ACC_DPTR -> h_ACC_DPTR
265| ACC_PC -> h_ACC_PC
266| EXT_INDIRECT_DPTR -> h_EXT_INDIRECT_DPTR
267| INDIRECT_DPTR -> h_INDIRECT_DPTR
268| CARRY -> h_CARRY
269| BIT_ADDR x_194 -> h_BIT_ADDR x_194
270| N_BIT_ADDR x_195 -> h_N_BIT_ADDR x_195
271| RELATIVE x_196 -> h_RELATIVE x_196
272| ADDR11 x_197 -> h_ADDR11 x_197
273| ADDR16 x_198 -> h_ADDR16 x_198
274
275(** val addressing_mode_inv_rect_Type4 :
276    addressing_mode -> (BitVector.byte -> __ -> 'a1) -> (BitVector.bit -> __
277    -> 'a1) -> (BitVector.bit -> __ -> 'a1) -> (BitVector.bitVector -> __ ->
278    'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (BitVector.byte ->
279    __ -> 'a1) -> (BitVector.word -> __ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1)
280    -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (BitVector.byte -> __ ->
281    'a1) -> (BitVector.byte -> __ -> 'a1) -> (BitVector.byte -> __ -> 'a1) ->
282    (BitVector.word11 -> __ -> 'a1) -> (BitVector.word -> __ -> 'a1) -> 'a1 **)
283let addressing_mode_inv_rect_Type4 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 =
284  let hcut =
285    addressing_mode_rect_Type4 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14
286      h15 h16 h17 h18 h19 hterm
287  in
288  hcut __
289
290(** val addressing_mode_inv_rect_Type3 :
291    addressing_mode -> (BitVector.byte -> __ -> 'a1) -> (BitVector.bit -> __
292    -> 'a1) -> (BitVector.bit -> __ -> 'a1) -> (BitVector.bitVector -> __ ->
293    'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (BitVector.byte ->
294    __ -> 'a1) -> (BitVector.word -> __ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1)
295    -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (BitVector.byte -> __ ->
296    'a1) -> (BitVector.byte -> __ -> 'a1) -> (BitVector.byte -> __ -> 'a1) ->
297    (BitVector.word11 -> __ -> 'a1) -> (BitVector.word -> __ -> 'a1) -> 'a1 **)
298let addressing_mode_inv_rect_Type3 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 =
299  let hcut =
300    addressing_mode_rect_Type3 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14
301      h15 h16 h17 h18 h19 hterm
302  in
303  hcut __
304
305(** val addressing_mode_inv_rect_Type2 :
306    addressing_mode -> (BitVector.byte -> __ -> 'a1) -> (BitVector.bit -> __
307    -> 'a1) -> (BitVector.bit -> __ -> 'a1) -> (BitVector.bitVector -> __ ->
308    'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (BitVector.byte ->
309    __ -> 'a1) -> (BitVector.word -> __ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1)
310    -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (BitVector.byte -> __ ->
311    'a1) -> (BitVector.byte -> __ -> 'a1) -> (BitVector.byte -> __ -> 'a1) ->
312    (BitVector.word11 -> __ -> 'a1) -> (BitVector.word -> __ -> 'a1) -> 'a1 **)
313let addressing_mode_inv_rect_Type2 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 =
314  let hcut =
315    addressing_mode_rect_Type2 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14
316      h15 h16 h17 h18 h19 hterm
317  in
318  hcut __
319
320(** val addressing_mode_inv_rect_Type1 :
321    addressing_mode -> (BitVector.byte -> __ -> 'a1) -> (BitVector.bit -> __
322    -> 'a1) -> (BitVector.bit -> __ -> 'a1) -> (BitVector.bitVector -> __ ->
323    'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (BitVector.byte ->
324    __ -> 'a1) -> (BitVector.word -> __ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1)
325    -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (BitVector.byte -> __ ->
326    'a1) -> (BitVector.byte -> __ -> 'a1) -> (BitVector.byte -> __ -> 'a1) ->
327    (BitVector.word11 -> __ -> 'a1) -> (BitVector.word -> __ -> 'a1) -> 'a1 **)
328let addressing_mode_inv_rect_Type1 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 =
329  let hcut =
330    addressing_mode_rect_Type1 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14
331      h15 h16 h17 h18 h19 hterm
332  in
333  hcut __
334
335(** val addressing_mode_inv_rect_Type0 :
336    addressing_mode -> (BitVector.byte -> __ -> 'a1) -> (BitVector.bit -> __
337    -> 'a1) -> (BitVector.bit -> __ -> 'a1) -> (BitVector.bitVector -> __ ->
338    'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (BitVector.byte ->
339    __ -> 'a1) -> (BitVector.word -> __ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1)
340    -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (BitVector.byte -> __ ->
341    'a1) -> (BitVector.byte -> __ -> 'a1) -> (BitVector.byte -> __ -> 'a1) ->
342    (BitVector.word11 -> __ -> 'a1) -> (BitVector.word -> __ -> 'a1) -> 'a1 **)
343let addressing_mode_inv_rect_Type0 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 =
344  let hcut =
345    addressing_mode_rect_Type0 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14
346      h15 h16 h17 h18 h19 hterm
347  in
348  hcut __
349
350(** val addressing_mode_discr : addressing_mode -> addressing_mode -> __ **)
351let addressing_mode_discr x y =
352  Logic.eq_rect_Type2 x
353    (match x with
354     | DIRECT a0 -> Obj.magic (fun _ dH -> dH __)
355     | INDIRECT a0 -> Obj.magic (fun _ dH -> dH __)
356     | EXT_INDIRECT a0 -> Obj.magic (fun _ dH -> dH __)
357     | REGISTER a0 -> Obj.magic (fun _ dH -> dH __)
358     | ACC_A -> Obj.magic (fun _ dH -> dH)
359     | ACC_B -> Obj.magic (fun _ dH -> dH)
360     | DPTR -> Obj.magic (fun _ dH -> dH)
361     | DATA a0 -> Obj.magic (fun _ dH -> dH __)
362     | DATA16 a0 -> Obj.magic (fun _ dH -> dH __)
363     | ACC_DPTR -> Obj.magic (fun _ dH -> dH)
364     | ACC_PC -> Obj.magic (fun _ dH -> dH)
365     | EXT_INDIRECT_DPTR -> Obj.magic (fun _ dH -> dH)
366     | INDIRECT_DPTR -> Obj.magic (fun _ dH -> dH)
367     | CARRY -> Obj.magic (fun _ dH -> dH)
368     | BIT_ADDR a0 -> Obj.magic (fun _ dH -> dH __)
369     | N_BIT_ADDR a0 -> Obj.magic (fun _ dH -> dH __)
370     | RELATIVE a0 -> Obj.magic (fun _ dH -> dH __)
371     | ADDR11 a0 -> Obj.magic (fun _ dH -> dH __)
372     | ADDR16 a0 -> Obj.magic (fun _ dH -> dH __)) y
373
374(** val addressing_mode_jmdiscr :
375    addressing_mode -> addressing_mode -> __ **)
376let addressing_mode_jmdiscr x y =
377  Logic.eq_rect_Type2 x
378    (match x with
379     | DIRECT a0 -> Obj.magic (fun _ dH -> dH __)
380     | INDIRECT a0 -> Obj.magic (fun _ dH -> dH __)
381     | EXT_INDIRECT a0 -> Obj.magic (fun _ dH -> dH __)
382     | REGISTER a0 -> Obj.magic (fun _ dH -> dH __)
383     | ACC_A -> Obj.magic (fun _ dH -> dH)
384     | ACC_B -> Obj.magic (fun _ dH -> dH)
385     | DPTR -> Obj.magic (fun _ dH -> dH)
386     | DATA a0 -> Obj.magic (fun _ dH -> dH __)
387     | DATA16 a0 -> Obj.magic (fun _ dH -> dH __)
388     | ACC_DPTR -> Obj.magic (fun _ dH -> dH)
389     | ACC_PC -> Obj.magic (fun _ dH -> dH)
390     | EXT_INDIRECT_DPTR -> Obj.magic (fun _ dH -> dH)
391     | INDIRECT_DPTR -> Obj.magic (fun _ dH -> dH)
392     | CARRY -> Obj.magic (fun _ dH -> dH)
393     | BIT_ADDR a0 -> Obj.magic (fun _ dH -> dH __)
394     | N_BIT_ADDR a0 -> Obj.magic (fun _ dH -> dH __)
395     | RELATIVE a0 -> Obj.magic (fun _ dH -> dH __)
396     | ADDR11 a0 -> Obj.magic (fun _ dH -> dH __)
397     | ADDR16 a0 -> Obj.magic (fun _ dH -> dH __)) y
398
399(** val eq_addressing_mode :
400    addressing_mode -> addressing_mode -> Bool.bool **)
401let eq_addressing_mode a b =
402  match a with
403  | DIRECT d ->
404    (match b with
405     | DIRECT e ->
406       BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
407         (Nat.S Nat.O)))))))) d e
408     | INDIRECT x -> Bool.False
409     | EXT_INDIRECT x -> Bool.False
410     | REGISTER x -> Bool.False
411     | ACC_A -> Bool.False
412     | ACC_B -> Bool.False
413     | DPTR -> Bool.False
414     | DATA x -> Bool.False
415     | DATA16 x -> Bool.False
416     | ACC_DPTR -> Bool.False
417     | ACC_PC -> Bool.False
418     | EXT_INDIRECT_DPTR -> Bool.False
419     | INDIRECT_DPTR -> Bool.False
420     | CARRY -> Bool.False
421     | BIT_ADDR x -> Bool.False
422     | N_BIT_ADDR x -> Bool.False
423     | RELATIVE x -> Bool.False
424     | ADDR11 x -> Bool.False
425     | ADDR16 x -> Bool.False)
426  | INDIRECT b' ->
427    (match b with
428     | DIRECT x -> Bool.False
429     | INDIRECT e -> BitVector.eq_b b' e
430     | EXT_INDIRECT x -> Bool.False
431     | REGISTER x -> Bool.False
432     | ACC_A -> Bool.False
433     | ACC_B -> Bool.False
434     | DPTR -> Bool.False
435     | DATA x -> Bool.False
436     | DATA16 x -> Bool.False
437     | ACC_DPTR -> Bool.False
438     | ACC_PC -> Bool.False
439     | EXT_INDIRECT_DPTR -> Bool.False
440     | INDIRECT_DPTR -> Bool.False
441     | CARRY -> Bool.False
442     | BIT_ADDR x -> Bool.False
443     | N_BIT_ADDR x -> Bool.False
444     | RELATIVE x -> Bool.False
445     | ADDR11 x -> Bool.False
446     | ADDR16 x -> Bool.False)
447  | EXT_INDIRECT b' ->
448    (match b with
449     | DIRECT x -> Bool.False
450     | INDIRECT x -> Bool.False
451     | EXT_INDIRECT e -> BitVector.eq_b b' e
452     | REGISTER x -> Bool.False
453     | ACC_A -> Bool.False
454     | ACC_B -> Bool.False
455     | DPTR -> Bool.False
456     | DATA x -> Bool.False
457     | DATA16 x -> Bool.False
458     | ACC_DPTR -> Bool.False
459     | ACC_PC -> Bool.False
460     | EXT_INDIRECT_DPTR -> Bool.False
461     | INDIRECT_DPTR -> Bool.False
462     | CARRY -> Bool.False
463     | BIT_ADDR x -> Bool.False
464     | N_BIT_ADDR x -> Bool.False
465     | RELATIVE x -> Bool.False
466     | ADDR11 x -> Bool.False
467     | ADDR16 x -> Bool.False)
468  | REGISTER bv ->
469    (match b with
470     | DIRECT x -> Bool.False
471     | INDIRECT x -> Bool.False
472     | EXT_INDIRECT x -> Bool.False
473     | REGISTER bv' -> BitVector.eq_bv (Nat.S (Nat.S (Nat.S Nat.O))) bv bv'
474     | ACC_A -> Bool.False
475     | ACC_B -> Bool.False
476     | DPTR -> Bool.False
477     | DATA x -> Bool.False
478     | DATA16 x -> Bool.False
479     | ACC_DPTR -> Bool.False
480     | ACC_PC -> Bool.False
481     | EXT_INDIRECT_DPTR -> Bool.False
482     | INDIRECT_DPTR -> Bool.False
483     | CARRY -> Bool.False
484     | BIT_ADDR x -> Bool.False
485     | N_BIT_ADDR x -> Bool.False
486     | RELATIVE x -> Bool.False
487     | ADDR11 x -> Bool.False
488     | ADDR16 x -> Bool.False)
489  | ACC_A ->
490    (match b with
491     | DIRECT x -> Bool.False
492     | INDIRECT x -> Bool.False
493     | EXT_INDIRECT x -> Bool.False
494     | REGISTER x -> Bool.False
495     | ACC_A -> Bool.True
496     | ACC_B -> Bool.False
497     | DPTR -> Bool.False
498     | DATA x -> Bool.False
499     | DATA16 x -> Bool.False
500     | ACC_DPTR -> Bool.False
501     | ACC_PC -> Bool.False
502     | EXT_INDIRECT_DPTR -> Bool.False
503     | INDIRECT_DPTR -> Bool.False
504     | CARRY -> Bool.False
505     | BIT_ADDR x -> Bool.False
506     | N_BIT_ADDR x -> Bool.False
507     | RELATIVE x -> Bool.False
508     | ADDR11 x -> Bool.False
509     | ADDR16 x -> Bool.False)
510  | ACC_B ->
511    (match b with
512     | DIRECT x -> Bool.False
513     | INDIRECT x -> Bool.False
514     | EXT_INDIRECT x -> Bool.False
515     | REGISTER x -> Bool.False
516     | ACC_A -> Bool.False
517     | ACC_B -> Bool.True
518     | DPTR -> Bool.False
519     | DATA x -> Bool.False
520     | DATA16 x -> Bool.False
521     | ACC_DPTR -> Bool.False
522     | ACC_PC -> Bool.False
523     | EXT_INDIRECT_DPTR -> Bool.False
524     | INDIRECT_DPTR -> Bool.False
525     | CARRY -> Bool.False
526     | BIT_ADDR x -> Bool.False
527     | N_BIT_ADDR x -> Bool.False
528     | RELATIVE x -> Bool.False
529     | ADDR11 x -> Bool.False
530     | ADDR16 x -> Bool.False)
531  | DPTR ->
532    (match b with
533     | DIRECT x -> Bool.False
534     | INDIRECT x -> Bool.False
535     | EXT_INDIRECT x -> Bool.False
536     | REGISTER x -> Bool.False
537     | ACC_A -> Bool.False
538     | ACC_B -> Bool.False
539     | DPTR -> Bool.True
540     | DATA x -> Bool.False
541     | DATA16 x -> Bool.False
542     | ACC_DPTR -> Bool.False
543     | ACC_PC -> Bool.False
544     | EXT_INDIRECT_DPTR -> Bool.False
545     | INDIRECT_DPTR -> Bool.False
546     | CARRY -> Bool.False
547     | BIT_ADDR x -> Bool.False
548     | N_BIT_ADDR x -> Bool.False
549     | RELATIVE x -> Bool.False
550     | ADDR11 x -> Bool.False
551     | ADDR16 x -> Bool.False)
552  | DATA b' ->
553    (match b with
554     | DIRECT x -> Bool.False
555     | INDIRECT x -> Bool.False
556     | EXT_INDIRECT x -> Bool.False
557     | REGISTER x -> Bool.False
558     | ACC_A -> Bool.False
559     | ACC_B -> Bool.False
560     | DPTR -> Bool.False
561     | DATA e ->
562       BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
563         (Nat.S Nat.O)))))))) b' e
564     | DATA16 x -> Bool.False
565     | ACC_DPTR -> Bool.False
566     | ACC_PC -> Bool.False
567     | EXT_INDIRECT_DPTR -> Bool.False
568     | INDIRECT_DPTR -> Bool.False
569     | CARRY -> Bool.False
570     | BIT_ADDR x -> Bool.False
571     | N_BIT_ADDR x -> Bool.False
572     | RELATIVE x -> Bool.False
573     | ADDR11 x -> Bool.False
574     | ADDR16 x -> Bool.False)
575  | DATA16 w ->
576    (match b with
577     | DIRECT x -> Bool.False
578     | INDIRECT x -> Bool.False
579     | EXT_INDIRECT x -> Bool.False
580     | REGISTER x -> Bool.False
581     | ACC_A -> Bool.False
582     | ACC_B -> Bool.False
583     | DPTR -> Bool.False
584     | DATA x -> Bool.False
585     | DATA16 e ->
586       BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
587         (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
588         Nat.O)))))))))))))))) w e
589     | ACC_DPTR -> Bool.False
590     | ACC_PC -> Bool.False
591     | EXT_INDIRECT_DPTR -> Bool.False
592     | INDIRECT_DPTR -> Bool.False
593     | CARRY -> Bool.False
594     | BIT_ADDR x -> Bool.False
595     | N_BIT_ADDR x -> Bool.False
596     | RELATIVE x -> Bool.False
597     | ADDR11 x -> Bool.False
598     | ADDR16 x -> Bool.False)
599  | ACC_DPTR ->
600    (match b with
601     | DIRECT x -> Bool.False
602     | INDIRECT x -> Bool.False
603     | EXT_INDIRECT x -> Bool.False
604     | REGISTER x -> Bool.False
605     | ACC_A -> Bool.False
606     | ACC_B -> Bool.False
607     | DPTR -> Bool.False
608     | DATA x -> Bool.False
609     | DATA16 x -> Bool.False
610     | ACC_DPTR -> Bool.True
611     | ACC_PC -> Bool.False
612     | EXT_INDIRECT_DPTR -> Bool.False
613     | INDIRECT_DPTR -> Bool.False
614     | CARRY -> Bool.False
615     | BIT_ADDR x -> Bool.False
616     | N_BIT_ADDR x -> Bool.False
617     | RELATIVE x -> Bool.False
618     | ADDR11 x -> Bool.False
619     | ADDR16 x -> Bool.False)
620  | ACC_PC ->
621    (match b with
622     | DIRECT x -> Bool.False
623     | INDIRECT x -> Bool.False
624     | EXT_INDIRECT x -> Bool.False
625     | REGISTER x -> Bool.False
626     | ACC_A -> Bool.False
627     | ACC_B -> Bool.False
628     | DPTR -> Bool.False
629     | DATA x -> Bool.False
630     | DATA16 x -> Bool.False
631     | ACC_DPTR -> Bool.False
632     | ACC_PC -> Bool.True
633     | EXT_INDIRECT_DPTR -> Bool.False
634     | INDIRECT_DPTR -> Bool.False
635     | CARRY -> Bool.False
636     | BIT_ADDR x -> Bool.False
637     | N_BIT_ADDR x -> Bool.False
638     | RELATIVE x -> Bool.False
639     | ADDR11 x -> Bool.False
640     | ADDR16 x -> Bool.False)
641  | EXT_INDIRECT_DPTR ->
642    (match b with
643     | DIRECT x -> Bool.False
644     | INDIRECT x -> Bool.False
645     | EXT_INDIRECT x -> Bool.False
646     | REGISTER x -> Bool.False
647     | ACC_A -> Bool.False
648     | ACC_B -> Bool.False
649     | DPTR -> Bool.False
650     | DATA x -> Bool.False
651     | DATA16 x -> Bool.False
652     | ACC_DPTR -> Bool.False
653     | ACC_PC -> Bool.False
654     | EXT_INDIRECT_DPTR -> Bool.True
655     | INDIRECT_DPTR -> Bool.False
656     | CARRY -> Bool.False
657     | BIT_ADDR x -> Bool.False
658     | N_BIT_ADDR x -> Bool.False
659     | RELATIVE x -> Bool.False
660     | ADDR11 x -> Bool.False
661     | ADDR16 x -> Bool.False)
662  | INDIRECT_DPTR ->
663    (match b with
664     | DIRECT x -> Bool.False
665     | INDIRECT x -> Bool.False
666     | EXT_INDIRECT x -> Bool.False
667     | REGISTER x -> Bool.False
668     | ACC_A -> Bool.False
669     | ACC_B -> Bool.False
670     | DPTR -> Bool.False
671     | DATA x -> Bool.False
672     | DATA16 x -> Bool.False
673     | ACC_DPTR -> Bool.False
674     | ACC_PC -> Bool.False
675     | EXT_INDIRECT_DPTR -> Bool.False
676     | INDIRECT_DPTR -> Bool.True
677     | CARRY -> Bool.False
678     | BIT_ADDR x -> Bool.False
679     | N_BIT_ADDR x -> Bool.False
680     | RELATIVE x -> Bool.False
681     | ADDR11 x -> Bool.False
682     | ADDR16 x -> Bool.False)
683  | CARRY ->
684    (match b with
685     | DIRECT x -> Bool.False
686     | INDIRECT x -> Bool.False
687     | EXT_INDIRECT x -> Bool.False
688     | REGISTER x -> Bool.False
689     | ACC_A -> Bool.False
690     | ACC_B -> Bool.False
691     | DPTR -> Bool.False
692     | DATA x -> Bool.False
693     | DATA16 x -> Bool.False
694     | ACC_DPTR -> Bool.False
695     | ACC_PC -> Bool.False
696     | EXT_INDIRECT_DPTR -> Bool.False
697     | INDIRECT_DPTR -> Bool.False
698     | CARRY -> Bool.True
699     | BIT_ADDR x -> Bool.False
700     | N_BIT_ADDR x -> Bool.False
701     | RELATIVE x -> Bool.False
702     | ADDR11 x -> Bool.False
703     | ADDR16 x -> Bool.False)
704  | BIT_ADDR b' ->
705    (match b with
706     | DIRECT x -> Bool.False
707     | INDIRECT x -> Bool.False
708     | EXT_INDIRECT x -> Bool.False
709     | REGISTER x -> Bool.False
710     | ACC_A -> Bool.False
711     | ACC_B -> Bool.False
712     | DPTR -> Bool.False
713     | DATA x -> Bool.False
714     | DATA16 x -> Bool.False
715     | ACC_DPTR -> Bool.False
716     | ACC_PC -> Bool.False
717     | EXT_INDIRECT_DPTR -> Bool.False
718     | INDIRECT_DPTR -> Bool.False
719     | CARRY -> Bool.False
720     | BIT_ADDR e ->
721       BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
722         (Nat.S Nat.O)))))))) b' e
723     | N_BIT_ADDR x -> Bool.False
724     | RELATIVE x -> Bool.False
725     | ADDR11 x -> Bool.False
726     | ADDR16 x -> Bool.False)
727  | N_BIT_ADDR b' ->
728    (match b with
729     | DIRECT x -> Bool.False
730     | INDIRECT x -> Bool.False
731     | EXT_INDIRECT x -> Bool.False
732     | REGISTER x -> Bool.False
733     | ACC_A -> Bool.False
734     | ACC_B -> Bool.False
735     | DPTR -> Bool.False
736     | DATA x -> Bool.False
737     | DATA16 x -> Bool.False
738     | ACC_DPTR -> Bool.False
739     | ACC_PC -> Bool.False
740     | EXT_INDIRECT_DPTR -> Bool.False
741     | INDIRECT_DPTR -> Bool.False
742     | CARRY -> Bool.False
743     | BIT_ADDR x -> Bool.False
744     | N_BIT_ADDR e ->
745       BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
746         (Nat.S Nat.O)))))))) b' e
747     | RELATIVE x -> Bool.False
748     | ADDR11 x -> Bool.False
749     | ADDR16 x -> Bool.False)
750  | RELATIVE n ->
751    (match b with
752     | DIRECT x -> Bool.False
753     | INDIRECT x -> Bool.False
754     | EXT_INDIRECT x -> Bool.False
755     | REGISTER x -> Bool.False
756     | ACC_A -> Bool.False
757     | ACC_B -> Bool.False
758     | DPTR -> Bool.False
759     | DATA x -> Bool.False
760     | DATA16 x -> Bool.False
761     | ACC_DPTR -> Bool.False
762     | ACC_PC -> Bool.False
763     | EXT_INDIRECT_DPTR -> Bool.False
764     | INDIRECT_DPTR -> Bool.False
765     | CARRY -> Bool.False
766     | BIT_ADDR x -> Bool.False
767     | N_BIT_ADDR x -> Bool.False
768     | RELATIVE e ->
769       BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
770         (Nat.S Nat.O)))))))) n e
771     | ADDR11 x -> Bool.False
772     | ADDR16 x -> Bool.False)
773  | ADDR11 w ->
774    (match b with
775     | DIRECT x -> Bool.False
776     | INDIRECT x -> Bool.False
777     | EXT_INDIRECT x -> Bool.False
778     | REGISTER x -> Bool.False
779     | ACC_A -> Bool.False
780     | ACC_B -> Bool.False
781     | DPTR -> Bool.False
782     | DATA x -> Bool.False
783     | DATA16 x -> Bool.False
784     | ACC_DPTR -> Bool.False
785     | ACC_PC -> Bool.False
786     | EXT_INDIRECT_DPTR -> Bool.False
787     | INDIRECT_DPTR -> Bool.False
788     | CARRY -> Bool.False
789     | BIT_ADDR x -> Bool.False
790     | N_BIT_ADDR x -> Bool.False
791     | RELATIVE x -> Bool.False
792     | ADDR11 e ->
793       BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
794         (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))))))))) w e
795     | ADDR16 x -> Bool.False)
796  | ADDR16 w ->
797    (match b with
798     | DIRECT x -> Bool.False
799     | INDIRECT x -> Bool.False
800     | EXT_INDIRECT x -> Bool.False
801     | REGISTER x -> Bool.False
802     | ACC_A -> Bool.False
803     | ACC_B -> Bool.False
804     | DPTR -> Bool.False
805     | DATA x -> Bool.False
806     | DATA16 x -> Bool.False
807     | ACC_DPTR -> Bool.False
808     | ACC_PC -> Bool.False
809     | EXT_INDIRECT_DPTR -> Bool.False
810     | INDIRECT_DPTR -> Bool.False
811     | CARRY -> Bool.False
812     | BIT_ADDR x -> Bool.False
813     | N_BIT_ADDR x -> Bool.False
814     | RELATIVE x -> Bool.False
815     | ADDR11 x -> Bool.False
816     | ADDR16 e ->
817       BitVector.eq_bv (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
818         (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S (Nat.S
819         Nat.O)))))))))))))))) w e)
820
821type addressing_mode_tag =
822| Direct
823| Indirect
824| Ext_indirect
825| Registr
826| Acc_a
827| Acc_b
828| Dptr
829| Data
830| Data16
831| Acc_dptr
832| Acc_pc
833| Ext_indirect_dptr
834| Indirect_dptr
835| Carry
836| Bit_addr
837| N_bit_addr
838| Relative
839| Addr11
840| Addr16
841
842(** val addressing_mode_tag_rect_Type4 :
843    'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1
844    -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 ->
845    addressing_mode_tag -> 'a1 **)
846let rec addressing_mode_tag_rect_Type4 h_direct h_indirect h_ext_indirect h_registr h_acc_a h_acc_b h_dptr h_data h_data16 h_acc_dptr h_acc_pc h_ext_indirect_dptr h_indirect_dptr h_carry h_bit_addr h_n_bit_addr h_relative h_addr11 h_addr16 = function
847| Direct -> h_direct
848| Indirect -> h_indirect
849| Ext_indirect -> h_ext_indirect
850| Registr -> h_registr
851| Acc_a -> h_acc_a
852| Acc_b -> h_acc_b
853| Dptr -> h_dptr
854| Data -> h_data
855| Data16 -> h_data16
856| Acc_dptr -> h_acc_dptr
857| Acc_pc -> h_acc_pc
858| Ext_indirect_dptr -> h_ext_indirect_dptr
859| Indirect_dptr -> h_indirect_dptr
860| Carry -> h_carry
861| Bit_addr -> h_bit_addr
862| N_bit_addr -> h_n_bit_addr
863| Relative -> h_relative
864| Addr11 -> h_addr11
865| Addr16 -> h_addr16
866
867(** val addressing_mode_tag_rect_Type5 :
868    'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1
869    -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 ->
870    addressing_mode_tag -> 'a1 **)
871let rec addressing_mode_tag_rect_Type5 h_direct h_indirect h_ext_indirect h_registr h_acc_a h_acc_b h_dptr h_data h_data16 h_acc_dptr h_acc_pc h_ext_indirect_dptr h_indirect_dptr h_carry h_bit_addr h_n_bit_addr h_relative h_addr11 h_addr16 = function
872| Direct -> h_direct
873| Indirect -> h_indirect
874| Ext_indirect -> h_ext_indirect
875| Registr -> h_registr
876| Acc_a -> h_acc_a
877| Acc_b -> h_acc_b
878| Dptr -> h_dptr
879| Data -> h_data
880| Data16 -> h_data16
881| Acc_dptr -> h_acc_dptr
882| Acc_pc -> h_acc_pc
883| Ext_indirect_dptr -> h_ext_indirect_dptr
884| Indirect_dptr -> h_indirect_dptr
885| Carry -> h_carry
886| Bit_addr -> h_bit_addr
887| N_bit_addr -> h_n_bit_addr
888| Relative -> h_relative
889| Addr11 -> h_addr11
890| Addr16 -> h_addr16
891
892(** val addressing_mode_tag_rect_Type3 :
893    'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1
894    -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 ->
895    addressing_mode_tag -> 'a1 **)
896let rec addressing_mode_tag_rect_Type3 h_direct h_indirect h_ext_indirect h_registr h_acc_a h_acc_b h_dptr h_data h_data16 h_acc_dptr h_acc_pc h_ext_indirect_dptr h_indirect_dptr h_carry h_bit_addr h_n_bit_addr h_relative h_addr11 h_addr16 = function
897| Direct -> h_direct
898| Indirect -> h_indirect
899| Ext_indirect -> h_ext_indirect
900| Registr -> h_registr
901| Acc_a -> h_acc_a
902| Acc_b -> h_acc_b
903| Dptr -> h_dptr
904| Data -> h_data
905| Data16 -> h_data16
906| Acc_dptr -> h_acc_dptr
907| Acc_pc -> h_acc_pc
908| Ext_indirect_dptr -> h_ext_indirect_dptr
909| Indirect_dptr -> h_indirect_dptr
910| Carry -> h_carry
911| Bit_addr -> h_bit_addr
912| N_bit_addr -> h_n_bit_addr
913| Relative -> h_relative
914| Addr11 -> h_addr11
915| Addr16 -> h_addr16
916
917(** val addressing_mode_tag_rect_Type2 :
918    'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1
919    -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 ->
920    addressing_mode_tag -> 'a1 **)
921let rec addressing_mode_tag_rect_Type2 h_direct h_indirect h_ext_indirect h_registr h_acc_a h_acc_b h_dptr h_data h_data16 h_acc_dptr h_acc_pc h_ext_indirect_dptr h_indirect_dptr h_carry h_bit_addr h_n_bit_addr h_relative h_addr11 h_addr16 = function
922| Direct -> h_direct
923| Indirect -> h_indirect
924| Ext_indirect -> h_ext_indirect
925| Registr -> h_registr
926| Acc_a -> h_acc_a
927| Acc_b -> h_acc_b
928| Dptr -> h_dptr
929| Data -> h_data
930| Data16 -> h_data16
931| Acc_dptr -> h_acc_dptr
932| Acc_pc -> h_acc_pc
933| Ext_indirect_dptr -> h_ext_indirect_dptr
934| Indirect_dptr -> h_indirect_dptr
935| Carry -> h_carry
936| Bit_addr -> h_bit_addr
937| N_bit_addr -> h_n_bit_addr
938| Relative -> h_relative
939| Addr11 -> h_addr11
940| Addr16 -> h_addr16
941
942(** val addressing_mode_tag_rect_Type1 :
943    'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1
944    -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 ->
945    addressing_mode_tag -> 'a1 **)
946let rec addressing_mode_tag_rect_Type1 h_direct h_indirect h_ext_indirect h_registr h_acc_a h_acc_b h_dptr h_data h_data16 h_acc_dptr h_acc_pc h_ext_indirect_dptr h_indirect_dptr h_carry h_bit_addr h_n_bit_addr h_relative h_addr11 h_addr16 = function
947| Direct -> h_direct
948| Indirect -> h_indirect
949| Ext_indirect -> h_ext_indirect
950| Registr -> h_registr
951| Acc_a -> h_acc_a
952| Acc_b -> h_acc_b
953| Dptr -> h_dptr
954| Data -> h_data
955| Data16 -> h_data16
956| Acc_dptr -> h_acc_dptr
957| Acc_pc -> h_acc_pc
958| Ext_indirect_dptr -> h_ext_indirect_dptr
959| Indirect_dptr -> h_indirect_dptr
960| Carry -> h_carry
961| Bit_addr -> h_bit_addr
962| N_bit_addr -> h_n_bit_addr
963| Relative -> h_relative
964| Addr11 -> h_addr11
965| Addr16 -> h_addr16
966
967(** val addressing_mode_tag_rect_Type0 :
968    'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1
969    -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 -> 'a1 ->
970    addressing_mode_tag -> 'a1 **)
971let rec addressing_mode_tag_rect_Type0 h_direct h_indirect h_ext_indirect h_registr h_acc_a h_acc_b h_dptr h_data h_data16 h_acc_dptr h_acc_pc h_ext_indirect_dptr h_indirect_dptr h_carry h_bit_addr h_n_bit_addr h_relative h_addr11 h_addr16 = function
972| Direct -> h_direct
973| Indirect -> h_indirect
974| Ext_indirect -> h_ext_indirect
975| Registr -> h_registr
976| Acc_a -> h_acc_a
977| Acc_b -> h_acc_b
978| Dptr -> h_dptr
979| Data -> h_data
980| Data16 -> h_data16
981| Acc_dptr -> h_acc_dptr
982| Acc_pc -> h_acc_pc
983| Ext_indirect_dptr -> h_ext_indirect_dptr
984| Indirect_dptr -> h_indirect_dptr
985| Carry -> h_carry
986| Bit_addr -> h_bit_addr
987| N_bit_addr -> h_n_bit_addr
988| Relative -> h_relative
989| Addr11 -> h_addr11
990| Addr16 -> h_addr16
991
992(** val addressing_mode_tag_inv_rect_Type4 :
993    addressing_mode_tag -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__
994    -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) ->
995    (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1)
996    -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ ->
997    'a1) -> (__ -> 'a1) -> 'a1 **)
998let addressing_mode_tag_inv_rect_Type4 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 =
999  let hcut =
1000    addressing_mode_tag_rect_Type4 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13
1001      h14 h15 h16 h17 h18 h19 hterm
1002  in
1003  hcut __
1004
1005(** val addressing_mode_tag_inv_rect_Type3 :
1006    addressing_mode_tag -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__
1007    -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) ->
1008    (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1)
1009    -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ ->
1010    'a1) -> (__ -> 'a1) -> 'a1 **)
1011let addressing_mode_tag_inv_rect_Type3 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 =
1012  let hcut =
1013    addressing_mode_tag_rect_Type3 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13
1014      h14 h15 h16 h17 h18 h19 hterm
1015  in
1016  hcut __
1017
1018(** val addressing_mode_tag_inv_rect_Type2 :
1019    addressing_mode_tag -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__
1020    -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) ->
1021    (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1)
1022    -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ ->
1023    'a1) -> (__ -> 'a1) -> 'a1 **)
1024let addressing_mode_tag_inv_rect_Type2 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 =
1025  let hcut =
1026    addressing_mode_tag_rect_Type2 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13
1027      h14 h15 h16 h17 h18 h19 hterm
1028  in
1029  hcut __
1030
1031(** val addressing_mode_tag_inv_rect_Type1 :
1032    addressing_mode_tag -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__
1033    -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) ->
1034    (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1)
1035    -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ ->
1036    'a1) -> (__ -> 'a1) -> 'a1 **)
1037let addressing_mode_tag_inv_rect_Type1 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 =
1038  let hcut =
1039    addressing_mode_tag_rect_Type1 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13
1040      h14 h15 h16 h17 h18 h19 hterm
1041  in
1042  hcut __
1043
1044(** val addressing_mode_tag_inv_rect_Type0 :
1045    addressing_mode_tag -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__
1046    -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) ->
1047    (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1)
1048    -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ -> 'a1) -> (__ ->
1049    'a1) -> (__ -> 'a1) -> 'a1 **)
1050let addressing_mode_tag_inv_rect_Type0 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 =
1051  let hcut =
1052    addressing_mode_tag_rect_Type0 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13
1053      h14 h15 h16 h17 h18 h19 hterm
1054  in
1055  hcut __
1056
1057(** val addressing_mode_tag_discr :
1058    addressing_mode_tag -> addressing_mode_tag -> __ **)
1059let addressing_mode_tag_discr x y =
1060  Logic.eq_rect_Type2 x
1061    (match x with
1062     | Direct -> Obj.magic (fun _ dH -> dH)
1063     | Indirect -> Obj.magic (fun _ dH -> dH)
1064     | Ext_indirect -> Obj.magic (fun _ dH -> dH)
1065     | Registr -> Obj.magic (fun _ dH -> dH)
1066     | Acc_a -> Obj.magic (fun _ dH -> dH)
1067     | Acc_b -> Obj.magic (fun _ dH -> dH)
1068     | Dptr -> Obj.magic (fun _ dH -> dH)
1069     | Data -> Obj.magic (fun _ dH -> dH)
1070     | Data16 -> Obj.magic (fun _ dH -> dH)
1071     | Acc_dptr -> Obj.magic (fun _ dH -> dH)
1072     | Acc_pc -> Obj.magic (fun _ dH -> dH)
1073     | Ext_indirect_dptr -> Obj.magic (fun _ dH -> dH)
1074     | Indirect_dptr -> Obj.magic (fun _ dH -> dH)
1075     | Carry -> Obj.magic (fun _ dH -> dH)
1076     | Bit_addr -> Obj.magic (fun _ dH -> dH)
1077     | N_bit_addr -> Obj.magic (fun _ dH -> dH)
1078     | Relative -> Obj.magic (fun _ dH -> dH)
1079     | Addr11 -> Obj.magic (fun _ dH -> dH)
1080     | Addr16 -> Obj.magic (fun _ dH -> dH)) y
1081
1082(** val addressing_mode_tag_jmdiscr :
1083    addressing_mode_tag -> addressing_mode_tag -> __ **)
1084let addressing_mode_tag_jmdiscr x y =
1085  Logic.eq_rect_Type2 x
1086    (match x with
1087     | Direct -> Obj.magic (fun _ dH -> dH)
1088     | Indirect -> Obj.magic (fun _ dH -> dH)
1089     | Ext_indirect -> Obj.magic (fun _ dH -> dH)
1090     | Registr -> Obj.magic (fun _ dH -> dH)
1091     | Acc_a -> Obj.magic (fun _ dH -> dH)
1092     | Acc_b -> Obj.magic (fun _ dH -> dH)
1093     | Dptr -> Obj.magic (fun _ dH -> dH)
1094     | Data -> Obj.magic (fun _ dH -> dH)
1095     | Data16 -> Obj.magic (fun _ dH -> dH)
1096     | Acc_dptr -> Obj.magic (fun _ dH -> dH)
1097     | Acc_pc -> Obj.magic (fun _ dH -> dH)
1098     | Ext_indirect_dptr -> Obj.magic (fun _ dH -> dH)
1099     | Indirect_dptr -> Obj.magic (fun _ dH -> dH)
1100     | Carry -> Obj.magic (fun _ dH -> dH)
1101     | Bit_addr -> Obj.magic (fun _ dH -> dH)
1102     | N_bit_addr -> Obj.magic (fun _ dH -> dH)
1103     | Relative -> Obj.magic (fun _ dH -> dH)
1104     | Addr11 -> Obj.magic (fun _ dH -> dH)
1105     | Addr16 -> Obj.magic (fun _ dH -> dH)) y
1106
1107(** val eq_a : addressing_mode_tag -> addressing_mode_tag -> Bool.bool **)
1108let eq_a a b =
1109  match a with
1110  | Direct ->
1111    (match b with
1112     | Direct -> Bool.True
1113     | Indirect -> Bool.False
1114     | Ext_indirect -> Bool.False
1115     | Registr -> Bool.False
1116     | Acc_a -> Bool.False
1117     | Acc_b -> Bool.False
1118     | Dptr -> Bool.False
1119     | Data -> Bool.False
1120     | Data16 -> Bool.False
1121     | Acc_dptr -> Bool.False
1122     | Acc_pc -> Bool.False
1123     | Ext_indirect_dptr -> Bool.False
1124     | Indirect_dptr -> Bool.False
1125     | Carry -> Bool.False
1126     | Bit_addr -> Bool.False
1127     | N_bit_addr -> Bool.False
1128     | Relative -> Bool.False
1129     | Addr11 -> Bool.False
1130     | Addr16 -> Bool.False)
1131  | Indirect ->
1132    (match b with
1133     | Direct -> Bool.False
1134     | Indirect -> Bool.True
1135     | Ext_indirect -> Bool.False
1136     | Registr -> Bool.False
1137     | Acc_a -> Bool.False
1138     | Acc_b -> Bool.False
1139     | Dptr -> Bool.False
1140     | Data -> Bool.False
1141     | Data16 -> Bool.False
1142     | Acc_dptr -> Bool.False
1143     | Acc_pc -> Bool.False
1144     | Ext_indirect_dptr -> Bool.False
1145     | Indirect_dptr -> Bool.False
1146     | Carry -> Bool.False
1147     | Bit_addr -> Bool.False
1148     | N_bit_addr -> Bool.False
1149     | Relative -> Bool.False
1150     | Addr11 -> Bool.False
1151     | Addr16 -> Bool.False)
1152  | Ext_indirect ->
1153    (match b with
1154     | Direct -> Bool.False
1155     | Indirect -> Bool.False
1156     | Ext_indirect -> Bool.True
1157     | Registr -> Bool.False
1158     | Acc_a -> Bool.False
1159     | Acc_b -> Bool.False
1160     | Dptr -> Bool.False
1161     | Data -> Bool.False
1162     | Data16 -> Bool.False
1163     | Acc_dptr -> Bool.False
1164     | Acc_pc -> Bool.False
1165     | Ext_indirect_dptr -> Bool.False
1166     | Indirect_dptr -> Bool.False
1167     | Carry -> Bool.False
1168     | Bit_addr -> Bool.False
1169     | N_bit_addr -> Bool.False
1170     | Relative -> Bool.False
1171     | Addr11 -> Bool.False
1172     | Addr16 -> Bool.False)
1173  | Registr ->
1174    (match b with
1175     | Direct -> Bool.False
1176     | Indirect -> Bool.False
1177     | Ext_indirect -> Bool.False
1178     | Registr -> Bool.True
1179     | Acc_a -> Bool.False
1180     | Acc_b -> Bool.False
1181     | Dptr -> Bool.False
1182     | Data -> Bool.False
1183     | Data16 -> Bool.False
1184     | Acc_dptr -> Bool.False
1185     | Acc_pc -> Bool.False
1186     | Ext_indirect_dptr -> Bool.False
1187     | Indirect_dptr -> Bool.False
1188     | Carry -> Bool.False
1189     | Bit_addr -> Bool.False
1190     | N_bit_addr -> Bool.False
1191     | Relative -> Bool.False
1192     | Addr11 -> Bool.False
1193     | Addr16 -> Bool.False)
1194  | Acc_a ->
1195    (match b with
1196     | Direct -> Bool.False
1197     | Indirect -> Bool.False
1198     | Ext_indirect -> Bool.False
1199     | Registr -> Bool.False
1200     | Acc_a -> Bool.True
1201     | Acc_b -> Bool.False
1202     | Dptr -> Bool.False
1203     | Data -> Bool.False
1204     | Data16 -> Bool.False
1205     | Acc_dptr -> Bool.False
1206     | Acc_pc -> Bool.False
1207     | Ext_indirect_dptr -> Bool.False
1208     | Indirect_dptr -> Bool.False
1209     | Carry -> Bool.False
1210     | Bit_addr -> Bool.False
1211     | N_bit_addr -> Bool.False
1212     | Relative -> Bool.False
1213     | Addr11 -> Bool.False
1214     | Addr16 -> Bool.False)
1215  | Acc_b ->
1216    (match b with
1217     | Direct -> Bool.False
1218     | Indirect -> Bool.False
1219     | Ext_indirect -> Bool.False
1220     | Registr -> Bool.False
1221     | Acc_a -> Bool.False
1222     | Acc_b -> Bool.True
1223     | Dptr -> Bool.False
1224     | Data -> Bool.False
1225     | Data16 -> Bool.False
1226     | Acc_dptr -> Bool.False
1227     | Acc_pc -> Bool.False
1228     | Ext_indirect_dptr -> Bool.False
1229     | Indirect_dptr -> Bool.False
1230     | Carry -> Bool.False
1231     | Bit_addr -> Bool.False
1232     | N_bit_addr -> Bool.False
1233     | Relative -> Bool.False
1234     | Addr11 -> Bool.False
1235     | Addr16 -> Bool.False)
1236  | Dptr ->
1237    (match b with
1238     | Direct -> Bool.False
1239     | Indirect -> Bool.False
1240     | Ext_indirect -> Bool.False
1241     | Registr -> Bool.False
1242     | Acc_a -> Bool.False
1243     | Acc_b -> Bool.False
1244     | Dptr -> Bool.True
1245     | Data -> Bool.False
1246     | Data16 -> Bool.False
1247     | Acc_dptr -> Bool.False
1248     | Acc_pc -> Bool.False
1249     | Ext_indirect_dptr -> Bool.False
1250     | Indirect_dptr -> Bool.False
1251     | Carry -> Bool.False
1252     | Bit_addr -> Bool.False
1253     | N_bit_addr -> Bool.False
1254     | Relative -> Bool.False
1255     | Addr11 -> Bool.False
1256     | Addr16 -> Bool.False)
1257  | Data ->
1258    (match b with
1259     | Direct -> Bool.False
1260     | Indirect -> Bool.False
1261     | Ext_indirect -> Bool.False
1262     | Registr -> Bool.False
1263     | Acc_a -> Bool.False
1264     | Acc_b -> Bool.False
1265     | Dptr -> Bool.False
1266     | Data -> Bool.True
1267     | Data16 -> Bool.False
1268     | Acc_dptr -> Bool.False
1269     | Acc_pc -> Bool.False
1270     | Ext_indirect_dptr -> Bool.False
1271     | Indirect_dptr -> Bool.False
1272     | Carry -> Bool.False
1273     | Bit_addr -> Bool.False
1274     | N_bit_addr -> Bool.False
1275     | Relative -> Bool.False
1276     | Addr11 -> Bool.False
1277     | Addr16 -> Bool.False)
1278  | Data16 ->
1279    (match b with
1280     | Direct -> Bool.False
1281     | Indirect -> Bool.False
1282     | Ext_indirect -> Bool.False
1283     | Registr -> Bool.False
1284     | Acc_a -> Bool.False
1285     | Acc_b -> Bool.False
1286     | Dptr -> Bool.False
1287     | Data -> Bool.False
1288     | Data16 -> Bool.True
1289     | Acc_dptr -> Bool.False
1290     | Acc_pc -> Bool.False
1291     | Ext_indirect_dptr -> Bool.False
1292     | Indirect_dptr -> Bool.False
1293     | Carry -> Bool.False
1294     | Bit_addr -> Bool.False
1295     | N_bit_addr -> Bool.False
1296     | Relative -> Bool.False
1297     | Addr11 -> Bool.False
1298     | Addr16 -> Bool.False)
1299  | Acc_dptr ->
1300    (match b with
1301     | Direct -> Bool.False
1302     | Indirect -> Bool.False
1303     | Ext_indirect -> Bool.False
1304     | Registr -> Bool.False
1305     | Acc_a -> Bool.False
1306     | Acc_b -> Bool.False
1307     | Dptr -> Bool.False
1308     | Data -> Bool.False
1309     | Data16 -> Bool.False
1310     | Acc_dptr -> Bool.True
1311     | Acc_pc -> Bool.False
1312     | Ext_indirect_dptr -> Bool.False
1313     | Indirect_dptr -> Bool.False
1314     | Carry -> Bool.False
1315     | Bit_addr -> Bool.False
1316     | N_bit_addr -> Bool.False
1317     | Relative -> Bool.False
1318     | Addr11 -> Bool.False
1319     | Addr16 -> Bool.False)
1320  | Acc_pc ->
1321    (match b with
1322     | Direct -> Bool.False
1323     | Indirect -> Bool.False
1324     | Ext_indirect -> Bool.False
1325     | Registr -> Bool.False
1326     | Acc_a -> Bool.False
1327     | Acc_b -> Bool.False
1328     | Dptr -> Bool.False
1329     | Data -> Bool.False
1330     | Data16 -> Bool.False
1331     | Acc_dptr -> Bool.False
1332     | Acc_pc -> Bool.True
1333     | Ext_indirect_dptr -> Bool.False
1334     | Indirect_dptr -> Bool.False
1335     | Carry -> Bool.False
1336     | Bit_addr -> Bool.False
1337     | N_bit_addr -> Bool.False
1338     | Relative -> Bool.False
1339     | Addr11 -> Bool.False
1340     | Addr16 -> Bool.False)
1341  | Ext_indirect_dptr ->
1342    (match b with
1343     | Direct -> Bool.False
1344     | Indirect -> Bool.False
1345     | Ext_indirect -> Bool.False
1346     | Registr -> Bool.False
1347     | Acc_a -> Bool.False
1348     | Acc_b -> Bool.False
1349     | Dptr -> Bool.False
1350     | Data -> Bool.False
1351     | Data16 -> Bool.False
1352     | Acc_dptr -> Bool.False
1353     | Acc_pc -> Bool.False
1354     | Ext_indirect_dptr -> Bool.True
1355     | Indirect_dptr -> Bool.False
1356     | Carry -> Bool.False
1357     | Bit_addr -> Bool.False
1358     | N_bit_addr -> Bool.False
1359     | Relative -> Bool.False
1360     | Addr11 -> Bool.False
1361     | Addr16 -> Bool.False)
1362  | Indirect_dptr ->
1363    (match b with
1364     | Direct -> Bool.False
1365     | Indirect -> Bool.False
1366     | Ext_indirect -> Bool.False
1367     | Registr -> Bool.False
1368     | Acc_a -> Bool.False
1369     | Acc_b -> Bool.False
1370     | Dptr -> Bool.False
1371     | Data -> Bool.False
1372     | Data16 -> Bool.False
1373     | Acc_dptr -> Bool.False
1374     | Acc_pc -> Bool.False
1375     | Ext_indirect_dptr -> Bool.False
1376     | Indirect_dptr -> Bool.True
1377     | Carry -> Bool.False
1378     | Bit_addr -> Bool.False
1379     | N_bit_addr -> Bool.False
1380     | Relative -> Bool.False
1381     | Addr11 -> Bool.False
1382     | Addr16 -> Bool.False)
1383  | Carry ->
1384    (match b with
1385     | Direct -> Bool.False
1386     | Indirect -> Bool.False
1387     | Ext_indirect -> Bool.False
1388     | Registr -> Bool.False
1389     | Acc_a -> Bool.False
1390     | Acc_b -> Bool.False
1391     | Dptr -> Bool.False
1392     | Data -> Bool.False
1393     | Data16 -> Bool.False
1394     | Acc_dptr -> Bool.False
1395     | Acc_pc -> Bool.False
1396     | Ext_indirect_dptr -> Bool.False
1397     | Indirect_dptr -> Bool.False
1398     | Carry -> Bool.True
1399     | Bit_addr -> Bool.False
1400     | N_bit_addr -> Bool.False
1401     | Relative -> Bool.False
1402     | Addr11 -> Bool.False
1403     | Addr16 -> Bool.False)
1404  | Bit_addr ->
1405    (match b with
1406     | Direct -> Bool.False
1407     | Indirect -> Bool.False
1408     | Ext_indirect -> Bool.False
1409     | Registr -> Bool.False
1410     | Acc_a -> Bool.False
1411     | Acc_b -> Bool.False
1412     | Dptr -> Bool.False
1413     | Data -> Bool.False
1414     | Data16 -> Bool.False
1415     | Acc_dptr -> Bool.False
1416     | Acc_pc -> Bool.False
1417     | Ext_indirect_dptr -> Bool.False
1418     | Indirect_dptr -> Bool.False
1419     | Carry -> Bool.False
1420     | Bit_addr -> Bool.True
1421     | N_bit_addr -> Bool.False
1422     | Relative -> Bool.False
1423     | Addr11 -> Bool.False
1424     | Addr16 -> Bool.False)
1425  | N_bit_addr ->
1426    (match b with
1427     | Direct -> Bool.False
1428     | Indirect -> Bool.False
1429     | Ext_indirect -> Bool.False
1430     | Registr -> Bool.False
1431     | Acc_a -> Bool.False
1432     | Acc_b -> Bool.False
1433     | Dptr -> Bool.False
1434     | Data -> Bool.False
1435     | Data16 -> Bool.False
1436     | Acc_dptr -> Bool.False
1437     | Acc_pc -> Bool.False
1438     | Ext_indirect_dptr -> Bool.False
1439     | Indirect_dptr -> Bool.False
1440     | Carry -> Bool.False
1441     | Bit_addr -> Bool.False
1442     | N_bit_addr -> Bool.True
1443     | Relative -> Bool.False
1444     | Addr11 -> Bool.False
1445     | Addr16 -> Bool.False)
1446  | Relative ->
1447    (match b with
1448     | Direct -> Bool.False
1449     | Indirect -> Bool.False
1450     | Ext_indirect -> Bool.False
1451     | Registr -> Bool.False
1452     | Acc_a -> Bool.False
1453     | Acc_b -> Bool.False
1454     | Dptr -> Bool.False
1455     | Data -> Bool.False
1456     | Data16 -> Bool.False
1457     | Acc_dptr -> Bool.False
1458     | Acc_pc -> Bool.False
1459     | Ext_indirect_dptr -> Bool.False
1460     | Indirect_dptr -> Bool.False
1461     | Carry -> Bool.False
1462     | Bit_addr -> Bool.False
1463     | N_bit_addr -> Bool.False
1464     | Relative -> Bool.True
1465     | Addr11 -> Bool.False
1466     | Addr16 -> Bool.False)
1467  | Addr11 ->
1468    (match b with
1469     | Direct -> Bool.False
1470     | Indirect -> Bool.False
1471     | Ext_indirect -> Bool.False
1472     | Registr -> Bool.False
1473     | Acc_a -> Bool.False
1474     | Acc_b -> Bool.False
1475     | Dptr -> Bool.False
1476     | Data -> Bool.False
1477     | Data16 -> Bool.False
1478     | Acc_dptr -> Bool.False
1479     | Acc_pc -> Bool.False
1480     | Ext_indirect_dptr -> Bool.False
1481     | Indirect_dptr -> Bool.False
1482     | Carry -> Bool.False
1483     | Bit_addr -> Bool.False
1484     | N_bit_addr -> Bool.False
1485     | Relative -> Bool.False
1486     | Addr11 -> Bool.True
1487     | Addr16 -> Bool.False)
1488  | Addr16 ->
1489    (match b with
1490     | Direct -> Bool.False
1491     | Indirect -> Bool.False
1492     | Ext_indirect -> Bool.False
1493     | Registr -> Bool.False
1494     | Acc_a -> Bool.False
1495     | Acc_b -> Bool.False
1496     | Dptr -> Bool.False
1497     | Data -> Bool.False
1498     | Data16 -> Bool.False
1499     | Acc_dptr -> Bool.False
1500     | Acc_pc -> Bool.False
1501     | Ext_indirect_dptr -> Bool.False
1502     | Indirect_dptr -> Bool.False
1503     | Carry -> Bool.False
1504     | Bit_addr -> Bool.False
1505     | N_bit_addr -> Bool.False
1506     | Relative -> Bool.False
1507     | Addr11 -> Bool.False
1508     | Addr16 -> Bool.True)
1509
1510(** val is_a : addressing_mode_tag -> addressing_mode -> Bool.bool **)
1511let rec is_a d a =
1512  match d with
1513  | Direct ->
1514    (match a with
1515     | DIRECT x -> Bool.True
1516     | INDIRECT x -> Bool.False
1517     | EXT_INDIRECT x -> Bool.False
1518     | REGISTER x -> Bool.False
1519     | ACC_A -> Bool.False
1520     | ACC_B -> Bool.False
1521     | DPTR -> Bool.False
1522     | DATA x -> Bool.False
1523     | DATA16 x -> Bool.False
1524     | ACC_DPTR -> Bool.False
1525     | ACC_PC -> Bool.False
1526     | EXT_INDIRECT_DPTR -> Bool.False
1527     | INDIRECT_DPTR -> Bool.False
1528     | CARRY -> Bool.False
1529     | BIT_ADDR x -> Bool.False
1530     | N_BIT_ADDR x -> Bool.False
1531     | RELATIVE x -> Bool.False
1532     | ADDR11 x -> Bool.False
1533     | ADDR16 x -> Bool.False)
1534  | Indirect ->
1535    (match a with
1536     | DIRECT x -> Bool.False
1537     | INDIRECT x -> Bool.True
1538     | EXT_INDIRECT x -> Bool.False
1539     | REGISTER x -> Bool.False
1540     | ACC_A -> Bool.False
1541     | ACC_B -> Bool.False
1542     | DPTR -> Bool.False
1543     | DATA x -> Bool.False
1544     | DATA16 x -> Bool.False
1545     | ACC_DPTR -> Bool.False
1546     | ACC_PC -> Bool.False
1547     | EXT_INDIRECT_DPTR -> Bool.False
1548     | INDIRECT_DPTR -> Bool.False
1549     | CARRY -> Bool.False
1550     | BIT_ADDR x -> Bool.False
1551     | N_BIT_ADDR x -> Bool.False
1552     | RELATIVE x -> Bool.False
1553     | ADDR11 x -> Bool.False
1554     | ADDR16 x -> Bool.False)
1555  | Ext_indirect ->
1556    (match a with
1557     | DIRECT x -> Bool.False
1558     | INDIRECT x -> Bool.False
1559     | EXT_INDIRECT x -> Bool.True
1560     | REGISTER x -> Bool.False
1561     | ACC_A -> Bool.False
1562     | ACC_B -> Bool.False
1563     | DPTR -> Bool.False
1564     | DATA x -> Bool.False
1565     | DATA16 x -> Bool.False
1566     | ACC_DPTR -> Bool.False
1567     | ACC_PC -> Bool.False
1568     | EXT_INDIRECT_DPTR -> Bool.False
1569     | INDIRECT_DPTR -> Bool.False
1570     | CARRY -> Bool.False
1571     | BIT_ADDR x -> Bool.False
1572     | N_BIT_ADDR x -> Bool.False
1573     | RELATIVE x -> Bool.False
1574     | ADDR11 x -> Bool.False
1575     | ADDR16 x -> Bool.False)
1576  | Registr ->
1577    (match a with
1578     | DIRECT x -> Bool.False
1579     | INDIRECT x -> Bool.False
1580     | EXT_INDIRECT x -> Bool.False
1581     | REGISTER x -> Bool.True
1582     | ACC_A -> Bool.False
1583     | ACC_B -> Bool.False
1584     | DPTR -> Bool.False
1585     | DATA x -> Bool.False
1586     | DATA16 x -> Bool.False
1587     | ACC_DPTR -> Bool.False
1588     | ACC_PC -> Bool.False
1589     | EXT_INDIRECT_DPTR -> Bool.False
1590     | INDIRECT_DPTR -> Bool.False
1591     | CARRY -> Bool.False
1592     | BIT_ADDR x -> Bool.False
1593     | N_BIT_ADDR x -> Bool.False
1594     | RELATIVE x -> Bool.False
1595     | ADDR11 x -> Bool.False
1596     | ADDR16 x -> Bool.False)
1597  | Acc_a ->
1598    (match a with
1599     | DIRECT x -> Bool.False
1600     | INDIRECT x -> Bool.False
1601     | EXT_INDIRECT x -> Bool.False
1602     | REGISTER x -> Bool.False
1603     | ACC_A -> Bool.True
1604     | ACC_B -> Bool.False
1605     | DPTR -> Bool.False
1606     | DATA x -> Bool.False
1607     | DATA16 x -> Bool.False
1608     | ACC_DPTR -> Bool.False
1609     | ACC_PC -> Bool.False
1610     | EXT_INDIRECT_DPTR -> Bool.False
1611     | INDIRECT_DPTR -> Bool.False
1612     | CARRY -> Bool.False
1613     | BIT_ADDR x -> Bool.False
1614     | N_BIT_ADDR x -> Bool.False
1615     | RELATIVE x -> Bool.False
1616     | ADDR11 x -> Bool.False
1617     | ADDR16 x -> Bool.False)
1618  | Acc_b ->
1619    (match a with
1620     | DIRECT x -> Bool.False
1621     | INDIRECT x -> Bool.False
1622     | EXT_INDIRECT x -> Bool.False
1623     | REGISTER x -> Bool.False
1624     | ACC_A -> Bool.False
1625     | ACC_B -> Bool.True
1626     | DPTR -> Bool.False
1627     | DATA x -> Bool.False
1628     | DATA16 x -> Bool.False
1629     | ACC_DPTR -> Bool.False
1630     | ACC_PC -> Bool.False
1631     | EXT_INDIRECT_DPTR -> Bool.False
1632     | INDIRECT_DPTR -> Bool.False
1633     | CARRY -> Bool.False
1634     | BIT_ADDR x -> Bool.False
1635     | N_BIT_ADDR x -> Bool.False
1636     | RELATIVE x -> Bool.False
1637     | ADDR11 x -> Bool.False
1638     | ADDR16 x -> Bool.False)
1639  | Dptr ->
1640    (match a with
1641     | DIRECT x -> Bool.False
1642     | INDIRECT x -> Bool.False
1643     | EXT_INDIRECT x -> Bool.False
1644     | REGISTER x -> Bool.False
1645     | ACC_A -> Bool.False
1646     | ACC_B -> Bool.False
1647     | DPTR -> Bool.True
1648     | DATA x -> Bool.False
1649     | DATA16 x -> Bool.False
1650     | ACC_DPTR -> Bool.False
1651     | ACC_PC -> Bool.False
1652     | EXT_INDIRECT_DPTR -> Bool.False
1653     | INDIRECT_DPTR -> Bool.False
1654     | CARRY -> Bool.False
1655     | BIT_ADDR x -> Bool.False
1656     | N_BIT_ADDR x -> Bool.False
1657     | RELATIVE x -> Bool.False
1658     | ADDR11 x -> Bool.False
1659     | ADDR16 x -> Bool.False)
1660  | Data ->
1661    (match a with
1662     | DIRECT x -> Bool.False
1663     | INDIRECT x -> Bool.False
1664     | EXT_INDIRECT x -> Bool.False
1665     | REGISTER x -> Bool.False
1666     | ACC_A -> Bool.False
1667     | ACC_B -> Bool.False
1668     | DPTR -> Bool.False
1669     | DATA x -> Bool.True
1670     | DATA16 x -> Bool.False
1671     | ACC_DPTR -> Bool.False
1672     | ACC_PC -> Bool.False
1673     | EXT_INDIRECT_DPTR -> Bool.False
1674     | INDIRECT_DPTR -> Bool.False
1675     | CARRY -> Bool.False
1676     | BIT_ADDR x -> Bool.False
1677     | N_BIT_ADDR x -> Bool.False
1678     | RELATIVE x -> Bool.False
1679     | ADDR11 x -> Bool.False
1680     | ADDR16 x -> Bool.False)
1681  | Data16 ->
1682    (match a with
1683     | DIRECT x -> Bool.False
1684     | INDIRECT x -> Bool.False
1685     | EXT_INDIRECT x -> Bool.False
1686     | REGISTER x -> Bool.False
1687     | ACC_A -> Bool.False
1688     | ACC_B -> Bool.False
1689     | DPTR -> Bool.False
1690     | DATA x -> Bool.False
1691     | DATA16 x -> Bool.True
1692     | ACC_DPTR -> Bool.False
1693     | ACC_PC -> Bool.False
1694     | EXT_INDIRECT_DPTR -> Bool.False
1695     | INDIRECT_DPTR -> Bool.False
1696     | CARRY -> Bool.False
1697     | BIT_ADDR x -> Bool.False
1698     | N_BIT_ADDR x -> Bool.False
1699     | RELATIVE x -> Bool.False
1700     | ADDR11 x -> Bool.False
1701     | ADDR16 x -> Bool.False)
1702  | Acc_dptr ->
1703    (match a with
1704     | DIRECT x -> Bool.False
1705     | INDIRECT x -> Bool.False
1706     | EXT_INDIRECT x -> Bool.False
1707     | REGISTER x -> Bool.False
1708     | ACC_A -> Bool.False
1709     | ACC_B -> Bool.False
1710     | DPTR -> Bool.False
1711     | DATA x -> Bool.False
1712     | DATA16 x -> Bool.False
1713     | ACC_DPTR -> Bool.True
1714     | ACC_PC -> Bool.False
1715     | EXT_INDIRECT_DPTR -> Bool.False
1716     | INDIRECT_DPTR -> Bool.False
1717     | CARRY -> Bool.False
1718     | BIT_ADDR x -> Bool.False
1719     | N_BIT_ADDR x -> Bool.False
1720     | RELATIVE x -> Bool.False
1721     | ADDR11 x -> Bool.False
1722     | ADDR16 x -> Bool.False)
1723  | Acc_pc ->
1724    (match a with
1725     | DIRECT x -> Bool.False
1726     | INDIRECT x -> Bool.False
1727     | EXT_INDIRECT x -> Bool.False
1728     | REGISTER x -> Bool.False
1729     | ACC_A -> Bool.False
1730     | ACC_B -> Bool.False
1731     | DPTR -> Bool.False
1732     | DATA x -> Bool.False
1733     | DATA16 x -> Bool.False
1734     | ACC_DPTR -> Bool.False
1735     | ACC_PC -> Bool.True
1736     | EXT_INDIRECT_DPTR -> Bool.False
1737     | INDIRECT_DPTR -> Bool.False
1738     | CARRY -> Bool.False
1739     | BIT_ADDR x -> Bool.False
1740     | N_BIT_ADDR x -> Bool.False
1741     | RELATIVE x -> Bool.False
1742     | ADDR11 x -> Bool.False
1743     | ADDR16 x -> Bool.False)
1744  | Ext_indirect_dptr ->
1745    (match a with
1746     | DIRECT x -> Bool.False
1747     | INDIRECT x -> Bool.False
1748     | EXT_INDIRECT x -> Bool.False
1749     | REGISTER x -> Bool.False
1750     | ACC_A -> Bool.False
1751     | ACC_B -> Bool.False
1752     | DPTR -> Bool.False
1753     | DATA x -> Bool.False
1754     | DATA16 x -> Bool.False
1755     | ACC_DPTR -> Bool.False
1756     | ACC_PC -> Bool.False
1757     | EXT_INDIRECT_DPTR -> Bool.True
1758     | INDIRECT_DPTR -> Bool.False
1759     | CARRY -> Bool.False
1760     | BIT_ADDR x -> Bool.False
1761     | N_BIT_ADDR x -> Bool.False
1762     | RELATIVE x -> Bool.False
1763     | ADDR11 x -> Bool.False
1764     | ADDR16 x -> Bool.False)
1765  | Indirect_dptr ->
1766    (match a with
1767     | DIRECT x -> Bool.False
1768     | INDIRECT x -> Bool.False
1769     | EXT_INDIRECT x -> Bool.False
1770     | REGISTER x -> Bool.False
1771     | ACC_A -> Bool.False
1772     | ACC_B -> Bool.False
1773     | DPTR -> Bool.False
1774     | DATA x -> Bool.False
1775     | DATA16 x -> Bool.False
1776     | ACC_DPTR -> Bool.False
1777     | ACC_PC -> Bool.False
1778     | EXT_INDIRECT_DPTR -> Bool.False
1779     | INDIRECT_DPTR -> Bool.True
1780     | CARRY -> Bool.False
1781     | BIT_ADDR x -> Bool.False
1782     | N_BIT_ADDR x -> Bool.False
1783     | RELATIVE x -> Bool.False
1784     | ADDR11 x -> Bool.False
1785     | ADDR16 x -> Bool.False)
1786  | Carry ->
1787    (match a with
1788     | DIRECT x -> Bool.False
1789     | INDIRECT x -> Bool.False
1790     | EXT_INDIRECT x -> Bool.False
1791     | REGISTER x -> Bool.False
1792     | ACC_A -> Bool.False
1793     | ACC_B -> Bool.False
1794     | DPTR -> Bool.False
1795     | DATA x -> Bool.False
1796     | DATA16 x -> Bool.False
1797     | ACC_DPTR -> Bool.False
1798     | ACC_PC -> Bool.False
1799     | EXT_INDIRECT_DPTR -> Bool.False
1800     | INDIRECT_DPTR -> Bool.False
1801     | CARRY -> Bool.True
1802     | BIT_ADDR x -> Bool.False
1803     | N_BIT_ADDR x -> Bool.False
1804     | RELATIVE x -> Bool.False
1805     | ADDR11 x -> Bool.False
1806     | ADDR16 x -> Bool.False)
1807  | Bit_addr ->
1808    (match a with
1809     | DIRECT x -> Bool.False
1810     | INDIRECT x -> Bool.False
1811     | EXT_INDIRECT x -> Bool.False
1812     | REGISTER x -> Bool.False
1813     | ACC_A -> Bool.False
1814     | ACC_B -> Bool.False
1815     | DPTR -> Bool.False
1816     | DATA x -> Bool.False
1817     | DATA16 x -> Bool.False
1818     | ACC_DPTR -> Bool.False
1819     | ACC_PC -> Bool.False
1820     | EXT_INDIRECT_DPTR -> Bool.False
1821     | INDIRECT_DPTR -> Bool.False
1822     | CARRY -> Bool.False
1823     | BIT_ADDR x -> Bool.True
1824     | N_BIT_ADDR x -> Bool.False
1825     | RELATIVE x -> Bool.False
1826     | ADDR11 x -> Bool.False
1827     | ADDR16 x -> Bool.False)
1828  | N_bit_addr ->
1829    (match a with
1830     | DIRECT x -> Bool.False
1831     | INDIRECT x -> Bool.False
1832     | EXT_INDIRECT x -> Bool.False
1833     | REGISTER x -> Bool.False
1834     | ACC_A -> Bool.False
1835     | ACC_B -> Bool.False
1836     | DPTR -> Bool.False
1837     | DATA x -> Bool.False
1838     | DATA16 x -> Bool.False
1839     | ACC_DPTR -> Bool.False
1840     | ACC_PC -> Bool.False
1841     | EXT_INDIRECT_DPTR -> Bool.False
1842     | INDIRECT_DPTR -> Bool.False
1843     | CARRY -> Bool.False
1844     | BIT_ADDR x -> Bool.False
1845     | N_BIT_ADDR x -> Bool.True
1846     | RELATIVE x -> Bool.False
1847     | ADDR11 x -> Bool.False
1848     | ADDR16 x -> Bool.False)
1849  | Relative ->
1850    (match a with
1851     | DIRECT x -> Bool.False
1852     | INDIRECT x -> Bool.False
1853     | EXT_INDIRECT x -> Bool.False
1854     | REGISTER x -> Bool.False
1855     | ACC_A -> Bool.False
1856     | ACC_B -> Bool.False
1857     | DPTR -> Bool.False
1858     | DATA x -> Bool.False
1859     | DATA16 x -> Bool.False
1860     | ACC_DPTR -> Bool.False
1861     | ACC_PC -> Bool.False
1862     | EXT_INDIRECT_DPTR -> Bool.False
1863     | INDIRECT_DPTR -> Bool.False
1864     | CARRY -> Bool.False
1865     | BIT_ADDR x -> Bool.False
1866     | N_BIT_ADDR x -> Bool.False
1867     | RELATIVE x -> Bool.True
1868     | ADDR11 x -> Bool.False
1869     | ADDR16 x -> Bool.False)
1870  | Addr11 ->
1871    (match a with
1872     | DIRECT x -> Bool.False
1873     | INDIRECT x -> Bool.False
1874     | EXT_INDIRECT x -> Bool.False
1875     | REGISTER x -> Bool.False
1876     | ACC_A -> Bool.False
1877     | ACC_B -> Bool.False
1878     | DPTR -> Bool.False
1879     | DATA x -> Bool.False
1880     | DATA16 x -> Bool.False
1881     | ACC_DPTR -> Bool.False
1882     | ACC_PC -> Bool.False
1883     | EXT_INDIRECT_DPTR -> Bool.False
1884     | INDIRECT_DPTR -> Bool.False
1885     | CARRY -> Bool.False
1886     | BIT_ADDR x -> Bool.False
1887     | N_BIT_ADDR x -> Bool.False
1888     | RELATIVE x -> Bool.False
1889     | ADDR11 x -> Bool.True
1890     | ADDR16 x -> Bool.False)
1891  | Addr16 ->
1892    (match a with
1893     | DIRECT x -> Bool.False
1894     | INDIRECT x -> Bool.False
1895     | EXT_INDIRECT x -> Bool.False
1896     | REGISTER x -> Bool.False
1897     | ACC_A -> Bool.False
1898     | ACC_B -> Bool.False
1899     | DPTR -> Bool.False
1900     | DATA x -> Bool.False
1901     | DATA16 x -> Bool.False
1902     | ACC_DPTR -> Bool.False
1903     | ACC_PC -> Bool.False
1904     | EXT_INDIRECT_DPTR -> Bool.False
1905     | INDIRECT_DPTR -> Bool.False
1906     | CARRY -> Bool.False
1907     | BIT_ADDR x -> Bool.False
1908     | N_BIT_ADDR x -> Bool.False
1909     | RELATIVE x -> Bool.False
1910     | ADDR11 x -> Bool.False
1911     | ADDR16 x -> Bool.True)
1912
1913(** val is_in :
1914    Nat.nat -> addressing_mode_tag Vector.vector -> addressing_mode ->
1915    Bool.bool **)
1916let rec is_in n l a =
1917  match l with
1918  | Vector.VEmpty -> Bool.False
1919  | Vector.VCons (m, he, tl) -> Bool.orb (is_a he a) (is_in m tl a)
1920
1921type subaddressing_mode =
1922  addressing_mode
1923  (* singleton inductive, whose constructor was mk_subaddressing_mode *)
1924
1925(** val subaddressing_mode_rect_Type4 :
1926    Nat.nat -> addressing_mode_tag Vector.vector -> (addressing_mode -> __ ->
1927    'a1) -> subaddressing_mode -> 'a1 **)
1928let rec subaddressing_mode_rect_Type4 n l h_mk_subaddressing_mode x_666 =
1929  let subaddressing_modeel = x_666 in
1930  h_mk_subaddressing_mode subaddressing_modeel __
1931
1932(** val subaddressing_mode_rect_Type5 :
1933    Nat.nat -> addressing_mode_tag Vector.vector -> (addressing_mode -> __ ->
1934    'a1) -> subaddressing_mode -> 'a1 **)
1935let rec subaddressing_mode_rect_Type5 n l h_mk_subaddressing_mode x_668 =
1936  let subaddressing_modeel = x_668 in
1937  h_mk_subaddressing_mode subaddressing_modeel __
1938
1939(** val subaddressing_mode_rect_Type3 :
1940    Nat.nat -> addressing_mode_tag Vector.vector -> (addressing_mode -> __ ->
1941    'a1) -> subaddressing_mode -> 'a1 **)
1942let rec subaddressing_mode_rect_Type3 n l h_mk_subaddressing_mode x_670 =
1943  let subaddressing_modeel = x_670 in
1944  h_mk_subaddressing_mode subaddressing_modeel __
1945
1946(** val subaddressing_mode_rect_Type2 :
1947    Nat.nat -> addressing_mode_tag Vector.vector -> (addressing_mode -> __ ->
1948    'a1) -> subaddressing_mode -> 'a1 **)
1949let rec subaddressing_mode_rect_Type2 n l h_mk_subaddressing_mode x_672 =
1950  let subaddressing_modeel = x_672 in
1951  h_mk_subaddressing_mode subaddressing_modeel __
1952
1953(** val subaddressing_mode_rect_Type1 :
1954    Nat.nat -> addressing_mode_tag Vector.vector -> (addressing_mode -> __ ->
1955    'a1) -> subaddressing_mode -> 'a1 **)
1956let rec subaddressing_mode_rect_Type1 n l h_mk_subaddressing_mode x_674 =
1957  let subaddressing_modeel = x_674 in
1958  h_mk_subaddressing_mode subaddressing_modeel __
1959
1960(** val subaddressing_mode_rect_Type0 :
1961    Nat.nat -> addressing_mode_tag Vector.vector -> (addressing_mode -> __ ->
1962    'a1) -> subaddressing_mode -> 'a1 **)
1963let rec subaddressing_mode_rect_Type0 n l h_mk_subaddressing_mode x_676 =
1964  let subaddressing_modeel = x_676 in
1965  h_mk_subaddressing_mode subaddressing_modeel __
1966
1967(** val subaddressing_modeel :
1968    Nat.nat -> addressing_mode_tag Vector.vector -> subaddressing_mode ->
1969    addressing_mode **)
1970let rec subaddressing_modeel n l xxx =
1971  let yyy = xxx in yyy
1972
1973(** val subaddressing_mode_inv_rect_Type4 :
1974    Nat.nat -> addressing_mode_tag Vector.vector -> subaddressing_mode ->
1975    (addressing_mode -> __ -> __ -> 'a1) -> 'a1 **)
1976let subaddressing_mode_inv_rect_Type4 x1 x2 hterm h1 =
1977  let hcut = subaddressing_mode_rect_Type4 x1 x2 h1 hterm in hcut __
1978
1979(** val subaddressing_mode_inv_rect_Type3 :
1980    Nat.nat -> addressing_mode_tag Vector.vector -> subaddressing_mode ->
1981    (addressing_mode -> __ -> __ -> 'a1) -> 'a1 **)
1982let subaddressing_mode_inv_rect_Type3 x1 x2 hterm h1 =
1983  let hcut = subaddressing_mode_rect_Type3 x1 x2 h1 hterm in hcut __
1984
1985(** val subaddressing_mode_inv_rect_Type2 :
1986    Nat.nat -> addressing_mode_tag Vector.vector -> subaddressing_mode ->
1987    (addressing_mode -> __ -> __ -> 'a1) -> 'a1 **)
1988let subaddressing_mode_inv_rect_Type2 x1 x2 hterm h1 =
1989  let hcut = subaddressing_mode_rect_Type2 x1 x2 h1 hterm in hcut __
1990
1991(** val subaddressing_mode_inv_rect_Type1 :
1992    Nat.nat -> addressing_mode_tag Vector.vector -> subaddressing_mode ->
1993    (addressing_mode -> __ -> __ -> 'a1) -> 'a1 **)
1994let subaddressing_mode_inv_rect_Type1 x1 x2 hterm h1 =
1995  let hcut = subaddressing_mode_rect_Type1 x1 x2 h1 hterm in hcut __
1996
1997(** val subaddressing_mode_inv_rect_Type0 :
1998    Nat.nat -> addressing_mode_tag Vector.vector -> subaddressing_mode ->
1999    (addressing_mode -> __ -> __ -> 'a1) -> 'a1 **)
2000let subaddressing_mode_inv_rect_Type0 x1 x2 hterm h1 =
2001  let hcut = subaddressing_mode_rect_Type0 x1 x2 h1 hterm in hcut __
2002
2003(** val subaddressing_mode_discr :
2004    Nat.nat -> addressing_mode_tag Vector.vector -> subaddressing_mode ->
2005    subaddressing_mode -> __ **)
2006let subaddressing_mode_discr a1 a2 x y =
2007  Logic.eq_rect_Type2 x (let a0 = x in Obj.magic (fun _ dH -> dH __ __)) y
2008
2009(** val subaddressing_mode_jmdiscr :
2010    Nat.nat -> addressing_mode_tag Vector.vector -> subaddressing_mode ->
2011    subaddressing_mode -> __ **)
2012let subaddressing_mode_jmdiscr a1 a2 x y =
2013  Logic.eq_rect_Type2 x (let a0 = x in Obj.magic (fun _ dH -> dH __ __)) y
2014
2015(** val dpi1__o__subaddressing_modeel__o__inject :
2016    Nat.nat -> addressing_mode_tag Vector.vector -> (subaddressing_mode, 'a1)
2017    Types.dPair -> addressing_mode Types.sig0 **)
2018let dpi1__o__subaddressing_modeel__o__inject x1 x2 x4 =
2019  subaddressing_modeel x1 x2 x4.Types.dpi1
2020
2021(** val eject__o__subaddressing_modeel__o__inject :
2022    Nat.nat -> addressing_mode_tag Vector.vector -> subaddressing_mode
2023    Types.sig0 -> addressing_mode Types.sig0 **)
2024let eject__o__subaddressing_modeel__o__inject x1 x2 x4 =
2025  subaddressing_modeel x1 x2 (Types.pi1 x4)
2026
2027(** val subaddressing_modeel__o__inject :
2028    Nat.nat -> addressing_mode_tag Vector.vector -> subaddressing_mode ->
2029    addressing_mode Types.sig0 **)
2030let subaddressing_modeel__o__inject x1 x2 x3 =
2031  subaddressing_modeel x1 x2 x3
2032
2033(** val dpi1__o__subaddressing_modeel :
2034    Nat.nat -> addressing_mode_tag Vector.vector -> (subaddressing_mode, 'a1)
2035    Types.dPair -> addressing_mode **)
2036let dpi1__o__subaddressing_modeel x0 x1 x3 =
2037  subaddressing_modeel x0 x1 x3.Types.dpi1
2038
2039(** val eject__o__subaddressing_modeel :
2040    Nat.nat -> addressing_mode_tag Vector.vector -> subaddressing_mode
2041    Types.sig0 -> addressing_mode **)
2042let eject__o__subaddressing_modeel x0 x1 x3 =
2043  subaddressing_modeel x0 x1 (Types.pi1 x3)
2044
2045type 'x1 dpi1__o__subaddressing_mode = subaddressing_mode
2046
2047type eject__o__subaddressing_mode = subaddressing_mode
2048
2049(** val dpi1__o__subaddressing_modeel__o__mk_subaddressing_mode__o__inject :
2050    Nat.nat -> Nat.nat -> addressing_mode_tag Vector.vector ->
2051    addressing_mode_tag Vector.vector -> (subaddressing_mode, 'a1)
2052    Types.dPair -> subaddressing_mode Types.sig0 **)
2053let dpi1__o__subaddressing_modeel__o__mk_subaddressing_mode__o__inject x0 x1 x2 x3 x6 =
2054  dpi1__o__subaddressing_modeel x0 x2 x6
2055
2056(** val dpi1__o__subaddressing_modeel__o__mk_subaddressing_mode__o__subaddressing_modeel__o__inject :
2057    Nat.nat -> Nat.nat -> addressing_mode_tag Vector.vector ->
2058    addressing_mode_tag Vector.vector -> (subaddressing_mode, 'a1)
2059    Types.dPair -> addressing_mode Types.sig0 **)
2060let dpi1__o__subaddressing_modeel__o__mk_subaddressing_mode__o__subaddressing_modeel__o__inject x0 x2 x3 x4 x6 =
2061  subaddressing_modeel__o__inject x2 x4
2062    (dpi1__o__subaddressing_modeel x0 x3 x6)
2063
2064(** val dpi1__o__subaddressing_modeel__o__mk_subaddressing_mode__o__subaddressing_modeel :
2065    Nat.nat -> Nat.nat -> addressing_mode_tag Vector.vector ->
2066    addressing_mode_tag Vector.vector -> (subaddressing_mode, 'a1)
2067    Types.dPair -> addressing_mode **)
2068let dpi1__o__subaddressing_modeel__o__mk_subaddressing_mode__o__subaddressing_modeel x0 x1 x2 x3 x5 =
2069  subaddressing_modeel x1 x3 (dpi1__o__subaddressing_modeel x0 x2 x5)
2070
2071(** val eject__o__subaddressing_modeel__o__mk_subaddressing_mode__o__inject :
2072    Nat.nat -> Nat.nat -> addressing_mode_tag Vector.vector ->
2073    addressing_mode_tag Vector.vector -> subaddressing_mode Types.sig0 ->
2074    subaddressing_mode Types.sig0 **)
2075let eject__o__subaddressing_modeel__o__mk_subaddressing_mode__o__inject x0 x1 x2 x3 x6 =
2076  eject__o__subaddressing_modeel x0 x2 x6
2077
2078(** val eject__o__subaddressing_modeel__o__mk_subaddressing_mode__o__subaddressing_modeel__o__inject :
2079    Nat.nat -> Nat.nat -> addressing_mode_tag Vector.vector ->
2080    addressing_mode_tag Vector.vector -> subaddressing_mode Types.sig0 ->
2081    addressing_mode Types.sig0 **)
2082let eject__o__subaddressing_modeel__o__mk_subaddressing_mode__o__subaddressing_modeel__o__inject x0 x2 x3 x4 x6 =
2083  subaddressing_modeel__o__inject x2 x4
2084    (eject__o__subaddressing_modeel x0 x3 x6)
2085
2086(** val eject__o__subaddressing_modeel__o__mk_subaddressing_mode__o__subaddressing_modeel :
2087    Nat.nat -> Nat.nat -> addressing_mode_tag Vector.vector ->
2088    addressing_mode_tag Vector.vector -> subaddressing_mode Types.sig0 ->
2089    addressing_mode **)
2090let eject__o__subaddressing_modeel__o__mk_subaddressing_mode__o__subaddressing_modeel x0 x1 x2 x3 x5 =
2091  subaddressing_modeel x1 x3 (eject__o__subaddressing_modeel x0 x2 x5)
2092
2093(** val subaddressing_modeel__o__mk_subaddressing_mode__o__inject :
2094    Nat.nat -> Nat.nat -> addressing_mode_tag Vector.vector ->
2095    addressing_mode_tag Vector.vector -> subaddressing_mode ->
2096    subaddressing_mode Types.sig0 **)
2097let subaddressing_modeel__o__mk_subaddressing_mode__o__inject x0 x1 x2 x3 x4 =
2098  subaddressing_modeel x0 x2 x4
2099
2100(** val subaddressing_modeel__o__mk_subaddressing_mode__o__subaddressing_modeel__o__inject :
2101    Nat.nat -> Nat.nat -> addressing_mode_tag Vector.vector ->
2102    addressing_mode_tag Vector.vector -> subaddressing_mode ->
2103    addressing_mode Types.sig0 **)
2104let subaddressing_modeel__o__mk_subaddressing_mode__o__subaddressing_modeel__o__inject x0 x2 x3 x4 x5 =
2105  subaddressing_modeel__o__inject x2 x4 (subaddressing_modeel x0 x3 x5)
2106
2107(** val subaddressing_modeel__o__mk_subaddressing_mode__o__subaddressing_modeel :
2108    Nat.nat -> Nat.nat -> addressing_mode_tag Vector.vector ->
2109    addressing_mode_tag Vector.vector -> subaddressing_mode ->
2110    addressing_mode **)
2111let subaddressing_modeel__o__mk_subaddressing_mode__o__subaddressing_modeel x0 x1 x2 x3 x4 =
2112  subaddressing_modeel x1 x3 (subaddressing_modeel x0 x2 x4)
2113
2114(** val dpi1__o__mk_subaddressing_mode__o__inject :
2115    Nat.nat -> (addressing_mode, 'a1) Types.dPair -> addressing_mode_tag
2116    Vector.vector -> subaddressing_mode Types.sig0 **)
2117let dpi1__o__mk_subaddressing_mode__o__inject x1 x2 x3 =
2118  x2.Types.dpi1
2119
2120(** val dpi1__o__mk_subaddressing_mode__o__subaddressing_modeel__o__inject :
2121    Nat.nat -> (addressing_mode, 'a1) Types.dPair -> addressing_mode_tag
2122    Vector.vector -> addressing_mode Types.sig0 **)
2123let dpi1__o__mk_subaddressing_mode__o__subaddressing_modeel__o__inject x2 x3 x4 =
2124  subaddressing_modeel__o__inject x2 x4 x3.Types.dpi1
2125
2126(** val dpi1__o__mk_subaddressing_mode__o__subaddressing_modeel :
2127    Nat.nat -> (addressing_mode, 'a1) Types.dPair -> addressing_mode_tag
2128    Vector.vector -> addressing_mode **)
2129let dpi1__o__mk_subaddressing_mode__o__subaddressing_modeel x1 x2 x3 =
2130  subaddressing_modeel x1 x3 x2.Types.dpi1
2131
2132(** val eject__o__mk_subaddressing_mode__o__inject :
2133    Nat.nat -> addressing_mode Types.sig0 -> addressing_mode_tag
2134    Vector.vector -> subaddressing_mode Types.sig0 **)
2135let eject__o__mk_subaddressing_mode__o__inject x1 x2 x3 =
2136  Types.pi1 x2
2137
2138(** val eject__o__mk_subaddressing_mode__o__subaddressing_modeel__o__inject :
2139    Nat.nat -> addressing_mode Types.sig0 -> addressing_mode_tag
2140    Vector.vector -> addressing_mode Types.sig0 **)
2141let eject__o__mk_subaddressing_mode__o__subaddressing_modeel__o__inject x2 x3 x4 =
2142  subaddressing_modeel__o__inject x2 x4 (Types.pi1 x3)
2143
2144(** val eject__o__mk_subaddressing_mode__o__subaddressing_modeel :
2145    Nat.nat -> addressing_mode Types.sig0 -> addressing_mode_tag
2146    Vector.vector -> addressing_mode **)
2147let eject__o__mk_subaddressing_mode__o__subaddressing_modeel x1 x2 x3 =
2148  subaddressing_modeel x1 x3 (Types.pi1 x2)
2149
2150(** val mk_subaddressing_mode__o__subaddressing_modeel :
2151    Nat.nat -> addressing_mode -> addressing_mode_tag Vector.vector ->
2152    addressing_mode **)
2153let mk_subaddressing_mode__o__subaddressing_modeel x0 x1 x2 =
2154  subaddressing_modeel x0 x2 x1
2155
2156(** val mk_subaddressing_mode__o__subaddressing_modeel__o__inject :
2157    Nat.nat -> addressing_mode -> addressing_mode_tag Vector.vector ->
2158    addressing_mode Types.sig0 **)
2159let mk_subaddressing_mode__o__subaddressing_modeel__o__inject x1 x2 x3 =
2160  subaddressing_modeel__o__inject x1 x3 x2
2161
2162(** val mk_subaddressing_mode__o__inject :
2163    Nat.nat -> addressing_mode -> addressing_mode_tag Vector.vector ->
2164    subaddressing_mode Types.sig0 **)
2165let mk_subaddressing_mode__o__inject x0 x1 x2 =
2166  x1
2167
2168(** val dpi1__o__subaddressing_modeel__o__mk_subaddressing_mode :
2169    Nat.nat -> Nat.nat -> addressing_mode_tag Vector.vector ->
2170    addressing_mode_tag Vector.vector -> (subaddressing_mode, 'a1)
2171    Types.dPair -> subaddressing_mode **)
2172let dpi1__o__subaddressing_modeel__o__mk_subaddressing_mode x0 x1 x2 x3 x5 =
2173  dpi1__o__subaddressing_modeel x0 x2 x5
2174
2175(** val eject__o__subaddressing_modeel__o__mk_subaddressing_mode :
2176    Nat.nat -> Nat.nat -> addressing_mode_tag Vector.vector ->
2177    addressing_mode_tag Vector.vector -> subaddressing_mode Types.sig0 ->
2178    subaddressing_mode **)
2179let eject__o__subaddressing_modeel__o__mk_subaddressing_mode x0 x1 x2 x3 x5 =
2180  eject__o__subaddressing_modeel x0 x2 x5
2181
2182(** val subaddressing_modeel__o__mk_subaddressing_mode :
2183    Nat.nat -> Nat.nat -> addressing_mode_tag Vector.vector ->
2184    addressing_mode_tag Vector.vector -> subaddressing_mode ->
2185    subaddressing_mode **)
2186let subaddressing_modeel__o__mk_subaddressing_mode x0 x1 x2 x3 x4 =
2187  subaddressing_modeel x0 x2 x4
2188
2189(** val dpi1__o__mk_subaddressing_mode :
2190    Nat.nat -> (addressing_mode, 'a1) Types.dPair -> addressing_mode_tag
2191    Vector.vector -> subaddressing_mode **)
2192let dpi1__o__mk_subaddressing_mode x1 x2 x3 =
2193  x2.Types.dpi1
2194
2195(** val eject__o__mk_subaddressing_mode :
2196    Nat.nat -> addressing_mode Types.sig0 -> addressing_mode_tag
2197    Vector.vector -> subaddressing_mode **)
2198let eject__o__mk_subaddressing_mode x1 x2 x3 =
2199  Types.pi1 x2
2200
2201type 'a preinstruction =
2202| ADD of subaddressing_mode * subaddressing_mode
2203| ADDC of subaddressing_mode * subaddressing_mode
2204| SUBB of subaddressing_mode * subaddressing_mode
2205| INC of subaddressing_mode
2206| DEC of subaddressing_mode
2207| MUL of subaddressing_mode * subaddressing_mode
2208| DIV of subaddressing_mode * subaddressing_mode
2209| DA of subaddressing_mode
2210| JC of 'a
2211| JNC of 'a
2212| JB of subaddressing_mode * 'a
2213| JNB of subaddressing_mode * 'a
2214| JBC of subaddressing_mode * 'a
2215| JZ of 'a
2216| JNZ of 'a
2217| CJNE of ((subaddressing_mode, subaddressing_mode) Types.prod,
2218          (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum * 
2219   'a
2220| DJNZ of subaddressing_mode * 'a
2221| ANL of (((subaddressing_mode, subaddressing_mode) Types.prod,
2222         (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2223         (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum
2224| ORL of (((subaddressing_mode, subaddressing_mode) Types.prod,
2225         (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2226         (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum
2227| XRL of ((subaddressing_mode, subaddressing_mode) Types.prod,
2228         (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum
2229| CLR of subaddressing_mode
2230| CPL of subaddressing_mode
2231| RL of subaddressing_mode
2232| RLC of subaddressing_mode
2233| RR of subaddressing_mode
2234| RRC of subaddressing_mode
2235| SWAP of subaddressing_mode
2236| MOV of ((((((subaddressing_mode, subaddressing_mode) Types.prod,
2237         (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2238         (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2239         (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2240         (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2241         (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum
2242| MOVX of ((subaddressing_mode, subaddressing_mode) Types.prod,
2243          (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum
2244| SETB of subaddressing_mode
2245| PUSH of subaddressing_mode
2246| POP of subaddressing_mode
2247| XCH of subaddressing_mode * subaddressing_mode
2248| XCHD of subaddressing_mode * subaddressing_mode
2249| RET
2250| RETI
2251| NOP
2252| JMP of subaddressing_mode
2253
2254(** val preinstruction_rect_Type4 :
2255    (subaddressing_mode -> subaddressing_mode -> 'a2) -> (subaddressing_mode
2256    -> subaddressing_mode -> 'a2) -> (subaddressing_mode ->
2257    subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2258    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> subaddressing_mode
2259    -> 'a2) -> (subaddressing_mode -> subaddressing_mode -> 'a2) ->
2260    (subaddressing_mode -> 'a2) -> ('a1 -> 'a2) -> ('a1 -> 'a2) ->
2261    (subaddressing_mode -> 'a1 -> 'a2) -> (subaddressing_mode -> 'a1 -> 'a2)
2262    -> (subaddressing_mode -> 'a1 -> 'a2) -> ('a1 -> 'a2) -> ('a1 -> 'a2) ->
2263    (((subaddressing_mode, subaddressing_mode) Types.prod,
2264    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a1 ->
2265    'a2) -> (subaddressing_mode -> 'a1 -> 'a2) -> ((((subaddressing_mode,
2266    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2267    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2268    Types.prod) Types.sum -> 'a2) -> ((((subaddressing_mode,
2269    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2270    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2271    Types.prod) Types.sum -> 'a2) -> (((subaddressing_mode,
2272    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2273    Types.prod) Types.sum -> 'a2) -> (subaddressing_mode -> 'a2) ->
2274    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2275    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2276    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2277    (((((((subaddressing_mode, subaddressing_mode) Types.prod,
2278    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2279    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2280    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2281    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2282    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a2) ->
2283    (((subaddressing_mode, subaddressing_mode) Types.prod,
2284    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a2) ->
2285    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2286    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> subaddressing_mode
2287    -> 'a2) -> (subaddressing_mode -> subaddressing_mode -> 'a2) -> 'a2 ->
2288    'a2 -> 'a2 -> (subaddressing_mode -> 'a2) -> 'a1 preinstruction -> 'a2 **)
2289let rec preinstruction_rect_Type4 h_ADD h_ADDC h_SUBB h_INC h_DEC h_MUL h_DIV h_DA h_JC h_JNC h_JB h_JNB h_JBC h_JZ h_JNZ h_CJNE h_DJNZ h_ANL h_ORL h_XRL h_CLR h_CPL h_RL h_RLC h_RR h_RRC h_SWAP h_MOV h_MOVX h_SETB h_PUSH h_POP h_XCH h_XCHD h_RET h_RETI h_NOP h_JMP = function
2290| ADD (x_778, x_777) -> h_ADD x_778 x_777
2291| ADDC (x_780, x_779) -> h_ADDC x_780 x_779
2292| SUBB (x_782, x_781) -> h_SUBB x_782 x_781
2293| INC x_783 -> h_INC x_783
2294| DEC x_784 -> h_DEC x_784
2295| MUL (x_786, x_785) -> h_MUL x_786 x_785
2296| DIV (x_788, x_787) -> h_DIV x_788 x_787
2297| DA x_789 -> h_DA x_789
2298| JC x_790 -> h_JC x_790
2299| JNC x_791 -> h_JNC x_791
2300| JB (x_793, x_792) -> h_JB x_793 x_792
2301| JNB (x_795, x_794) -> h_JNB x_795 x_794
2302| JBC (x_797, x_796) -> h_JBC x_797 x_796
2303| JZ x_798 -> h_JZ x_798
2304| JNZ x_799 -> h_JNZ x_799
2305| CJNE (x_801, x_800) -> h_CJNE x_801 x_800
2306| DJNZ (x_803, x_802) -> h_DJNZ x_803 x_802
2307| ANL x_804 -> h_ANL x_804
2308| ORL x_805 -> h_ORL x_805
2309| XRL x_806 -> h_XRL x_806
2310| CLR x_807 -> h_CLR x_807
2311| CPL x_808 -> h_CPL x_808
2312| RL x_809 -> h_RL x_809
2313| RLC x_810 -> h_RLC x_810
2314| RR x_811 -> h_RR x_811
2315| RRC x_812 -> h_RRC x_812
2316| SWAP x_813 -> h_SWAP x_813
2317| MOV x_814 -> h_MOV x_814
2318| MOVX x_815 -> h_MOVX x_815
2319| SETB x_816 -> h_SETB x_816
2320| PUSH x_817 -> h_PUSH x_817
2321| POP x_818 -> h_POP x_818
2322| XCH (x_820, x_819) -> h_XCH x_820 x_819
2323| XCHD (x_822, x_821) -> h_XCHD x_822 x_821
2324| RET -> h_RET
2325| RETI -> h_RETI
2326| NOP -> h_NOP
2327| JMP x_823 -> h_JMP x_823
2328
2329(** val preinstruction_rect_Type5 :
2330    (subaddressing_mode -> subaddressing_mode -> 'a2) -> (subaddressing_mode
2331    -> subaddressing_mode -> 'a2) -> (subaddressing_mode ->
2332    subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2333    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> subaddressing_mode
2334    -> 'a2) -> (subaddressing_mode -> subaddressing_mode -> 'a2) ->
2335    (subaddressing_mode -> 'a2) -> ('a1 -> 'a2) -> ('a1 -> 'a2) ->
2336    (subaddressing_mode -> 'a1 -> 'a2) -> (subaddressing_mode -> 'a1 -> 'a2)
2337    -> (subaddressing_mode -> 'a1 -> 'a2) -> ('a1 -> 'a2) -> ('a1 -> 'a2) ->
2338    (((subaddressing_mode, subaddressing_mode) Types.prod,
2339    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a1 ->
2340    'a2) -> (subaddressing_mode -> 'a1 -> 'a2) -> ((((subaddressing_mode,
2341    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2342    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2343    Types.prod) Types.sum -> 'a2) -> ((((subaddressing_mode,
2344    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2345    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2346    Types.prod) Types.sum -> 'a2) -> (((subaddressing_mode,
2347    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2348    Types.prod) Types.sum -> 'a2) -> (subaddressing_mode -> 'a2) ->
2349    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2350    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2351    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2352    (((((((subaddressing_mode, subaddressing_mode) Types.prod,
2353    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2354    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2355    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2356    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2357    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a2) ->
2358    (((subaddressing_mode, subaddressing_mode) Types.prod,
2359    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a2) ->
2360    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2361    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> subaddressing_mode
2362    -> 'a2) -> (subaddressing_mode -> subaddressing_mode -> 'a2) -> 'a2 ->
2363    'a2 -> 'a2 -> (subaddressing_mode -> 'a2) -> 'a1 preinstruction -> 'a2 **)
2364let rec preinstruction_rect_Type5 h_ADD h_ADDC h_SUBB h_INC h_DEC h_MUL h_DIV h_DA h_JC h_JNC h_JB h_JNB h_JBC h_JZ h_JNZ h_CJNE h_DJNZ h_ANL h_ORL h_XRL h_CLR h_CPL h_RL h_RLC h_RR h_RRC h_SWAP h_MOV h_MOVX h_SETB h_PUSH h_POP h_XCH h_XCHD h_RET h_RETI h_NOP h_JMP = function
2365| ADD (x_864, x_863) -> h_ADD x_864 x_863
2366| ADDC (x_866, x_865) -> h_ADDC x_866 x_865
2367| SUBB (x_868, x_867) -> h_SUBB x_868 x_867
2368| INC x_869 -> h_INC x_869
2369| DEC x_870 -> h_DEC x_870
2370| MUL (x_872, x_871) -> h_MUL x_872 x_871
2371| DIV (x_874, x_873) -> h_DIV x_874 x_873
2372| DA x_875 -> h_DA x_875
2373| JC x_876 -> h_JC x_876
2374| JNC x_877 -> h_JNC x_877
2375| JB (x_879, x_878) -> h_JB x_879 x_878
2376| JNB (x_881, x_880) -> h_JNB x_881 x_880
2377| JBC (x_883, x_882) -> h_JBC x_883 x_882
2378| JZ x_884 -> h_JZ x_884
2379| JNZ x_885 -> h_JNZ x_885
2380| CJNE (x_887, x_886) -> h_CJNE x_887 x_886
2381| DJNZ (x_889, x_888) -> h_DJNZ x_889 x_888
2382| ANL x_890 -> h_ANL x_890
2383| ORL x_891 -> h_ORL x_891
2384| XRL x_892 -> h_XRL x_892
2385| CLR x_893 -> h_CLR x_893
2386| CPL x_894 -> h_CPL x_894
2387| RL x_895 -> h_RL x_895
2388| RLC x_896 -> h_RLC x_896
2389| RR x_897 -> h_RR x_897
2390| RRC x_898 -> h_RRC x_898
2391| SWAP x_899 -> h_SWAP x_899
2392| MOV x_900 -> h_MOV x_900
2393| MOVX x_901 -> h_MOVX x_901
2394| SETB x_902 -> h_SETB x_902
2395| PUSH x_903 -> h_PUSH x_903
2396| POP x_904 -> h_POP x_904
2397| XCH (x_906, x_905) -> h_XCH x_906 x_905
2398| XCHD (x_908, x_907) -> h_XCHD x_908 x_907
2399| RET -> h_RET
2400| RETI -> h_RETI
2401| NOP -> h_NOP
2402| JMP x_909 -> h_JMP x_909
2403
2404(** val preinstruction_rect_Type3 :
2405    (subaddressing_mode -> subaddressing_mode -> 'a2) -> (subaddressing_mode
2406    -> subaddressing_mode -> 'a2) -> (subaddressing_mode ->
2407    subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2408    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> subaddressing_mode
2409    -> 'a2) -> (subaddressing_mode -> subaddressing_mode -> 'a2) ->
2410    (subaddressing_mode -> 'a2) -> ('a1 -> 'a2) -> ('a1 -> 'a2) ->
2411    (subaddressing_mode -> 'a1 -> 'a2) -> (subaddressing_mode -> 'a1 -> 'a2)
2412    -> (subaddressing_mode -> 'a1 -> 'a2) -> ('a1 -> 'a2) -> ('a1 -> 'a2) ->
2413    (((subaddressing_mode, subaddressing_mode) Types.prod,
2414    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a1 ->
2415    'a2) -> (subaddressing_mode -> 'a1 -> 'a2) -> ((((subaddressing_mode,
2416    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2417    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2418    Types.prod) Types.sum -> 'a2) -> ((((subaddressing_mode,
2419    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2420    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2421    Types.prod) Types.sum -> 'a2) -> (((subaddressing_mode,
2422    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2423    Types.prod) Types.sum -> 'a2) -> (subaddressing_mode -> 'a2) ->
2424    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2425    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2426    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2427    (((((((subaddressing_mode, subaddressing_mode) Types.prod,
2428    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2429    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2430    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2431    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2432    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a2) ->
2433    (((subaddressing_mode, subaddressing_mode) Types.prod,
2434    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a2) ->
2435    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2436    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> subaddressing_mode
2437    -> 'a2) -> (subaddressing_mode -> subaddressing_mode -> 'a2) -> 'a2 ->
2438    'a2 -> 'a2 -> (subaddressing_mode -> 'a2) -> 'a1 preinstruction -> 'a2 **)
2439let rec preinstruction_rect_Type3 h_ADD h_ADDC h_SUBB h_INC h_DEC h_MUL h_DIV h_DA h_JC h_JNC h_JB h_JNB h_JBC h_JZ h_JNZ h_CJNE h_DJNZ h_ANL h_ORL h_XRL h_CLR h_CPL h_RL h_RLC h_RR h_RRC h_SWAP h_MOV h_MOVX h_SETB h_PUSH h_POP h_XCH h_XCHD h_RET h_RETI h_NOP h_JMP = function
2440| ADD (x_950, x_949) -> h_ADD x_950 x_949
2441| ADDC (x_952, x_951) -> h_ADDC x_952 x_951
2442| SUBB (x_954, x_953) -> h_SUBB x_954 x_953
2443| INC x_955 -> h_INC x_955
2444| DEC x_956 -> h_DEC x_956
2445| MUL (x_958, x_957) -> h_MUL x_958 x_957
2446| DIV (x_960, x_959) -> h_DIV x_960 x_959
2447| DA x_961 -> h_DA x_961
2448| JC x_962 -> h_JC x_962
2449| JNC x_963 -> h_JNC x_963
2450| JB (x_965, x_964) -> h_JB x_965 x_964
2451| JNB (x_967, x_966) -> h_JNB x_967 x_966
2452| JBC (x_969, x_968) -> h_JBC x_969 x_968
2453| JZ x_970 -> h_JZ x_970
2454| JNZ x_971 -> h_JNZ x_971
2455| CJNE (x_973, x_972) -> h_CJNE x_973 x_972
2456| DJNZ (x_975, x_974) -> h_DJNZ x_975 x_974
2457| ANL x_976 -> h_ANL x_976
2458| ORL x_977 -> h_ORL x_977
2459| XRL x_978 -> h_XRL x_978
2460| CLR x_979 -> h_CLR x_979
2461| CPL x_980 -> h_CPL x_980
2462| RL x_981 -> h_RL x_981
2463| RLC x_982 -> h_RLC x_982
2464| RR x_983 -> h_RR x_983
2465| RRC x_984 -> h_RRC x_984
2466| SWAP x_985 -> h_SWAP x_985
2467| MOV x_986 -> h_MOV x_986
2468| MOVX x_987 -> h_MOVX x_987
2469| SETB x_988 -> h_SETB x_988
2470| PUSH x_989 -> h_PUSH x_989
2471| POP x_990 -> h_POP x_990
2472| XCH (x_992, x_991) -> h_XCH x_992 x_991
2473| XCHD (x_994, x_993) -> h_XCHD x_994 x_993
2474| RET -> h_RET
2475| RETI -> h_RETI
2476| NOP -> h_NOP
2477| JMP x_995 -> h_JMP x_995
2478
2479(** val preinstruction_rect_Type2 :
2480    (subaddressing_mode -> subaddressing_mode -> 'a2) -> (subaddressing_mode
2481    -> subaddressing_mode -> 'a2) -> (subaddressing_mode ->
2482    subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2483    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> subaddressing_mode
2484    -> 'a2) -> (subaddressing_mode -> subaddressing_mode -> 'a2) ->
2485    (subaddressing_mode -> 'a2) -> ('a1 -> 'a2) -> ('a1 -> 'a2) ->
2486    (subaddressing_mode -> 'a1 -> 'a2) -> (subaddressing_mode -> 'a1 -> 'a2)
2487    -> (subaddressing_mode -> 'a1 -> 'a2) -> ('a1 -> 'a2) -> ('a1 -> 'a2) ->
2488    (((subaddressing_mode, subaddressing_mode) Types.prod,
2489    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a1 ->
2490    'a2) -> (subaddressing_mode -> 'a1 -> 'a2) -> ((((subaddressing_mode,
2491    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2492    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2493    Types.prod) Types.sum -> 'a2) -> ((((subaddressing_mode,
2494    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2495    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2496    Types.prod) Types.sum -> 'a2) -> (((subaddressing_mode,
2497    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2498    Types.prod) Types.sum -> 'a2) -> (subaddressing_mode -> 'a2) ->
2499    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2500    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2501    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2502    (((((((subaddressing_mode, subaddressing_mode) Types.prod,
2503    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2504    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2505    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2506    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2507    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a2) ->
2508    (((subaddressing_mode, subaddressing_mode) Types.prod,
2509    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a2) ->
2510    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2511    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> subaddressing_mode
2512    -> 'a2) -> (subaddressing_mode -> subaddressing_mode -> 'a2) -> 'a2 ->
2513    'a2 -> 'a2 -> (subaddressing_mode -> 'a2) -> 'a1 preinstruction -> 'a2 **)
2514let rec preinstruction_rect_Type2 h_ADD h_ADDC h_SUBB h_INC h_DEC h_MUL h_DIV h_DA h_JC h_JNC h_JB h_JNB h_JBC h_JZ h_JNZ h_CJNE h_DJNZ h_ANL h_ORL h_XRL h_CLR h_CPL h_RL h_RLC h_RR h_RRC h_SWAP h_MOV h_MOVX h_SETB h_PUSH h_POP h_XCH h_XCHD h_RET h_RETI h_NOP h_JMP = function
2515| ADD (x_1036, x_1035) -> h_ADD x_1036 x_1035
2516| ADDC (x_1038, x_1037) -> h_ADDC x_1038 x_1037
2517| SUBB (x_1040, x_1039) -> h_SUBB x_1040 x_1039
2518| INC x_1041 -> h_INC x_1041
2519| DEC x_1042 -> h_DEC x_1042
2520| MUL (x_1044, x_1043) -> h_MUL x_1044 x_1043
2521| DIV (x_1046, x_1045) -> h_DIV x_1046 x_1045
2522| DA x_1047 -> h_DA x_1047
2523| JC x_1048 -> h_JC x_1048
2524| JNC x_1049 -> h_JNC x_1049
2525| JB (x_1051, x_1050) -> h_JB x_1051 x_1050
2526| JNB (x_1053, x_1052) -> h_JNB x_1053 x_1052
2527| JBC (x_1055, x_1054) -> h_JBC x_1055 x_1054
2528| JZ x_1056 -> h_JZ x_1056
2529| JNZ x_1057 -> h_JNZ x_1057
2530| CJNE (x_1059, x_1058) -> h_CJNE x_1059 x_1058
2531| DJNZ (x_1061, x_1060) -> h_DJNZ x_1061 x_1060
2532| ANL x_1062 -> h_ANL x_1062
2533| ORL x_1063 -> h_ORL x_1063
2534| XRL x_1064 -> h_XRL x_1064
2535| CLR x_1065 -> h_CLR x_1065
2536| CPL x_1066 -> h_CPL x_1066
2537| RL x_1067 -> h_RL x_1067
2538| RLC x_1068 -> h_RLC x_1068
2539| RR x_1069 -> h_RR x_1069
2540| RRC x_1070 -> h_RRC x_1070
2541| SWAP x_1071 -> h_SWAP x_1071
2542| MOV x_1072 -> h_MOV x_1072
2543| MOVX x_1073 -> h_MOVX x_1073
2544| SETB x_1074 -> h_SETB x_1074
2545| PUSH x_1075 -> h_PUSH x_1075
2546| POP x_1076 -> h_POP x_1076
2547| XCH (x_1078, x_1077) -> h_XCH x_1078 x_1077
2548| XCHD (x_1080, x_1079) -> h_XCHD x_1080 x_1079
2549| RET -> h_RET
2550| RETI -> h_RETI
2551| NOP -> h_NOP
2552| JMP x_1081 -> h_JMP x_1081
2553
2554(** val preinstruction_rect_Type1 :
2555    (subaddressing_mode -> subaddressing_mode -> 'a2) -> (subaddressing_mode
2556    -> subaddressing_mode -> 'a2) -> (subaddressing_mode ->
2557    subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2558    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> subaddressing_mode
2559    -> 'a2) -> (subaddressing_mode -> subaddressing_mode -> 'a2) ->
2560    (subaddressing_mode -> 'a2) -> ('a1 -> 'a2) -> ('a1 -> 'a2) ->
2561    (subaddressing_mode -> 'a1 -> 'a2) -> (subaddressing_mode -> 'a1 -> 'a2)
2562    -> (subaddressing_mode -> 'a1 -> 'a2) -> ('a1 -> 'a2) -> ('a1 -> 'a2) ->
2563    (((subaddressing_mode, subaddressing_mode) Types.prod,
2564    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a1 ->
2565    'a2) -> (subaddressing_mode -> 'a1 -> 'a2) -> ((((subaddressing_mode,
2566    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2567    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2568    Types.prod) Types.sum -> 'a2) -> ((((subaddressing_mode,
2569    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2570    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2571    Types.prod) Types.sum -> 'a2) -> (((subaddressing_mode,
2572    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2573    Types.prod) Types.sum -> 'a2) -> (subaddressing_mode -> 'a2) ->
2574    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2575    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2576    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2577    (((((((subaddressing_mode, subaddressing_mode) Types.prod,
2578    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2579    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2580    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2581    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2582    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a2) ->
2583    (((subaddressing_mode, subaddressing_mode) Types.prod,
2584    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a2) ->
2585    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2586    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> subaddressing_mode
2587    -> 'a2) -> (subaddressing_mode -> subaddressing_mode -> 'a2) -> 'a2 ->
2588    'a2 -> 'a2 -> (subaddressing_mode -> 'a2) -> 'a1 preinstruction -> 'a2 **)
2589let rec preinstruction_rect_Type1 h_ADD h_ADDC h_SUBB h_INC h_DEC h_MUL h_DIV h_DA h_JC h_JNC h_JB h_JNB h_JBC h_JZ h_JNZ h_CJNE h_DJNZ h_ANL h_ORL h_XRL h_CLR h_CPL h_RL h_RLC h_RR h_RRC h_SWAP h_MOV h_MOVX h_SETB h_PUSH h_POP h_XCH h_XCHD h_RET h_RETI h_NOP h_JMP = function
2590| ADD (x_1122, x_1121) -> h_ADD x_1122 x_1121
2591| ADDC (x_1124, x_1123) -> h_ADDC x_1124 x_1123
2592| SUBB (x_1126, x_1125) -> h_SUBB x_1126 x_1125
2593| INC x_1127 -> h_INC x_1127
2594| DEC x_1128 -> h_DEC x_1128
2595| MUL (x_1130, x_1129) -> h_MUL x_1130 x_1129
2596| DIV (x_1132, x_1131) -> h_DIV x_1132 x_1131
2597| DA x_1133 -> h_DA x_1133
2598| JC x_1134 -> h_JC x_1134
2599| JNC x_1135 -> h_JNC x_1135
2600| JB (x_1137, x_1136) -> h_JB x_1137 x_1136
2601| JNB (x_1139, x_1138) -> h_JNB x_1139 x_1138
2602| JBC (x_1141, x_1140) -> h_JBC x_1141 x_1140
2603| JZ x_1142 -> h_JZ x_1142
2604| JNZ x_1143 -> h_JNZ x_1143
2605| CJNE (x_1145, x_1144) -> h_CJNE x_1145 x_1144
2606| DJNZ (x_1147, x_1146) -> h_DJNZ x_1147 x_1146
2607| ANL x_1148 -> h_ANL x_1148
2608| ORL x_1149 -> h_ORL x_1149
2609| XRL x_1150 -> h_XRL x_1150
2610| CLR x_1151 -> h_CLR x_1151
2611| CPL x_1152 -> h_CPL x_1152
2612| RL x_1153 -> h_RL x_1153
2613| RLC x_1154 -> h_RLC x_1154
2614| RR x_1155 -> h_RR x_1155
2615| RRC x_1156 -> h_RRC x_1156
2616| SWAP x_1157 -> h_SWAP x_1157
2617| MOV x_1158 -> h_MOV x_1158
2618| MOVX x_1159 -> h_MOVX x_1159
2619| SETB x_1160 -> h_SETB x_1160
2620| PUSH x_1161 -> h_PUSH x_1161
2621| POP x_1162 -> h_POP x_1162
2622| XCH (x_1164, x_1163) -> h_XCH x_1164 x_1163
2623| XCHD (x_1166, x_1165) -> h_XCHD x_1166 x_1165
2624| RET -> h_RET
2625| RETI -> h_RETI
2626| NOP -> h_NOP
2627| JMP x_1167 -> h_JMP x_1167
2628
2629(** val preinstruction_rect_Type0 :
2630    (subaddressing_mode -> subaddressing_mode -> 'a2) -> (subaddressing_mode
2631    -> subaddressing_mode -> 'a2) -> (subaddressing_mode ->
2632    subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2633    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> subaddressing_mode
2634    -> 'a2) -> (subaddressing_mode -> subaddressing_mode -> 'a2) ->
2635    (subaddressing_mode -> 'a2) -> ('a1 -> 'a2) -> ('a1 -> 'a2) ->
2636    (subaddressing_mode -> 'a1 -> 'a2) -> (subaddressing_mode -> 'a1 -> 'a2)
2637    -> (subaddressing_mode -> 'a1 -> 'a2) -> ('a1 -> 'a2) -> ('a1 -> 'a2) ->
2638    (((subaddressing_mode, subaddressing_mode) Types.prod,
2639    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a1 ->
2640    'a2) -> (subaddressing_mode -> 'a1 -> 'a2) -> ((((subaddressing_mode,
2641    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2642    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2643    Types.prod) Types.sum -> 'a2) -> ((((subaddressing_mode,
2644    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2645    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2646    Types.prod) Types.sum -> 'a2) -> (((subaddressing_mode,
2647    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2648    Types.prod) Types.sum -> 'a2) -> (subaddressing_mode -> 'a2) ->
2649    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2650    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2651    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2652    (((((((subaddressing_mode, subaddressing_mode) Types.prod,
2653    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2654    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2655    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2656    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2657    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a2) ->
2658    (((subaddressing_mode, subaddressing_mode) Types.prod,
2659    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> 'a2) ->
2660    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> 'a2) ->
2661    (subaddressing_mode -> 'a2) -> (subaddressing_mode -> subaddressing_mode
2662    -> 'a2) -> (subaddressing_mode -> subaddressing_mode -> 'a2) -> 'a2 ->
2663    'a2 -> 'a2 -> (subaddressing_mode -> 'a2) -> 'a1 preinstruction -> 'a2 **)
2664let rec preinstruction_rect_Type0 h_ADD h_ADDC h_SUBB h_INC h_DEC h_MUL h_DIV h_DA h_JC h_JNC h_JB h_JNB h_JBC h_JZ h_JNZ h_CJNE h_DJNZ h_ANL h_ORL h_XRL h_CLR h_CPL h_RL h_RLC h_RR h_RRC h_SWAP h_MOV h_MOVX h_SETB h_PUSH h_POP h_XCH h_XCHD h_RET h_RETI h_NOP h_JMP = function
2665| ADD (x_1208, x_1207) -> h_ADD x_1208 x_1207
2666| ADDC (x_1210, x_1209) -> h_ADDC x_1210 x_1209
2667| SUBB (x_1212, x_1211) -> h_SUBB x_1212 x_1211
2668| INC x_1213 -> h_INC x_1213
2669| DEC x_1214 -> h_DEC x_1214
2670| MUL (x_1216, x_1215) -> h_MUL x_1216 x_1215
2671| DIV (x_1218, x_1217) -> h_DIV x_1218 x_1217
2672| DA x_1219 -> h_DA x_1219
2673| JC x_1220 -> h_JC x_1220
2674| JNC x_1221 -> h_JNC x_1221
2675| JB (x_1223, x_1222) -> h_JB x_1223 x_1222
2676| JNB (x_1225, x_1224) -> h_JNB x_1225 x_1224
2677| JBC (x_1227, x_1226) -> h_JBC x_1227 x_1226
2678| JZ x_1228 -> h_JZ x_1228
2679| JNZ x_1229 -> h_JNZ x_1229
2680| CJNE (x_1231, x_1230) -> h_CJNE x_1231 x_1230
2681| DJNZ (x_1233, x_1232) -> h_DJNZ x_1233 x_1232
2682| ANL x_1234 -> h_ANL x_1234
2683| ORL x_1235 -> h_ORL x_1235
2684| XRL x_1236 -> h_XRL x_1236
2685| CLR x_1237 -> h_CLR x_1237
2686| CPL x_1238 -> h_CPL x_1238
2687| RL x_1239 -> h_RL x_1239
2688| RLC x_1240 -> h_RLC x_1240
2689| RR x_1241 -> h_RR x_1241
2690| RRC x_1242 -> h_RRC x_1242
2691| SWAP x_1243 -> h_SWAP x_1243
2692| MOV x_1244 -> h_MOV x_1244
2693| MOVX x_1245 -> h_MOVX x_1245
2694| SETB x_1246 -> h_SETB x_1246
2695| PUSH x_1247 -> h_PUSH x_1247
2696| POP x_1248 -> h_POP x_1248
2697| XCH (x_1250, x_1249) -> h_XCH x_1250 x_1249
2698| XCHD (x_1252, x_1251) -> h_XCHD x_1252 x_1251
2699| RET -> h_RET
2700| RETI -> h_RETI
2701| NOP -> h_NOP
2702| JMP x_1253 -> h_JMP x_1253
2703
2704(** val preinstruction_inv_rect_Type4 :
2705    'a1 preinstruction -> (subaddressing_mode -> subaddressing_mode -> __ ->
2706    'a2) -> (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2707    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2708    (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2) ->
2709    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2710    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2711    (subaddressing_mode -> __ -> 'a2) -> ('a1 -> __ -> 'a2) -> ('a1 -> __ ->
2712    'a2) -> (subaddressing_mode -> 'a1 -> __ -> 'a2) -> (subaddressing_mode
2713    -> 'a1 -> __ -> 'a2) -> (subaddressing_mode -> 'a1 -> __ -> 'a2) -> ('a1
2714    -> __ -> 'a2) -> ('a1 -> __ -> 'a2) -> (((subaddressing_mode,
2715    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2716    Types.prod) Types.sum -> 'a1 -> __ -> 'a2) -> (subaddressing_mode -> 'a1
2717    -> __ -> 'a2) -> ((((subaddressing_mode, subaddressing_mode) Types.prod,
2718    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2719    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2720    'a2) -> ((((subaddressing_mode, subaddressing_mode) Types.prod,
2721    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2722    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2723    'a2) -> (((subaddressing_mode, subaddressing_mode) Types.prod,
2724    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2725    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2726    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2727    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2728    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (((((((subaddressing_mode,
2729    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2730    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2731    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2732    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2733    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2734    Types.prod) Types.sum -> __ -> 'a2) -> (((subaddressing_mode,
2735    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2736    Types.prod) Types.sum -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2)
2737    -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2)
2738    -> (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2739    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) -> (__ -> 'a2) ->
2740    (__ -> 'a2) -> (__ -> 'a2) -> (subaddressing_mode -> __ -> 'a2) -> 'a2 **)
2741let preinstruction_inv_rect_Type4 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 h33 h34 h35 h36 h37 h38 =
2742  let hcut =
2743    preinstruction_rect_Type4 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14
2744      h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32
2745      h33 h34 h35 h36 h37 h38 hterm
2746  in
2747  hcut __
2748
2749(** val preinstruction_inv_rect_Type3 :
2750    'a1 preinstruction -> (subaddressing_mode -> subaddressing_mode -> __ ->
2751    'a2) -> (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2752    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2753    (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2) ->
2754    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2755    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2756    (subaddressing_mode -> __ -> 'a2) -> ('a1 -> __ -> 'a2) -> ('a1 -> __ ->
2757    'a2) -> (subaddressing_mode -> 'a1 -> __ -> 'a2) -> (subaddressing_mode
2758    -> 'a1 -> __ -> 'a2) -> (subaddressing_mode -> 'a1 -> __ -> 'a2) -> ('a1
2759    -> __ -> 'a2) -> ('a1 -> __ -> 'a2) -> (((subaddressing_mode,
2760    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2761    Types.prod) Types.sum -> 'a1 -> __ -> 'a2) -> (subaddressing_mode -> 'a1
2762    -> __ -> 'a2) -> ((((subaddressing_mode, subaddressing_mode) Types.prod,
2763    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2764    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2765    'a2) -> ((((subaddressing_mode, subaddressing_mode) Types.prod,
2766    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2767    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2768    'a2) -> (((subaddressing_mode, subaddressing_mode) Types.prod,
2769    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2770    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2771    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2772    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2773    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (((((((subaddressing_mode,
2774    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2775    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2776    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2777    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2778    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2779    Types.prod) Types.sum -> __ -> 'a2) -> (((subaddressing_mode,
2780    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2781    Types.prod) Types.sum -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2)
2782    -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2)
2783    -> (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2784    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) -> (__ -> 'a2) ->
2785    (__ -> 'a2) -> (__ -> 'a2) -> (subaddressing_mode -> __ -> 'a2) -> 'a2 **)
2786let preinstruction_inv_rect_Type3 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 h33 h34 h35 h36 h37 h38 =
2787  let hcut =
2788    preinstruction_rect_Type3 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14
2789      h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32
2790      h33 h34 h35 h36 h37 h38 hterm
2791  in
2792  hcut __
2793
2794(** val preinstruction_inv_rect_Type2 :
2795    'a1 preinstruction -> (subaddressing_mode -> subaddressing_mode -> __ ->
2796    'a2) -> (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2797    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2798    (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2) ->
2799    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2800    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2801    (subaddressing_mode -> __ -> 'a2) -> ('a1 -> __ -> 'a2) -> ('a1 -> __ ->
2802    'a2) -> (subaddressing_mode -> 'a1 -> __ -> 'a2) -> (subaddressing_mode
2803    -> 'a1 -> __ -> 'a2) -> (subaddressing_mode -> 'a1 -> __ -> 'a2) -> ('a1
2804    -> __ -> 'a2) -> ('a1 -> __ -> 'a2) -> (((subaddressing_mode,
2805    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2806    Types.prod) Types.sum -> 'a1 -> __ -> 'a2) -> (subaddressing_mode -> 'a1
2807    -> __ -> 'a2) -> ((((subaddressing_mode, subaddressing_mode) Types.prod,
2808    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2809    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2810    'a2) -> ((((subaddressing_mode, subaddressing_mode) Types.prod,
2811    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2812    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2813    'a2) -> (((subaddressing_mode, subaddressing_mode) Types.prod,
2814    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2815    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2816    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2817    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2818    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (((((((subaddressing_mode,
2819    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2820    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2821    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2822    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2823    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2824    Types.prod) Types.sum -> __ -> 'a2) -> (((subaddressing_mode,
2825    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2826    Types.prod) Types.sum -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2)
2827    -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2)
2828    -> (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2829    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) -> (__ -> 'a2) ->
2830    (__ -> 'a2) -> (__ -> 'a2) -> (subaddressing_mode -> __ -> 'a2) -> 'a2 **)
2831let preinstruction_inv_rect_Type2 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 h33 h34 h35 h36 h37 h38 =
2832  let hcut =
2833    preinstruction_rect_Type2 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14
2834      h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32
2835      h33 h34 h35 h36 h37 h38 hterm
2836  in
2837  hcut __
2838
2839(** val preinstruction_inv_rect_Type1 :
2840    'a1 preinstruction -> (subaddressing_mode -> subaddressing_mode -> __ ->
2841    'a2) -> (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2842    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2843    (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2) ->
2844    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2845    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2846    (subaddressing_mode -> __ -> 'a2) -> ('a1 -> __ -> 'a2) -> ('a1 -> __ ->
2847    'a2) -> (subaddressing_mode -> 'a1 -> __ -> 'a2) -> (subaddressing_mode
2848    -> 'a1 -> __ -> 'a2) -> (subaddressing_mode -> 'a1 -> __ -> 'a2) -> ('a1
2849    -> __ -> 'a2) -> ('a1 -> __ -> 'a2) -> (((subaddressing_mode,
2850    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2851    Types.prod) Types.sum -> 'a1 -> __ -> 'a2) -> (subaddressing_mode -> 'a1
2852    -> __ -> 'a2) -> ((((subaddressing_mode, subaddressing_mode) Types.prod,
2853    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2854    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2855    'a2) -> ((((subaddressing_mode, subaddressing_mode) Types.prod,
2856    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2857    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2858    'a2) -> (((subaddressing_mode, subaddressing_mode) Types.prod,
2859    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2860    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2861    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2862    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2863    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (((((((subaddressing_mode,
2864    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2865    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2866    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2867    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2868    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2869    Types.prod) Types.sum -> __ -> 'a2) -> (((subaddressing_mode,
2870    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2871    Types.prod) Types.sum -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2)
2872    -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2)
2873    -> (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2874    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) -> (__ -> 'a2) ->
2875    (__ -> 'a2) -> (__ -> 'a2) -> (subaddressing_mode -> __ -> 'a2) -> 'a2 **)
2876let preinstruction_inv_rect_Type1 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 h33 h34 h35 h36 h37 h38 =
2877  let hcut =
2878    preinstruction_rect_Type1 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14
2879      h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32
2880      h33 h34 h35 h36 h37 h38 hterm
2881  in
2882  hcut __
2883
2884(** val preinstruction_inv_rect_Type0 :
2885    'a1 preinstruction -> (subaddressing_mode -> subaddressing_mode -> __ ->
2886    'a2) -> (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2887    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2888    (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2) ->
2889    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2890    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2891    (subaddressing_mode -> __ -> 'a2) -> ('a1 -> __ -> 'a2) -> ('a1 -> __ ->
2892    'a2) -> (subaddressing_mode -> 'a1 -> __ -> 'a2) -> (subaddressing_mode
2893    -> 'a1 -> __ -> 'a2) -> (subaddressing_mode -> 'a1 -> __ -> 'a2) -> ('a1
2894    -> __ -> 'a2) -> ('a1 -> __ -> 'a2) -> (((subaddressing_mode,
2895    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2896    Types.prod) Types.sum -> 'a1 -> __ -> 'a2) -> (subaddressing_mode -> 'a1
2897    -> __ -> 'a2) -> ((((subaddressing_mode, subaddressing_mode) Types.prod,
2898    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2899    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2900    'a2) -> ((((subaddressing_mode, subaddressing_mode) Types.prod,
2901    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum,
2902    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2903    'a2) -> (((subaddressing_mode, subaddressing_mode) Types.prod,
2904    (subaddressing_mode, subaddressing_mode) Types.prod) Types.sum -> __ ->
2905    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2906    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2907    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ ->
2908    'a2) -> (subaddressing_mode -> __ -> 'a2) -> (((((((subaddressing_mode,
2909    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2910    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2911    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2912    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2913    Types.prod) Types.sum, (subaddressing_mode, subaddressing_mode)
2914    Types.prod) Types.sum -> __ -> 'a2) -> (((subaddressing_mode,
2915    subaddressing_mode) Types.prod, (subaddressing_mode, subaddressing_mode)
2916    Types.prod) Types.sum -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2)
2917    -> (subaddressing_mode -> __ -> 'a2) -> (subaddressing_mode -> __ -> 'a2)
2918    -> (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) ->
2919    (subaddressing_mode -> subaddressing_mode -> __ -> 'a2) -> (__ -> 'a2) ->
2920    (__ -> 'a2) -> (__ -> 'a2) -> (subaddressing_mode -> __ -> 'a2) -> 'a2 **)
2921let preinstruction_inv_rect_Type0 hterm h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 h33 h34 h35 h36 h37 h38 =
2922  let hcut =
2923    preinstruction_rect_Type0 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14
2924      h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32
2925      h33 h34 h35 h36 h37 h38 hterm
2926  in
2927  hcut __
2928
2929(** val preinstruction_discr :
2930    'a1 preinstruction -> 'a1 preinstruction -> __ **)
2931let preinstruction_discr x y =
2932  Logic.eq_rect_Type2 x
2933    (match x with
2934     | ADD (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2935     | ADDC (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2936     | SUBB (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2937     | INC a0 -> Obj.magic (fun _ dH -> dH __)
2938     | DEC a0 -> Obj.magic (fun _ dH -> dH __)
2939     | MUL (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2940     | DIV (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2941     | DA a0 -> Obj.magic (fun _ dH -> dH __)
2942     | JC a0 -> Obj.magic (fun _ dH -> dH __)
2943     | JNC a0 -> Obj.magic (fun _ dH -> dH __)
2944     | JB (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2945     | JNB (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2946     | JBC (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2947     | JZ a0 -> Obj.magic (fun _ dH -> dH __)
2948     | JNZ a0 -> Obj.magic (fun _ dH -> dH __)
2949     | CJNE (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2950     | DJNZ (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2951     | ANL a0 -> Obj.magic (fun _ dH -> dH __)
2952     | ORL a0 -> Obj.magic (fun _ dH -> dH __)
2953     | XRL a0 -> Obj.magic (fun _ dH -> dH __)
2954     | CLR a0 -> Obj.magic (fun _ dH -> dH __)
2955     | CPL a0 -> Obj.magic (fun _ dH -> dH __)
2956     | RL a0 -> Obj.magic (fun _ dH -> dH __)
2957     | RLC a0 -> Obj.magic (fun _ dH -> dH __)
2958     | RR a0 -> Obj.magic (fun _ dH -> dH __)
2959     | RRC a0 -> Obj.magic (fun _ dH -> dH __)
2960     | SWAP a0 -> Obj.magic (fun _ dH -> dH __)
2961     | MOV a0 -> Obj.magic (fun _ dH -> dH __)
2962     | MOVX a0 -> Obj.magic (fun _ dH -> dH __)
2963     | SETB a0 -> Obj.magic (fun _ dH -> dH __)
2964     | PUSH a0 -> Obj.magic (fun _ dH -> dH __)
2965     | POP a0 -> Obj.magic (fun _ dH -> dH __)
2966     | XCH (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2967     | XCHD (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2968     | RET -> Obj.magic (fun _ dH -> dH)
2969     | RETI -> Obj.magic (fun _ dH -> dH)
2970     | NOP -> Obj.magic (fun _ dH -> dH)
2971     | JMP a0 -> Obj.magic (fun _ dH -> dH __)) y
2972
2973(** val preinstruction_jmdiscr :
2974    'a1 preinstruction -> 'a1 preinstruction -> __ **)
2975let preinstruction_jmdiscr x y =
2976  Logic.eq_rect_Type2 x
2977    (match x with
2978     | ADD (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2979     | ADDC (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2980     | SUBB (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2981     | INC a0 -> Obj.magic (fun _ dH -> dH __)
2982     | DEC a0 -> Obj.magic (fun _ dH -> dH __)
2983     | MUL (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2984     | DIV (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2985     | DA a0 -> Obj.magic (fun _ dH -> dH __)
2986     | JC a0 -> Obj.magic (fun _ dH -> dH __)
2987     | JNC a0 -> Obj.magic (fun _ dH -> dH __)
2988     | JB (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2989     | JNB (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2990     | JBC (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2991     | JZ a0 -> Obj.magic (fun _ dH -> dH __)
2992     | JNZ a0 -> Obj.magic (fun _ dH -> dH __)
2993     | CJNE (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2994     | DJNZ (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
2995     | ANL a0 -> Obj.magic (fun _ dH -> dH __)
2996     | ORL a0 -> Obj.magic (fun _ dH -> dH __)
2997     | XRL a0 -> Obj.magic (fun _ dH -> dH __)
2998     | CLR a0 -> Obj.magic (fun _ dH -> dH __)
2999     | CPL a0 -> Obj.magic (fun _ dH -> dH __)
3000     | RL a0 -> Obj.magic (fun _ dH -> dH __)
3001     | RLC a0 -> Obj.magic (fun _ dH -> dH __)
3002     | RR a0 -> Obj.magic (fun _ dH -> dH __)
3003     | RRC a0 -> Obj.magic (fun _ dH -> dH __)
3004     | SWAP a0 -> Obj.magic (fun _ dH -> dH __)
3005     | MOV a0 -> Obj.magic (fun _ dH -> dH __)
3006     | MOVX a0 -> Obj.magic (fun _ dH -> dH __)
3007     | SETB a0 -> Obj.magic (fun _ dH -> dH __)
3008     | PUSH a0 -> Obj.magic (fun _ dH -> dH __)
3009     | POP a0 -> Obj.magic (fun _ dH -> dH __)
3010     | XCH (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
3011     | XCHD (a0, a10) -> Obj.magic (fun _ dH -> dH __ __)
3012     | RET -> Obj.magic (fun _ dH -> dH)
3013     | RETI -> Obj.magic (fun _ dH -> dH)
3014     | NOP -> Obj.magic (fun _ dH -> dH)
3015     | JMP a0 -> Obj.magic (fun _ dH -> dH __)) y
3016
3017(** val eq_preinstruction :
3018    subaddressing_mode preinstruction -> subaddressing_mode preinstruction ->
3019    Bool.bool **)
3020let eq_preinstruction i j =
3021  match i with
3022  | ADD (arg1, arg2) ->
3023    (match j with
3024     | ADD (arg1', arg2') ->
3025       Bool.andb
3026         (eq_addressing_mode
3027           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3028             Vector.VEmpty)) arg1)
3029           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3030             Vector.VEmpty)) arg1'))
3031         (eq_addressing_mode
3032           (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O))) (Vector.VCons
3033             ((Nat.S (Nat.S (Nat.S Nat.O))), Registr, (Vector.VCons ((Nat.S
3034             (Nat.S Nat.O)), Direct, (Vector.VCons ((Nat.S Nat.O), Indirect,
3035             (Vector.VCons (Nat.O, Data, Vector.VEmpty)))))))) arg2)
3036           (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O))) (Vector.VCons
3037             ((Nat.S (Nat.S (Nat.S Nat.O))), Registr, (Vector.VCons ((Nat.S
3038             (Nat.S Nat.O)), Direct, (Vector.VCons ((Nat.S Nat.O), Indirect,
3039             (Vector.VCons (Nat.O, Data, Vector.VEmpty)))))))) arg2'))
3040     | ADDC (x, x0) -> Bool.False
3041     | SUBB (x, x0) -> Bool.False
3042     | INC x -> Bool.False
3043     | DEC x -> Bool.False
3044     | MUL (x, x0) -> Bool.False
3045     | DIV (x, x0) -> Bool.False
3046     | DA x -> Bool.False
3047     | JC x -> Bool.False
3048     | JNC x -> Bool.False
3049     | JB (x, x0) -> Bool.False
3050     | JNB (x, x0) -> Bool.False
3051     | JBC (x, x0) -> Bool.False
3052     | JZ x -> Bool.False
3053     | JNZ x -> Bool.False
3054     | CJNE (x, x0) -> Bool.False
3055     | DJNZ (x, x0) -> Bool.False
3056     | ANL x -> Bool.False
3057     | ORL x -> Bool.False
3058     | XRL x -> Bool.False
3059     | CLR x -> Bool.False
3060     | CPL x -> Bool.False
3061     | RL x -> Bool.False
3062     | RLC x -> Bool.False
3063     | RR x -> Bool.False
3064     | RRC x -> Bool.False
3065     | SWAP x -> Bool.False
3066     | MOV x -> Bool.False
3067     | MOVX x -> Bool.False
3068     | SETB x -> Bool.False
3069     | PUSH x -> Bool.False
3070     | POP x -> Bool.False
3071     | XCH (x, x0) -> Bool.False
3072     | XCHD (x, x0) -> Bool.False
3073     | RET -> Bool.False
3074     | RETI -> Bool.False
3075     | NOP -> Bool.False
3076     | JMP x -> Bool.False)
3077  | ADDC (arg1, arg2) ->
3078    (match j with
3079     | ADD (x, x0) -> Bool.False
3080     | ADDC (arg1', arg2') ->
3081       Bool.andb
3082         (eq_addressing_mode
3083           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3084             Vector.VEmpty)) arg1)
3085           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3086             Vector.VEmpty)) arg1'))
3087         (eq_addressing_mode
3088           (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O))) (Vector.VCons
3089             ((Nat.S (Nat.S (Nat.S Nat.O))), Registr, (Vector.VCons ((Nat.S
3090             (Nat.S Nat.O)), Direct, (Vector.VCons ((Nat.S Nat.O), Indirect,
3091             (Vector.VCons (Nat.O, Data, Vector.VEmpty)))))))) arg2)
3092           (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O))) (Vector.VCons
3093             ((Nat.S (Nat.S (Nat.S Nat.O))), Registr, (Vector.VCons ((Nat.S
3094             (Nat.S Nat.O)), Direct, (Vector.VCons ((Nat.S Nat.O), Indirect,
3095             (Vector.VCons (Nat.O, Data, Vector.VEmpty)))))))) arg2'))
3096     | SUBB (x, x0) -> Bool.False
3097     | INC x -> Bool.False
3098     | DEC x -> Bool.False
3099     | MUL (x, x0) -> Bool.False
3100     | DIV (x, x0) -> Bool.False
3101     | DA x -> Bool.False
3102     | JC x -> Bool.False
3103     | JNC x -> Bool.False
3104     | JB (x, x0) -> Bool.False
3105     | JNB (x, x0) -> Bool.False
3106     | JBC (x, x0) -> Bool.False
3107     | JZ x -> Bool.False
3108     | JNZ x -> Bool.False
3109     | CJNE (x, x0) -> Bool.False
3110     | DJNZ (x, x0) -> Bool.False
3111     | ANL x -> Bool.False
3112     | ORL x -> Bool.False
3113     | XRL x -> Bool.False
3114     | CLR x -> Bool.False
3115     | CPL x -> Bool.False
3116     | RL x -> Bool.False
3117     | RLC x -> Bool.False
3118     | RR x -> Bool.False
3119     | RRC x -> Bool.False
3120     | SWAP x -> Bool.False
3121     | MOV x -> Bool.False
3122     | MOVX x -> Bool.False
3123     | SETB x -> Bool.False
3124     | PUSH x -> Bool.False
3125     | POP x -> Bool.False
3126     | XCH (x, x0) -> Bool.False
3127     | XCHD (x, x0) -> Bool.False
3128     | RET -> Bool.False
3129     | RETI -> Bool.False
3130     | NOP -> Bool.False
3131     | JMP x -> Bool.False)
3132  | SUBB (arg1, arg2) ->
3133    (match j with
3134     | ADD (x, x0) -> Bool.False
3135     | ADDC (x, x0) -> Bool.False
3136     | SUBB (arg1', arg2') ->
3137       Bool.andb
3138         (eq_addressing_mode
3139           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3140             Vector.VEmpty)) arg1)
3141           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3142             Vector.VEmpty)) arg1'))
3143         (eq_addressing_mode
3144           (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O))) (Vector.VCons
3145             ((Nat.S (Nat.S (Nat.S Nat.O))), Registr, (Vector.VCons ((Nat.S
3146             (Nat.S Nat.O)), Direct, (Vector.VCons ((Nat.S Nat.O), Indirect,
3147             (Vector.VCons (Nat.O, Data, Vector.VEmpty)))))))) arg2)
3148           (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O))) (Vector.VCons
3149             ((Nat.S (Nat.S (Nat.S Nat.O))), Registr, (Vector.VCons ((Nat.S
3150             (Nat.S Nat.O)), Direct, (Vector.VCons ((Nat.S Nat.O), Indirect,
3151             (Vector.VCons (Nat.O, Data, Vector.VEmpty)))))))) arg2'))
3152     | INC x -> Bool.False
3153     | DEC x -> Bool.False
3154     | MUL (x, x0) -> Bool.False
3155     | DIV (x, x0) -> Bool.False
3156     | DA x -> Bool.False
3157     | JC x -> Bool.False
3158     | JNC x -> Bool.False
3159     | JB (x, x0) -> Bool.False
3160     | JNB (x, x0) -> Bool.False
3161     | JBC (x, x0) -> Bool.False
3162     | JZ x -> Bool.False
3163     | JNZ x -> Bool.False
3164     | CJNE (x, x0) -> Bool.False
3165     | DJNZ (x, x0) -> Bool.False
3166     | ANL x -> Bool.False
3167     | ORL x -> Bool.False
3168     | XRL x -> Bool.False
3169     | CLR x -> Bool.False
3170     | CPL x -> Bool.False
3171     | RL x -> Bool.False
3172     | RLC x -> Bool.False
3173     | RR x -> Bool.False
3174     | RRC x -> Bool.False
3175     | SWAP x -> Bool.False
3176     | MOV x -> Bool.False
3177     | MOVX x -> Bool.False
3178     | SETB x -> Bool.False
3179     | PUSH x -> Bool.False
3180     | POP x -> Bool.False
3181     | XCH (x, x0) -> Bool.False
3182     | XCHD (x, x0) -> Bool.False
3183     | RET -> Bool.False
3184     | RETI -> Bool.False
3185     | NOP -> Bool.False
3186     | JMP x -> Bool.False)
3187  | INC arg ->
3188    (match j with
3189     | ADD (x, x0) -> Bool.False
3190     | ADDC (x, x0) -> Bool.False
3191     | SUBB (x, x0) -> Bool.False
3192     | INC arg' ->
3193       eq_addressing_mode
3194         (subaddressing_modeel (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))
3195           (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), Acc_a,
3196           (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), Registr,
3197           (Vector.VCons ((Nat.S (Nat.S Nat.O)), Direct, (Vector.VCons
3198           ((Nat.S Nat.O), Indirect, (Vector.VCons (Nat.O, Dptr,
3199           Vector.VEmpty)))))))))) arg)
3200         (subaddressing_modeel (Nat.S (Nat.S (Nat.S (Nat.S Nat.O))))
3201           (Vector.VCons ((Nat.S (Nat.S (Nat.S (Nat.S Nat.O)))), Acc_a,
3202           (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), Registr,
3203           (Vector.VCons ((Nat.S (Nat.S Nat.O)), Direct, (Vector.VCons
3204           ((Nat.S Nat.O), Indirect, (Vector.VCons (Nat.O, Dptr,
3205           Vector.VEmpty)))))))))) arg')
3206     | DEC x -> Bool.False
3207     | MUL (x, x0) -> Bool.False
3208     | DIV (x, x0) -> Bool.False
3209     | DA x -> Bool.False
3210     | JC x -> Bool.False
3211     | JNC x -> Bool.False
3212     | JB (x, x0) -> Bool.False
3213     | JNB (x, x0) -> Bool.False
3214     | JBC (x, x0) -> Bool.False
3215     | JZ x -> Bool.False
3216     | JNZ x -> Bool.False
3217     | CJNE (x, x0) -> Bool.False
3218     | DJNZ (x, x0) -> Bool.False
3219     | ANL x -> Bool.False
3220     | ORL x -> Bool.False
3221     | XRL x -> Bool.False
3222     | CLR x -> Bool.False
3223     | CPL x -> Bool.False
3224     | RL x -> Bool.False
3225     | RLC x -> Bool.False
3226     | RR x -> Bool.False
3227     | RRC x -> Bool.False
3228     | SWAP x -> Bool.False
3229     | MOV x -> Bool.False
3230     | MOVX x -> Bool.False
3231     | SETB x -> Bool.False
3232     | PUSH x -> Bool.False
3233     | POP x -> Bool.False
3234     | XCH (x, x0) -> Bool.False
3235     | XCHD (x, x0) -> Bool.False
3236     | RET -> Bool.False
3237     | RETI -> Bool.False
3238     | NOP -> Bool.False
3239     | JMP x -> Bool.False)
3240  | DEC arg ->
3241    (match j with
3242     | ADD (x, x0) -> Bool.False
3243     | ADDC (x, x0) -> Bool.False
3244     | SUBB (x, x0) -> Bool.False
3245     | INC x -> Bool.False
3246     | DEC arg' ->
3247       eq_addressing_mode
3248         (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O))) (Vector.VCons
3249           ((Nat.S (Nat.S (Nat.S Nat.O))), Acc_a, (Vector.VCons ((Nat.S
3250           (Nat.S Nat.O)), Registr, (Vector.VCons ((Nat.S Nat.O), Direct,
3251           (Vector.VCons (Nat.O, Indirect, Vector.VEmpty)))))))) arg)
3252         (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O))) (Vector.VCons
3253           ((Nat.S (Nat.S (Nat.S Nat.O))), Acc_a, (Vector.VCons ((Nat.S
3254           (Nat.S Nat.O)), Registr, (Vector.VCons ((Nat.S Nat.O), Direct,
3255           (Vector.VCons (Nat.O, Indirect, Vector.VEmpty)))))))) arg')
3256     | MUL (x, x0) -> Bool.False
3257     | DIV (x, x0) -> Bool.False
3258     | DA x -> Bool.False
3259     | JC x -> Bool.False
3260     | JNC x -> Bool.False
3261     | JB (x, x0) -> Bool.False
3262     | JNB (x, x0) -> Bool.False
3263     | JBC (x, x0) -> Bool.False
3264     | JZ x -> Bool.False
3265     | JNZ x -> Bool.False
3266     | CJNE (x, x0) -> Bool.False
3267     | DJNZ (x, x0) -> Bool.False
3268     | ANL x -> Bool.False
3269     | ORL x -> Bool.False
3270     | XRL x -> Bool.False
3271     | CLR x -> Bool.False
3272     | CPL x -> Bool.False
3273     | RL x -> Bool.False
3274     | RLC x -> Bool.False
3275     | RR x -> Bool.False
3276     | RRC x -> Bool.False
3277     | SWAP x -> Bool.False
3278     | MOV x -> Bool.False
3279     | MOVX x -> Bool.False
3280     | SETB x -> Bool.False
3281     | PUSH x -> Bool.False
3282     | POP x -> Bool.False
3283     | XCH (x, x0) -> Bool.False
3284     | XCHD (x, x0) -> Bool.False
3285     | RET -> Bool.False
3286     | RETI -> Bool.False
3287     | NOP -> Bool.False
3288     | JMP x -> Bool.False)
3289  | MUL (arg1, arg2) ->
3290    (match j with
3291     | ADD (x, x0) -> Bool.False
3292     | ADDC (x, x0) -> Bool.False
3293     | SUBB (x, x0) -> Bool.False
3294     | INC x -> Bool.False
3295     | DEC x -> Bool.False
3296     | MUL (arg1', arg2') ->
3297       Bool.andb
3298         (eq_addressing_mode
3299           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3300             Vector.VEmpty)) arg1)
3301           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3302             Vector.VEmpty)) arg1'))
3303         (eq_addressing_mode
3304           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_b,
3305             Vector.VEmpty)) arg2)
3306           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_b,
3307             Vector.VEmpty)) arg2'))
3308     | DIV (x, x0) -> Bool.False
3309     | DA x -> Bool.False
3310     | JC x -> Bool.False
3311     | JNC x -> Bool.False
3312     | JB (x, x0) -> Bool.False
3313     | JNB (x, x0) -> Bool.False
3314     | JBC (x, x0) -> Bool.False
3315     | JZ x -> Bool.False
3316     | JNZ x -> Bool.False
3317     | CJNE (x, x0) -> Bool.False
3318     | DJNZ (x, x0) -> Bool.False
3319     | ANL x -> Bool.False
3320     | ORL x -> Bool.False
3321     | XRL x -> Bool.False
3322     | CLR x -> Bool.False
3323     | CPL x -> Bool.False
3324     | RL x -> Bool.False
3325     | RLC x -> Bool.False
3326     | RR x -> Bool.False
3327     | RRC x -> Bool.False
3328     | SWAP x -> Bool.False
3329     | MOV x -> Bool.False
3330     | MOVX x -> Bool.False
3331     | SETB x -> Bool.False
3332     | PUSH x -> Bool.False
3333     | POP x -> Bool.False
3334     | XCH (x, x0) -> Bool.False
3335     | XCHD (x, x0) -> Bool.False
3336     | RET -> Bool.False
3337     | RETI -> Bool.False
3338     | NOP -> Bool.False
3339     | JMP x -> Bool.False)
3340  | DIV (arg1, arg2) ->
3341    (match j with
3342     | ADD (x, x0) -> Bool.False
3343     | ADDC (x, x0) -> Bool.False
3344     | SUBB (x, x0) -> Bool.False
3345     | INC x -> Bool.False
3346     | DEC x -> Bool.False
3347     | MUL (x, x0) -> Bool.False
3348     | DIV (arg1', arg2') ->
3349       Bool.andb
3350         (eq_addressing_mode
3351           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3352             Vector.VEmpty)) arg1)
3353           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3354             Vector.VEmpty)) arg1'))
3355         (eq_addressing_mode
3356           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_b,
3357             Vector.VEmpty)) arg2)
3358           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_b,
3359             Vector.VEmpty)) arg2'))
3360     | DA x -> Bool.False
3361     | JC x -> Bool.False
3362     | JNC x -> Bool.False
3363     | JB (x, x0) -> Bool.False
3364     | JNB (x, x0) -> Bool.False
3365     | JBC (x, x0) -> Bool.False
3366     | JZ x -> Bool.False
3367     | JNZ x -> Bool.False
3368     | CJNE (x, x0) -> Bool.False
3369     | DJNZ (x, x0) -> Bool.False
3370     | ANL x -> Bool.False
3371     | ORL x -> Bool.False
3372     | XRL x -> Bool.False
3373     | CLR x -> Bool.False
3374     | CPL x -> Bool.False
3375     | RL x -> Bool.False
3376     | RLC x -> Bool.False
3377     | RR x -> Bool.False
3378     | RRC x -> Bool.False
3379     | SWAP x -> Bool.False
3380     | MOV x -> Bool.False
3381     | MOVX x -> Bool.False
3382     | SETB x -> Bool.False
3383     | PUSH x -> Bool.False
3384     | POP x -> Bool.False
3385     | XCH (x, x0) -> Bool.False
3386     | XCHD (x, x0) -> Bool.False
3387     | RET -> Bool.False
3388     | RETI -> Bool.False
3389     | NOP -> Bool.False
3390     | JMP x -> Bool.False)
3391  | DA arg ->
3392    (match j with
3393     | ADD (x, x0) -> Bool.False
3394     | ADDC (x, x0) -> Bool.False
3395     | SUBB (x, x0) -> Bool.False
3396     | INC x -> Bool.False
3397     | DEC x -> Bool.False
3398     | MUL (x, x0) -> Bool.False
3399     | DIV (x, x0) -> Bool.False
3400     | DA arg' ->
3401       eq_addressing_mode
3402         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3403           Vector.VEmpty)) arg)
3404         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3405           Vector.VEmpty)) arg')
3406     | JC x -> Bool.False
3407     | JNC x -> Bool.False
3408     | JB (x, x0) -> Bool.False
3409     | JNB (x, x0) -> Bool.False
3410     | JBC (x, x0) -> Bool.False
3411     | JZ x -> Bool.False
3412     | JNZ x -> Bool.False
3413     | CJNE (x, x0) -> Bool.False
3414     | DJNZ (x, x0) -> Bool.False
3415     | ANL x -> Bool.False
3416     | ORL x -> Bool.False
3417     | XRL x -> Bool.False
3418     | CLR x -> Bool.False
3419     | CPL x -> Bool.False
3420     | RL x -> Bool.False
3421     | RLC x -> Bool.False
3422     | RR x -> Bool.False
3423     | RRC x -> Bool.False
3424     | SWAP x -> Bool.False
3425     | MOV x -> Bool.False
3426     | MOVX x -> Bool.False
3427     | SETB x -> Bool.False
3428     | PUSH x -> Bool.False
3429     | POP x -> Bool.False
3430     | XCH (x, x0) -> Bool.False
3431     | XCHD (x, x0) -> Bool.False
3432     | RET -> Bool.False
3433     | RETI -> Bool.False
3434     | NOP -> Bool.False
3435     | JMP x -> Bool.False)
3436  | JC arg ->
3437    (match j with
3438     | ADD (x, x0) -> Bool.False
3439     | ADDC (x, x0) -> Bool.False
3440     | SUBB (x, x0) -> Bool.False
3441     | INC x -> Bool.False
3442     | DEC x -> Bool.False
3443     | MUL (x, x0) -> Bool.False
3444     | DIV (x, x0) -> Bool.False
3445     | DA x -> Bool.False
3446     | JC arg' ->
3447       eq_addressing_mode
3448         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3449           Vector.VEmpty)) arg)
3450         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3451           Vector.VEmpty)) arg')
3452     | JNC x -> Bool.False
3453     | JB (x, x0) -> Bool.False
3454     | JNB (x, x0) -> Bool.False
3455     | JBC (x, x0) -> Bool.False
3456     | JZ x -> Bool.False
3457     | JNZ x -> Bool.False
3458     | CJNE (x, x0) -> Bool.False
3459     | DJNZ (x, x0) -> Bool.False
3460     | ANL x -> Bool.False
3461     | ORL x -> Bool.False
3462     | XRL x -> Bool.False
3463     | CLR x -> Bool.False
3464     | CPL x -> Bool.False
3465     | RL x -> Bool.False
3466     | RLC x -> Bool.False
3467     | RR x -> Bool.False
3468     | RRC x -> Bool.False
3469     | SWAP x -> Bool.False
3470     | MOV x -> Bool.False
3471     | MOVX x -> Bool.False
3472     | SETB x -> Bool.False
3473     | PUSH x -> Bool.False
3474     | POP x -> Bool.False
3475     | XCH (x, x0) -> Bool.False
3476     | XCHD (x, x0) -> Bool.False
3477     | RET -> Bool.False
3478     | RETI -> Bool.False
3479     | NOP -> Bool.False
3480     | JMP x -> Bool.False)
3481  | JNC arg ->
3482    (match j with
3483     | ADD (x, x0) -> Bool.False
3484     | ADDC (x, x0) -> Bool.False
3485     | SUBB (x, x0) -> Bool.False
3486     | INC x -> Bool.False
3487     | DEC x -> Bool.False
3488     | MUL (x, x0) -> Bool.False
3489     | DIV (x, x0) -> Bool.False
3490     | DA x -> Bool.False
3491     | JC x -> Bool.False
3492     | JNC arg' ->
3493       eq_addressing_mode
3494         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3495           Vector.VEmpty)) arg)
3496         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3497           Vector.VEmpty)) arg')
3498     | JB (x, x0) -> Bool.False
3499     | JNB (x, x0) -> Bool.False
3500     | JBC (x, x0) -> Bool.False
3501     | JZ x -> Bool.False
3502     | JNZ x -> Bool.False
3503     | CJNE (x, x0) -> Bool.False
3504     | DJNZ (x, x0) -> Bool.False
3505     | ANL x -> Bool.False
3506     | ORL x -> Bool.False
3507     | XRL x -> Bool.False
3508     | CLR x -> Bool.False
3509     | CPL x -> Bool.False
3510     | RL x -> Bool.False
3511     | RLC x -> Bool.False
3512     | RR x -> Bool.False
3513     | RRC x -> Bool.False
3514     | SWAP x -> Bool.False
3515     | MOV x -> Bool.False
3516     | MOVX x -> Bool.False
3517     | SETB x -> Bool.False
3518     | PUSH x -> Bool.False
3519     | POP x -> Bool.False
3520     | XCH (x, x0) -> Bool.False
3521     | XCHD (x, x0) -> Bool.False
3522     | RET -> Bool.False
3523     | RETI -> Bool.False
3524     | NOP -> Bool.False
3525     | JMP x -> Bool.False)
3526  | JB (arg1, arg2) ->
3527    (match j with
3528     | ADD (x, x0) -> Bool.False
3529     | ADDC (x, x0) -> Bool.False
3530     | SUBB (x, x0) -> Bool.False
3531     | INC x -> Bool.False
3532     | DEC x -> Bool.False
3533     | MUL (x, x0) -> Bool.False
3534     | DIV (x, x0) -> Bool.False
3535     | DA x -> Bool.False
3536     | JC x -> Bool.False
3537     | JNC x -> Bool.False
3538     | JB (arg1', arg2') ->
3539       Bool.andb
3540         (eq_addressing_mode
3541           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Bit_addr,
3542             Vector.VEmpty)) arg1)
3543           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Bit_addr,
3544             Vector.VEmpty)) arg1'))
3545         (eq_addressing_mode
3546           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3547             Vector.VEmpty)) arg2)
3548           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3549             Vector.VEmpty)) arg2'))
3550     | JNB (x, x0) -> Bool.False
3551     | JBC (x, x0) -> Bool.False
3552     | JZ x -> Bool.False
3553     | JNZ x -> Bool.False
3554     | CJNE (x, x0) -> Bool.False
3555     | DJNZ (x, x0) -> Bool.False
3556     | ANL x -> Bool.False
3557     | ORL x -> Bool.False
3558     | XRL x -> Bool.False
3559     | CLR x -> Bool.False
3560     | CPL x -> Bool.False
3561     | RL x -> Bool.False
3562     | RLC x -> Bool.False
3563     | RR x -> Bool.False
3564     | RRC x -> Bool.False
3565     | SWAP x -> Bool.False
3566     | MOV x -> Bool.False
3567     | MOVX x -> Bool.False
3568     | SETB x -> Bool.False
3569     | PUSH x -> Bool.False
3570     | POP x -> Bool.False
3571     | XCH (x, x0) -> Bool.False
3572     | XCHD (x, x0) -> Bool.False
3573     | RET -> Bool.False
3574     | RETI -> Bool.False
3575     | NOP -> Bool.False
3576     | JMP x -> Bool.False)
3577  | JNB (arg1, arg2) ->
3578    (match j with
3579     | ADD (x, x0) -> Bool.False
3580     | ADDC (x, x0) -> Bool.False
3581     | SUBB (x, x0) -> Bool.False
3582     | INC x -> Bool.False
3583     | DEC x -> Bool.False
3584     | MUL (x, x0) -> Bool.False
3585     | DIV (x, x0) -> Bool.False
3586     | DA x -> Bool.False
3587     | JC x -> Bool.False
3588     | JNC x -> Bool.False
3589     | JB (x, x0) -> Bool.False
3590     | JNB (arg1', arg2') ->
3591       Bool.andb
3592         (eq_addressing_mode
3593           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Bit_addr,
3594             Vector.VEmpty)) arg1)
3595           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Bit_addr,
3596             Vector.VEmpty)) arg1'))
3597         (eq_addressing_mode
3598           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3599             Vector.VEmpty)) arg2)
3600           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3601             Vector.VEmpty)) arg2'))
3602     | JBC (x, x0) -> Bool.False
3603     | JZ x -> Bool.False
3604     | JNZ x -> Bool.False
3605     | CJNE (x, x0) -> Bool.False
3606     | DJNZ (x, x0) -> Bool.False
3607     | ANL x -> Bool.False
3608     | ORL x -> Bool.False
3609     | XRL x -> Bool.False
3610     | CLR x -> Bool.False
3611     | CPL x -> Bool.False
3612     | RL x -> Bool.False
3613     | RLC x -> Bool.False
3614     | RR x -> Bool.False
3615     | RRC x -> Bool.False
3616     | SWAP x -> Bool.False
3617     | MOV x -> Bool.False
3618     | MOVX x -> Bool.False
3619     | SETB x -> Bool.False
3620     | PUSH x -> Bool.False
3621     | POP x -> Bool.False
3622     | XCH (x, x0) -> Bool.False
3623     | XCHD (x, x0) -> Bool.False
3624     | RET -> Bool.False
3625     | RETI -> Bool.False
3626     | NOP -> Bool.False
3627     | JMP x -> Bool.False)
3628  | JBC (arg1, arg2) ->
3629    (match j with
3630     | ADD (x, x0) -> Bool.False
3631     | ADDC (x, x0) -> Bool.False
3632     | SUBB (x, x0) -> Bool.False
3633     | INC x -> Bool.False
3634     | DEC x -> Bool.False
3635     | MUL (x, x0) -> Bool.False
3636     | DIV (x, x0) -> Bool.False
3637     | DA x -> Bool.False
3638     | JC x -> Bool.False
3639     | JNC x -> Bool.False
3640     | JB (x, x0) -> Bool.False
3641     | JNB (x, x0) -> Bool.False
3642     | JBC (arg1', arg2') ->
3643       Bool.andb
3644         (eq_addressing_mode
3645           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Bit_addr,
3646             Vector.VEmpty)) arg1)
3647           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Bit_addr,
3648             Vector.VEmpty)) arg1'))
3649         (eq_addressing_mode
3650           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3651             Vector.VEmpty)) arg2)
3652           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3653             Vector.VEmpty)) arg2'))
3654     | JZ x -> Bool.False
3655     | JNZ x -> Bool.False
3656     | CJNE (x, x0) -> Bool.False
3657     | DJNZ (x, x0) -> Bool.False
3658     | ANL x -> Bool.False
3659     | ORL x -> Bool.False
3660     | XRL x -> Bool.False
3661     | CLR x -> Bool.False
3662     | CPL x -> Bool.False
3663     | RL x -> Bool.False
3664     | RLC x -> Bool.False
3665     | RR x -> Bool.False
3666     | RRC x -> Bool.False
3667     | SWAP x -> Bool.False
3668     | MOV x -> Bool.False
3669     | MOVX x -> Bool.False
3670     | SETB x -> Bool.False
3671     | PUSH x -> Bool.False
3672     | POP x -> Bool.False
3673     | XCH (x, x0) -> Bool.False
3674     | XCHD (x, x0) -> Bool.False
3675     | RET -> Bool.False
3676     | RETI -> Bool.False
3677     | NOP -> Bool.False
3678     | JMP x -> Bool.False)
3679  | JZ arg ->
3680    (match j with
3681     | ADD (x, x0) -> Bool.False
3682     | ADDC (x, x0) -> Bool.False
3683     | SUBB (x, x0) -> Bool.False
3684     | INC x -> Bool.False
3685     | DEC x -> Bool.False
3686     | MUL (x, x0) -> Bool.False
3687     | DIV (x, x0) -> Bool.False
3688     | DA x -> Bool.False
3689     | JC x -> Bool.False
3690     | JNC x -> Bool.False
3691     | JB (x, x0) -> Bool.False
3692     | JNB (x, x0) -> Bool.False
3693     | JBC (x, x0) -> Bool.False
3694     | JZ arg' ->
3695       eq_addressing_mode
3696         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3697           Vector.VEmpty)) arg)
3698         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3699           Vector.VEmpty)) arg')
3700     | JNZ x -> Bool.False
3701     | CJNE (x, x0) -> Bool.False
3702     | DJNZ (x, x0) -> Bool.False
3703     | ANL x -> Bool.False
3704     | ORL x -> Bool.False
3705     | XRL x -> Bool.False
3706     | CLR x -> Bool.False
3707     | CPL x -> Bool.False
3708     | RL x -> Bool.False
3709     | RLC x -> Bool.False
3710     | RR x -> Bool.False
3711     | RRC x -> Bool.False
3712     | SWAP x -> Bool.False
3713     | MOV x -> Bool.False
3714     | MOVX x -> Bool.False
3715     | SETB x -> Bool.False
3716     | PUSH x -> Bool.False
3717     | POP x -> Bool.False
3718     | XCH (x, x0) -> Bool.False
3719     | XCHD (x, x0) -> Bool.False
3720     | RET -> Bool.False
3721     | RETI -> Bool.False
3722     | NOP -> Bool.False
3723     | JMP x -> Bool.False)
3724  | JNZ arg ->
3725    (match j with
3726     | ADD (x, x0) -> Bool.False
3727     | ADDC (x, x0) -> Bool.False
3728     | SUBB (x, x0) -> Bool.False
3729     | INC x -> Bool.False
3730     | DEC x -> Bool.False
3731     | MUL (x, x0) -> Bool.False
3732     | DIV (x, x0) -> Bool.False
3733     | DA x -> Bool.False
3734     | JC x -> Bool.False
3735     | JNC x -> Bool.False
3736     | JB (x, x0) -> Bool.False
3737     | JNB (x, x0) -> Bool.False
3738     | JBC (x, x0) -> Bool.False
3739     | JZ x -> Bool.False
3740     | JNZ arg' ->
3741       eq_addressing_mode
3742         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3743           Vector.VEmpty)) arg)
3744         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3745           Vector.VEmpty)) arg')
3746     | CJNE (x, x0) -> Bool.False
3747     | DJNZ (x, x0) -> Bool.False
3748     | ANL x -> Bool.False
3749     | ORL x -> Bool.False
3750     | XRL x -> Bool.False
3751     | CLR x -> Bool.False
3752     | CPL x -> Bool.False
3753     | RL x -> Bool.False
3754     | RLC x -> Bool.False
3755     | RR x -> Bool.False
3756     | RRC x -> Bool.False
3757     | SWAP x -> Bool.False
3758     | MOV x -> Bool.False
3759     | MOVX x -> Bool.False
3760     | SETB x -> Bool.False
3761     | PUSH x -> Bool.False
3762     | POP x -> Bool.False
3763     | XCH (x, x0) -> Bool.False
3764     | XCHD (x, x0) -> Bool.False
3765     | RET -> Bool.False
3766     | RETI -> Bool.False
3767     | NOP -> Bool.False
3768     | JMP x -> Bool.False)
3769  | CJNE (arg1, arg2) ->
3770    (match j with
3771     | ADD (x, x0) -> Bool.False
3772     | ADDC (x, x0) -> Bool.False
3773     | SUBB (x, x0) -> Bool.False
3774     | INC x -> Bool.False
3775     | DEC x -> Bool.False
3776     | MUL (x, x0) -> Bool.False
3777     | DIV (x, x0) -> Bool.False
3778     | DA x -> Bool.False
3779     | JC x -> Bool.False
3780     | JNC x -> Bool.False
3781     | JB (x, x0) -> Bool.False
3782     | JNB (x, x0) -> Bool.False
3783     | JBC (x, x0) -> Bool.False
3784     | JZ x -> Bool.False
3785     | JNZ x -> Bool.False
3786     | CJNE (arg1', arg2') ->
3787       let prod_eq_left =
3788         Util.eq_prod (fun h h1 ->
3789           eq_addressing_mode
3790             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3791               Vector.VEmpty)) h)
3792             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3793               Vector.VEmpty)) h1)) (fun h h1 ->
3794           eq_addressing_mode
3795             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
3796               Nat.O), Direct, (Vector.VCons (Nat.O, Data, Vector.VEmpty))))
3797               h)
3798             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
3799               Nat.O), Direct, (Vector.VCons (Nat.O, Data, Vector.VEmpty))))
3800               h1))
3801       in
3802       let prod_eq_right =
3803         Util.eq_prod (fun h h1 ->
3804           eq_addressing_mode
3805             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
3806               Nat.O), Registr, (Vector.VCons (Nat.O, Indirect,
3807               Vector.VEmpty)))) h)
3808             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
3809               Nat.O), Registr, (Vector.VCons (Nat.O, Indirect,
3810               Vector.VEmpty)))) h1)) (fun h h1 ->
3811           eq_addressing_mode
3812             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Data,
3813               Vector.VEmpty)) h)
3814             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Data,
3815               Vector.VEmpty)) h1))
3816       in
3817       let arg1_eq = Util.eq_sum prod_eq_left prod_eq_right in
3818       Bool.andb (arg1_eq arg1 arg1')
3819         (eq_addressing_mode
3820           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3821             Vector.VEmpty)) arg2)
3822           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3823             Vector.VEmpty)) arg2'))
3824     | DJNZ (x, x0) -> Bool.False
3825     | ANL x -> Bool.False
3826     | ORL x -> Bool.False
3827     | XRL x -> Bool.False
3828     | CLR x -> Bool.False
3829     | CPL x -> Bool.False
3830     | RL x -> Bool.False
3831     | RLC x -> Bool.False
3832     | RR x -> Bool.False
3833     | RRC x -> Bool.False
3834     | SWAP x -> Bool.False
3835     | MOV x -> Bool.False
3836     | MOVX x -> Bool.False
3837     | SETB x -> Bool.False
3838     | PUSH x -> Bool.False
3839     | POP x -> Bool.False
3840     | XCH (x, x0) -> Bool.False
3841     | XCHD (x, x0) -> Bool.False
3842     | RET -> Bool.False
3843     | RETI -> Bool.False
3844     | NOP -> Bool.False
3845     | JMP x -> Bool.False)
3846  | DJNZ (arg1, arg2) ->
3847    (match j with
3848     | ADD (x, x0) -> Bool.False
3849     | ADDC (x, x0) -> Bool.False
3850     | SUBB (x, x0) -> Bool.False
3851     | INC x -> Bool.False
3852     | DEC x -> Bool.False
3853     | MUL (x, x0) -> Bool.False
3854     | DIV (x, x0) -> Bool.False
3855     | DA x -> Bool.False
3856     | JC x -> Bool.False
3857     | JNC x -> Bool.False
3858     | JB (x, x0) -> Bool.False
3859     | JNB (x, x0) -> Bool.False
3860     | JBC (x, x0) -> Bool.False
3861     | JZ x -> Bool.False
3862     | JNZ x -> Bool.False
3863     | CJNE (x, x0) -> Bool.False
3864     | DJNZ (arg1', arg2') ->
3865       Bool.andb
3866         (eq_addressing_mode
3867           (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S Nat.O),
3868             Registr, (Vector.VCons (Nat.O, Direct, Vector.VEmpty)))) arg1)
3869           (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S Nat.O),
3870             Registr, (Vector.VCons (Nat.O, Direct, Vector.VEmpty)))) arg1'))
3871         (eq_addressing_mode
3872           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3873             Vector.VEmpty)) arg2)
3874           (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Relative,
3875             Vector.VEmpty)) arg2'))
3876     | ANL x -> Bool.False
3877     | ORL x -> Bool.False
3878     | XRL x -> Bool.False
3879     | CLR x -> Bool.False
3880     | CPL x -> Bool.False
3881     | RL x -> Bool.False
3882     | RLC x -> Bool.False
3883     | RR x -> Bool.False
3884     | RRC x -> Bool.False
3885     | SWAP x -> Bool.False
3886     | MOV x -> Bool.False
3887     | MOVX x -> Bool.False
3888     | SETB x -> Bool.False
3889     | PUSH x -> Bool.False
3890     | POP x -> Bool.False
3891     | XCH (x, x0) -> Bool.False
3892     | XCHD (x, x0) -> Bool.False
3893     | RET -> Bool.False
3894     | RETI -> Bool.False
3895     | NOP -> Bool.False
3896     | JMP x -> Bool.False)
3897  | ANL arg ->
3898    (match j with
3899     | ADD (x, x0) -> Bool.False
3900     | ADDC (x, x0) -> Bool.False
3901     | SUBB (x, x0) -> Bool.False
3902     | INC x -> Bool.False
3903     | DEC x -> Bool.False
3904     | MUL (x, x0) -> Bool.False
3905     | DIV (x, x0) -> Bool.False
3906     | DA x -> Bool.False
3907     | JC x -> Bool.False
3908     | JNC x -> Bool.False
3909     | JB (x, x0) -> Bool.False
3910     | JNB (x, x0) -> Bool.False
3911     | JBC (x, x0) -> Bool.False
3912     | JZ x -> Bool.False
3913     | JNZ x -> Bool.False
3914     | CJNE (x, x0) -> Bool.False
3915     | DJNZ (x, x0) -> Bool.False
3916     | ANL arg' ->
3917       let prod_eq_left1 =
3918         Util.eq_prod (fun h h1 ->
3919           eq_addressing_mode
3920             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3921               Vector.VEmpty)) h)
3922             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
3923               Vector.VEmpty)) h1)) (fun h h1 ->
3924           eq_addressing_mode
3925             (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O)))
3926               (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), Registr,
3927               (Vector.VCons ((Nat.S (Nat.S Nat.O)), Direct, (Vector.VCons
3928               ((Nat.S Nat.O), Indirect, (Vector.VCons (Nat.O, Data,
3929               Vector.VEmpty)))))))) h)
3930             (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O)))
3931               (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), Registr,
3932               (Vector.VCons ((Nat.S (Nat.S Nat.O)), Direct, (Vector.VCons
3933               ((Nat.S Nat.O), Indirect, (Vector.VCons (Nat.O, Data,
3934               Vector.VEmpty)))))))) h1))
3935       in
3936       let prod_eq_left2 =
3937         Util.eq_prod (fun h h1 ->
3938           eq_addressing_mode
3939             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Direct,
3940               Vector.VEmpty)) h)
3941             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Direct,
3942               Vector.VEmpty)) h1)) (fun h h1 ->
3943           eq_addressing_mode
3944             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
3945               Nat.O), Acc_a, (Vector.VCons (Nat.O, Data, Vector.VEmpty))))
3946               h)
3947             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
3948               Nat.O), Acc_a, (Vector.VCons (Nat.O, Data, Vector.VEmpty))))
3949               h1))
3950       in
3951       let prod_eq_left = Util.eq_sum prod_eq_left1 prod_eq_left2 in
3952       let prod_eq_right =
3953         Util.eq_prod (fun h h1 ->
3954           eq_addressing_mode
3955             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Carry,
3956               Vector.VEmpty)) h)
3957             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Carry,
3958               Vector.VEmpty)) h1)) (fun h h1 ->
3959           eq_addressing_mode
3960             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
3961               Nat.O), Bit_addr, (Vector.VCons (Nat.O, N_bit_addr,
3962               Vector.VEmpty)))) h)
3963             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
3964               Nat.O), Bit_addr, (Vector.VCons (Nat.O, N_bit_addr,
3965               Vector.VEmpty)))) h1))
3966       in
3967       let sum_eq = Util.eq_sum prod_eq_left prod_eq_right in sum_eq arg arg'
3968     | ORL x -> Bool.False
3969     | XRL x -> Bool.False
3970     | CLR x -> Bool.False
3971     | CPL x -> Bool.False
3972     | RL x -> Bool.False
3973     | RLC x -> Bool.False
3974     | RR x -> Bool.False
3975     | RRC x -> Bool.False
3976     | SWAP x -> Bool.False
3977     | MOV x -> Bool.False
3978     | MOVX x -> Bool.False
3979     | SETB x -> Bool.False
3980     | PUSH x -> Bool.False
3981     | POP x -> Bool.False
3982     | XCH (x, x0) -> Bool.False
3983     | XCHD (x, x0) -> Bool.False
3984     | RET -> Bool.False
3985     | RETI -> Bool.False
3986     | NOP -> Bool.False
3987     | JMP x -> Bool.False)
3988  | ORL arg ->
3989    (match j with
3990     | ADD (x, x0) -> Bool.False
3991     | ADDC (x, x0) -> Bool.False
3992     | SUBB (x, x0) -> Bool.False
3993     | INC x -> Bool.False
3994     | DEC x -> Bool.False
3995     | MUL (x, x0) -> Bool.False
3996     | DIV (x, x0) -> Bool.False
3997     | DA x -> Bool.False
3998     | JC x -> Bool.False
3999     | JNC x -> Bool.False
4000     | JB (x, x0) -> Bool.False
4001     | JNB (x, x0) -> Bool.False
4002     | JBC (x, x0) -> Bool.False
4003     | JZ x -> Bool.False
4004     | JNZ x -> Bool.False
4005     | CJNE (x, x0) -> Bool.False
4006     | DJNZ (x, x0) -> Bool.False
4007     | ANL x -> Bool.False
4008     | ORL arg' ->
4009       let prod_eq_left1 =
4010         Util.eq_prod (fun h h1 ->
4011           eq_addressing_mode
4012             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4013               Vector.VEmpty)) h)
4014             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4015               Vector.VEmpty)) h1)) (fun h h1 ->
4016           eq_addressing_mode
4017             (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O)))
4018               (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), Registr,
4019               (Vector.VCons ((Nat.S (Nat.S Nat.O)), Data, (Vector.VCons
4020               ((Nat.S Nat.O), Direct, (Vector.VCons (Nat.O, Indirect,
4021               Vector.VEmpty)))))))) h)
4022             (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O)))
4023               (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), Registr,
4024               (Vector.VCons ((Nat.S (Nat.S Nat.O)), Data, (Vector.VCons
4025               ((Nat.S Nat.O), Direct, (Vector.VCons (Nat.O, Indirect,
4026               Vector.VEmpty)))))))) h1))
4027       in
4028       let prod_eq_left2 =
4029         Util.eq_prod (fun h h1 ->
4030           eq_addressing_mode
4031             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Direct,
4032               Vector.VEmpty)) h)
4033             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Direct,
4034               Vector.VEmpty)) h1)) (fun h h1 ->
4035           eq_addressing_mode
4036             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
4037               Nat.O), Acc_a, (Vector.VCons (Nat.O, Data, Vector.VEmpty))))
4038               h)
4039             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
4040               Nat.O), Acc_a, (Vector.VCons (Nat.O, Data, Vector.VEmpty))))
4041               h1))
4042       in
4043       let prod_eq_left = Util.eq_sum prod_eq_left1 prod_eq_left2 in
4044       let prod_eq_right =
4045         Util.eq_prod (fun h h1 ->
4046           eq_addressing_mode
4047             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Carry,
4048               Vector.VEmpty)) h)
4049             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Carry,
4050               Vector.VEmpty)) h1)) (fun h h1 ->
4051           eq_addressing_mode
4052             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
4053               Nat.O), Bit_addr, (Vector.VCons (Nat.O, N_bit_addr,
4054               Vector.VEmpty)))) h)
4055             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
4056               Nat.O), Bit_addr, (Vector.VCons (Nat.O, N_bit_addr,
4057               Vector.VEmpty)))) h1))
4058       in
4059       let sum_eq = Util.eq_sum prod_eq_left prod_eq_right in sum_eq arg arg'
4060     | XRL x -> Bool.False
4061     | CLR x -> Bool.False
4062     | CPL x -> Bool.False
4063     | RL x -> Bool.False
4064     | RLC x -> Bool.False
4065     | RR x -> Bool.False
4066     | RRC x -> Bool.False
4067     | SWAP x -> Bool.False
4068     | MOV x -> Bool.False
4069     | MOVX x -> Bool.False
4070     | SETB x -> Bool.False
4071     | PUSH x -> Bool.False
4072     | POP x -> Bool.False
4073     | XCH (x, x0) -> Bool.False
4074     | XCHD (x, x0) -> Bool.False
4075     | RET -> Bool.False
4076     | RETI -> Bool.False
4077     | NOP -> Bool.False
4078     | JMP x -> Bool.False)
4079  | XRL arg ->
4080    (match j with
4081     | ADD (x, x0) -> Bool.False
4082     | ADDC (x, x0) -> Bool.False
4083     | SUBB (x, x0) -> Bool.False
4084     | INC x -> Bool.False
4085     | DEC x -> Bool.False
4086     | MUL (x, x0) -> Bool.False
4087     | DIV (x, x0) -> Bool.False
4088     | DA x -> Bool.False
4089     | JC x -> Bool.False
4090     | JNC x -> Bool.False
4091     | JB (x, x0) -> Bool.False
4092     | JNB (x, x0) -> Bool.False
4093     | JBC (x, x0) -> Bool.False
4094     | JZ x -> Bool.False
4095     | JNZ x -> Bool.False
4096     | CJNE (x, x0) -> Bool.False
4097     | DJNZ (x, x0) -> Bool.False
4098     | ANL x -> Bool.False
4099     | ORL x -> Bool.False
4100     | XRL arg' ->
4101       let prod_eq_left =
4102         Util.eq_prod (fun h h1 ->
4103           eq_addressing_mode
4104             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4105               Vector.VEmpty)) h)
4106             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4107               Vector.VEmpty)) h1)) (fun h h1 ->
4108           eq_addressing_mode
4109             (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O)))
4110               (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), Data,
4111               (Vector.VCons ((Nat.S (Nat.S Nat.O)), Registr, (Vector.VCons
4112               ((Nat.S Nat.O), Direct, (Vector.VCons (Nat.O, Indirect,
4113               Vector.VEmpty)))))))) h)
4114             (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O)))
4115               (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), Data,
4116               (Vector.VCons ((Nat.S (Nat.S Nat.O)), Registr, (Vector.VCons
4117               ((Nat.S Nat.O), Direct, (Vector.VCons (Nat.O, Indirect,
4118               Vector.VEmpty)))))))) h1))
4119       in
4120       let prod_eq_right =
4121         Util.eq_prod (fun h h1 ->
4122           eq_addressing_mode
4123             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Direct,
4124               Vector.VEmpty)) h)
4125             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Direct,
4126               Vector.VEmpty)) h1)) (fun h h1 ->
4127           eq_addressing_mode
4128             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
4129               Nat.O), Acc_a, (Vector.VCons (Nat.O, Data, Vector.VEmpty))))
4130               h)
4131             (subaddressing_modeel (Nat.S Nat.O) (Vector.VCons ((Nat.S
4132               Nat.O), Acc_a, (Vector.VCons (Nat.O, Data, Vector.VEmpty))))
4133               h1))
4134       in
4135       let sum_eq = Util.eq_sum prod_eq_left prod_eq_right in sum_eq arg arg'
4136     | CLR x -> Bool.False
4137     | CPL x -> Bool.False
4138     | RL x -> Bool.False
4139     | RLC x -> Bool.False
4140     | RR x -> Bool.False
4141     | RRC x -> Bool.False
4142     | SWAP x -> Bool.False
4143     | MOV x -> Bool.False
4144     | MOVX x -> Bool.False
4145     | SETB x -> Bool.False
4146     | PUSH x -> Bool.False
4147     | POP x -> Bool.False
4148     | XCH (x, x0) -> Bool.False
4149     | XCHD (x, x0) -> Bool.False
4150     | RET -> Bool.False
4151     | RETI -> Bool.False
4152     | NOP -> Bool.False
4153     | JMP x -> Bool.False)
4154  | CLR arg ->
4155    (match j with
4156     | ADD (x, x0) -> Bool.False
4157     | ADDC (x, x0) -> Bool.False
4158     | SUBB (x, x0) -> Bool.False
4159     | INC x -> Bool.False
4160     | DEC x -> Bool.False
4161     | MUL (x, x0) -> Bool.False
4162     | DIV (x, x0) -> Bool.False
4163     | DA x -> Bool.False
4164     | JC x -> Bool.False
4165     | JNC x -> Bool.False
4166     | JB (x, x0) -> Bool.False
4167     | JNB (x, x0) -> Bool.False
4168     | JBC (x, x0) -> Bool.False
4169     | JZ x -> Bool.False
4170     | JNZ x -> Bool.False
4171     | CJNE (x, x0) -> Bool.False
4172     | DJNZ (x, x0) -> Bool.False
4173     | ANL x -> Bool.False
4174     | ORL x -> Bool.False
4175     | XRL x -> Bool.False
4176     | CLR arg' ->
4177       eq_addressing_mode
4178         (subaddressing_modeel (Nat.S (Nat.S Nat.O)) (Vector.VCons ((Nat.S
4179           (Nat.S Nat.O)), Acc_a, (Vector.VCons ((Nat.S Nat.O), Carry,
4180           (Vector.VCons (Nat.O, Bit_addr, Vector.VEmpty)))))) arg)
4181         (subaddressing_modeel (Nat.S (Nat.S Nat.O)) (Vector.VCons ((Nat.S
4182           (Nat.S Nat.O)), Acc_a, (Vector.VCons ((Nat.S Nat.O), Carry,
4183           (Vector.VCons (Nat.O, Bit_addr, Vector.VEmpty)))))) arg')
4184     | CPL x -> Bool.False
4185     | RL x -> Bool.False
4186     | RLC x -> Bool.False
4187     | RR x -> Bool.False
4188     | RRC x -> Bool.False
4189     | SWAP x -> Bool.False
4190     | MOV x -> Bool.False
4191     | MOVX x -> Bool.False
4192     | SETB x -> Bool.False
4193     | PUSH x -> Bool.False
4194     | POP x -> Bool.False
4195     | XCH (x, x0) -> Bool.False
4196     | XCHD (x, x0) -> Bool.False
4197     | RET -> Bool.False
4198     | RETI -> Bool.False
4199     | NOP -> Bool.False
4200     | JMP x -> Bool.False)
4201  | CPL arg ->
4202    (match j with
4203     | ADD (x, x0) -> Bool.False
4204     | ADDC (x, x0) -> Bool.False
4205     | SUBB (x, x0) -> Bool.False
4206     | INC x -> Bool.False
4207     | DEC x -> Bool.False
4208     | MUL (x, x0) -> Bool.False
4209     | DIV (x, x0) -> Bool.False
4210     | DA x -> Bool.False
4211     | JC x -> Bool.False
4212     | JNC x -> Bool.False
4213     | JB (x, x0) -> Bool.False
4214     | JNB (x, x0) -> Bool.False
4215     | JBC (x, x0) -> Bool.False
4216     | JZ x -> Bool.False
4217     | JNZ x -> Bool.False
4218     | CJNE (x, x0) -> Bool.False
4219     | DJNZ (x, x0) -> Bool.False
4220     | ANL x -> Bool.False
4221     | ORL x -> Bool.False
4222     | XRL x -> Bool.False
4223     | CLR x -> Bool.False
4224     | CPL arg' ->
4225       eq_addressing_mode
4226         (subaddressing_modeel (Nat.S (Nat.S Nat.O)) (Vector.VCons ((Nat.S
4227           (Nat.S Nat.O)), Acc_a, (Vector.VCons ((Nat.S Nat.O), Carry,
4228           (Vector.VCons (Nat.O, Bit_addr, Vector.VEmpty)))))) arg)
4229         (subaddressing_modeel (Nat.S (Nat.S Nat.O)) (Vector.VCons ((Nat.S
4230           (Nat.S Nat.O)), Acc_a, (Vector.VCons ((Nat.S Nat.O), Carry,
4231           (Vector.VCons (Nat.O, Bit_addr, Vector.VEmpty)))))) arg')
4232     | RL x -> Bool.False
4233     | RLC x -> Bool.False
4234     | RR x -> Bool.False
4235     | RRC x -> Bool.False
4236     | SWAP x -> Bool.False
4237     | MOV x -> Bool.False
4238     | MOVX x -> Bool.False
4239     | SETB x -> Bool.False
4240     | PUSH x -> Bool.False
4241     | POP x -> Bool.False
4242     | XCH (x, x0) -> Bool.False
4243     | XCHD (x, x0) -> Bool.False
4244     | RET -> Bool.False
4245     | RETI -> Bool.False
4246     | NOP -> Bool.False
4247     | JMP x -> Bool.False)
4248  | RL arg ->
4249    (match j with
4250     | ADD (x, x0) -> Bool.False
4251     | ADDC (x, x0) -> Bool.False
4252     | SUBB (x, x0) -> Bool.False
4253     | INC x -> Bool.False
4254     | DEC x -> Bool.False
4255     | MUL (x, x0) -> Bool.False
4256     | DIV (x, x0) -> Bool.False
4257     | DA x -> Bool.False
4258     | JC x -> Bool.False
4259     | JNC x -> Bool.False
4260     | JB (x, x0) -> Bool.False
4261     | JNB (x, x0) -> Bool.False
4262     | JBC (x, x0) -> Bool.False
4263     | JZ x -> Bool.False
4264     | JNZ x -> Bool.False
4265     | CJNE (x, x0) -> Bool.False
4266     | DJNZ (x, x0) -> Bool.False
4267     | ANL x -> Bool.False
4268     | ORL x -> Bool.False
4269     | XRL x -> Bool.False
4270     | CLR x -> Bool.False
4271     | CPL x -> Bool.False
4272     | RL arg' ->
4273       eq_addressing_mode
4274         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4275           Vector.VEmpty)) arg)
4276         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4277           Vector.VEmpty)) arg')
4278     | RLC x -> Bool.False
4279     | RR x -> Bool.False
4280     | RRC x -> Bool.False
4281     | SWAP x -> Bool.False
4282     | MOV x -> Bool.False
4283     | MOVX x -> Bool.False
4284     | SETB x -> Bool.False
4285     | PUSH x -> Bool.False
4286     | POP x -> Bool.False
4287     | XCH (x, x0) -> Bool.False
4288     | XCHD (x, x0) -> Bool.False
4289     | RET -> Bool.False
4290     | RETI -> Bool.False
4291     | NOP -> Bool.False
4292     | JMP x -> Bool.False)
4293  | RLC arg ->
4294    (match j with
4295     | ADD (x, x0) -> Bool.False
4296     | ADDC (x, x0) -> Bool.False
4297     | SUBB (x, x0) -> Bool.False
4298     | INC x -> Bool.False
4299     | DEC x -> Bool.False
4300     | MUL (x, x0) -> Bool.False
4301     | DIV (x, x0) -> Bool.False
4302     | DA x -> Bool.False
4303     | JC x -> Bool.False
4304     | JNC x -> Bool.False
4305     | JB (x, x0) -> Bool.False
4306     | JNB (x, x0) -> Bool.False
4307     | JBC (x, x0) -> Bool.False
4308     | JZ x -> Bool.False
4309     | JNZ x -> Bool.False
4310     | CJNE (x, x0) -> Bool.False
4311     | DJNZ (x, x0) -> Bool.False
4312     | ANL x -> Bool.False
4313     | ORL x -> Bool.False
4314     | XRL x -> Bool.False
4315     | CLR x -> Bool.False
4316     | CPL x -> Bool.False
4317     | RL x -> Bool.False
4318     | RLC arg' ->
4319       eq_addressing_mode
4320         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4321           Vector.VEmpty)) arg)
4322         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4323           Vector.VEmpty)) arg')
4324     | RR x -> Bool.False
4325     | RRC x -> Bool.False
4326     | SWAP x -> Bool.False
4327     | MOV x -> Bool.False
4328     | MOVX x -> Bool.False
4329     | SETB x -> Bool.False
4330     | PUSH x -> Bool.False
4331     | POP x -> Bool.False
4332     | XCH (x, x0) -> Bool.False
4333     | XCHD (x, x0) -> Bool.False
4334     | RET -> Bool.False
4335     | RETI -> Bool.False
4336     | NOP -> Bool.False
4337     | JMP x -> Bool.False)
4338  | RR arg ->
4339    (match j with
4340     | ADD (x, x0) -> Bool.False
4341     | ADDC (x, x0) -> Bool.False
4342     | SUBB (x, x0) -> Bool.False
4343     | INC x -> Bool.False
4344     | DEC x -> Bool.False
4345     | MUL (x, x0) -> Bool.False
4346     | DIV (x, x0) -> Bool.False
4347     | DA x -> Bool.False
4348     | JC x -> Bool.False
4349     | JNC x -> Bool.False
4350     | JB (x, x0) -> Bool.False
4351     | JNB (x, x0) -> Bool.False
4352     | JBC (x, x0) -> Bool.False
4353     | JZ x -> Bool.False
4354     | JNZ x -> Bool.False
4355     | CJNE (x, x0) -> Bool.False
4356     | DJNZ (x, x0) -> Bool.False
4357     | ANL x -> Bool.False
4358     | ORL x -> Bool.False
4359     | XRL x -> Bool.False
4360     | CLR x -> Bool.False
4361     | CPL x -> Bool.False
4362     | RL x -> Bool.False
4363     | RLC x -> Bool.False
4364     | RR arg' ->
4365       eq_addressing_mode
4366         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4367           Vector.VEmpty)) arg)
4368         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4369           Vector.VEmpty)) arg')
4370     | RRC x -> Bool.False
4371     | SWAP x -> Bool.False
4372     | MOV x -> Bool.False
4373     | MOVX x -> Bool.False
4374     | SETB x -> Bool.False
4375     | PUSH x -> Bool.False
4376     | POP x -> Bool.False
4377     | XCH (x, x0) -> Bool.False
4378     | XCHD (x, x0) -> Bool.False
4379     | RET -> Bool.False
4380     | RETI -> Bool.False
4381     | NOP -> Bool.False
4382     | JMP x -> Bool.False)
4383  | RRC arg ->
4384    (match j with
4385     | ADD (x, x0) -> Bool.False
4386     | ADDC (x, x0) -> Bool.False
4387     | SUBB (x, x0) -> Bool.False
4388     | INC x -> Bool.False
4389     | DEC x -> Bool.False
4390     | MUL (x, x0) -> Bool.False
4391     | DIV (x, x0) -> Bool.False
4392     | DA x -> Bool.False
4393     | JC x -> Bool.False
4394     | JNC x -> Bool.False
4395     | JB (x, x0) -> Bool.False
4396     | JNB (x, x0) -> Bool.False
4397     | JBC (x, x0) -> Bool.False
4398     | JZ x -> Bool.False
4399     | JNZ x -> Bool.False
4400     | CJNE (x, x0) -> Bool.False
4401     | DJNZ (x, x0) -> Bool.False
4402     | ANL x -> Bool.False
4403     | ORL x -> Bool.False
4404     | XRL x -> Bool.False
4405     | CLR x -> Bool.False
4406     | CPL x -> Bool.False
4407     | RL x -> Bool.False
4408     | RLC x -> Bool.False
4409     | RR x -> Bool.False
4410     | RRC arg' ->
4411       eq_addressing_mode
4412         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4413           Vector.VEmpty)) arg)
4414         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4415           Vector.VEmpty)) arg')
4416     | SWAP x -> Bool.False
4417     | MOV x -> Bool.False
4418     | MOVX x -> Bool.False
4419     | SETB x -> Bool.False
4420     | PUSH x -> Bool.False
4421     | POP x -> Bool.False
4422     | XCH (x, x0) -> Bool.False
4423     | XCHD (x, x0) -> Bool.False
4424     | RET -> Bool.False
4425     | RETI -> Bool.False
4426     | NOP -> Bool.False
4427     | JMP x -> Bool.False)
4428  | SWAP arg ->
4429    (match j with
4430     | ADD (x, x0) -> Bool.False
4431     | ADDC (x, x0) -> Bool.False
4432     | SUBB (x, x0) -> Bool.False
4433     | INC x -> Bool.False
4434     | DEC x -> Bool.False
4435     | MUL (x, x0) -> Bool.False
4436     | DIV (x, x0) -> Bool.False
4437     | DA x -> Bool.False
4438     | JC x -> Bool.False
4439     | JNC x -> Bool.False
4440     | JB (x, x0) -> Bool.False
4441     | JNB (x, x0) -> Bool.False
4442     | JBC (x, x0) -> Bool.False
4443     | JZ x -> Bool.False
4444     | JNZ x -> Bool.False
4445     | CJNE (x, x0) -> Bool.False
4446     | DJNZ (x, x0) -> Bool.False
4447     | ANL x -> Bool.False
4448     | ORL x -> Bool.False
4449     | XRL x -> Bool.False
4450     | CLR x -> Bool.False
4451     | CPL x -> Bool.False
4452     | RL x -> Bool.False
4453     | RLC x -> Bool.False
4454     | RR x -> Bool.False
4455     | RRC x -> Bool.False
4456     | SWAP arg' ->
4457       eq_addressing_mode
4458         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4459           Vector.VEmpty)) arg)
4460         (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4461           Vector.VEmpty)) arg')
4462     | MOV x -> Bool.False
4463     | MOVX x -> Bool.False
4464     | SETB x -> Bool.False
4465     | PUSH x -> Bool.False
4466     | POP x -> Bool.False
4467     | XCH (x, x0) -> Bool.False
4468     | XCHD (x, x0) -> Bool.False
4469     | RET -> Bool.False
4470     | RETI -> Bool.False
4471     | NOP -> Bool.False
4472     | JMP x -> Bool.False)
4473  | MOV arg ->
4474    (match j with
4475     | ADD (x, x0) -> Bool.False
4476     | ADDC (x, x0) -> Bool.False
4477     | SUBB (x, x0) -> Bool.False
4478     | INC x -> Bool.False
4479     | DEC x -> Bool.False
4480     | MUL (x, x0) -> Bool.False
4481     | DIV (x, x0) -> Bool.False
4482     | DA x -> Bool.False
4483     | JC x -> Bool.False
4484     | JNC x -> Bool.False
4485     | JB (x, x0) -> Bool.False
4486     | JNB (x, x0) -> Bool.False
4487     | JBC (x, x0) -> Bool.False
4488     | JZ x -> Bool.False
4489     | JNZ x -> Bool.False
4490     | CJNE (x, x0) -> Bool.False
4491     | DJNZ (x, x0) -> Bool.False
4492     | ANL x -> Bool.False
4493     | ORL x -> Bool.False
4494     | XRL x -> Bool.False
4495     | CLR x -> Bool.False
4496     | CPL x -> Bool.False
4497     | RL x -> Bool.False
4498     | RLC x -> Bool.False
4499     | RR x -> Bool.False
4500     | RRC x -> Bool.False
4501     | SWAP x -> Bool.False
4502     | MOV arg' ->
4503       let prod_eq_6 =
4504         Util.eq_prod (fun h h1 ->
4505           eq_addressing_mode
4506             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4507               Vector.VEmpty)) h)
4508             (subaddressing_modeel Nat.O (Vector.VCons (Nat.O, Acc_a,
4509               Vector.VEmpty)) h1)) (fun h h1 ->
4510           eq_addressing_mode
4511             (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O)))
4512               (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), Registr,
4513               (Vector.VCons ((Nat.S (Nat.S Nat.O)), Direct, (Vector.VCons
4514               ((Nat.S Nat.O), Indirect, (Vector.VCons (Nat.O, Data,
4515               Vector.VEmpty)))))))) h)
4516             (subaddressing_modeel (Nat.S (Nat.S (Nat.S Nat.O)))
4517               (Vector.VCons ((Nat.S (Nat.S (Nat.S Nat.O))), Registr,
4518               (Vector.VCons ((Nat.