x86.ml 153 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
# 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
88
val set-lock = update@{lock='1'}
mb0's avatar
Track.    
mb0 committed
89
90
91
92
val set-addrsz = update@{addrsz='1'}

## Decoding prefixes

mb0's avatar
mb0 committed
93
# The functions 'after' and 'continue' are used to try different decoders
Axel Simon's avatar
Axel Simon committed
94
95
96
# 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
97
val after fst snd = do
98
99
100
  update@{tab=snd};
  r <- fst;
  # make the type checker happy
Axel Simon's avatar
Axel Simon committed
101
  update@{~tab};
102
  return r
Axel Simon's avatar
Axel Simon committed
103
104
105
end

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

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

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

Axel Simon's avatar
Axel Simon committed
129
130
131
132
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
133
134
135
136
137
138
139
140
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
141

mb0's avatar
mb0 committed
142
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
143
144
145
146
147
148
149
150
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
151
        vexv=complement v,
mb0's avatar
mb0 committed
152
153
154
        vexm='00001'}
end

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

mb0's avatar
mb0 committed
166
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
167
168
169
170
171
172
173
174
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
175
        vexv=complement v,
Julian Kranz's avatar
Julian Kranz committed
176

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

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

mb0's avatar
mb0 committed
191
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
192
193
194
195
196
197
198
199
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
200
        vexv=complement v,
mb0's avatar
mb0 committed
201
202
203
        vexm='00001'}
end

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

mb0's avatar
mb0 committed
215
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
216
217
218
219
220
221
222
223
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
224
        vexv=complement v,
mb0's avatar
mb0 committed
225
226
227
        vexm='00001'}
end

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

mb0's avatar
mb0 committed
239
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
240
241
242
243
244
245
246
247
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
248
        vexv=complement v,
mb0's avatar
mb0 committed
249
250
251
        vexm='00010'}
end

mb0's avatar
mb0 committed
252
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
253
254
255
256
257
258
259
260
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
261
        vexv=complement v,
mb0's avatar
mb0 committed
262
263
264
        vexm='00010'}
end

mb0's avatar
mb0 committed
265
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
266
267
268
269
270
271
272
273
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
274
        vexv=complement v,
mb0's avatar
mb0 committed
275
276
277
        vexm='00010'}
end

mb0's avatar
mb0 committed
278
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
279
280
281
282
283
284
285
286
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
287
        vexv=complement v,
mb0's avatar
mb0 committed
288
289
290
        vexm='00010'}
end

mb0's avatar
mb0 committed
291
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
292
293
294
295
296
297
298
299
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
300
        vexv=complement v,
mb0's avatar
mb0 committed
301
302
303
        vexm='00011'}
end

mb0's avatar
mb0 committed
304
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
305
306
307
308
309
310
311
312
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
313
        vexv=complement v,
mb0's avatar
mb0 committed
314
315
316
        vexm='00011'}
end

mb0's avatar
mb0 committed
317
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
318
319
   update
      @{rex='1',
Julian Kranz's avatar
Julian Kranz committed
320
	rexw=w,
mb0's avatar
mb0 committed
321
322
323
324
325
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
326
        vexv=complement v,
mb0's avatar
mb0 committed
327
328
329
        vexm='00011'}
end

mb0's avatar
mb0 committed
330
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
331
332
333
334
335
336
337
338
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
339
        vexv=complement v,
mb0's avatar
mb0 committed
340
341
342
        vexm='00011'}
end

mb0's avatar
Track.    
mb0 committed
343
344
345
346
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
347
348
349
val p64 [/rex-p]
 | mode64? = p64
 | mode32? = unop INC rex/reg32
mb0's avatar
mb0 committed
350
351
352
353
#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
354
355
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
356
357
#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
358
val p64 [] = /
mb0's avatar
Track.    
mb0 committed
359
360
361

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
362
val p/66 [0x66] = do set-opndsz; p/66 end
mb0's avatar
mb0 committed
363
val p/66 [/legacy-p] = p/66
Julian Kranz's avatar
Julian Kranz committed
364
365
366
val p/66 [/rex-p]
 | mode64? = p/66
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
367
val p/66 [] = after /66 /
mb0's avatar
Track.    
mb0 committed
368

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

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

mb0's avatar
mb0 committed
387
val p/f2/f3 [0x66] = do set-opndsz; p/66/f2/f3 end
mb0's avatar
mb0 committed
388
389
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
390
val p/f2/f3 [/legacy-p] = p/f2/f3
Julian Kranz's avatar
Julian Kranz committed
391
392
393
val p/f2/f3 [/rex-p]
 | mode64? = p/f2/f3
 | mode32? = unop INC rex/reg32
mb0's avatar
mb0 committed
394
val p/f2/f3 [] = after /f3 (after /f2 /)
mb0's avatar
Track.    
mb0 committed
395

mb0's avatar
mb0 committed
396
val p/f3/f2 [0x66] = do set-opndsz; p/66/f2/f3 end
mb0's avatar
mb0 committed
397
398
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
399
val p/f3/f2 [/legacy-p] = p/f3/f2
Julian Kranz's avatar
Julian Kranz committed
400
401
402
val p/f3/f2 [/rex-p]
 | mode64? = p/f3/f2
 | mode32? = unop INC rex/reg32
mb0's avatar
mb0 committed
403
val p/f3/f2 [] = after /f2 (after /f3 /)
mb0's avatar
Track.    
mb0 committed
404

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

mb0's avatar
mb0 committed
414
val p/66/f3 [0x66] = do set-opndsz; p/66/f3 end
mb0's avatar
Track.    
mb0 committed
415
val p/66/f3 [0xf2] = do set-repne; p/66/f3/f2 end
mb0's avatar
mb0 committed
416
val p/66/f3 [0xf3] = do set-rep; p/66/f3 end
mb0's avatar
mb0 committed
417
val p/66/f3 [/legacy-p] = p/66/f3
Julian Kranz's avatar
Julian Kranz committed
418
419
420
val p/66/f3 [/rex-p]
 | mode64? = p/66/f3
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
421
422
423
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
424
425
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
426
val p/66/f2/f3 [/legacy-p] = p/66/f2/f3
Julian Kranz's avatar
Julian Kranz committed
427
428
429
val p/66/f2/f3 [/rex-p]
 | mode64? = p/66/f2/f3
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
430
val p/66/f2/f3 [] = after /f3 (after /f2 (after /66 /))
mb0's avatar
Track.    
mb0 committed
431

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

mb0's avatar
Foo.    
mb0 committed
441
type register =
mb0's avatar
Track.    
mb0 committed
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
   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
465
 | R8
mb0's avatar
Track.    
mb0 committed
466
467
468
 | R9B
 | R9L
 | R9D
Julian Kranz's avatar
Julian Kranz committed
469
 | R9
mb0's avatar
Track.    
mb0 committed
470
471
472
 | R10B
 | R10L
 | R10D
Julian Kranz's avatar
Julian Kranz committed
473
 | R10
mb0's avatar
Track.    
mb0 committed
474
475
476
 | R11B
 | R11L
 | R11D
Julian Kranz's avatar
Julian Kranz committed
477
 | R11
mb0's avatar
Track.    
mb0 committed
478
479
480
 | R12B
 | R12L
 | R12D
Julian Kranz's avatar
Julian Kranz committed
481
 | R12
mb0's avatar
Track.    
mb0 committed
482
483
484
 | R13B
 | R13L
 | R13D
Julian Kranz's avatar
Julian Kranz committed
485
 | R13
mb0's avatar
Track.    
mb0 committed
486
487
488
 | R14B
 | R14L
 | R14D
Julian Kranz's avatar
Julian Kranz committed
489
 | R14
mb0's avatar
Track.    
mb0 committed
490
491
492
 | R15B
 | R15L
 | R15D
Julian Kranz's avatar
Julian Kranz committed
493
 | R15
mb0's avatar
Track.    
mb0 committed
494
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
 | 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
552
553
554
555
556
557
558
559
 | ST0
 | ST1
 | ST2
 | ST3
 | ST4
 | ST5
 | ST6
 | ST7
mb0's avatar
mb0 committed
560
 | RIP
mb0's avatar
Track.    
mb0 committed
561

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

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

582
583
type flow1 = {opnd1:flowopnd}
type arity1 = {opnd1:opnd}
Julian Kranz's avatar
Julian Kranz committed
584
585
586
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
587

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

mb0's avatar
Foo.    
mb0 committed
595
type insn =
mb0's avatar
Merge.    
mb0 committed
596
597
598
599
600
   AAA
 | AAD of arity1
 | AAM of arity1
 | AAS
 | ADC of arity2
mb0's avatar
mb0 committed
601
 | ADD of arity2
mb0's avatar
Merge.    
mb0 committed
602
 | ADDPD of arity2
Julian Kranz's avatar
Merge    
Julian Kranz committed
603
604
605
606
607
608
609
610
611
612
613
 | 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
614
 | AND of arity2
Julian Kranz's avatar
Julian Kranz committed
615
616
 | ANDNPD of arity2
 | ANDNPS of arity2
Julian Kranz's avatar
Julian Kranz committed
617
618
 | ANDPD of arity2
 | ANDPS of arity2
Julian Kranz's avatar
Julian Kranz committed
619
620
621
 | ARPL of arity2
 | BLENDPD of arity3
 | BLENDPS of arity3
Julian Kranz's avatar
Julian Kranz committed
622
 | BLENDVPD of arity3
Julian Kranz's avatar
Julian Kranz committed
623
 | BLENDVPS of arity3
Julian Kranz's avatar
Julian Kranz committed
624
 | BOUND of arity2
mb0's avatar
mb0 committed
625
626
 | BSF of arity2
 | BSR of arity2
mb0's avatar
mb0 committed
627
 | BSWAP of arity1
mb0's avatar
mb0 committed
628
 | BT of arity2
Julian Kranz's avatar
Julian Kranz committed
629
630
631
 | BTC of arity2
 | BTR of arity2
 | BTS of arity2
mb0's avatar
mb0 committed
632
 | CALL of flow1
mb0's avatar
mb0 committed
633
 | CBW
Julian Kranz's avatar
Julian Kranz committed
634
 | CDQ
mb0's avatar
mb0 committed
635
 | CDQE
Julian Kranz's avatar
Julian Kranz committed
636
 | CLC
mb0's avatar
mb0 committed
637
 | CLD
Julian Kranz's avatar
Julian Kranz committed
638
639
640
641
 | CLFLUSH of arity1
 | CLI
 | CLTS
 | CMC
mb0's avatar
mb0 committed
642
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
 | 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
673
674
 | CMPPD of arity3
 | CMPPS of arity3
mb0's avatar
mb0 committed
675
 | CMPSB
Julian Kranz's avatar
Julian Kranz committed
676
 | CMPSD of varity
mb0's avatar
mb0 committed
677
 | CMPSQ
Julian Kranz's avatar
Julian Kranz committed
678
 | CMPSS of arity3
Julian Kranz's avatar
Julian Kranz committed
679
 | CMPSW
mb0's avatar
mb0 committed
680
 | CMPXCHG of arity2
Julian Kranz's avatar
Julian Kranz committed
681
 | CMPXCHG16B of arity1
Julian Kranz's avatar
Julian Kranz committed
682
 | CMPXCHG8B of arity1
Julian Kranz's avatar
Julian Kranz committed
683
684
 | COMISD of arity2
 | COMISS of arity2
mb0's avatar
mb0 committed
685
 | CPUID
Julian Kranz's avatar
Julian Kranz committed
686
 | CQO
Julian Kranz's avatar
Julian Kranz committed
687
 | CRC32 of arity2
Julian Kranz's avatar
Julian Kranz committed
688
689
690
 | CVTDQ2PD of arity2
 | CVTDQ2PS of arity2
 | CVTPD2DQ of arity2
mb0's avatar
mb0 committed
691
 | CVTPD2PI of arity2
Julian Kranz's avatar
Julian Kranz committed
692
693
694
695
696
697
698
699
 | 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
700
 | CVTSI2SD of arity2
Julian Kranz's avatar
Julian Kranz committed
701
702
703
704
705
706
707
708
709
710
 | 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
711
 | CWDE
Julian Kranz's avatar
Julian Kranz committed
712
713
 | DAA
 | DAS
mb0's avatar
mb0 committed
714
715
 | DEC of arity1
 | DIV of arity1
Julian Kranz's avatar
Julian Kranz committed
716
717
718
719
720
721
722
723
724
 | 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
725
726
 | F2XM1
 | FABS
Julian Kranz's avatar
Julian Kranz committed
727
 | FADD of arity2
Julian Kranz's avatar
Julian Kranz committed
728
 | FADDP of arity2
Julian Kranz's avatar
Julian Kranz committed
729
730
 | FBLD of arity1
 | FBSTP of arity1
mb0's avatar
mb0 committed
731
 | FCHS
Julian Kranz's avatar
Julian Kranz committed
732
 | FCLEX
mb0's avatar
mb0 committed
733
734
735
736
737
738
739
740
 | 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
741
 | FCOM of arity1
mb0's avatar
mb0 committed
742
743
 | FCOMI of arity2
 | FCOMIP of arity2
Julian Kranz's avatar
Julian Kranz committed
744
745
 | FCOMP of arity1
 | FCOMPP
Julian Kranz's avatar
Julian Kranz committed
746
747
748
749
750
751
752
 | FCOS
 | FDECSTP
 | FDIV of arity2
 | FDIVP of arity2
 | FDIVR of arity2
 | FDIVRP of arity2
 | FFREE of arity1
Julian Kranz's avatar
Julian Kranz committed
753
 | FIADD of arity1
Julian Kranz's avatar
Julian Kranz committed
754
755
 | FICOM of arity1
 | FICOMP of arity1
Julian Kranz's avatar
Julian Kranz committed
756
757
 | FIDIV of arity2
 | FIDIVR of arity1
Julian Kranz's avatar
Julian Kranz committed
758
 | FILD of arity1
Julian Kranz's avatar
Julian Kranz committed
759
 | FIMUL of arity1
Julian Kranz's avatar
Julian Kranz committed
760
761
762
763
764
 | FINCSTP
 | FINIT
 | FIST of arity1
 | FISTP of arity1
 | FISTTP of arity1
Julian Kranz's avatar
Julian Kranz committed
765
766
 | FISUB of arity1
 | FISUBR of arity1
mb0's avatar
mb0 committed
767
 | FLD of arity1
Julian Kranz's avatar
Julian Kranz committed
768
769
770
 | FLD1
 | FLDCW of arity1
 | FLDENV of arity1
mb0's avatar
mb0 committed
771
772
773
774
775
776
 | FLDL2E
 | FLDL2T
 | FLDLG2
 | FLDLN2
 | FLDPI
 | FLDZ
Julian Kranz's avatar
Julian Kranz committed
777
778
 | FMUL of arity2
 | FMULP of arity2
Julian Kranz's avatar
Julian Kranz committed
779
780
 | FNCLEX
 | FNINIT
Julian Kranz's avatar
Julian Kranz committed
781
 | FNOP
Julian Kranz's avatar
Julian Kranz committed
782
783
784
785
 | FNSAVE of arity1
 | FNSTCW of arity1
 | FNSTENV of arity1
 | FNSTSW of arity1
Julian Kranz's avatar
Julian Kranz committed
786
787
788
789
790
 | FPATAN
 | FPREM
 | FPREM1
 | FPTAN
 | FRNDINT
Julian Kranz's avatar
Julian Kranz committed
791
792
 | FRSTOR of arity1
 | FSAVE of arity1
Julian Kranz's avatar
Julian Kranz committed
793
794
795
796
 | FSCALE
 | FSIN
 | FSINCOS
 | FSQRT
mb0's avatar
mb0 committed
797
 | FST of arity1
Julian Kranz's avatar
Julian Kranz committed
798
 | FSTCW of arity1
Julian Kranz's avatar
Julian Kranz committed
799
 | FSTENV of arity1
Julian Kranz's avatar
Julian Kranz committed
800
 | FSTP of arity1
Julian Kranz's avatar
Julian Kranz committed
801
802
803
804
805
806
807
 | 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
808
809
 | FUCOMI of arity1
 | FUCOMIP of arity1
Julian Kranz's avatar
Julian Kranz committed
810
811
812
813
 | FUCOMP of arity1
 | FUCOMPP
 | FXAM
 | FXCH of arity1
Julian Kranz's avatar
Julian Kranz committed
814
 | FXRSTOR of arity1
Julian Kranz's avatar
Julian Kranz committed
815
 | FXRSTOR64 of arity1
Julian Kranz's avatar
Julian Kranz committed
816
 | FXSAVE of arity1
Julian Kranz's avatar
Julian Kranz committed
817
 | FXSAVE64 of arity1
Julian Kranz's avatar
Julian Kranz committed
818
819
820
821
822
 | FXTRACT
 | FYL2X
 | FYL2XP1
 | HADDPD of arity2
 | HADDPS of arity2
mb0's avatar
mb0 committed
823
 | HLT
Julian Kranz's avatar
Julian Kranz committed
824
 | HSUBPD of arity2
Julian Kranz's avatar
Julian Kranz committed
825
 | HSUBPS of arity2
mb0's avatar
mb0 committed
826
 | IDIV of arity1
Julian Kranz's avatar
Julian Kranz committed
827
828
 | IMUL of varity
 | IN of arity2
mb0's avatar
mb0 committed
829
 | INC of arity1
Julian Kranz's avatar
Julian Kranz committed
830
831
 | INSB
 | INSD
Julian Kranz's avatar
Julian Kranz committed
832
 | INSERTPS of arity3
Julian Kranz's avatar
Julian Kranz committed
833
 | INSW
Julian Kranz's avatar
Julian Kranz committed
834
835
 | INT of arity1
 | INT0
Julian Kranz's avatar
Julian Kranz committed
836
 | INT3
Julian Kranz's avatar
Julian Kranz committed
837
838
 | INVD
 | INVLPG of arity1
Julian Kranz's avatar
Julian Kranz committed
839
840
841
842
 | INVPCID of arity2
 | IRET
 | IRETD
 | IRETQ
mb0's avatar
mb0 committed
843
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
 | 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
877
878
 | LAHF
 | LAR of arity2
mb0's avatar
mb0 committed
879
 | LDDQU of arity2
Julian Kranz's avatar
Julian Kranz committed
880
881
 | LDMXCSR of arity1
 | LDS of arity2
mb0's avatar
mb0 committed
882
 | LEA of arity2
mb0's avatar
mb0 committed
883
 | LEAVE
Julian Kranz's avatar
Julian Kranz committed
884
 | LES of arity2
mb0's avatar
mb0 committed
885
 | LFENCE
Julian Kranz's avatar
Julian Kranz committed
886
 | LFS of arity2
Julian Kranz's avatar
Julian Kranz committed
887
 | LGDT of arity1
Julian Kranz's avatar
Julian Kranz committed
888
 | LGS of arity2
Julian Kranz's avatar
Julian Kranz committed
889
 | LIDT of arity1
Julian Kranz's avatar
Julian Kranz committed
890
891
892
893
894
895
 | LLDT of arity1
 | LMSW of arity1
 | LOCK
 | LODSB
 | LODSD
 | LODSQ
Julian Kranz's avatar
Julian Kranz committed
896
 | LODSW
Julian Kranz's avatar
Julian Kranz committed
897
898
899
900
 | LOOP of flow1
 | LOOPE of flow1
 | LOOPNE of flow1
 | LSL of arity2
Julian Kranz's avatar
Julian Kranz committed
901
 | LSS of arity2
Julian Kranz's avatar
Julian Kranz committed
902
 | LTR of arity1
mb0's avatar
mb0 committed
903
904
905
906
907
908
 | MASKMOVDQU of arity2
 | MASKMOVQ of arity2
 | MAXPD of arity2
 | MAXPS of arity2
 | MAXSD of arity2
 | MAXSS of arity2
mb0's avatar
Track.    
mb0 committed
909
 | MFENCE
mb0's avatar
mb0 committed
910
911
912
913
 | MINPD of arity2
 | MINPS of arity2
 | MINSD of arity2
 | MINSS of arity2
mb0's avatar
Track.    
mb0 committed
914
 | MONITOR
mb0's avatar
mb0 committed
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
 | 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
940
 | MOVSB
mb0's avatar
mb0 committed
941
 | MOVSD of varity
mb0's avatar
mb0 committed
942
943
 | MOVSHDUP of arity2
 | MOVSLDUP of arity2
mb0's avatar
mb0 committed
944
 | MOVSQ
mb0's avatar
mb0 committed
945
946
947
948
949
950
951
952
953
954
955
956
957
 | 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
958
 | MWAIT
mb0's avatar
mb0 committed
959
960
961
962
963
964
965
 | 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
966
967
968
 | OUTS
 | OUTSB
 | OUTSD
Julian Kranz's avatar
Julian Kranz committed
969
 | OUTSW
Julian Kranz's avatar
Julian Kranz committed
970
971
 | PABSB of arity2
 | PABSD of arity2
Julian Kranz's avatar
Julian Kranz committed
972
 | PABSW of arity2
Julian Kranz's avatar
Julian Kranz committed
973
 | PACKSSDW of arity2
Julian Kranz's avatar
Julian Kranz committed
974
 | PACKSSWB of arity2
Julian Kranz's avatar
Julian Kranz committed
975
 | PACKUSDW of arity2
Julian Kranz's avatar
Julian Kranz committed
976
 | PACKUSWB of arity2
Julian Kranz's avatar
Julian Kranz committed
977
978
 | PADDB of arity2
 | PADDD of arity2
Julian Kranz's avatar
Julian Kranz committed
979
 | PADDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
980
981
 | PADDSB of arity2
 | PADDSW of arity2
Julian Kranz's avatar
Julian Kranz committed
982
983
 | PADDUSB of arity2
 | PADDUSW of arity2
Julian Kranz's avatar
Julian Kranz committed
984
 | PADDW of arity2
mb0's avatar
mb0 committed
985
986
 | PALIGNR of arity3
 | PAND of arity2
Julian Kranz's avatar
Julian Kranz committed
987
 | PANDN of arity2
Julian Kranz's avatar
Julian Kranz committed
988
 | PAUSE
Julian Kranz's avatar
Julian Kranz committed
989
990
 | PAVGB of arity2
 | PAVGW of arity2
Julian Kranz's avatar
Julian Kranz committed
991
 | PBLENDVB of arity2
Julian Kranz's avatar
Julian Kranz committed
992
 | PBLENDW of arity3
Julian Kranz's avatar
Julian Kranz committed
993
 | PCLMULQDQ of arity3
mb0's avatar
mb0 committed
994
995
996
997
998
 | PCMPEQB of arity2
 | PCMPEQD of arity2
 | PCMPEQQ of arity2
 | PCMPEQW of arity2
 | PCMPESTRI of arity3
Julian Kranz's avatar
Julian Kranz committed
999
 | PCMPESTRM of arity3
mb0's avatar
mb0 committed
1000
1001
1002
 | PCMPGRD of arity2
 | PCMPGTB of arity2
 | PCMPGTD of arity2
Julian Kranz's avatar
Julian Kranz committed
1003
 | PCMPGTQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1004
 | PCMPGTW of arity2
mb0's avatar
mb0 committed
1005
 | PCMPISTRI of arity3
Julian Kranz's avatar
Julian Kranz committed
1006
 | PCMPISTRM of arity3
Julian Kranz's avatar
Julian Kranz committed
1007
1008
1009
 | PEXTRB of arity3
 | PEXTRD of arity3
 | PEXTRQ of arity3
Julian Kranz's avatar
Julian Kranz committed
1010
 | PEXTRW of arity3
mb0's avatar
mb0 committed
1011
 | PHADDD of arity2
Julian Kranz's avatar
Julian Kranz committed
1012
 | PHADDSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1013
 | PHADDW of arity2
Julian Kranz's avatar
Julian Kranz committed
1014
 | PHMINPOSUW of arity2
Julian Kranz's avatar
Julian Kranz committed
1015
 | PHSUBD of arity2
Julian Kranz's avatar
Julian Kranz committed
1016
 | PHSUBSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1017
 | PHSUBW of arity2
mb0's avatar
mb0 committed
1018
1019
1020
 | PINSRB of arity3
 | PINSRD of arity3
 | PINSRQ of arity3
Julian Kranz's avatar
Julian Kranz committed
1021
 | PINSRW of arity3
Julian Kranz's avatar
Julian Kranz committed
1022
 | PMADDUBSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1023
1024
 | PMADDWD of arity2
 | PMAXSB of arity2
Julian Kranz's avatar
Julian Kranz committed
1025
 | PMAXSD of arity2
Julian Kranz's avatar
Julian Kranz committed
1026
 | PMAXSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1027
 | PMAXUB of arity2
Julian Kranz's avatar
Julian Kranz committed
1028
 | PMAXUD of arity2
Julian Kranz's avatar
Julian Kranz committed
1029
1030
 | PMAXUW of arity2
 | PMINSB of arity2
Julian Kranz's avatar
Julian Kranz committed
1031
 | PMINSD of arity2
Julian Kranz's avatar
Julian Kranz committed
1032
1033
 | PMINSW of arity2
 | PMINUB of arity2
Julian Kranz's avatar
Julian Kranz committed
1034
1035
 | PMINUD of arity2
 | PMINUW of arity2
mb0's avatar
mb0 committed
1036
 | PMOVMSKB of arity2
Julian Kranz's avatar
Julian Kranz committed
1037
1038
 | PMOVSXBD of arity2
 | PMOVSXBQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1039
1040
 | PMOVSXBW of arity2
 | PMOVSXDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1041
1042
1043
1044
 | PMOVSXWD of arity2
 | PMOVSXWQ of arity2
 | PMOVZXBD of arity2
 | PMOVZXBQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1045
1046
 | PMOVZXBW of arity2
 | PMOVZXDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1047
1048
1049
1050
1051
1052
1053
1054
 | 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
1055
 | PMULUDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1056
 | POP of arity1
Julian Kranz's avatar
Julian Kranz committed
1057
1058
1059
1060
1061
1062
 | POPA
 | POPAD
 | POPCNT of arity2
 | POPF
 | POPFD
 | POPFQ
mb0's avatar
mb0 committed
1063
1064
1065
1066
1067
1068
 | 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
1069
 | PSADBW of arity2
mb0's avatar
mb0 committed
1070
1071
 | PSHUFB of arity2
 | PSHUFD of arity3
Julian Kranz's avatar
Julian Kranz committed
1072
1073
1074
1075
1076
 | PSHUFHW of arity3
 | PSHUFLW of arity3
 | PSHUFW of arity3
 | PSIGNB of arity2
 | PSIGND of arity2
Julian Kranz's avatar
Julian Kranz committed
1077
 | PSIGNW of arity2
Julian Kranz's avatar
Julian Kranz committed
1078
 | PSLLD of arity2
Julian Kranz's avatar
Julian Kranz committed
1079
 | PSLLDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1080
 | PSLLQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1081
 | PSLLW of arity2
Julian Kranz's avatar
Julian Kranz committed
1082
 | PSRAD of arity2
Julian Kranz's avatar
Julian Kranz committed
1083
 | PSRAW of arity2
Julian Kranz's avatar
Julian Kranz committed
1084
 | PSRLD of arity2
Julian Kranz's avatar
Julian Kranz committed
1085
 | PSRLDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1086
 | PSRLQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1087
 | PSRLW of arity2
mb0's avatar
mb0 committed
1088
1089
 | PSUBB of arity2
 | PSUBD of arity2
Julian Kranz's avatar
Julian Kranz committed
1090
1091
1092
1093
1094
 | PSUBQ of arity2
 | PSUBSB of arity2
 | PSUBSW of arity2
 | PSUBUSB of arity2
 | PSUBUSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1095
 | PSUBW of arity2
mb0's avatar
mb0 committed
1096
 | PTEST of arity2
Julian Kranz's avatar
Julian Kranz committed
1097
1098
1099
 | PUNPCKHBW of arity2
 | PUNPCKHDQ of arity2
 | PUNPCKHQDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1100
 | PUNPCKHWD of arity2
mb0's avatar
mb0 committed
1101
 | PUNPCKLBW of arity2
Julian Kranz's avatar
Julian Kranz committed
1102
 | PUNPCKLDQ of arity2
mb0's avatar
mb0 committed
1103
 | PUNPCKLQDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1104
 | PUNPCKLWD of arity2
mb0's avatar
mb0 committed
1105
 | PUSH of arity1
Julian Kranz's avatar
Julian Kranz committed
1106
1107
1108
1109
1110
 | PUSHA
 | PUSHAD
 | PUSHF
 | PUSHFD
 | PUSHFQ
mb0's avatar
mb0 committed
1111
1112
 | PXOR of arity2
 | RCL of arity2
Julian Kranz's avatar
Julian Kranz committed
1113
1114
 | RCPPS of arity2
 | RCPSS of arity2
Julian Kranz's avatar
Julian Kranz committed
1115
 | RCR of arity2
Julian Kranz's avatar
Julian Kranz committed
1116
1117
1118
 | RDFSBASE of arity1
 | RDGSBASE of arity1
 | RDMSR
Julian Kranz's avatar
Julian Kranz committed
1119
1120
 | RDPMC
 | RDRAND of arity1
mb0's avatar
mb0 committed
1121
1122
 | RDTSC
 | RDTSCP
mb0's avatar
mb0 committed
1123
1124
 | RET of varity
 | RET_FAR of varity
Julian Kranz's avatar
Julian Kranz committed
1125
1126
 | ROL of arity2
 | ROR of arity2
Julian Kranz's avatar
Julian Kranz committed
1127
1128
1129
1130
1131
1132
1133
1134
 | 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
1135
1136
1137
 | SAL of arity2
 | SAR of arity2
 | SBB of arity2
mb0's avatar
mb0 committed
1138
1139
1140
1141
 | SCASB
 | SCASD
 | SCASQ
 | SCASW
mb0's avatar
mb0 committed
1142
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
 | 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
1172
 | SFENCE
Julian Kranz's avatar
Julian Kranz committed
1173
 | SGDT of arity1