x86.ml 157 KB
Newer Older
mb0's avatar
mb0 committed
1
granularity = 8
mb0's avatar
mb0 committed
2
export = decode
mb0's avatar
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
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
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',
Julian Kranz's avatar
Julian Kranz committed
37
        segment=SEG_NONE,
Axel Simon's avatar
Axel Simon committed
38 39 40 41 42
        ptrty=32, #TODO: check
        ~tab};
   instr <- p64;
   update @{tab=t};
   return instr
mb0's avatar
mb0 committed
43 44
end

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

mb0's avatar
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
# Segment prefix handling
type seg_override =
Julian Kranz's avatar
Julian Kranz committed
53
     SEG_NONE
Axel Simon's avatar
Axel Simon committed
54 55
   | SEG_OVERRIDE of register

Julian Kranz's avatar
Julian Kranz committed
56 57 58
val set-CS = update@{segment=SEG_OVERRIDE CS}
val set-DS = update@{segment=SEG_OVERRIDE DS}
val set-ES = update@{segment=SEG_OVERRIDE ES}
Axel Simon's avatar
Axel Simon committed
59 60
val set-FS = update@{segment=SEG_OVERRIDE FS}
val set-GS = update@{segment=SEG_OVERRIDE GS}
Julian Kranz's avatar
Julian Kranz committed
61
val set-SS = update@{segment=SEG_OVERRIDE SS}
Axel Simon's avatar
Axel Simon committed
62

mb0's avatar
mb0 committed
63
val set-lock = update@{lock='1'}
mb0's avatar
mb0 committed
64 65 66 67
val set-addrsz = update@{addrsz='1'}

## Decoding prefixes

mb0's avatar
mb0 committed
68
# The functions 'after' and 'continue' are used to try different decoders
Axel Simon's avatar
Axel Simon committed
69 70 71
# 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
72
val after fst snd = do
73 74 75
  update@{tab=snd};
  r <- fst;
  # make the type checker happy
Axel Simon's avatar
Axel Simon committed
76
  update@{~tab};
77
  return r
Axel Simon's avatar
Axel Simon committed
78 79 80
end

val continue = do
81 82
  t <- query$tab;
  # make the type checker happy
Julian Kranz's avatar
Julian Kranz committed
83
  update@{~tab};
84 85
  # make the type checker happy
  r <- t;
Axel Simon's avatar
Axel Simon committed
86
  update@{~tab};
87
  return r
Axel Simon's avatar
Axel Simon committed
88 89
end

90 91 92 93
# val after fst snd = do
#    update@{tab=snd};
#    fst
# end
Julian Kranz's avatar
Julian Kranz committed
94
#
95 96 97 98 99
# val continue = do
#    t <- query$tab;
#    t
# end

Axel Simon's avatar
Axel Simon committed
100 101 102 103
val /66 [] = continue
val /f2 [] = continue
val /f3 [] = continue

Axel Simon's avatar
Axel Simon committed
104 105 106 107
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
108 109 110 111 112 113 114 115
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
mb0 committed
116

mb0's avatar
mb0 committed
117
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
118 119 120 121 122 123 124 125
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
126
        vexv=complement v,
mb0's avatar
mb0 committed
127 128 129
        vexm='00001'}
end

mb0's avatar
mb0 committed
130
val p/vex/0f [0xc5 'r:1 v:4 l:1 00'] = do
mb0's avatar
mb0 committed
131 132 133 134 135 136
   update
      @{rex='1',
        rexw='0',
        vexw='0',
        rexr=not r,
        vexl=l,
137
        vexv=complement v,
mb0's avatar
mb0 committed
138 139 140
        vexm='00001'} #TODO: sane default value for vexm,rexw,rexb,..
end

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

mb0's avatar
mb0 committed
152 153 154
        vexm='00001'}
end

mb0's avatar
mb0 committed
155
val p/vex/66/0f [0xc5 'r:1 v:4 l:1 01'] = 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/f3/0f [0xc4 'r:1 x:1 b:1 00001' 'w:1 v:4 l:1 10'] = 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,
mb0's avatar
mb0 committed
176 177 178
        vexm='00001'}
end

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

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

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

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

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

mb0's avatar
mb0 committed
240
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
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/f3/0f/38 [0xc4 'r:1 x:1 b:1 00010' 'w:1 v:4 l:1 10'] = 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/0f/3a [0xc4 'r:1 x:1 b:1 00011' 'w:1 v:4 l:1 00'] = 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='00011'}
end

mb0's avatar
mb0 committed
279
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
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='00011'}
end

mb0's avatar
mb0 committed
292
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
293 294
   update
      @{rex='1',
Julian Kranz's avatar
Julian Kranz committed
295
	rexw=w,
mb0's avatar
mb0 committed
296 297 298 299 300
        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/f3/0f/3a [0xc4 'r:1 x:1 b:1 00011' 'w:1 v:4 l:1 10'] = 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 319 320 321
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
322 323 324
val p64 [/rex-p]
 | mode64? = p64
 | mode32? = unop INC rex/reg32
mb0's avatar
mb0 committed
325 326 327 328
#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
329 330
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
331 332
#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
333
val p64 [] = /
mb0's avatar
mb0 committed
334 335 336

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
337
val p/66 [0x66] = do set-opndsz; p/66 end
mb0's avatar
mb0 committed
338
val p/66 [/legacy-p] = p/66
Julian Kranz's avatar
Julian Kranz committed
339 340 341
val p/66 [/rex-p]
 | mode64? = p/66
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
342
val p/66 [] = after /66 /
mb0's avatar
mb0 committed
343

mb0's avatar
mb0 committed
344
val p/f2 [0x66] = do set-opndsz; p/66/f2 end
mb0's avatar
mb0 committed
345
val p/f2 [0xf2] = do set-repne; p/f2 end
mb0's avatar
mb0 committed
346
val p/f2 [0xf3] = do set-rep; p/f2/f3 end
mb0's avatar
mb0 committed
347
val p/f2 [/legacy-p] = p/f2
Julian Kranz's avatar
Julian Kranz committed
348 349 350
val p/f2 [/rex-p]
 | mode64? = p/f2
 | mode32? = unop INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
351
val p/f2 [] = after /f2 /
mb0's avatar
mb0 committed
352

mb0's avatar
mb0 committed
353
val p/f3 [0x66] = do set-opndsz; p/66/f3 end
mb0's avatar
mb0 committed
354
val p/f3 [0xf2] = do set-repne; p/f3/f2 end
mb0's avatar
mb0 committed
355
val p/f3 [0xf3] = do set-rep; p/f3 end
mb0's avatar
mb0 committed
356
val p/f3 [/legacy-p] = p/f3
Julian Kranz's avatar
Julian Kranz committed
357 358 359
val p/f3 [/rex-p]
 | mode64? = p/f3
 | mode32? = unop INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
360
val p/f3 [] = after /f3 /
mb0's avatar
mb0 committed
361

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

mb0's avatar
mb0 committed
371
val p/f3/f2 [0x66] = do set-opndsz; p/66/f2/f3 end
mb0's avatar
mb0 committed
372 373
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
374
val p/f3/f2 [/legacy-p] = p/f3/f2
Julian Kranz's avatar
Julian Kranz committed
375 376 377
val p/f3/f2 [/rex-p]
 | mode64? = p/f3/f2
 | mode32? = unop INC rex/reg32
mb0's avatar
mb0 committed
378
val p/f3/f2 [] = after /f2 (after /f3 /)
mb0's avatar
mb0 committed
379

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

mb0's avatar
mb0 committed
389
val p/66/f3 [0x66] = do set-opndsz; p/66/f3 end
mb0's avatar
mb0 committed
390
val p/66/f3 [0xf2] = do set-repne; p/66/f3/f2 end
mb0's avatar
mb0 committed
391
val p/66/f3 [0xf3] = do set-rep; p/66/f3 end
mb0's avatar
mb0 committed
392
val p/66/f3 [/legacy-p] = p/66/f3
Julian Kranz's avatar
Julian Kranz committed
393 394 395
val p/66/f3 [/rex-p]
 | mode64? = p/66/f3
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
396 397 398
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
399 400
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
401
val p/66/f2/f3 [/legacy-p] = p/66/f2/f3
Julian Kranz's avatar
Julian Kranz committed
402 403 404
val p/66/f2/f3 [/rex-p]
 | mode64? = p/66/f2/f3
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
405
val p/66/f2/f3 [] = after /f3 (after /f2 (after /66 /))
mb0's avatar
mb0 committed
406

mb0's avatar
mb0 committed
407
val p/66/f3/f2 [0x66] = do clear-rex; p/66/f3/f2 end
mb0's avatar
mb0 committed
408 409
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
410
val p/66/f3/f2 [/legacy-p] = p/66/f3/f2
Julian Kranz's avatar
Julian Kranz committed
411 412 413
val p/66/f3/f2 [/rex-p]
 | mode64? = p/66/f3/f2
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
414
val p/66/f3/f2 [] = after /f2 (after /f3 (after /66 /))
mb0's avatar
mb0 committed
415

mb0's avatar
Foo.  
mb0 committed
416
type register =
mb0's avatar
mb0 committed
417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439
   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
440
 | R8
mb0's avatar
mb0 committed
441 442 443
 | R9B
 | R9L
 | R9D
Julian Kranz's avatar
Julian Kranz committed
444
 | R9
mb0's avatar
mb0 committed
445 446 447
 | R10B
 | R10L
 | R10D
Julian Kranz's avatar
Julian Kranz committed
448
 | R10
mb0's avatar
mb0 committed
449 450 451
 | R11B
 | R11L
 | R11D
Julian Kranz's avatar
Julian Kranz committed
452
 | R11
mb0's avatar
mb0 committed
453 454 455
 | R12B
 | R12L
 | R12D
Julian Kranz's avatar
Julian Kranz committed
456
 | R12
mb0's avatar
mb0 committed
457 458 459
 | R13B
 | R13L
 | R13D
Julian Kranz's avatar
Julian Kranz committed
460
 | R13
mb0's avatar
mb0 committed
461 462 463
 | R14B
 | R14L
 | R14D
Julian Kranz's avatar
Julian Kranz committed
464
 | R14
mb0's avatar
mb0 committed
465 466 467
 | R15B
 | R15L
 | R15D
Julian Kranz's avatar
Julian Kranz committed
468
 | R15
mb0's avatar
mb0 committed
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 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
 | 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
527 528 529 530 531 532 533 534
 | ST0
 | ST1
 | ST2
 | ST3
 | ST4
 | ST5
 | ST6
 | ST7
mb0's avatar
mb0 committed
535
 | RIP
mb0's avatar
mb0 committed
536

mb0's avatar
Foo.  
mb0 committed
537
type opnd =
mb0's avatar
mb0 committed
538 539 540 541 542
   IMM8 of 8
 | IMM16 of 16
 | IMM32 of 32
 | IMM64 of 64
 | REG of register
Julian Kranz's avatar
Julian Kranz committed
543
 | MEM of {sz:int,psz:int,segment:seg_override,opnd:opnd}
mb0's avatar
sem.  
mb0 committed
544 545
 | SUM of {a:opnd,b:opnd}
 | SCALE of {imm:2,opnd:opnd}
mb0's avatar
mb0 committed
546

mb0's avatar
Foo.  
mb0 committed
547
type flowopnd =
mb0's avatar
mb0 committed
548 549 550 551
   REL8 of 8
 | REL16 of 16
 | REL32 of 32
 | REL64 of 64
Julian Kranz's avatar
Julian Kranz committed
552 553
 | PTR16/16 of 32
 | PTR16/32 of 48
mb0's avatar
mb0 committed
554 555 556
 | NEARABS of opnd
 | FARABS of opnd

Julian Kranz's avatar
Julian Kranz committed
557
type flow1 = {opnd-sz:int,addr-sz:int,opnd1:flowopnd}
Julian Kranz's avatar
Julian Kranz committed
558
type arity0 = {opnd-sz:int,addr-sz:int}
Julian Kranz's avatar
Julian Kranz committed
559 560 561 562
type arity1 = {opnd-sz:int,addr-sz:int,opnd1:opnd}
type arity2 = {opnd-sz:int,addr-sz:int,opnd1:opnd,opnd2:opnd}
type arity3 = {opnd-sz:int,addr-sz:int,opnd1:opnd,opnd2:opnd,opnd3:opnd}
type arity4 = {opnd-sz:int,addr-sz:int,opnd1:opnd,opnd2:opnd,opnd3:opnd,opnd4:opnd}
mb0's avatar
mb0 committed
563

mb0's avatar
Foo.  
mb0 committed
564
type varity =
Julian Kranz's avatar
Julian Kranz committed
565
   VA0 of arity0
mb0's avatar
mb0 committed
566 567 568 569 570
 | VA1 of arity1
 | VA2 of arity2
 | VA3 of arity3
 | VA4 of arity4

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