x86.ml 151 KB
Newer Older
mb0's avatar
Track.    
mb0 committed
1
granularity = 8
mb0's avatar
mb0 committed
2
export = decode
mb0's avatar
Track.    
mb0 committed
3
4
5
6
7
8
9
10
11
12
13
14
15

# Optional arguments
#
# Limit:
#   - Restricts the maximium size of the decode-stream
# Recursion-depth:
#   - Annotate the maximum number of recursion steps for
#     the given decoder. This way, we can compute an upper
#     bound for the maximum used storage for the emitted AST.
#     Additionally, the decoder may fail if during runtime
#     a recrusion depth violation occurs.
#
# limit = 120
mb0's avatar
mb0 committed
16
# recursion-depth = p64 = 4
mb0's avatar
Track.    
mb0 committed
17
18

val decode = do
Axel Simon's avatar
Axel Simon committed
19
20
21
22
23
24
   update @{tab=void};
   main
end

val main = do
   t <- query $tab;
mb0's avatar
Track.    
mb0 committed
25
26
27
28
29
30
31
32
33
34
35
   update
      @{mode64='1',
        repne='0',
        rep='0',
        rex='0',
        rexw='0',
        rexb='0',
        rexr='0',
        rexx='0',
        opndsz='0',
        addrsz='0',
mb0's avatar
mb0 committed
36
        lock='0',
Axel Simon's avatar
Axel Simon committed
37
38
39
40
41
42
        segment=SEG_DEFAULT,
        ptrty=32, #TODO: check
        ~tab};
   instr <- p64;
   update @{tab=t};
   return instr
mb0's avatar
Track.    
mb0 committed
43
44
end

Axel Simon's avatar
Axel Simon committed
45
46
val complement v = not v

mb0's avatar
Track.    
mb0 committed
47
48
49
50
val set-opndsz = update@{opndsz='1'}
val set-repne = update@{repne='1'}
val set-rep = update@{rep='1'}

Axel Simon's avatar
Axel Simon committed
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# Segment prefix handling
type seg_override =
     SEG_DEFAULT
   | SEG_OVERRIDE of register


val set-CS = do
   m <- query $mode64;
   if m then
      return void
   else
      update@{segment=SEG_OVERRIDE CS}
end

val set-DS = do
   m <- query $mode64;
   if m then
      return void
   else
      update@{segment=SEG_OVERRIDE DS}
end
val set-ES = do
   m <- query $mode64;
   if m then
      return void
   else
      update@{segment=SEG_OVERRIDE ES}
end
val set-FS = update@{segment=SEG_OVERRIDE FS}
val set-GS = update@{segment=SEG_OVERRIDE GS}
val set-SS = do
   m <- query $mode64;
   if m then
      return void
   else
      update@{segment=SEG_OVERRIDE SS}
end

mb0's avatar
mb0 committed
89
val set-lock = update@{lock='1'}
mb0's avatar
Track.    
mb0 committed
90
91
92
93
val set-addrsz = update@{addrsz='1'}

## Decoding prefixes

mb0's avatar
mb0 committed
94
# The functions 'after' and 'continue' are used to try different decoders
Axel Simon's avatar
Axel Simon committed
95
96
97
# in sequence. The first function takes two arguments and runs the first
# one until it calls 'continue', at which point the second decoder is run.

mb0's avatar
mb0 committed
98
val after fst snd = do
99
100
101
  update@{tab=snd};
  r <- fst;
  # make the type checker happy
Axel Simon's avatar
Axel Simon committed
102
  update@{~tab};
103
  return r
Axel Simon's avatar
Axel Simon committed
104
105
106
end

val continue = do
107
108
  t <- query$tab;
  # make the type checker happy
Julian Kranz's avatar
Julian Kranz committed
109
  update@{~tab};
110
111
  # make the type checker happy
  r <- t;
Axel Simon's avatar
Axel Simon committed
112
  update@{~tab};
113
  return r
Axel Simon's avatar
Axel Simon committed
114
115
end

116
117
118
119
# val after fst snd = do
#    update@{tab=snd};
#    fst
# end
Julian Kranz's avatar
Julian Kranz committed
120
#
121
122
123
124
125
# val continue = do
#    t <- query$tab;
#    t
# end

Axel Simon's avatar
Axel Simon committed
126
127
128
129
val /66 [] = continue
val /f2 [] = continue
val /f3 [] = continue

Axel Simon's avatar
Axel Simon committed
130
131
132
133
val /rex-p ['0100 w:1 r:1 x:1 b:1'] =
   update @{rex='1', rexw=w, rexb=b, rexx=x, rexr=r}
val clear-rex = update @{rex='0',rexw='0',rexb='0',rexr='0',rexx='0'}

mb0's avatar
mb0 committed
134
135
136
137
138
139
140
141
val /legacy-p [0x2e] = do clear-rex; set-CS end
val /legacy-p [0x36] = do clear-rex; set-SS end
val /legacy-p [0x3e] = do clear-rex; set-DS end
val /legacy-p [0x26] = do clear-rex; set-ES end
val /legacy-p [0x64] = do clear-rex; set-FS end
val /legacy-p [0x65] = do clear-rex; set-GS end
val /legacy-p [0x67] = do clear-rex; set-addrsz end
val /legacy-p [0xf0] = do clear-rex; set-lock end
mb0's avatar
Track.    
mb0 committed
142

mb0's avatar
mb0 committed
143
val p/vex/0f [0xc4 'r:1 x:1 b:1 00001' 'w:1 v:4 l:1 00'] = do
mb0's avatar
mb0 committed
144
145
146
147
148
149
150
151
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
152
        vexv=complement v,
mb0's avatar
mb0 committed
153
154
155
        vexm='00001'}
end

mb0's avatar
mb0 committed
156
val p/vex/0f [0xc5 'r:1 v:4 l:1 00'] = do
mb0's avatar
mb0 committed
157
158
159
160
161
162
   update
      @{rex='1',
        rexw='0',
        vexw='0',
        rexr=not r,
        vexl=l,
163
        vexv=complement v,
mb0's avatar
mb0 committed
164
165
166
        vexm='00001'} #TODO: sane default value for vexm,rexw,rexb,..
end

mb0's avatar
mb0 committed
167
val p/vex/66/0f [0xc4 'r:1 x:1 b:1 00001' 'w:1 v:4 l:1 01'] = do
mb0's avatar
mb0 committed
168
169
170
171
172
173
174
175
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
176
        vexv=complement v,
Julian Kranz's avatar
Julian Kranz committed
177

mb0's avatar
mb0 committed
178
179
180
        vexm='00001'}
end

mb0's avatar
mb0 committed
181
val p/vex/66/0f [0xc5 'r:1 v:4 l:1 01'] = do
mb0's avatar
mb0 committed
182
183
184
185
186
187
   update
      @{rex='1',
        rexw='0',
        vexw='0',
        rexr=not r,
        vexl=l,
188
        vexv=complement v,
mb0's avatar
mb0 committed
189
190
191
        vexm='00001'} #TODO: sane default value for vexm,rexw,rexb,..
end

mb0's avatar
mb0 committed
192
val p/vex/f3/0f [0xc4 'r:1 x:1 b:1 00001' 'w:1 v:4 l:1 10'] = do
mb0's avatar
mb0 committed
193
194
195
196
197
198
199
200
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
201
        vexv=complement v,
mb0's avatar
mb0 committed
202
203
204
        vexm='00001'}
end

mb0's avatar
mb0 committed
205
val p/vex/f3/0f [0xc5 'r:1 v:4 l:1 10'] = do
mb0's avatar
mb0 committed
206
207
208
209
210
211
   update
      @{rex='1',
        rexw='0',
        vexw='0',
        rexr=not r,
        vexl=l,
212
        vexv=complement v,
mb0's avatar
mb0 committed
213
214
215
        vexm='00001'} #TODO: sane default value for vexm,rexw,rexb,..
end

mb0's avatar
mb0 committed
216
val p/vex/f2/0f [0xc4 'r:1 x:1 b:1 00001' 'w:1 v:4 l:1 11'] = do
mb0's avatar
mb0 committed
217
218
219
220
221
222
223
224
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
225
        vexv=complement v,
mb0's avatar
mb0 committed
226
227
228
        vexm='00001'}
end

mb0's avatar
mb0 committed
229
val p/vex/f2/0f [0xc5 'r:1 v:4 l:1 11'] = do
mb0's avatar
mb0 committed
230
231
232
233
234
235
   update
      @{rex='1',
        rexw='0',
        vexw='0',
        rexr=not r,
        vexl=l,
236
        vexv=complement v,
mb0's avatar
mb0 committed
237
238
239
        vexm='00001'} #TODO: sane default value for vexm,rexw,rexb,..
end

mb0's avatar
mb0 committed
240
val p/vex/0f/38 [0xc4 'r:1 x:1 b:1 00010' 'w:1 v:4 l:1 00'] = do
mb0's avatar
mb0 committed
241
242
243
244
245
246
247
248
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
249
        vexv=complement v,
mb0's avatar
mb0 committed
250
251
252
        vexm='00010'}
end

mb0's avatar
mb0 committed
253
val p/vex/66/0f/38 [0xc4 'r:1 x:1 b:1 00010' 'w:1 v:4 l:1 01'] = do
mb0's avatar
mb0 committed
254
255
256
257
258
259
260
261
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
262
        vexv=complement v,
mb0's avatar
mb0 committed
263
264
265
        vexm='00010'}
end

mb0's avatar
mb0 committed
266
val p/vex/f2/0f/38 [0xc4 'r:1 x:1 b:1 00010' 'w:1 v:4 l:1 11'] = do
mb0's avatar
mb0 committed
267
268
269
270
271
272
273
274
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
275
        vexv=complement v,
mb0's avatar
mb0 committed
276
277
278
        vexm='00010'}
end

mb0's avatar
mb0 committed
279
val p/vex/f3/0f/38 [0xc4 'r:1 x:1 b:1 00010' 'w:1 v:4 l:1 10'] = do
mb0's avatar
mb0 committed
280
281
282
283
284
285
286
287
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
288
        vexv=complement v,
mb0's avatar
mb0 committed
289
290
291
        vexm='00010'}
end

mb0's avatar
mb0 committed
292
val p/vex/0f/3a [0xc4 'r:1 x:1 b:1 00011' 'w:1 v:4 l:1 00'] = do
mb0's avatar
mb0 committed
293
294
295
296
297
298
299
300
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
301
        vexv=complement v,
mb0's avatar
mb0 committed
302
303
304
        vexm='00011'}
end

mb0's avatar
mb0 committed
305
val p/vex/66/0f/3a [0xc4 'r:1 x:1 b:1 00011' 'w:1 v:4 l:1 01'] = do
mb0's avatar
mb0 committed
306
307
308
309
310
311
312
313
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
314
        vexv=complement v,
mb0's avatar
mb0 committed
315
316
317
        vexm='00011'}
end

mb0's avatar
mb0 committed
318
val p/vex/f2/0f/3a [0xc4 'r:1 x:1 b:1 00011' 'w:1 v:4 l:1 11'] = do
mb0's avatar
mb0 committed
319
320
   update
      @{rex='1',
Julian Kranz's avatar
Julian Kranz committed
321
	rexw=w,
mb0's avatar
mb0 committed
322
323
324
325
326
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
327
        vexv=complement v,
mb0's avatar
mb0 committed
328
329
330
        vexm='00011'}
end

mb0's avatar
mb0 committed
331
val p/vex/f3/0f/3a [0xc4 'r:1 x:1 b:1 00011' 'w:1 v:4 l:1 10'] = do
mb0's avatar
mb0 committed
332
333
334
335
336
337
338
339
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
340
        vexv=complement v,
mb0's avatar
mb0 committed
341
342
343
        vexm='00011'}
end

mb0's avatar
Track.    
mb0 committed
344
345
346
347
val p64 [0x66] = do set-opndsz; p/66 end
val p64 [0xf2] = do set-repne; p/f2 end
val p64 [0xf3] = do set-rep; p/f3 end
val p64 [/legacy-p] = p64
Julian Kranz's avatar
Julian Kranz committed
348
349
350
val p64 [/rex-p]
 | mode64? = p64
 | mode32? = unop INC rex/reg32
mb0's avatar
mb0 committed
351
352
353
354
#val p64 [p/vex/0f] = /vex/0f
val p64 [p/vex/f2/0f] = /vex/f2/0f
val p64 [p/vex/f3/0f] = /vex/f3/0f
val p64 [p/vex/66/0f] = /vex/66/0f
mb0's avatar
mb0 committed
355
356
val p64 [p/vex/66/0f/38] = /vex/66/0f/38
val p64 [p/vex/66/0f/3a] = /vex/66/0f/3a
mb0's avatar
mb0 committed
357
358
#val p64 [p/vex/66/f2/0f] = /vex/66/f2/0f
#val p64 [p/vex/66/f3/0f] = /vex/66/f3/0f
mb0's avatar
mb0 committed
359
val p64 [] = /
mb0's avatar
Track.    
mb0 committed
360
361
362

val p/66 [0xf2] = do set-repne; p/66/f2 end
val p/66 [0xf3] = do set-rep; p/66/f3 end
mb0's avatar
mb0 committed
363
val p/66 [0x66] = do set-opndsz; p/66 end
mb0's avatar
mb0 committed
364
val p/66 [/legacy-p] = p/66
Julian Kranz's avatar
Julian Kranz committed
365
366
367
val p/66 [/rex-p]
 | mode64? = p/66
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
368
val p/66 [] = after /66 /
mb0's avatar
Track.    
mb0 committed
369

mb0's avatar
mb0 committed
370
val p/f2 [0x66] = do set-opndsz; p/66/f2 end
mb0's avatar
mb0 committed
371
val p/f2 [0xf2] = do set-repne; p/f2 end
mb0's avatar
Track.    
mb0 committed
372
val p/f2 [0xf3] = do set-rep; p/f2/f3 end
mb0's avatar
mb0 committed
373
val p/f2 [/legacy-p] = p/f2
Julian Kranz's avatar
Julian Kranz committed
374
375
376
val p/f2 [/rex-p]
 | mode64? = p/f2
 | mode32? = unop INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
377
val p/f2 [] = after /f2 /
mb0's avatar
Track.    
mb0 committed
378

mb0's avatar
mb0 committed
379
val p/f3 [0x66] = do set-opndsz; p/66/f3 end
mb0's avatar
Track.    
mb0 committed
380
val p/f3 [0xf2] = do set-repne; p/f3/f2 end
mb0's avatar
mb0 committed
381
val p/f3 [0xf3] = do set-rep; p/f3 end
mb0's avatar
mb0 committed
382
val p/f3 [/legacy-p] = p/f3
Julian Kranz's avatar
Julian Kranz committed
383
384
385
val p/f3 [/rex-p]
 | mode64? = p/f3
 | mode32? = unop INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
386
val p/f3 [] = after /f3 /
mb0's avatar
Track.    
mb0 committed
387

mb0's avatar
mb0 committed
388
val p/f2/f3 [0x66] = do set-opndsz; p/66/f2/f3 end
mb0's avatar
mb0 committed
389
390
val p/f2/f3 [0xf2] = do set-repne; p/f3/f2 end
val p/f2/f3 [0xf3] = do set-rep; p/f2/f3 end
mb0's avatar
mb0 committed
391
val p/f2/f3 [/legacy-p] = p/f2/f3
Julian Kranz's avatar
Julian Kranz committed
392
393
394
val p/f2/f3 [/rex-p]
 | mode64? = p/f2/f3
 | mode32? = unop INC rex/reg32
mb0's avatar
mb0 committed
395
val p/f2/f3 [] = after /f3 (after /f2 /)
mb0's avatar
Track.    
mb0 committed
396

mb0's avatar
mb0 committed
397
val p/f3/f2 [0x66] = do set-opndsz; p/66/f2/f3 end
mb0's avatar
mb0 committed
398
399
val p/f3/f2 [0xf2] = do set-repne; p/f3/f2 end
val p/f3/f2 [0xf3] = do set-rep; p/f2/f3 end
mb0's avatar
mb0 committed
400
val p/f3/f2 [/legacy-p] = p/f3/f2
Julian Kranz's avatar
Julian Kranz committed
401
402
403
val p/f3/f2 [/rex-p]
 | mode64? = p/f3/f2
 | mode32? = unop INC rex/reg32
mb0's avatar
mb0 committed
404
val p/f3/f2 [] = after /f2 (after /f3 /)
mb0's avatar
Track.    
mb0 committed
405

mb0's avatar
mb0 committed
406
val p/66/f2 [0x66] = do set-opndsz; p/66/f2 end
mb0's avatar
mb0 committed
407
val p/66/f2 [0xf2] = do set-repne; p/66/f2 end
mb0's avatar
Track.    
mb0 committed
408
val p/66/f2 [0xf3] = do set-rep; p/66/f2/f3 end
mb0's avatar
mb0 committed
409
val p/66/f2 [/legacy-p] = p/66/f2
Julian Kranz's avatar
Julian Kranz committed
410
411
412
val p/66/f2 [/rex-p]
 | mode64? = p/66/f2
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
413
val p/66/f2 [] = after /f2 (after /66 /)
mb0's avatar
Track.    
mb0 committed
414

mb0's avatar
mb0 committed
415
val p/66/f3 [0x66] = do set-opndsz; p/66/f3 end
mb0's avatar
Track.    
mb0 committed
416
val p/66/f3 [0xf2] = do set-repne; p/66/f3/f2 end
mb0's avatar
mb0 committed
417
val p/66/f3 [0xf3] = do set-rep; p/66/f3 end
mb0's avatar
mb0 committed
418
val p/66/f3 [/legacy-p] = p/66/f3
Julian Kranz's avatar
Julian Kranz committed
419
420
421
val p/66/f3 [/rex-p]
 | mode64? = p/66/f3
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
422
423
424
val p/66/f3 [] = after /f3 (after /66 /)

val p/66/f2/f3 [0x66] = do clear-rex; p/66/f2/f3 end
mb0's avatar
mb0 committed
425
426
val p/66/f2/f3 [0xf2] = do clear-rex; p/66/f3/f2 end
val p/66/f2/f3 [0xf3] = do clear-rex; p/66/f2/f3 end
mb0's avatar
mb0 committed
427
val p/66/f2/f3 [/legacy-p] = p/66/f2/f3
Julian Kranz's avatar
Julian Kranz committed
428
429
430
val p/66/f2/f3 [/rex-p]
 | mode64? = p/66/f2/f3
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
431
val p/66/f2/f3 [] = after /f3 (after /f2 (after /66 /))
mb0's avatar
Track.    
mb0 committed
432

mb0's avatar
mb0 committed
433
val p/66/f3/f2 [0x66] = do clear-rex; p/66/f3/f2 end
mb0's avatar
mb0 committed
434
435
val p/66/f3/f2 [0xf2] = do clear-rex; p/66/f3/f2 end
val p/66/f3/f2 [0xf3] = do clear-rex; p/66/f2/f3 end
mb0's avatar
mb0 committed
436
val p/66/f3/f2 [/legacy-p] = p/66/f3/f2
Julian Kranz's avatar
Julian Kranz committed
437
438
439
val p/66/f3/f2 [/rex-p]
 | mode64? = p/66/f3/f2
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
440
val p/66/f3/f2 [] = after /f2 (after /f3 (after /66 /))
mb0's avatar
mb0 committed
441

mb0's avatar
Foo.    
mb0 committed
442
type register =
mb0's avatar
Track.    
mb0 committed
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
   AL
 | AH
 | AX
 | EAX
 | RAX
 | BL
 | BH
 | BX
 | EBX
 | RBX
 | CL
 | CH
 | CX
 | ECX
 | RCX
 | DL
 | DH
 | DX
 | EDX
 | RDX
 | R8B
 | R8L
 | R8D
Julian Kranz's avatar
Julian Kranz committed
466
 | R8
mb0's avatar
Track.    
mb0 committed
467
468
469
 | R9B
 | R9L
 | R9D
Julian Kranz's avatar
Julian Kranz committed
470
 | R9
mb0's avatar
Track.    
mb0 committed
471
472
473
 | R10B
 | R10L
 | R10D
Julian Kranz's avatar
Julian Kranz committed
474
 | R10
mb0's avatar
Track.    
mb0 committed
475
476
477
 | R11B
 | R11L
 | R11D
Julian Kranz's avatar
Julian Kranz committed
478
 | R11
mb0's avatar
Track.    
mb0 committed
479
480
481
 | R12B
 | R12L
 | R12D
Julian Kranz's avatar
Julian Kranz committed
482
 | R12
mb0's avatar
Track.    
mb0 committed
483
484
485
 | R13B
 | R13L
 | R13D
Julian Kranz's avatar
Julian Kranz committed
486
 | R13
mb0's avatar
Track.    
mb0 committed
487
488
489
 | R14B
 | R14L
 | R14D
Julian Kranz's avatar
Julian Kranz committed
490
 | R14
mb0's avatar
Track.    
mb0 committed
491
492
493
 | R15B
 | R15L
 | R15D
Julian Kranz's avatar
Julian Kranz committed
494
 | R15
mb0's avatar
Track.    
mb0 committed
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
 | SP
 | ESP
 | RSP
 | BP
 | EBP
 | RBP
 | SI
 | ESI
 | RSI
 | DI
 | EDI
 | RDI
 | XMM0
 | XMM1
 | XMM2
 | XMM3
 | XMM4
 | XMM5
 | XMM6
 | XMM7
 | XMM8
 | XMM9
 | XMM10
 | XMM11
 | XMM12
 | XMM13
 | XMM14
 | XMM15
 | YMM0
 | YMM1
 | YMM2
 | YMM3
 | YMM4
 | YMM5
 | YMM6
 | YMM7
 | YMM8
 | YMM9
 | YMM10
 | YMM11
 | YMM12
 | YMM13
 | YMM14
 | YMM15
 | MM0
 | MM1
 | MM2
 | MM3
 | MM4
 | MM5
 | MM6
 | MM7
 | ES
 | SS
 | DS
 | FS
 | GS
 | CS
mb0's avatar
mb0 committed
553
554
555
556
557
558
559
560
 | ST0
 | ST1
 | ST2
 | ST3
 | ST4
 | ST5
 | ST6
 | ST7
mb0's avatar
mb0 committed
561
 | RIP
mb0's avatar
Track.    
mb0 committed
562

mb0's avatar
Foo.    
mb0 committed
563
type opnd =
mb0's avatar
Track.    
mb0 committed
564
565
566
567
568
   IMM8 of 8
 | IMM16 of 16
 | IMM32 of 32
 | IMM64 of 64
 | REG of register
Axel Simon's avatar
Axel Simon committed
569
 | MEM of {sz:int,psz:int,segment:seg_override,opnd:opnd}
mb0's avatar
sem.    
mb0 committed
570
571
 | SUM of {a:opnd,b:opnd}
 | SCALE of {imm:2,opnd:opnd}
mb0's avatar
Track.    
mb0 committed
572

mb0's avatar
Foo.    
mb0 committed
573
type flowopnd =
mb0's avatar
Track.    
mb0 committed
574
575
576
577
   REL8 of 8
 | REL16 of 16
 | REL32 of 32
 | REL64 of 64
Julian Kranz's avatar
Julian Kranz committed
578
579
 | PTR16/16 of 32
 | PTR16/32 of 48
mb0's avatar
Track.    
mb0 committed
580
581
582
 | NEARABS of opnd
 | FARABS of opnd

583
584
type flow1 = {opnd1:flowopnd}
type arity1 = {opnd1:opnd}
Julian Kranz's avatar
Julian Kranz committed
585
586
587
type arity2 = {opnd1:opnd,opnd2:opnd}
type arity3 = {opnd1:opnd,opnd2:opnd,opnd3:opnd}
type arity4 = {opnd1:opnd,opnd2:opnd,opnd3:opnd,opnd4:opnd}
mb0's avatar
Track.    
mb0 committed
588

mb0's avatar
Foo.    
mb0 committed
589
type varity =
mb0's avatar
mb0 committed
590
591
592
593
594
595
   VA0
 | VA1 of arity1
 | VA2 of arity2
 | VA3 of arity3
 | VA4 of arity4

mb0's avatar
Foo.    
mb0 committed
596
type insn =
mb0's avatar
Merge.    
mb0 committed
597
598
599
600
601
   AAA
 | AAD of arity1
 | AAM of arity1
 | AAS
 | ADC of arity2
mb0's avatar
mb0 committed
602
 | ADD of arity2
mb0's avatar
Merge.    
mb0 committed
603
 | ADDPD of arity2
Julian Kranz's avatar
Merge    
Julian Kranz committed
604
605
606
607
608
609
610
611
612
613
614
 | ADDPS of arity2
 | ADDSD of arity2
 | ADDSS of arity2
 | ADDSUBPD of arity2
 | ADDSUBPS of arity2
 | AESDEC of arity2
 | AESDECLAST of arity2
 | AESENC of arity2
 | AESENCLAST of arity2
 | AESIMC of arity2
 | AESKEYGENASSIST of arity3
mb0's avatar
mb0 committed
615
 | AND of arity2
Julian Kranz's avatar
Julian Kranz committed
616
617
 | ANDNPD of arity2
 | ANDNPS of arity2
Julian Kranz's avatar
Julian Kranz committed
618
619
 | ANDPD of arity2
 | ANDPS of arity2
Julian Kranz's avatar
Julian Kranz committed
620
621
622
 | ARPL of arity2
 | BLENDPD of arity3
 | BLENDPS of arity3
Julian Kranz's avatar
Julian Kranz committed
623
 | BLENDVPD of arity3
Julian Kranz's avatar
Julian Kranz committed
624
 | BLENDVPS of arity3
Julian Kranz's avatar
Julian Kranz committed
625
 | BOUND of arity2
mb0's avatar
mb0 committed
626
627
 | BSF of arity2
 | BSR of arity2
mb0's avatar
mb0 committed
628
 | BSWAP of arity1
mb0's avatar
mb0 committed
629
 | BT of arity2
Julian Kranz's avatar
Julian Kranz committed
630
631
632
 | BTC of arity2
 | BTR of arity2
 | BTS of arity2
mb0's avatar
mb0 committed
633
 | CALL of flow1
mb0's avatar
mb0 committed
634
 | CBW
Julian Kranz's avatar
Julian Kranz committed
635
 | CDQ
mb0's avatar
mb0 committed
636
 | CDQE
Julian Kranz's avatar
Julian Kranz committed
637
 | CLC
mb0's avatar
mb0 committed
638
 | CLD
Julian Kranz's avatar
Julian Kranz committed
639
640
641
642
 | CLFLUSH of arity1
 | CLI
 | CLTS
 | CMC
mb0's avatar
mb0 committed
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
 | CMOVA of arity2
 | CMOVAE of arity2
 | CMOVB of arity2
 | CMOVBE of arity2
 | CMOVC of arity2
 | CMOVE of arity2
 | CMOVG of arity2
 | CMOVGE of arity2
 | CMOVL of arity2
 | CMOVLE of arity2
 | CMOVNA of arity2
 | CMOVNAE of arity2
 | CMOVNB of arity2
 | CMOVNBE of arity2
 | CMOVNC of arity2
 | CMOVNE of arity2
 | CMOVNG of arity2
 | CMOVNGE of arity2
 | CMOVNL of arity2
 | CMOVNLE of arity2
 | CMOVNO of arity2
 | CMOVNP of arity2
 | CMOVNS of arity2
 | CMOVNZ of arity2
 | CMOVO of arity2
 | CMOVP of arity2
 | CMOVPE of arity2
 | CMOVPO of arity2
 | CMOVS of arity2
 | CMOVZ of arity2
 | CMP of arity2
Julian Kranz's avatar
Julian Kranz committed
674
675
 | CMPPD of arity3
 | CMPPS of arity3
mb0's avatar
mb0 committed
676
 | CMPSB
Julian Kranz's avatar
Julian Kranz committed
677
 | CMPSD of varity
mb0's avatar
mb0 committed
678
 | CMPSQ
Julian Kranz's avatar
Julian Kranz committed
679
 | CMPSS of arity3
Julian Kranz's avatar
Julian Kranz committed
680
 | CMPSW
mb0's avatar
mb0 committed
681
 | CMPXCHG of arity2
Julian Kranz's avatar
Julian Kranz committed
682
 | CMPXCHG16B of arity1
Julian Kranz's avatar
Julian Kranz committed
683
 | CMPXCHG8B of arity1
Julian Kranz's avatar
Julian Kranz committed
684
685
 | COMISD of arity2
 | COMISS of arity2
mb0's avatar
mb0 committed
686
 | CPUID
Julian Kranz's avatar
Julian Kranz committed
687
 | CQO
Julian Kranz's avatar
Julian Kranz committed
688
 | CRC32 of arity2
Julian Kranz's avatar
Julian Kranz committed
689
690
691
 | CVTDQ2PD of arity2
 | CVTDQ2PS of arity2
 | CVTPD2DQ of arity2
mb0's avatar
mb0 committed
692
 | CVTPD2PI of arity2
Julian Kranz's avatar
Julian Kranz committed
693
694
695
696
697
698
699
700
 | CVTPD2PS of arity2
 | CVTPI2PD of arity2
 | CVTPI2PS of arity2
 | CVTPS2DQ of arity2
 | CVTPS2PD of arity2
 | CVTPS2PI of arity2
 | CVTSD2SI of arity2
 | CVTSD2SS of arity2
mb0's avatar
mb0 committed
701
 | CVTSI2SD of arity2
Julian Kranz's avatar
Julian Kranz committed
702
703
704
705
706
707
708
709
710
711
 | CVTSI2SS of arity2
 | CVTSS2SD of arity2
 | CVTSS2SI of arity2
 | CVTTPD2DQ of arity2
 | CVTTPD2PI of arity2
 | CVTTPS2DQ of arity2
 | CVTTPS2PI of arity2
 | CVTTSD2SI of arity2
 | CVTTSS2SI of arity2
 | CWD
Julian Kranz's avatar
Julian Kranz committed
712
 | CWDE
Julian Kranz's avatar
Julian Kranz committed
713
714
 | DAA
 | DAS
mb0's avatar
mb0 committed
715
716
 | DEC of arity1
 | DIV of arity1
Julian Kranz's avatar
Julian Kranz committed
717
718
719
720
721
722
723
724
725
 | DIVPD of arity2
 | DIVPS of arity2
 | DIVSD of arity2
 | DIVSS of arity2
 | DPPD of arity3
 | DPPS of arity3
 | EMMS
 | ENTER of arity2
 | EXTRACTPS of arity3
Julian Kranz's avatar
Julian Kranz committed
726
727
 | F2XM1
 | FABS
Julian Kranz's avatar
Julian Kranz committed
728
 | FADD of arity2
Julian Kranz's avatar
Julian Kranz committed
729
 | FADDP of arity2
Julian Kranz's avatar
Julian Kranz committed
730
731
 | FBLD of arity1
 | FBSTP of arity1
mb0's avatar
mb0 committed
732
 | FCHS
Julian Kranz's avatar
Julian Kranz committed
733
 | FCLEX
mb0's avatar
mb0 committed
734
735
736
737
738
739
740
741
 | FCMOVB of arity2
 | FCMOVBE of arity2
 | FCMOVE of arity2
 | FCMOVNB of arity2
 | FCMOVNBE of arity2
 | FCMOVNE of arity2
 | FCMOVNU of arity2
 | FCMOVU of arity2
Julian Kranz's avatar
Julian Kranz committed
742
 | FCOM of arity1
mb0's avatar
mb0 committed
743
744
 | FCOMI of arity2
 | FCOMIP of arity2
Julian Kranz's avatar
Julian Kranz committed
745
746
 | FCOMP of arity1
 | FCOMPP
Julian Kranz's avatar
Julian Kranz committed
747
748
749
750
751
752
753
 | FCOS
 | FDECSTP
 | FDIV of arity2
 | FDIVP of arity2
 | FDIVR of arity2
 | FDIVRP of arity2
 | FFREE of arity1
Julian Kranz's avatar
Julian Kranz committed
754
 | FIADD of arity1
Julian Kranz's avatar
Julian Kranz committed
755
756
 | FICOM of arity1
 | FICOMP of arity1
Julian Kranz's avatar
Julian Kranz committed
757
758
 | FIDIV of arity2
 | FIDIVR of arity1
Julian Kranz's avatar
Julian Kranz committed
759
 | FILD of arity1
Julian Kranz's avatar
Julian Kranz committed
760
 | FIMUL of arity1
Julian Kranz's avatar
Julian Kranz committed
761
762
763
764
765
 | FINCSTP
 | FINIT
 | FIST of arity1
 | FISTP of arity1
 | FISTTP of arity1
Julian Kranz's avatar
Julian Kranz committed
766
767
 | FISUB of arity1
 | FISUBR of arity1
mb0's avatar
mb0 committed
768
 | FLD of arity1
Julian Kranz's avatar
Julian Kranz committed
769
770
771
 | FLD1
 | FLDCW of arity1
 | FLDENV of arity1
mb0's avatar
mb0 committed
772
773
774
775
776
777
 | FLDL2E
 | FLDL2T
 | FLDLG2
 | FLDLN2
 | FLDPI
 | FLDZ
Julian Kranz's avatar
Julian Kranz committed
778
779
 | FMUL of arity2
 | FMULP of arity2
Julian Kranz's avatar
Julian Kranz committed
780
781
 | FNCLEX
 | FNINIT
Julian Kranz's avatar
Julian Kranz committed
782
 | FNOP
Julian Kranz's avatar
Julian Kranz committed
783
784
785
786
 | FNSAVE of arity1
 | FNSTCW of arity1
 | FNSTENV of arity1
 | FNSTSW of arity1
Julian Kranz's avatar
Julian Kranz committed
787
788
789
790
791
 | FPATAN
 | FPREM
 | FPREM1
 | FPTAN
 | FRNDINT
Julian Kranz's avatar
Julian Kranz committed
792
793
 | FRSTOR of arity1
 | FSAVE of arity1
Julian Kranz's avatar
Julian Kranz committed
794
795
796
797
 | FSCALE
 | FSIN
 | FSINCOS
 | FSQRT
mb0's avatar
mb0 committed
798
 | FST of arity1
Julian Kranz's avatar
Julian Kranz committed
799
 | FSTCW of arity1
Julian Kranz's avatar
Julian Kranz committed
800
 | FSTENV of arity1
Julian Kranz's avatar
Julian Kranz committed
801
 | FSTP of arity1
Julian Kranz's avatar
Julian Kranz committed
802
803
804
805
806
807
808
 | FSTSW of arity1
 | FSUB of arity2
 | FSUBP of arity2
 | FSUBR of arity2
 | FSUBRP of arity2
 | FTST
 | FUCOM of arity1
Julian Kranz's avatar
Julian Kranz committed
809
810
 | FUCOMI of arity1
 | FUCOMIP of arity1
Julian Kranz's avatar
Julian Kranz committed
811
812
813
814
 | FUCOMP of arity1
 | FUCOMPP
 | FXAM
 | FXCH of arity1
Julian Kranz's avatar
Julian Kranz committed
815
 | FXRSTOR of arity1
Julian Kranz's avatar
Julian Kranz committed
816
 | FXRSTOR64 of arity1
Julian Kranz's avatar
Julian Kranz committed
817
 | FXSAVE of arity1
Julian Kranz's avatar
Julian Kranz committed
818
 | FXSAVE64 of arity1
Julian Kranz's avatar
Julian Kranz committed
819
820
821
822
823
 | FXTRACT
 | FYL2X
 | FYL2XP1
 | HADDPD of arity2
 | HADDPS of arity2
mb0's avatar
mb0 committed
824
 | HLT
Julian Kranz's avatar
Julian Kranz committed
825
 | HSUBPD of arity2
Julian Kranz's avatar
Julian Kranz committed
826
 | HSUBPS of arity2
mb0's avatar
mb0 committed
827
 | IDIV of arity1
Julian Kranz's avatar
Julian Kranz committed
828
829
 | IMUL of varity
 | IN of arity2
mb0's avatar
mb0 committed
830
 | INC of arity1
Julian Kranz's avatar
Julian Kranz committed
831
832
 | INSB
 | INSD
Julian Kranz's avatar
Julian Kranz committed
833
 | INSERTPS of arity3
Julian Kranz's avatar
Julian Kranz committed
834
 | INSW
Julian Kranz's avatar
Julian Kranz committed
835
836
 | INT of arity1
 | INT0
Julian Kranz's avatar
Julian Kranz committed
837
 | INT3
Julian Kranz's avatar
Julian Kranz committed
838
839
 | INVD
 | INVLPG of arity1
Julian Kranz's avatar
Julian Kranz committed
840
841
842
843
 | INVPCID of arity2
 | IRET
 | IRETD
 | IRETQ
mb0's avatar
mb0 committed
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
 | JA of flow1
 | JAE of flow1
 | JB of flow1
 | JBE of flow1
 | JC of flow1
 | JCXZ of flow1
 | JE of flow1
 | JECXZ of flow1
 | JG of flow1
 | JGE of flow1
 | JL of flow1
 | JLE of flow1
 | JMP of flow1
 | JNA of flow1
 | JNAE of flow1
 | JNB of flow1
 | JNBE of flow1
 | JNC of flow1
 | JNE of flow1
 | JNG of flow1
 | JNGE of flow1
 | JNL of flow1
 | JNLE of flow1
 | JNO of flow1
 | JNP of flow1
 | JNS of flow1
 | JNZ of flow1
 | JO of flow1
 | JP of flow1
 | JPE of flow1
 | JPO of flow1
 | JRCXZ of flow1
 | JS of flow1
 | JZ of flow1
Julian Kranz's avatar
Julian Kranz committed
878
879
 | LAHF
 | LAR of arity2
mb0's avatar
mb0 committed
880
 | LDDQU of arity2
Julian Kranz's avatar
Julian Kranz committed
881
882
 | LDMXCSR of arity1
 | LDS of arity2
mb0's avatar
mb0 committed
883
 | LEA of arity2
mb0's avatar
mb0 committed
884
 | LEAVE
Julian Kranz's avatar
Julian Kranz committed
885
 | LES of arity2
mb0's avatar
mb0 committed
886
 | LFENCE
Julian Kranz's avatar
Julian Kranz committed
887
 | LFS of arity2
Julian Kranz's avatar
Julian Kranz committed
888
 | LGDT of arity1
Julian Kranz's avatar
Julian Kranz committed
889
 | LGS of arity2
Julian Kranz's avatar
Julian Kranz committed
890
 | LIDT of arity1
Julian Kranz's avatar
Julian Kranz committed
891
892
893
894
895
896
 | LLDT of arity1
 | LMSW of arity1
 | LOCK
 | LODSB
 | LODSD
 | LODSQ
Julian Kranz's avatar
Julian Kranz committed
897
 | LODSW
Julian Kranz's avatar
Julian Kranz committed
898
899
900
901
 | LOOP of flow1
 | LOOPE of flow1
 | LOOPNE of flow1
 | LSL of arity2
Julian Kranz's avatar
Julian Kranz committed
902
 | LSS of arity2
Julian Kranz's avatar
Julian Kranz committed
903
 | LTR of arity1
mb0's avatar
mb0 committed
904
905
906
907
908
909
 | MASKMOVDQU of arity2
 | MASKMOVQ of arity2
 | MAXPD of arity2
 | MAXPS of arity2
 | MAXSD of arity2
 | MAXSS of arity2
mb0's avatar
Track.    
mb0 committed
910
 | MFENCE
mb0's avatar
mb0 committed
911
912
913
914
 | MINPD of arity2
 | MINPS of arity2
 | MINSD of arity2
 | MINSS of arity2
mb0's avatar
Track.    
mb0 committed
915
 | MONITOR
mb0's avatar
mb0 committed
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
 | MOV of arity2
 | MOVAPD of arity2
 | MOVAPS of arity2
 | MOVBE of arity2
 | MOVD of arity2
 | MOVDDUP of arity2
 | MOVDQ2Q of arity2
 | MOVDQA of arity2
 | MOVDQU of arity2
 | MOVHLPS of arity2
 | MOVHPD of arity2
 | MOVHPS of arity2
 | MOVLHPS of arity2
 | MOVLPD of arity2
 | MOVLPS of arity2
 | MOVMSKPD of arity2
 | MOVMSKPS of arity2
 | MOVNTDQ of arity2
 | MOVNTDQA of arity2
 | MOVNTI of arity2
 | MOVNTPD of arity2
 | MOVNTPS of arity2
 | MOVNTQ of arity2
 | MOVQ of arity2
 | MOVQ2DQ of arity2
mb0's avatar
mb0 committed
941
 | MOVSB
mb0's avatar
mb0 committed
942
 | MOVSD of varity
mb0's avatar
mb0 committed
943
944
 | MOVSHDUP of arity2
 | MOVSLDUP of arity2
mb0's avatar
mb0 committed
945
 | MOVSQ
mb0's avatar
mb0 committed
946
947
948
949
950
951
952
953
954
955
956
957
958
 | MOVSS of arity2
 | MOVSW of arity2
 | MOVSX of arity2
 | MOVSXD of arity2
 | MOVUPD of arity2
 | MOVUPS of arity2
 | MOVZX of arity2
 | MPSADBW of arity3
 | MUL of arity1
 | MULPD of arity2
 | MULPS of arity2
 | MULSD of arity2
 | MULSS of arity2
Julian Kranz's avatar
Julian Kranz committed
959
 | MWAIT
mb0's avatar
mb0 committed
960
961
962
963
964
965
966
 | NEG of arity1
 | NOP of varity
 | NOT of arity1
 | OR of arity2
 | ORPD of arity2
 | ORPS of arity2
 | OUT of arity2
Julian Kranz's avatar
Julian Kranz committed
967
968
969
 | OUTS
 | OUTSB
 | OUTSD
Julian Kranz's avatar
Julian Kranz committed
970
 | OUTSW
Julian Kranz's avatar
Julian Kranz committed
971
972
 | PABSB of arity2
 | PABSD of arity2
Julian Kranz's avatar
Julian Kranz committed
973
 | PABSW of arity2
Julian Kranz's avatar
Julian Kranz committed
974
 | PACKSSDW of arity2
Julian Kranz's avatar
Julian Kranz committed
975
 | PACKSSWB of arity2
Julian Kranz's avatar
Julian Kranz committed
976
 | PACKUSDW of arity2
Julian Kranz's avatar
Julian Kranz committed
977
 | PACKUSWB of arity2
Julian Kranz's avatar
Julian Kranz committed
978
979
 | PADDB of arity2
 | PADDD of arity2
Julian Kranz's avatar
Julian Kranz committed
980
 | PADDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
981
982
 | PADDSB of arity2
 | PADDSW of arity2
Julian Kranz's avatar
Julian Kranz committed
983
984
 | PADDUSB of arity2
 | PADDUSW of arity2
Julian Kranz's avatar
Julian Kranz committed
985
 | PADDW of arity2
mb0's avatar
mb0 committed
986
987
 | PALIGNR of arity3
 | PAND of arity2
Julian Kranz's avatar
Julian Kranz committed
988
 | PANDN of arity2
Julian Kranz's avatar
Julian Kranz committed
989
 | PAUSE
Julian Kranz's avatar
Julian Kranz committed
990
991
 | PAVGB of arity2
 | PAVGW of arity2
Julian Kranz's avatar
Julian Kranz committed
992
 | PBLENDVB of arity2
Julian Kranz's avatar
Julian Kranz committed
993
 | PBLENDW of arity3
Julian Kranz's avatar
Julian Kranz committed
994
 | PCLMULQDQ of arity3
mb0's avatar
mb0 committed
995
996
997
998
999
 | PCMPEQB of arity2
 | PCMPEQD of arity2
 | PCMPEQQ of arity2
 | PCMPEQW of arity2
 | PCMPESTRI of arity3
Julian Kranz's avatar
Julian Kranz committed
1000
 | PCMPESTRM of arity3
mb0's avatar
mb0 committed
1001
1002
1003
 | PCMPGRD of arity2
 | PCMPGTB of arity2
 | PCMPGTD of arity2
Julian Kranz's avatar
Julian Kranz committed
1004
 | PCMPGTQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1005
 | PCMPGTW of arity2
mb0's avatar
mb0 committed
1006
 | PCMPISTRI of arity3
Julian Kranz's avatar
Julian Kranz committed
1007
 | PCMPISTRM of arity3
Julian Kranz's avatar
Julian Kranz committed
1008
1009
1010
 | PEXTRB of arity3
 | PEXTRD of arity3
 | PEXTRQ of arity3
Julian Kranz's avatar
Julian Kranz committed
1011
 | PEXTRW of arity3
mb0's avatar
mb0 committed
1012
 | PHADDD of arity2
Julian Kranz's avatar
Julian Kranz committed
1013
 | PHADDSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1014
 | PHADDW of arity2
Julian Kranz's avatar
Julian Kranz committed
1015
 | PHMINPOSUW of arity2
Julian Kranz's avatar
Julian Kranz committed
1016
 | PHSUBD of arity2
Julian Kranz's avatar
Julian Kranz committed
1017
 | PHSUBSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1018
 | PHSUBW of arity2
mb0's avatar
mb0 committed
1019
1020
1021
 | PINSRB of arity3
 | PINSRD of arity3
 | PINSRQ of arity3
Julian Kranz's avatar
Julian Kranz committed
1022
 | PINSRW of arity3
Julian Kranz's avatar
Julian Kranz committed
1023
 | PMADDUBSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1024
1025
 | PMADDWD of arity2
 | PMAXSB of arity2
Julian Kranz's avatar
Julian Kranz committed
1026
 | PMAXSD of arity2
Julian Kranz's avatar
Julian Kranz committed
1027
 | PMAXSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1028
 | PMAXUB of arity2
Julian Kranz's avatar
Julian Kranz committed
1029
 | PMAXUD of arity2
Julian Kranz's avatar
Julian Kranz committed
1030
1031
 | PMAXUW of arity2
 | PMINSB of arity2
Julian Kranz's avatar
Julian Kranz committed
1032
 | PMINSD of arity2
Julian Kranz's avatar
Julian Kranz committed
1033
1034
 | PMINSW of arity2
 | PMINUB of arity2
Julian Kranz's avatar
Julian Kranz committed
1035
1036
 | PMINUD of arity2
 | PMINUW of arity2
mb0's avatar
mb0 committed
1037
 | PMOVMSKB of arity2
Julian Kranz's avatar
Julian Kranz committed
1038
1039
 | PMOVSXBD of arity2
 | PMOVSXBQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1040
1041
 | PMOVSXBW of arity2
 | PMOVSXDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1042
1043
1044
1045
 | PMOVSXWD of arity2
 | PMOVSXWQ of arity2
 | PMOVZXBD of arity2
 | PMOVZXBQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1046
1047
 | PMOVZXBW of arity2
 | PMOVZXDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1048
1049
1050
1051
1052
1053
1054
1055
 | PMOVZXWD of arity2
 | PMOVZXWQ of arity2
 | PMULDQ of arity2
 | PMULHRSW of arity2
 | PMULHUW of arity2
 | PMULHW of arity2
 | PMULLD of arity2
 | PMULLW of arity2
Julian Kranz's avatar
Julian Kranz committed
1056
 | PMULUDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1057
 | POP of arity1
Julian Kranz's avatar
Julian Kranz committed
1058
1059
1060
1061
1062
1063
 | POPA
 | POPAD
 | POPCNT of arity2
 | POPF
 | POPFD
 | POPFQ
mb0's avatar
mb0 committed
1064
1065
1066
1067
1068
1069
 | POR of arity2
 | PREFETCHNTA of arity1
 | PREFETCHT0 of arity1
 | PREFETCHT1 of arity1
 | PREFETCHT2 of arity1
 | PREFETCHW of arity1
Julian Kranz's avatar
Julian Kranz committed
1070
 | PSADBW of arity2
mb0's avatar
mb0 committed
1071
1072
 | PSHUFB of arity2
 | PSHUFD of arity3
Julian Kranz's avatar
Julian Kranz committed
1073
1074
1075
1076
1077
 | PSHUFHW of arity3
 | PSHUFLW of arity3
 | PSHUFW of arity3
 | PSIGNB of arity2
 | PSIGND of arity2
Julian Kranz's avatar
Julian Kranz committed
1078
 | PSIGNW of arity2
Julian Kranz's avatar
Julian Kranz committed
1079
 | PSLLD of arity2
Julian Kranz's avatar
Julian Kranz committed
1080
 | PSLLDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1081
 | PSLLQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1082
 | PSLLW of arity2
Julian Kranz's avatar
Julian Kranz committed
1083
 | PSRAD of arity2
Julian Kranz's avatar
Julian Kranz committed
1084
 | PSRAW of arity2
Julian Kranz's avatar
Julian Kranz committed
1085
 | PSRLD of arity2
Julian Kranz's avatar
Julian Kranz committed
1086
 | PSRLDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1087
 | PSRLQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1088
 | PSRLW of arity2
mb0's avatar
mb0 committed
1089
1090
 | PSUBB of arity2
 | PSUBD of arity2
Julian Kranz's avatar
Julian Kranz committed
1091
1092
1093
1094
1095
 | PSUBQ of arity2
 | PSUBSB of arity2
 | PSUBSW of arity2
 | PSUBUSB of arity2
 | PSUBUSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1096
 | PSUBW of arity2
mb0's avatar
mb0 committed
1097
 | PTEST of arity2
Julian Kranz's avatar
Julian Kranz committed
1098
1099
1100
 | PUNPCKHBW of arity2
 | PUNPCKHDQ of arity2
 | PUNPCKHQDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1101
 | PUNPCKHWD of arity2
mb0's avatar
mb0 committed
1102
 | PUNPCKLBW of arity2
Julian Kranz's avatar
Julian Kranz committed
1103
 | PUNPCKLDQ of arity2
mb0's avatar
mb0 committed
1104
 | PUNPCKLQDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1105
 | PUNPCKLWD of arity2
mb0's avatar
mb0 committed
1106
 | PUSH of arity1
Julian Kranz's avatar
Julian Kranz committed
1107
1108
1109
1110
1111
 | PUSHA
 | PUSHAD
 | PUSHF
 | PUSHFD
 | PUSHFQ
mb0's avatar
mb0 committed
1112
1113
 | PXOR of arity2
 | RCL of arity2
Julian Kranz's avatar
Julian Kranz committed
1114
1115
 | RCPPS of arity2
 | RCPSS of arity2
Julian Kranz's avatar
Julian Kranz committed
1116
 | RCR of arity2
Julian Kranz's avatar
Julian Kranz committed
1117
1118
1119
 | RDFSBASE of arity1
 | RDGSBASE of arity1
 | RDMSR
Julian Kranz's avatar
Julian Kranz committed
1120
1121
 | RDPMC
 | RDRAND of arity1
mb0's avatar
mb0 committed
1122
1123
 | RDTSC
 | RDTSCP
mb0's avatar
mb0 committed
1124
1125
 | RET of varity
 | RET_FAR of varity
Julian Kranz's avatar
Julian Kranz committed
1126
1127
 | ROL of arity2
 | ROR of arity2
Julian Kranz's avatar
Julian Kranz committed
1128
1129
1130
1131
1132
1133
1134
1135
 | ROUNDPD of arity3
 | ROUNDPS of arity3
 | ROUNDSD of arity3
 | ROUNDSS of arity3
 | RSM
 | RSQRTPS of arity2
 | RSQRTSS of arity2
 | SAHF
mb0's avatar
mb0 committed
1136
1137
1138
 | SAL of arity2
 | SAR of arity2
 | SBB of arity2
mb0's avatar
mb0 committed
1139
1140
1141
1142
 | SCASB
 | SCASD
 | SCASQ
 | SCASW
mb0's avatar
mb0 committed
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
 | SETA of arity1
 | SETAE of arity1
 | SETB of arity1
 | SETBE of arity1
 | SETC of arity1
 | SETE of arity1
 | SETG of arity1
 | SETGE of arity1
 | SETL of arity1
 | SETLE of arity1
 | SETNA of arity1
 | SETNAE of arity1
 | SETNB of arity1
 | SETNBE of arity1
 | SETNC of arity1
 | SETNE of arity1
 | SETNG of arity1
 | SETNGE of arity1
 | SETNL of arity1
 | SETNLE of arity1
 | SETNO of arity1
 | SETNP of arity1
 | SETNS of arity1
 | SETNZ of arity1
 | SETO of arity1
 | SETP of arity1
 | SETPE of arity1
 | SETPO of arity1
 | SETS of arity1
 | SETZ of arity1
mb0's avatar
mb0 committed
1173
 | SFENCE
Julian Kranz's avatar
Julian Kranz committed
1174
 | SGDT of arity1
Julian Kranz's avatar
Julian Kranz committed
1175
 | SHL of arity2