x86.ml 165 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,
38
	default-operand-size=32,
Axel Simon's avatar
Axel Simon committed
39 40 41 42 43
        ptrty=32, #TODO: check
        ~tab};
   instr <- p64;
   update @{tab=t};
   return instr
mb0's avatar
mb0 committed
44 45
end

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

Axel Simon's avatar
Axel Simon committed
48 49
# Segment prefix handling
type seg_override =
Julian Kranz's avatar
Julian Kranz committed
50
     SEG_NONE
Axel Simon's avatar
Axel Simon committed
51 52
   | SEG_OVERRIDE of register

Julian Kranz's avatar
Julian Kranz committed
53 54 55
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
56 57
val set-FS = update@{segment=SEG_OVERRIDE FS}
val set-GS = update@{segment=SEG_OVERRIDE GS}
Julian Kranz's avatar
Julian Kranz committed
58
val set-SS = update@{segment=SEG_OVERRIDE SS}
Axel Simon's avatar
Axel Simon committed
59

mb0's avatar
mb0 committed
60
val set-lock = update@{lock='1'}
mb0's avatar
mb0 committed
61 62
val set-addrsz = update@{addrsz='1'}

63 64
val opndsz-set-from-d = return void

mb0's avatar
mb0 committed
65 66
## Decoding prefixes

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

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

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

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

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

Julian Kranz's avatar
Julian Kranz committed
116 117 118
val /66-p [0x66] = clear-rex
val /f2-p [0xf2] = clear-rex
val /f3-p [0xf3] = clear-rex
Julian Kranz's avatar
Julian Kranz committed
119

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

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

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

mb0's avatar
mb0 committed
155 156 157
        vexm='00001'}
end

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

mb0's avatar
mb0 committed
169
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
170 171 172 173 174 175 176 177
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
178
        vexv=complement v,
mb0's avatar
mb0 committed
179 180 181
        vexm='00001'}
end

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

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

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

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

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

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

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

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

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

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

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

Julian Kranz's avatar
Julian Kranz committed
321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345
val set-opndsz = update@{opndsz='1'}
val set-repne = update@{repne='1'}
val set-rep = update@{rep='1'}

val with-66 act = do
  update@{opndsz='1'};
  insn <- act;
  update@{opndsz='0'};
  return insn
end

val with-f2 act = do
  update@{repne='1'};
  insn <- act;
  update@{repne='0'};
  return insn
end

val with-f3 act = do
  update@{rep='1'};
  insn <- act;
  update@{rep='0'};
  return insn
end

Julian Kranz's avatar
Julian Kranz committed
346 347 348
val p64 [/66-p] = p/66
val p64 [/f2-p] = p/f2
val p64 [/f3-p] = p/f3
mb0's avatar
mb0 committed
349
val p64 [/legacy-p] = p64
Julian Kranz's avatar
Julian Kranz committed
350 351
val p64 [/rex-p]
 | mode64? = p64
Julian Kranz's avatar
Julian Kranz committed
352 353
 | mode32? & rexw? = unop DEC rex/reg32
 | mode32? & // rexw? = unop INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
354 355 356
val p64 [p/vex/0f]
 | vndd? = /vex/0f/vexv
 | otherwise = /vex/0f
Julian Kranz's avatar
Julian Kranz committed
357 358 359 360 361
val p64 [p/vex/f2/0f]
 | vndd? = /vex/f2/0f/vexv
 | otherwise = /vex/f2/0f
val p64 [p/vex/f3/0f]
 | vndd? = /vex/f3/0f/vexv
Julian Kranz's avatar
Julian Kranz committed
362
 | otherwise = /vex/f3/0f
Julian Kranz's avatar
Julian Kranz committed
363 364 365 366 367 368 369 370 371 372 373 374 375 376 377
val p64 [p/vex/66/0f]
 | vndd? = /vex/66/0f/vexv
 | otherwise = /vex/66/0f
val p64 [p/vex/66/0f/38]
 | vndd? = /vex/66/0f/38/vexv
 | otherwise = /vex/66/0f/38
val p64 [p/vex/66/0f/3a]
 | vndd? = /vex/66/0f/3a/vexv
 | otherwise = /vex/66/0f/3a
#val p64 [p/vex/66/f2/0f]
# | vndd? = /vex/66/f2/0f/vexv
# | otherwise = /vex/66/f2/0f
#val p64 [p/vex/66/f3/0f]
# | vndd? = /vex/66/f3/0f/vexv
# | otherwise = /vex/66/f3/0f
mb0's avatar
mb0 committed
378
val p64 [] = /
mb0's avatar
mb0 committed
379

Julian Kranz's avatar
Julian Kranz committed
380 381 382
val p/66 [/66-p] = p/66/f2
val p/66 [/f2-p] = p/66/f3
val p/66 [/f3-p] = p/66
mb0's avatar
mb0 committed
383
val p/66 [/legacy-p] = p/66
Julian Kranz's avatar
Julian Kranz committed
384 385
val p/66 [/rex-p]
 | mode64? = p/66
Julian Kranz's avatar
Julian Kranz committed
386 387
 | mode32? & rexw? = unop DEC rex/reg16
 | mode32? & // rexw? = unop INC rex/reg16
Julian Kranz's avatar
Julian Kranz committed
388
val p/66 [] = after /66 (with-66 /)
mb0's avatar
mb0 committed
389

Julian Kranz's avatar
Julian Kranz committed
390 391 392
val p/f2 [/66-p] = p/66/f2
val p/f2 [/f2-p] = p/f2
val p/f2 [/f3-p] = p/f2/f3
mb0's avatar
mb0 committed
393
val p/f2 [/legacy-p] = p/f2
Julian Kranz's avatar
Julian Kranz committed
394 395
val p/f2 [/rex-p]
 | mode64? = p/f2
Julian Kranz's avatar
Julian Kranz committed
396 397
 | mode32? & rexw? = unop DEC rex/reg32
 | mode32? & // rexw? = unop INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
398
val p/f2 [] = after /f2 (with-f2 /)
mb0's avatar
mb0 committed
399

Julian Kranz's avatar
Julian Kranz committed
400 401 402
val p/f3 [/66-p] = p/66/f3
val p/f3 [/f2-p] = p/f3/f2
val p/f3 [/f3-p] = p/f3
mb0's avatar
mb0 committed
403
val p/f3 [/legacy-p] = p/f3
Julian Kranz's avatar
Julian Kranz committed
404 405
val p/f3 [/rex-p]
 | mode64? = p/f3
Julian Kranz's avatar
Julian Kranz committed
406 407
 | mode32? & rexw? = unop DEC rex/reg32
 | mode32? & // rexw? = unop INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
408
val p/f3 [] = after /f3 (with-f3 /)
mb0's avatar
mb0 committed
409

Julian Kranz's avatar
Julian Kranz committed
410 411 412
val p/f2/f3 [/66-p] = p/66/f2/f3
val p/f2/f3 [/f2-p] = p/f3/f2
val p/f2/f3 [/f3-p] = p/f2/f3
mb0's avatar
mb0 committed
413
val p/f2/f3 [/legacy-p] = p/f2/f3
Julian Kranz's avatar
Julian Kranz committed
414 415
val p/f2/f3 [/rex-p]
 | mode64? = p/f2/f3
Julian Kranz's avatar
Julian Kranz committed
416 417
 | mode32? & rexw? = unop DEC rex/reg32
 | mode32? & // rexw? = unop INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
418 419
val p/f2/f3 [] = after (with-f2 /f3) (
                 after (with-f3 /f2) (with-f2 (with-f3 /)))
mb0's avatar
mb0 committed
420

Julian Kranz's avatar
Julian Kranz committed
421 422 423
val p/f3/f2 [/66-p] = p/66/f2/f3
val p/f3/f2 [/f2-p] = p/f3/f2
val p/f3/f2 [/f3-p] = p/f2/f3
mb0's avatar
mb0 committed
424
val p/f3/f2 [/legacy-p] = p/f3/f2
Julian Kranz's avatar
Julian Kranz committed
425 426
val p/f3/f2 [/rex-p]
 | mode64? = p/f3/f2
Julian Kranz's avatar
Julian Kranz committed
427 428
 | mode32? & rexw? = unop DEC rex/reg32
 | mode32? & // rexw? = unop INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
429 430
val p/f3/f2 [] = after (with-f3 /f2) (
                 after (with-f2 /f3) (with-f2 (with-f3 /)))
mb0's avatar
mb0 committed
431

Julian Kranz's avatar
Julian Kranz committed
432 433 434
val p/66/f2 [/66-p] = p/66/f2
val p/66/f2 [/f2-p] = p/66/f2
val p/66/f2 [/f3-p] = p/66/f2/f3
mb0's avatar
mb0 committed
435
val p/66/f2 [/legacy-p] = p/66/f2
Julian Kranz's avatar
Julian Kranz committed
436 437
val p/66/f2 [/rex-p]
 | mode64? = p/66/f2
Julian Kranz's avatar
Julian Kranz committed
438 439
 | mode32? & rexw? = unop DEC rex/reg16
 | mode32? & // rexw? = unop INC rex/reg16
Julian Kranz's avatar
Julian Kranz committed
440 441
val p/66/f2 [] = after (with-66 /f2) (
                 after (with-f2 /66) (with-66 (with-f2 /)))
mb0's avatar
mb0 committed
442

Julian Kranz's avatar
Julian Kranz committed
443 444 445
val p/66/f3 [/66-p] = p/66/f3
val p/66/f3 [/f2-p] = p/66/f3/f2
val p/66/f3 [/f3-p] = p/66/f3
mb0's avatar
mb0 committed
446
val p/66/f3 [/legacy-p] = p/66/f3
Julian Kranz's avatar
Julian Kranz committed
447 448
val p/66/f3 [/rex-p]
 | mode64? = p/66/f3
Julian Kranz's avatar
Julian Kranz committed
449 450
 | mode32? & rexw? = unop DEC rex/reg16
 | mode32? & // rexw? = unop INC rex/reg16
Julian Kranz's avatar
Julian Kranz committed
451 452 453
val p/66/f3 [] = after (with-66 /f3) (
                 after (with-f3 /66) (
                        with-66 (with-f3 /)))
mb0's avatar
mb0 committed
454

Julian Kranz's avatar
Julian Kranz committed
455 456 457
val p/66/f2/f3 [/66-p] = do clear-rex; p/66/f2/f3 end
val p/66/f2/f3 [/f2-p] = do clear-rex; p/66/f3/f2 end
val p/66/f2/f3 [/f3-p] = do clear-rex; p/66/f2/f3 end
mb0's avatar
mb0 committed
458
val p/66/f2/f3 [/legacy-p] = p/66/f2/f3
Julian Kranz's avatar
Julian Kranz committed
459 460
val p/66/f2/f3 [/rex-p]
 | mode64? = p/66/f2/f3
Julian Kranz's avatar
Julian Kranz committed
461 462
 | mode32? & rexw? = unop DEC rex/reg16
 | mode32? & // rexw? = unop INC rex/reg16
Julian Kranz's avatar
Julian Kranz committed
463 464 465 466 467 468 469 470
val p/66/f2/f3 [] = after (with-66 (with-f2 /f3)) (
                    after (with-66 (with-f3 /f2)) (
                    after (with-f2 (with-f3 /66)) (
                           with-66 (with-f2 (with-f3 /)))))

val p/66/f3/f2 [/66-p] = do clear-rex; p/66/f3/f2 end
val p/66/f3/f2 [/f2-p] = do clear-rex; p/66/f3/f2 end
val p/66/f3/f2 [/f3-p] = do clear-rex; p/66/f2/f3 end
mb0's avatar
mb0 committed
471
val p/66/f3/f2 [/legacy-p] = p/66/f3/f2
Julian Kranz's avatar
Julian Kranz committed
472 473
val p/66/f3/f2 [/rex-p]
 | mode64? = p/66/f3/f2
Julian Kranz's avatar
Julian Kranz committed
474 475
 | mode32? & rexw? = unop DEC rex/reg16
 | mode32? & // rexw? = unop INC rex/reg16
Julian Kranz's avatar
Julian Kranz committed
476 477 478 479
val p/66/f3/f2 [] = after (with-66 (with-f3 /f2)) (
                    after (with-66 (with-f2 /f3)) (
		    after (with-f2 (with-f3 /66)) (
		           with-66 (with-f2 (with-f3 /)))))
mb0's avatar
mb0 committed
480

mb0's avatar
Foo.  
mb0 committed
481
type register =
mb0's avatar
mb0 committed
482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504
   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
505
 | R8
mb0's avatar
mb0 committed
506 507 508
 | R9B
 | R9L
 | R9D
Julian Kranz's avatar
Julian Kranz committed
509
 | R9
mb0's avatar
mb0 committed
510 511 512
 | R10B
 | R10L
 | R10D
Julian Kranz's avatar
Julian Kranz committed
513
 | R10
mb0's avatar
mb0 committed
514 515 516
 | R11B
 | R11L
 | R11D
Julian Kranz's avatar
Julian Kranz committed
517
 | R11
mb0's avatar
mb0 committed
518 519 520
 | R12B
 | R12L
 | R12D
Julian Kranz's avatar
Julian Kranz committed
521
 | R12
mb0's avatar
mb0 committed
522 523 524
 | R13B
 | R13L
 | R13D
Julian Kranz's avatar
Julian Kranz committed
525
 | R13
mb0's avatar
mb0 committed
526 527 528
 | R14B
 | R14L
 | R14D
Julian Kranz's avatar
Julian Kranz committed
529
 | R14
mb0's avatar
mb0 committed
530 531 532
 | R15B
 | R15L
 | R15D
Julian Kranz's avatar
Julian Kranz committed
533
 | R15
mb0's avatar
mb0 committed
534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 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 589 590 591
 | 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
592 593 594 595 596 597 598 599
 | ST0
 | ST1
 | ST2
 | ST3
 | ST4
 | ST5
 | ST6
 | ST7
mb0's avatar
mb0 committed
600
 | RIP
mb0's avatar
mb0 committed
601

mb0's avatar
Foo.  
mb0 committed
602
type opnd =
Julian Kranz's avatar
*  
Julian Kranz committed
603 604 605 606
   IMM8 of {imm:8,address:int}
 | IMM16 of {imm:16,address:int}
 | IMM32 of {imm:32,address:int}
 | IMM64 of {imm:64,address:int}
mb0's avatar
mb0 committed
607
 | REG of register
Julian Kranz's avatar
Julian Kranz committed
608
 | MEM of {sz:int,psz:int,segment:seg_override,opnd:opnd}
mb0's avatar
sem.  
mb0 committed
609 610
 | SUM of {a:opnd,b:opnd}
 | SCALE of {imm:2,opnd:opnd}
mb0's avatar
mb0 committed
611

mb0's avatar
Foo.  
mb0 committed
612
type flowopnd =
mb0's avatar
mb0 committed
613 614 615 616
   REL8 of 8
 | REL16 of 16
 | REL32 of 32
 | REL64 of 64
Julian Kranz's avatar
Julian Kranz committed
617 618
 | PTR16/16 of 32
 | PTR16/32 of 48
mb0's avatar
mb0 committed
619 620 621
 | NEARABS of opnd
 | FARABS of opnd

Julian Kranz's avatar
Julian Kranz committed
622 623 624 625 626 627
type flow1 = {opnd-sz:int,addr-sz:int,rep:1,repne:1,lock:1,opnd1:flowopnd}
type arity0 = {opnd-sz:int,addr-sz:int,rep:1,repne:1,lock:1}
type arity1 = {opnd-sz:int,addr-sz:int,rep:1,repne:1,lock:1,opnd1:opnd}
type arity2 = {opnd-sz:int,addr-sz:int,rep:1,repne:1,lock:1,opnd1:opnd,opnd2:opnd}
type arity3 = {opnd-sz:int,addr-sz:int,rep:1,repne:1,lock:1,opnd1:opnd,opnd2:opnd,opnd3:opnd}
type arity4 = {opnd-sz:int,addr-sz:int,rep:1,repne:1,lock:1,opnd1:opnd,opnd2:opnd,opnd3:opnd,opnd4:opnd}
mb0's avatar
mb0 committed
628

mb0's avatar
Foo.  
mb0 committed
629
type varity =
Julian Kranz's avatar
Julian Kranz committed
630
   VA0 of arity0
mb0's avatar
mb0 committed
631 632 633 634 635
 | VA1 of arity1
 | VA2 of arity2
 | VA3 of arity3
 | VA4 of arity4

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