x86-ng.d 93.9 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
19
20
21
22
23
24
25
26
27
28
29

val decode = do
   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
30
        lock='0',
mb0's avatar
Track.  
mb0 committed
31
32
33
34
        segment=DS,
        mod='00',
        reg/opcode='000',
        rm='000',
mb0's avatar
mb0 committed
35
        ptrty=32}; #TODO: check
mb0's avatar
Track.  
mb0 committed
36
37
38
39
40
41
42
43
44
45
46
47
48
   p64
end

val set-opndsz = update@{opndsz='1'}
val set-repne = update@{repne='1'}
val set-rep = update@{rep='1'}

val set-CS = update@{segment=CS}
val set-DS = update@{segment=DS}
val set-ES = update@{segment=ES}
val set-FS = update@{segment=FS}
val set-GS = update@{segment=GS}
val set-SS = update@{segment=SS}
mb0's avatar
mb0 committed
49
val set-lock = update@{lock='1'}
mb0's avatar
Track.  
mb0 committed
50
51
52
53
val set-addrsz = update@{addrsz='1'}

## Decoding prefixes

mb0's avatar
mb0 committed
54
# The functions 'after' and 'continue' are used to try different decoders
Axel Simon's avatar
Axel Simon committed
55
56
57
# 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
58
val after fst snd = do
59
60
61
  update@{tab=snd};
  r <- fst;
  # make the type checker happy
Axel Simon's avatar
Axel Simon committed
62
  update@{~tab};
63
  return r
Axel Simon's avatar
Axel Simon committed
64
65
66
end

val continue = do
67
68
  t <- query$tab;
  # make the type checker happy
Axel Simon's avatar
Axel Simon committed
69
  update@{~tab};  
70
71
  # make the type checker happy
  r <- t;
Axel Simon's avatar
Axel Simon committed
72
  update@{~tab};
73
  return r
Axel Simon's avatar
Axel Simon committed
74
75
end

76
77
78
79
80
81
82
83
84
85
# val after fst snd = do
#    update@{tab=snd};
#    fst
# end
# 
# val continue = do
#    t <- query$tab;
#    t
# end

Axel Simon's avatar
Axel Simon committed
86
87
88
89
val /66 [] = continue
val /f2 [] = continue
val /f3 [] = continue

mb0's avatar
mb0 committed
90
91
92
93
94
95
96
97
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
98

mb0's avatar
mb0 committed
99
val /rex-p ['0100 w:1 r:1 x:1 b:1'] =
mb0's avatar
Track.  
mb0 committed
100
   update @{rex='1', rexw=w, rexb=b, rexx=x, rexr=r}
mb0's avatar
x86.    
mb0 committed
101
val clear-rex = update @{rex='0',rexw='0',rexb='0',rexr='0',rexx='0'}
mb0's avatar
Track.  
mb0 committed
102

mb0's avatar
mb0 committed
103
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
104
105
106
107
108
109
110
111
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
112
        vexv=complement v,
mb0's avatar
mb0 committed
113
114
115
        vexm='00001'}
end

mb0's avatar
mb0 committed
116
val p/vex/0f [0xc5 'r:1 v:4 l:1 00'] = do
mb0's avatar
mb0 committed
117
118
119
120
121
122
   update
      @{rex='1',
        rexw='0',
        vexw='0',
        rexr=not r,
        vexl=l,
123
        vexv=complement v,
mb0's avatar
mb0 committed
124
125
126
        vexm='00001'} #TODO: sane default value for vexm,rexw,rexb,..
end

mb0's avatar
mb0 committed
127
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
128
129
130
131
132
133
134
135
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
136
        vexv=complement v,
mb0's avatar
mb0 committed
137
138
139
        vexm='00001'}
end

mb0's avatar
mb0 committed
140
val p/vex/66/0f [0xc5 'r:1 v:4 l:1 01'] = do
mb0's avatar
mb0 committed
141
142
143
144
145
146
   update
      @{rex='1',
        rexw='0',
        vexw='0',
        rexr=not r,
        vexl=l,
147
        vexv=complement v,
mb0's avatar
mb0 committed
148
149
150
        vexm='00001'} #TODO: sane default value for vexm,rexw,rexb,..
end

mb0's avatar
mb0 committed
151
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
152
153
154
155
156
157
158
159
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
160
        vexv=complement v,
mb0's avatar
mb0 committed
161
162
163
        vexm='00001'}
end

mb0's avatar
mb0 committed
164
val p/vex/f3/0f [0xc5 'r:1 v:4 l:1 10'] = do
mb0's avatar
mb0 committed
165
166
167
168
169
170
   update
      @{rex='1',
        rexw='0',
        vexw='0',
        rexr=not r,
        vexl=l,
171
        vexv=complement v,
mb0's avatar
mb0 committed
172
173
174
        vexm='00001'} #TODO: sane default value for vexm,rexw,rexb,..
end

mb0's avatar
mb0 committed
175
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
176
177
178
179
180
181
182
183
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
184
        vexv=complement v,
mb0's avatar
mb0 committed
185
186
187
        vexm='00001'}
end

mb0's avatar
mb0 committed
188
val p/vex/f2/0f [0xc5 'r:1 v:4 l:1 11'] = do
mb0's avatar
mb0 committed
189
190
191
192
193
194
   update
      @{rex='1',
        rexw='0',
        vexw='0',
        rexr=not r,
        vexl=l,
195
        vexv=complement v,
mb0's avatar
mb0 committed
196
197
198
        vexm='00001'} #TODO: sane default value for vexm,rexw,rexb,..
end

mb0's avatar
mb0 committed
199
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
200
201
202
203
204
205
206
207
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
208
        vexv=complement v,
mb0's avatar
mb0 committed
209
210
211
        vexm='00010'}
end

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

mb0's avatar
mb0 committed
225
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
226
227
228
229
230
231
232
233
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
234
        vexv=complement v,
mb0's avatar
mb0 committed
235
236
237
        vexm='00010'}
end

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

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

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

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

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

mb0's avatar
Track.  
mb0 committed
303
304
305
306
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
mb0's avatar
mb0 committed
307
val p64 [/rex-p] = p64
mb0's avatar
mb0 committed
308
309
310
311
#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
312
313
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
314
315
#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
316
val p64 [] = /
mb0's avatar
Track.  
mb0 committed
317
318
319

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
320
val p/66 [0x66] = do set-opndsz; p/66 end
mb0's avatar
mb0 committed
321
val p/66 [/legacy-p] = p/66
mb0's avatar
mb0 committed
322
val p/66 [/rex-p] = p/66
mb0's avatar
mb0 committed
323
val p/66 [] = after /66 /
mb0's avatar
Track.  
mb0 committed
324

mb0's avatar
mb0 committed
325
val p/f2 [0x66] = do set-opndsz; p/66/f2 end
mb0's avatar
mb0 committed
326
val p/f2 [0xf2] = do set-repne; p/f2 end
mb0's avatar
Track.  
mb0 committed
327
val p/f2 [0xf3] = do set-rep; p/f2/f3 end
mb0's avatar
mb0 committed
328
val p/f2 [/legacy-p] = p/f2
mb0's avatar
mb0 committed
329
val p/f2 [/rex-p] = p/f2
mb0's avatar
mb0 committed
330
val p/f2 [] = after /f2 / 
mb0's avatar
Track.  
mb0 committed
331

mb0's avatar
mb0 committed
332
val p/f3 [0x66] = do set-opndsz; p/66/f3 end
mb0's avatar
Track.  
mb0 committed
333
val p/f3 [0xf2] = do set-repne; p/f3/f2 end
mb0's avatar
mb0 committed
334
val p/f3 [0xf3] = do set-rep; p/f3 end
mb0's avatar
mb0 committed
335
val p/f3 [/legacy-p] = p/f3
mb0's avatar
mb0 committed
336
val p/f3 [/rex-p] = p/f3
mb0's avatar
mb0 committed
337
val p/f3 [] = after /f3 / 
mb0's avatar
Track.  
mb0 committed
338

mb0's avatar
mb0 committed
339
val p/f2/f3 [0x66] = do set-opndsz; p/66/f2/f3 end
mb0's avatar
mb0 committed
340
341
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
342
val p/f2/f3 [/legacy-p] = p/f2/f3
mb0's avatar
mb0 committed
343
val p/f2/f3 [/rex-p] = p/f2/f3
mb0's avatar
mb0 committed
344
val p/f2/f3 [] = after /f3 (after /f2 /)
mb0's avatar
Track.  
mb0 committed
345

mb0's avatar
mb0 committed
346
val p/f3/f2 [0x66] = do set-opndsz; p/66/f2/f3 end
mb0's avatar
mb0 committed
347
348
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
349
val p/f3/f2 [/legacy-p] = p/f3/f2
mb0's avatar
mb0 committed
350
val p/f3/f2 [/rex-p] = p/f3/f2
mb0's avatar
mb0 committed
351
val p/f3/f2 [] = after /f2 (after /f3 /)
mb0's avatar
Track.  
mb0 committed
352

mb0's avatar
mb0 committed
353
val p/66/f2 [0x66] = do set-opndsz; p/66/f2 end
mb0's avatar
mb0 committed
354
val p/66/f2 [0xf2] = do set-repne; p/66/f2 end
mb0's avatar
Track.  
mb0 committed
355
val p/66/f2 [0xf3] = do set-rep; p/66/f2/f3 end
mb0's avatar
mb0 committed
356
val p/66/f2 [/legacy-p] = p/66/f2
mb0's avatar
mb0 committed
357
val p/66/f2 [/rex-p] = p/66/f2
mb0's avatar
mb0 committed
358
val p/66/f2 [] = after /f2 (after /66 /)
mb0's avatar
Track.  
mb0 committed
359

mb0's avatar
mb0 committed
360
val p/66/f3 [0x66] = do set-opndsz; p/66/f3 end
mb0's avatar
Track.  
mb0 committed
361
val p/66/f3 [0xf2] = do set-repne; p/66/f3/f2 end
mb0's avatar
mb0 committed
362
val p/66/f3 [0xf3] = do set-rep; p/66/f3 end
mb0's avatar
mb0 committed
363
val p/66/f3 [/legacy-p] = p/66/f3
mb0's avatar
mb0 committed
364
val p/66/f3 [/rex-p] = p/66/f3
mb0's avatar
mb0 committed
365
366
367
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
368
369
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
370
val p/66/f2/f3 [/legacy-p] = p/66/f2/f3
mb0's avatar
mb0 committed
371
val p/66/f2/f3 [/rex-p] = p/66/f2/f3
mb0's avatar
mb0 committed
372
val p/66/f2/f3 [] = after /f3 (after /f2 (after /66 /))
mb0's avatar
Track.  
mb0 committed
373

mb0's avatar
mb0 committed
374
val p/66/f3/f2 [0x66] = do clear-rex; p/66/f3/f2 end
mb0's avatar
mb0 committed
375
376
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
377
val p/66/f3/f2 [/legacy-p] = p/66/f3/f2
mb0's avatar
mb0 committed
378
val p/66/f3/f2 [/rex-p] = p/66/f3/f2
mb0's avatar
mb0 committed
379
val p/66/f3/f2 [] = after /f2 (after /f3 (after /66 /))
mb0's avatar
mb0 committed
380

mb0's avatar
Foo.    
mb0 committed
381
type register =
mb0's avatar
Track.  
mb0 committed
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
   AL
 | AH
 | AX
 | EAX
 | RAX
 | BL
 | BH
 | BX
 | EBX
 | RBX
 | CL
 | CH
 | CX
 | ECX
 | RCX
 | DL
 | DH
 | DX
 | EDX
 | RDX
 | R8B
 | R8L
 | R8D
 | R8 
 | R9B
 | R9L
 | R9D
 | R9 
 | R10B
 | R10L
 | R10D
 | R10 
 | R11B
 | R11L
 | R11D
 | R11 
 | R12B
 | R12L
 | R12D
 | R12 
 | R13B
 | R13L
 | R13D
 | R13 
 | R14B
 | R14L
 | R14D
 | R14 
 | R15B
 | R15L
 | R15D
 | R15 
 | 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
 | MM8
 | MM9
 | MM10
 | MM11
 | MM12
 | MM13
 | MM14
 | MM15
 | ES
 | SS
 | DS
 | FS
 | GS
 | CS
mb0's avatar
mb0 committed
500
501
502
503
504
505
506
507
 | ST0
 | ST1
 | ST2
 | ST3
 | ST4
 | ST5
 | ST6
 | ST7
mb0's avatar
mb0 committed
508
 | RIP
mb0's avatar
Track.  
mb0 committed
509

mb0's avatar
Foo.    
mb0 committed
510
type opnd =
mb0's avatar
Track.  
mb0 committed
511
512
513
514
515
   IMM8 of 8
 | IMM16 of 16
 | IMM32 of 32
 | IMM64 of 64
 | REG of register
mb0's avatar
Foo.    
mb0 committed
516
 | MEM of {sz:int,psz:int,segment:register,opnd:opnd}
mb0's avatar
sem.    
mb0 committed
517
518
 | SUM of {a:opnd,b:opnd}
 | SCALE of {imm:2,opnd:opnd}
mb0's avatar
Track.  
mb0 committed
519

mb0's avatar
Foo.    
mb0 committed
520
type flowopnd =
mb0's avatar
Track.  
mb0 committed
521
522
523
524
525
526
527
   REL8 of 8
 | REL16 of 16
 | REL32 of 32
 | REL64 of 64
 | NEARABS of opnd
 | FARABS of opnd

528
529
530
531
532
type flow1 = {opnd1:flowopnd}
type arity1 = {opnd1:opnd}
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
533

mb0's avatar
Foo.    
mb0 committed
534
type varity =
mb0's avatar
mb0 committed
535
536
537
538
539
540
   VA0
 | VA1 of arity1
 | VA2 of arity2
 | VA3 of arity3
 | VA4 of arity4

mb0's avatar
Foo.    
mb0 committed
541
type insn =
Julian Kranz's avatar
Julian Kranz committed
542
543
   AAA
 | AAD of arity1
Julian Kranz's avatar
Julian Kranz committed
544
545
 | AAM of arity1
 | AAS
Julian Kranz's avatar
Julian Kranz committed
546
 | ADC of arity2
mb0's avatar
mb0 committed
547
 | ADD of arity2
Julian Kranz's avatar
Julian Kranz committed
548
 | ADDPD of arity2
mb0's avatar
mb0 committed
549
550
551
 | AND of arity2
 | BSF of arity2
 | BSR of arity2
mb0's avatar
mb0 committed
552
 | BSWAP of arity1
mb0's avatar
mb0 committed
553
554
 | BT of arity2
 | CALL of flow1
mb0's avatar
mb0 committed
555
556
 | CBW
 | CDQE
mb0's avatar
mb0 committed
557
 | CLD
mb0's avatar
mb0 committed
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
 | 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
mb0's avatar
mb0 committed
589
590
591
592
 | CMPSB
 | CMPSD
 | CMPSQ
 | CMPSW
mb0's avatar
mb0 committed
593
 | CMPXCHG of arity2
mb0's avatar
mb0 committed
594
 | CPUID
mb0's avatar
mb0 committed
595
596
 | CVTPD2PI of arity2
 | CVTSI2SD of arity2
mb0's avatar
mb0 committed
597
 | CWDE
mb0's avatar
mb0 committed
598
599
600
 | DEC of arity1
 | DIV of arity1
 | DIVSD of arity1
mb0's avatar
mb0 committed
601
 | FCHS
mb0's avatar
mb0 committed
602
603
604
605
606
607
608
609
610
611
612
 | FCMOVB of arity2
 | FCMOVBE of arity2
 | FCMOVE of arity2
 | FCMOVNB of arity2
 | FCMOVNBE of arity2
 | FCMOVNE of arity2
 | FCMOVNU of arity2
 | FCMOVU of arity2
 | FCOMI of arity2
 | FCOMIP of arity2
 | FLD of arity1
mb0's avatar
mb0 committed
613
 | FLD1
mb0's avatar
mb0 committed
614
615
 | FLDCW of arity1
 | FLDENV of arity1
mb0's avatar
mb0 committed
616
617
618
619
620
621
 | FLDL2E
 | FLDL2T
 | FLDLG2
 | FLDLN2
 | FLDPI
 | FLDZ
mb0's avatar
mb0 committed
622
623
624
625
626
627
 | FNSTCW of arity1
 | FST of arity1
 | FSTCW of arity1
 | FSTP of arity1
 | FUCOMI of arity1
 | FUCOMIP of arity1
mb0's avatar
mb0 committed
628
 | HLT
mb0's avatar
mb0 committed
629
630
631
632
633
634
635
636
637
638
639
640
641
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
 | IDIV of arity1
 | IMUL of arity1
 | INC of arity1
 | 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
 | LDDQU of arity2
 | LEA of arity2
mb0's avatar
mb0 committed
668
669
 | LEAVE
 | LFENCE
mb0's avatar
mb0 committed
670
671
672
673
674
675
 | MASKMOVDQU of arity2
 | MASKMOVQ of arity2
 | MAXPD of arity2
 | MAXPS of arity2
 | MAXSD of arity2
 | MAXSS of arity2
mb0's avatar
Track.  
mb0 committed
676
 | MFENCE
mb0's avatar
mb0 committed
677
678
679
680
 | MINPD of arity2
 | MINPS of arity2
 | MINSD of arity2
 | MINSS of arity2
mb0's avatar
Track.  
mb0 committed
681
 | MONITOR
mb0's avatar
mb0 committed
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
 | 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
707
 | MOVSB
mb0's avatar
mb0 committed
708
 | MOVSD of varity
mb0's avatar
mb0 committed
709
710
 | MOVSHDUP of arity2
 | MOVSLDUP of arity2
mb0's avatar
mb0 committed
711
 | MOVSQ
mb0's avatar
mb0 committed
712
713
714
715
716
717
718
719
720
721
722
723
724
 | 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
725
 | MWAIT
mb0's avatar
mb0 committed
726
727
728
729
730
731
732
 | 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
733
734
735
736
 | OUTS
 | OUTSB
 | OUTSW
 | OUTSD
Julian Kranz's avatar
Julian Kranz committed
737
738
739
740
741
 | PABSB of arity2
 | PABSW of arity2
 | PABSD of arity2
 | PACKSSWB of arity2
 | PACKSSDW of arity2
Julian Kranz's avatar
Julian Kranz committed
742
 | PACKUSDW of arity2
Julian Kranz's avatar
Julian Kranz committed
743
 | PACKUSWB of arity2
Julian Kranz's avatar
Julian Kranz committed
744
745
746
 | PADDB of arity2
 | PADDD of arity2
 | PADDW of arity2
Julian Kranz's avatar
Julian Kranz committed
747
 | PADDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
748
749
 | PADDSB of arity2
 | PADDSW of arity2
Julian Kranz's avatar
Julian Kranz committed
750
751
 | PADDUSB of arity2
 | PADDUSW of arity2
mb0's avatar
mb0 committed
752
753
 | PALIGNR of arity3
 | PAND of arity2
Julian Kranz's avatar
Julian Kranz committed
754
 | PANDN of arity2
Julian Kranz's avatar
Julian Kranz committed
755
 | PAUSE
Julian Kranz's avatar
Julian Kranz committed
756
757
 | PAVGB of arity2
 | PAVGW of arity2
Julian Kranz's avatar
Julian Kranz committed
758
 | PBLENDVB of arity2
Julian Kranz's avatar
Julian Kranz committed
759
 | PBLENDW of arity3
Julian Kranz's avatar
Julian Kranz committed
760
 | PCLMULQDQ of arity3
mb0's avatar
mb0 committed
761
762
763
764
765
 | PCMPEQB of arity2
 | PCMPEQD of arity2
 | PCMPEQQ of arity2
 | PCMPEQW of arity2
 | PCMPESTRI of arity3
Julian Kranz's avatar
Julian Kranz committed
766
 | PCMPESTRM of arity3
mb0's avatar
mb0 committed
767
768
769
770
 | PCMPGRD of arity2
 | PCMPGTB of arity2
 | PCMPGTD of arity2
 | PCMPGTW of arity2
Julian Kranz's avatar
Julian Kranz committed
771
 | PCMPGTQ of arity2
mb0's avatar
mb0 committed
772
 | PCMPISTRI of arity3
Julian Kranz's avatar
Julian Kranz committed
773
 | PCMPISTRM of arity3
Julian Kranz's avatar
Julian Kranz committed
774
775
776
 | PEXTRB of arity3
 | PEXTRD of arity3
 | PEXTRQ of arity3
Julian Kranz's avatar
Julian Kranz committed
777
 | PEXTRW of arity3
mb0's avatar
mb0 committed
778
779
 | PHADDD of arity2
 | PHADDW of arity2
Julian Kranz's avatar
Julian Kranz committed
780
 | PHADDSW of arity2
Julian Kranz's avatar
Julian Kranz committed
781
 | PHMINPOSUW of arity2
Julian Kranz's avatar
Julian Kranz committed
782
783
 | PHSUBW of arity2
 | PHSUBD of arity2
Julian Kranz's avatar
Julian Kranz committed
784
 | PHSUBSW of arity2
mb0's avatar
mb0 committed
785
786
787
 | PINSRB of arity3
 | PINSRD of arity3
 | PINSRQ of arity3
Julian Kranz's avatar
Julian Kranz committed
788
 | PINSRW of arity3
Julian Kranz's avatar
Julian Kranz committed
789
 | PMADDUBSW of arity2
Julian Kranz's avatar
Julian Kranz committed
790
791
 | PMADDWD of arity2
 | PMAXSB of arity2
Julian Kranz's avatar
Julian Kranz committed
792
 | PMAXSD of arity2
Julian Kranz's avatar
Julian Kranz committed
793
 | PMAXSW of arity2
Julian Kranz's avatar
Julian Kranz committed
794
 | PMAXUB of arity2
Julian Kranz's avatar
Julian Kranz committed
795
 | PMAXUD of arity2
Julian Kranz's avatar
Julian Kranz committed
796
797
 | PMAXUW of arity2
 | PMINSB of arity2
Julian Kranz's avatar
Julian Kranz committed
798
 | PMINSD of arity2
Julian Kranz's avatar
Julian Kranz committed
799
800
 | PMINSW of arity2
 | PMINUB of arity2
Julian Kranz's avatar
Julian Kranz committed
801
802
 | PMINUD of arity2
 | PMINUW of arity2
Julian Kranz's avatar
Julian Kranz committed
803

mb0's avatar
mb0 committed
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
 | PMOVMSKB of arity2
 | POP of arity1
 | POR of arity2
 | PREFETCHNTA of arity1
 | PREFETCHT0 of arity1
 | PREFETCHT1 of arity1
 | PREFETCHT2 of arity1
 | PREFETCHW of arity1
 | PSHUFB of arity2
 | PSHUFD of arity3
 | PSLLDQ of arity2
 | PSLRDQ of arity2
 | PSRLDQ of arity2
 | PSUBB of arity2
 | PSUBD of arity2
 | PSUBW of arity2
 | PTEST of arity2
 | PUNPCKLDQ of arity2
 | PUNPCKLWD of arity2
 | PUNPCKLBW of arity2
 | PUNPCKLQDQ of arity2
 | PUSH of arity1
 | PXOR of arity2
 | RCL of arity2
 | RCR of arity2
mb0's avatar
mb0 committed
829
830
 | RDTSC
 | RDTSCP
mb0's avatar
mb0 committed
831
832
833
834
835
836
837
 | RET of varity
 | RET_FAR of varity
 | ROL of arity2
 | ROR of arity2
 | SAL of arity2
 | SAR of arity2
 | SBB of arity2
mb0's avatar
mb0 committed
838
839
840
841
 | SCASB
 | SCASD
 | SCASQ
 | SCASW
mb0's avatar
mb0 committed
842
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
 | 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
872
 | SFENCE
mb0's avatar
mb0 committed
873
874
875
876
 | SHL of arity2
 | SHLD of arity3
 | SHR of arity2
 | SHRD of arity3
mb0's avatar
mb0 committed
877
878
879
880
 | STOSB
 | STOSD
 | STOSQ
 | STOSW
mb0's avatar
mb0 committed
881
 | SUB of arity2
mb0's avatar
mb0 committed
882
 | SYSCALL
mb0's avatar
mb0 committed
883
884
 | TEST of arity2
 | UCOMISD of arity2
mb0's avatar
mb0 committed
885
 | UD2
Julian Kranz's avatar
Julian Kranz committed
886
 | VADDPD of varity
mb0's avatar
mb0 committed
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
 | VCMPEQB of varity
 | VCMPEQD of varity
 | VCMPEQW of varity
 | VLDDQU of varity
 | VMASKMOVDQU of varity
 | VMAXPD of varity
 | VMAXPS of varity
 | VMAXSD of varity
 | VMAXSS of varity
 | VMINPD of varity
 | VMINPS of varity
 | VMINSD of varity
 | VMINSS of varity
 | VMOVAPD of varity
 | VMOVAPS of varity
 | VMOVD of varity
 | VMOVDDUP of varity
 | VMOVDQA of varity
 | VMOVDQU of varity
 | VMOVHLPS of varity
 | VMOVHPD of varity
 | VMOVHPS of varity
 | VMOVLHPS of varity
 | VMOVLPD of varity
 | VMOVLPS of varity
 | VMOVMSKPD of varity
 | VMOVMSKPS of varity
 | VMOVNTDQ of varity
 | VMOVNTDQA of varity
 | VMOVNTPD of varity
 | VMOVNTPS of varity
 | VMOVQ of varity
 | VMOVSD of varity
 | VMOVSHDUP of varity
 | VMOVSLDUP of varity
 | VMOVSS of varity
 | VMOVUPD of varity
 | VMOVUPS of varity
 | VMPSADBW of varity
 | VMULPD of varity
 | VMULPS of varity
 | VMULSD of varity
 | VMULSS of varity
 | VORPD of varity
 | VORPS of varity
Julian Kranz's avatar
Merge    
Julian Kranz committed
932
933
934
935
936
 | VPABSB of varity
 | VPABSW of varity
 | VPABSD of varity
 | VPACKSSWB of varity
 | VPACKSSDW of varity
Julian Kranz's avatar
Julian Kranz committed
937
 | VPACKUSDW of varity
Julian Kranz's avatar
Julian Kranz committed
938
 | VPACKUSWB of varity
Julian Kranz's avatar
Julian Kranz committed
939
940
941
 | VPADDB of varity
 | VPADDD of varity
 | VPADDW of varity
Julian Kranz's avatar
Julian Kranz committed
942
 | VPADDQ of varity
Julian Kranz's avatar
Julian Kranz committed
943
944
 | VPADDSB of varity
 | VPADDSW of varity
Julian Kranz's avatar
Julian Kranz committed
945
946
 | VPADDUSB of varity
 | VPADDUSW of varity
mb0's avatar
mb0 committed
947
948
 | VPALIGNR of varity
 | VPAND of varity
Julian Kranz's avatar
Julian Kranz committed
949
 | VPANDN of varity
Julian Kranz's avatar
Julian Kranz committed
950
951
 | VPAVGB of varity
 | VPAVGW of varity
Julian Kranz's avatar
Julian Kranz committed
952
 | VPBLENDVB of varity
Julian Kranz's avatar
Julian Kranz committed
953
 | VPBLENDW of varity
Julian Kranz's avatar
Julian Kranz committed
954
 | VPCLMULQDQ of varity
Julian Kranz's avatar
Julian Kranz committed
955
956
957
 | VPCMPEQB of varity
 | VPCMPEQW of varity
 | VPCMPEQD of varity
mb0's avatar
mb0 committed
958
 | VPCMPEQQ of varity
Julian Kranz's avatar
Julian Kranz committed
959
960
 | VPCMPESTRI of varity
 | VPCMPESTRM of varity
mb0's avatar
mb0 committed
961
962
963
 | VPCMPGTB of varity
 | VPCMPGTD of varity
 | VPCMPGTW of varity
Julian Kranz's avatar
Julian Kranz committed
964
 | VPCMPGTQ of varity
Julian Kranz's avatar
Julian Kranz committed
965
966
 | VPCMPISTRI of varity
 | VPCMPISTRM of varity
Julian Kranz's avatar
Julian Kranz committed
967
968
969
 | VPEXTRB of varity
 | VPEXTRD of varity
 | VPEXTRQ of varity
Julian Kranz's avatar
Julian Kranz committed
970
 | VPEXTRW of varity
mb0's avatar
mb0 committed
971
972
 | VPHADDD of varity
 | VPHADDW of varity
Julian Kranz's avatar
Julian Kranz committed
973
 | VPHADDSW of varity
Julian Kranz's avatar
Julian Kranz committed
974
 | VPHMINPOSUW of varity
Julian Kranz's avatar
Julian Kranz committed
975
976
 | VPHSUBW of varity
 | VPHSUBD of varity
Julian Kranz's avatar
Julian Kranz committed
977
 | VPHSUBSW of varity
mb0's avatar
mb0 committed
978
979
980
 | VPINSRB of varity
 | VPINSRD of varity
 | VPINSRQ of varity
Julian Kranz's avatar
Julian Kranz committed
981
 | VPINSRW of varity
Julian Kranz's avatar
Julian Kranz committed
982
 | VPMADDUBSW of varity
Julian Kranz's avatar
Julian Kranz committed
983
984
 | VPMADDWD of varity
 | VPMAXSB of varity
Julian Kranz's avatar
Julian Kranz committed
985
 | VPMAXSD of varity
Julian Kranz's avatar
Julian Kranz committed
986
 | VPMAXSW of varity
Julian Kranz's avatar
Julian Kranz committed
987
 | VPMAXUB of varity
Julian Kranz's avatar
Julian Kranz committed
988
 | VPMAXUD of varity
Julian Kranz's avatar
Julian Kranz committed
989
990
 | VPMAXUW of varity
 | VPMINSB of varity
Julian Kranz's avatar
Julian Kranz committed
991
 | VPMINSD of varity
Julian Kranz's avatar
Julian Kranz committed
992
993
 | VPMINSW of varity
 | VPMINUB of varity
Julian Kranz's avatar
Julian Kranz committed
994
995
 | VPMINUD of varity
 | VPMINUW of varity
Julian Kranz's avatar
Julian Kranz committed
996

mb0's avatar
mb0 committed
997
998
999
1000
 | VPMOVMSKB of varity
 | VPOR of varity
 | VPSHUFB of varity
 | VPSHUFD of varity