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

# Optional arguments
#
# Limit:
#   - Restricts the maximium size of the decode-stream
# Recursion-depth:
#   - Annotate the maximum number of recursion steps for
#     the given decoder. This way, we can compute an upper
#     bound for the maximum used storage for the emitted AST.
#     Additionally, the decoder may fail if during runtime
#     a recrusion depth violation occurs.
#
# limit = 120
mb0's avatar
mb0 committed
16
# recursion-depth = p64 = 4
mb0's avatar
Track.  
mb0 committed
17 18 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
        segment=DS,
mb0's avatar
mb0 committed
32
        ptrty=32}; #TODO: check
mb0's avatar
Track.  
mb0 committed
33 34 35
   p64
end

Axel Simon's avatar
Axel Simon committed
36 37
val complement v = not v

mb0's avatar
Track.  
mb0 committed
38 39 40 41 42 43 44 45 46 47
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
48
val set-lock = update@{lock='1'}
mb0's avatar
Track.  
mb0 committed
49 50 51 52
val set-addrsz = update@{addrsz='1'}

## Decoding prefixes

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

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

75 76 77 78 79 80 81 82 83 84
# 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
85 86 87 88
val /66 [] = continue
val /f2 [] = continue
val /f3 [] = continue

Axel Simon's avatar
Axel Simon committed
89 90 91 92
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
93 94 95 96 97 98 99 100
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
101

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

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

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

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
   update
      @{rex='1',
Julian Kranz's avatar
Julian Kranz committed
280
	rexw=w,
mb0's avatar
mb0 committed
281 282 283 284 285
        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
Julian Kranz's avatar
Julian Kranz committed
307 308 309
val p64 [/rex-p]
 | mode64? = p64
 | mode32? = unop INC rex/reg32
mb0's avatar
mb0 committed
310 311 312 313
#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
314 315
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
316 317
#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
318
val p64 [] = /
mb0's avatar
Track.  
mb0 committed
319 320 321

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
322
val p/66 [0x66] = do set-opndsz; p/66 end
mb0's avatar
mb0 committed
323
val p/66 [/legacy-p] = p/66
Julian Kranz's avatar
Julian Kranz committed
324 325 326
val p/66 [/rex-p]
 | mode64? = p/66
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
327
val p/66 [] = after /66 /
mb0's avatar
Track.  
mb0 committed
328

mb0's avatar
mb0 committed
329
val p/f2 [0x66] = do set-opndsz; p/66/f2 end
mb0's avatar
mb0 committed
330
val p/f2 [0xf2] = do set-repne; p/f2 end
mb0's avatar
Track.  
mb0 committed
331
val p/f2 [0xf3] = do set-rep; p/f2/f3 end
mb0's avatar
mb0 committed
332
val p/f2 [/legacy-p] = p/f2
Julian Kranz's avatar
Julian Kranz committed
333 334 335
val p/f2 [/rex-p]
 | mode64? = p/f2
 | mode32? = unop INC rex/reg32
mb0's avatar
mb0 committed
336
val p/f2 [] = after /f2 / 
mb0's avatar
Track.  
mb0 committed
337

mb0's avatar
mb0 committed
338
val p/f3 [0x66] = do set-opndsz; p/66/f3 end
mb0's avatar
Track.  
mb0 committed
339
val p/f3 [0xf2] = do set-repne; p/f3/f2 end
mb0's avatar
mb0 committed
340
val p/f3 [0xf3] = do set-rep; p/f3 end
mb0's avatar
mb0 committed
341
val p/f3 [/legacy-p] = p/f3
Julian Kranz's avatar
Julian Kranz committed
342 343 344
val p/f3 [/rex-p]
 | mode64? = p/f3
 | mode32? = unop INC rex/reg32
mb0's avatar
mb0 committed
345
val p/f3 [] = after /f3 / 
mb0's avatar
Track.  
mb0 committed
346

mb0's avatar
mb0 committed
347
val p/f2/f3 [0x66] = do set-opndsz; p/66/f2/f3 end
mb0's avatar
mb0 committed
348 349
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
350
val p/f2/f3 [/legacy-p] = p/f2/f3
Julian Kranz's avatar
Julian Kranz committed
351 352 353
val p/f2/f3 [/rex-p]
 | mode64? = p/f2/f3
 | mode32? = unop INC rex/reg32
mb0's avatar
mb0 committed
354
val p/f2/f3 [] = after /f3 (after /f2 /)
mb0's avatar
Track.  
mb0 committed
355

mb0's avatar
mb0 committed
356
val p/f3/f2 [0x66] = do set-opndsz; p/66/f2/f3 end
mb0's avatar
mb0 committed
357 358
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
359
val p/f3/f2 [/legacy-p] = p/f3/f2
Julian Kranz's avatar
Julian Kranz committed
360 361 362
val p/f3/f2 [/rex-p]
 | mode64? = p/f3/f2
 | mode32? = unop INC rex/reg32
mb0's avatar
mb0 committed
363
val p/f3/f2 [] = after /f2 (after /f3 /)
mb0's avatar
Track.  
mb0 committed
364

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

mb0's avatar
mb0 committed
374
val p/66/f3 [0x66] = do set-opndsz; p/66/f3 end
mb0's avatar
Track.  
mb0 committed
375
val p/66/f3 [0xf2] = do set-repne; p/66/f3/f2 end
mb0's avatar
mb0 committed
376
val p/66/f3 [0xf3] = do set-rep; p/66/f3 end
mb0's avatar
mb0 committed
377
val p/66/f3 [/legacy-p] = p/66/f3
Julian Kranz's avatar
Julian Kranz committed
378 379 380
val p/66/f3 [/rex-p]
 | mode64? = p/66/f3
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
381 382 383
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
384 385
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
386
val p/66/f2/f3 [/legacy-p] = p/66/f2/f3
Julian Kranz's avatar
Julian Kranz committed
387 388 389
val p/66/f2/f3 [/rex-p]
 | mode64? = p/66/f2/f3
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
390
val p/66/f2/f3 [] = after /f3 (after /f2 (after /66 /))
mb0's avatar
Track.  
mb0 committed
391

mb0's avatar
mb0 committed
392
val p/66/f3/f2 [0x66] = do clear-rex; p/66/f3/f2 end
mb0's avatar
mb0 committed
393 394
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
395
val p/66/f3/f2 [/legacy-p] = p/66/f3/f2
Julian Kranz's avatar
Julian Kranz committed
396 397 398
val p/66/f3/f2 [/rex-p]
 | mode64? = p/66/f3/f2
 | mode32? = unop INC rex/reg16
mb0's avatar
mb0 committed
399
val p/66/f3/f2 [] = after /f2 (after /f3 (after /66 /))
mb0's avatar
mb0 committed
400

mb0's avatar
Foo.  
mb0 committed
401
type register =
mb0's avatar
Track.  
mb0 committed
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 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519
   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
520 521 522 523 524 525 526 527
 | ST0
 | ST1
 | ST2
 | ST3
 | ST4
 | ST5
 | ST6
 | ST7
mb0's avatar
mb0 committed
528
 | RIP
mb0's avatar
Track.  
mb0 committed
529

mb0's avatar
Foo.  
mb0 committed
530
type opnd =
mb0's avatar
Track.  
mb0 committed
531 532 533 534 535
   IMM8 of 8
 | IMM16 of 16
 | IMM32 of 32
 | IMM64 of 64
 | REG of register
mb0's avatar
Foo.  
mb0 committed
536
 | MEM of {sz:int,psz:int,segment:register,opnd:opnd}
mb0's avatar
sem.  
mb0 committed
537 538
 | SUM of {a:opnd,b:opnd}
 | SCALE of {imm:2,opnd:opnd}
mb0's avatar
Track.  
mb0 committed
539

mb0's avatar
Foo.  
mb0 committed
540
type flowopnd =
mb0's avatar
Track.  
mb0 committed
541 542 543 544
   REL8 of 8
 | REL16 of 16
 | REL32 of 32
 | REL64 of 64
Julian Kranz's avatar
Julian Kranz committed
545 546
 | PTR16/16 of 32
 | PTR16/32 of 48
mb0's avatar
Track.  
mb0 committed
547 548 549
 | NEARABS of opnd
 | FARABS of opnd

550 551 552 553 554
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
555

mb0's avatar
Foo.  
mb0 committed
556
type varity =
mb0's avatar
mb0 committed
557 558 559 560 561 562
   VA0
 | VA1 of arity1
 | VA2 of arity2
 | VA3 of arity3
 | VA4 of arity4

mb0's avatar
Foo.  
mb0 committed
563
type insn =
mb0's avatar
Merge.  
mb0 committed
564 565 566 567 568
   AAA
 | AAD of arity1
 | AAM of arity1
 | AAS
 | ADC of arity2
mb0's avatar
mb0 committed
569
 | ADD of arity2
mb0's avatar
Merge.  
mb0 committed
570
 | ADDPD of arity2
Julian Kranz's avatar
Merge  
Julian Kranz committed
571 572 573 574 575 576 577 578 579 580 581
 | 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
582
 | AND of arity2
Julian Kranz's avatar
Julian Kranz committed
583 584
 | ANDNPD of arity2
 | ANDNPS of arity2
Julian Kranz's avatar
Julian Kranz committed
585 586
 | ANDPD of arity2
 | ANDPS of arity2
Julian Kranz's avatar
Julian Kranz committed
587 588 589
 | ARPL of arity2
 | BLENDPD of arity3
 | BLENDPS of arity3
Julian Kranz's avatar
Julian Kranz committed
590
 | BLENDVPD of arity3
Julian Kranz's avatar
Julian Kranz committed
591
 | BLENDVPS of arity3
Julian Kranz's avatar
Julian Kranz committed
592
 | BOUND of arity2
mb0's avatar
mb0 committed
593 594
 | BSF of arity2
 | BSR of arity2
mb0's avatar
mb0 committed
595
 | BSWAP of arity1
mb0's avatar
mb0 committed
596
 | BT of arity2
Julian Kranz's avatar
Julian Kranz committed
597 598 599
 | BTC of arity2
 | BTR of arity2
 | BTS of arity2
mb0's avatar
mb0 committed
600
 | CALL of flow1
mb0's avatar
mb0 committed
601
 | CBW
Julian Kranz's avatar
Julian Kranz committed
602
 | CDQ 
mb0's avatar
mb0 committed
603
 | CDQE
Julian Kranz's avatar
Julian Kranz committed
604
 | CLC
mb0's avatar
mb0 committed
605
 | CLD
Julian Kranz's avatar
Julian Kranz committed
606 607 608 609
 | CLFLUSH of arity1
 | CLI
 | CLTS
 | CMC
mb0's avatar
mb0 committed
610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640
 | 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
641 642
 | CMPPD of arity3
 | CMPPS of arity3
mb0's avatar
mb0 committed
643
 | CMPSB
Julian Kranz's avatar
Julian Kranz committed
644
 | CMPSD of varity
mb0's avatar
mb0 committed
645
 | CMPSQ
Julian Kranz's avatar
Julian Kranz committed
646
 | CMPSS of arity3
Julian Kranz's avatar
Julian Kranz committed
647
 | CMPSW
mb0's avatar
mb0 committed
648
 | CMPXCHG of arity2
Julian Kranz's avatar
Julian Kranz committed
649
 | CMPXCHG16B of arity1
Julian Kranz's avatar
Julian Kranz committed
650
 | CMPXCHG8B of arity1
Julian Kranz's avatar
Julian Kranz committed
651 652
 | COMISD of arity2
 | COMISS of arity2
mb0's avatar
mb0 committed
653
 | CPUID
Julian Kranz's avatar
Julian Kranz committed
654
 | CQO
Julian Kranz's avatar
Julian Kranz committed
655
 | CRC32 of arity2
Julian Kranz's avatar
Julian Kranz committed
656 657 658
 | CVTDQ2PD of arity2
 | CVTDQ2PS of arity2
 | CVTPD2DQ of arity2
mb0's avatar
mb0 committed
659
 | CVTPD2PI of arity2
Julian Kranz's avatar
Julian Kranz committed
660 661 662 663 664 665 666 667
 | 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
668
 | CVTSI2SD of arity2
Julian Kranz's avatar
Julian Kranz committed
669 670 671 672 673 674 675 676 677 678
 | CVTSI2SS of arity2
 | CVTSS2SD of arity2
 | CVTSS2SI of arity2
 | CVTTPD2DQ of arity2
 | CVTTPD2PI of arity2
 | CVTTPS2DQ of arity2
 | CVTTPS2PI of arity2
 | CVTTSD2SI of arity2
 | CVTTSS2SI of arity2
 | CWD
Julian Kranz's avatar
Julian Kranz committed
679
 | CWDE
Julian Kranz's avatar
Julian Kranz committed
680 681
 | DAA
 | DAS
mb0's avatar
mb0 committed
682 683
 | DEC of arity1
 | DIV of arity1
Julian Kranz's avatar
Julian Kranz committed
684 685 686 687 688 689 690 691 692
 | DIVPD of arity2
 | DIVPS of arity2
 | DIVSD of arity2
 | DIVSS of arity2
 | DPPD of arity3
 | DPPS of arity3
 | EMMS
 | ENTER of arity2
 | EXTRACTPS of arity3
Julian Kranz's avatar
Julian Kranz committed
693 694
 | F2XM1
 | FABS
Julian Kranz's avatar
Julian Kranz committed
695
 | FADD of arity2
Julian Kranz's avatar
Julian Kranz committed
696
 | FADDP of arity2
Julian Kranz's avatar
Julian Kranz committed
697 698
 | FBLD of arity1
 | FBSTP of arity1
mb0's avatar
mb0 committed
699
 | FCHS
Julian Kranz's avatar
Julian Kranz committed
700
 | FCLEX
mb0's avatar
mb0 committed
701 702 703 704 705 706 707 708
 | 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
709
 | FCOM of arity1
mb0's avatar
mb0 committed
710 711
 | FCOMI of arity2
 | FCOMIP of arity2
Julian Kranz's avatar
Julian Kranz committed
712 713
 | FCOMP of arity1
 | FCOMPP
Julian Kranz's avatar
Julian Kranz committed
714 715 716 717 718 719 720
 | FCOS
 | FDECSTP
 | FDIV of arity2
 | FDIVP of arity2
 | FDIVR of arity2
 | FDIVRP of arity2
 | FFREE of arity1
Julian Kranz's avatar
Julian Kranz committed
721
 | FIADD of arity1
Julian Kranz's avatar
Julian Kranz committed
722 723
 | FICOM of arity1
 | FICOMP of arity1
Julian Kranz's avatar
Julian Kranz committed
724 725
 | FIDIV of arity2
 | FIDIVR of arity1
Julian Kranz's avatar
Julian Kranz committed
726
 | FILD of arity1
Julian Kranz's avatar
Julian Kranz committed
727
 | FIMUL of arity1
Julian Kranz's avatar
Julian Kranz committed
728 729 730 731 732
 | FINCSTP
 | FINIT
 | FIST of arity1
 | FISTP of arity1
 | FISTTP of arity1
Julian Kranz's avatar
Julian Kranz committed
733 734
 | FISUB of arity1
 | FISUBR of arity1
mb0's avatar
mb0 committed
735
 | FLD of arity1
Julian Kranz's avatar
Julian Kranz committed
736 737 738
 | FLD1
 | FLDCW of arity1
 | FLDENV of arity1
mb0's avatar
mb0 committed
739 740 741 742 743 744
 | FLDL2E
 | FLDL2T
 | FLDLG2
 | FLDLN2
 | FLDPI
 | FLDZ
Julian Kranz's avatar
Julian Kranz committed
745 746
 | FMUL of arity2
 | FMULP of arity2
Julian Kranz's avatar
Julian Kranz committed
747 748
 | FNCLEX
 | FNINIT
Julian Kranz's avatar
Julian Kranz committed
749
 | FNOP
Julian Kranz's avatar
Julian Kranz committed
750 751 752 753
 | FNSAVE of arity1
 | FNSTCW of arity1
 | FNSTENV of arity1
 | FNSTSW of arity1
Julian Kranz's avatar
Julian Kranz committed
754 755 756 757 758
 | FPATAN
 | FPREM
 | FPREM1
 | FPTAN
 | FRNDINT
Julian Kranz's avatar
Julian Kranz committed
759 760
 | FRSTOR of arity1
 | FSAVE of arity1
Julian Kranz's avatar
Julian Kranz committed
761 762 763 764
 | FSCALE
 | FSIN
 | FSINCOS
 | FSQRT
mb0's avatar
mb0 committed
765
 | FST of arity1
Julian Kranz's avatar
Julian Kranz committed
766
 | FSTCW of arity1
Julian Kranz's avatar
Julian Kranz committed
767
 | FSTENV of arity1
Julian Kranz's avatar
Julian Kranz committed
768
 | FSTP of arity1
Julian Kranz's avatar
Julian Kranz committed
769 770 771 772 773 774 775
 | FSTSW of arity1
 | FSUB of arity2
 | FSUBP of arity2
 | FSUBR of arity2
 | FSUBRP of arity2
 | FTST
 | FUCOM of arity1
Julian Kranz's avatar
Julian Kranz committed
776 777
 | FUCOMI of arity1
 | FUCOMIP of arity1
Julian Kranz's avatar
Julian Kranz committed
778 779 780 781
 | FUCOMP of arity1
 | FUCOMPP
 | FXAM
 | FXCH of arity1
Julian Kranz's avatar
Julian Kranz committed
782 783 784 785
 | FXRSTOR64 of arity1
 | FXRSTOR of arity1
 | FXSAVE64 of arity1
 | FXSAVE of arity1
Julian Kranz's avatar
Julian Kranz committed
786 787 788 789 790
 | FXTRACT
 | FYL2X
 | FYL2XP1
 | HADDPD of arity2
 | HADDPS of arity2
mb0's avatar
mb0 committed
791
 | HLT
Julian Kranz's avatar
Julian Kranz committed
792
 | HSUBPD of arity2
Julian Kranz's avatar
Julian Kranz committed
793
 | HSUBPS of arity2
mb0's avatar
mb0 committed
794
 | IDIV of arity1
Julian Kranz's avatar
Julian Kranz committed
795 796
 | IMUL of varity
 | IN of arity2
mb0's avatar
mb0 committed
797
 | INC of arity1
Julian Kranz's avatar
Julian Kranz committed
798 799 800
 | INSERTPS of arity3
 | INT of arity1
 | INT0
Julian Kranz's avatar
Julian Kranz committed
801
 | INT3
Julian Kranz's avatar
Julian Kranz committed
802 803
 | INVD
 | INVLPG of arity1
Julian Kranz's avatar
Julian Kranz committed
804 805 806 807
 | INVPCID of arity2
 | IRET
 | IRETD
 | IRETQ
mb0's avatar
mb0 committed
808 809 810 811 812 813 814 815 816 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
 | 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
842 843
 | LAHF
 | LAR of arity2
mb0's avatar
mb0 committed
844
 | LDDQU of arity2
Julian Kranz's avatar
Julian Kranz committed
845 846
 | LDMXCSR of arity1
 | LDS of arity2
mb0's avatar
mb0 committed
847
 | LEA of arity2
mb0's avatar
mb0 committed
848
 | LEAVE
Julian Kranz's avatar
Julian Kranz committed
849
 | LES of arity2
mb0's avatar
mb0 committed
850
 | LFENCE
Julian Kranz's avatar
Julian Kranz committed
851
 | LFS of arity2
Julian Kranz's avatar
Julian Kranz committed
852
 | LGDT of arity1
Julian Kranz's avatar
Julian Kranz committed
853
 | LGS of arity2
Julian Kranz's avatar
Julian Kranz committed
854
 | LIDT of arity1
Julian Kranz's avatar
Julian Kranz committed
855 856 857 858 859 860
 | LLDT of arity1
 | LMSW of arity1
 | LOCK
 | LODSB
 | LODSD
 | LODSQ
Julian Kranz's avatar
Julian Kranz committed
861
 | LODSW
Julian Kranz's avatar
Julian Kranz committed
862 863 864 865
 | LOOP of flow1
 | LOOPE of flow1
 | LOOPNE of flow1
 | LSL of arity2
Julian Kranz's avatar
Julian Kranz committed
866
 | LSS of arity2
Julian Kranz's avatar
Julian Kranz committed
867
 | LTR of arity1
mb0's avatar
mb0 committed
868 869 870 871 872 873
 | MASKMOVDQU of arity2
 | MASKMOVQ of arity2
 | MAXPD of arity2
 | MAXPS of arity2
 | MAXSD of arity2
 | MAXSS of arity2
mb0's avatar
Track.  
mb0 committed
874
 | MFENCE
mb0's avatar
mb0 committed
875 876 877 878
 | MINPD of arity2
 | MINPS of arity2
 | MINSD of arity2
 | MINSS of arity2
mb0's avatar
Track.  
mb0 committed
879
 | MONITOR
mb0's avatar
mb0 committed
880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904
 | 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
905
 | MOVSB
mb0's avatar
mb0 committed
906
 | MOVSD of varity
mb0's avatar
mb0 committed
907 908
 | MOVSHDUP of arity2
 | MOVSLDUP of arity2
mb0's avatar
mb0 committed
909
 | MOVSQ
mb0's avatar
mb0 committed
910 911 912 913 914 915 916 917 918 919 920 921 922
 | 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
923
 | MWAIT
mb0's avatar
mb0 committed
924 925 926 927 928 929 930
 | 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
931 932 933
 | OUTS
 | OUTSB
 | OUTSD
Julian Kranz's avatar
Julian Kranz committed
934
 | OUTSW
Julian Kranz's avatar
Julian Kranz committed
935 936
 | PABSB of arity2
 | PABSD of arity2
Julian Kranz's avatar
Julian Kranz committed
937
 | PABSW of arity2
Julian Kranz's avatar
Julian Kranz committed
938
 | PACKSSDW of arity2
Julian Kranz's avatar
Julian Kranz committed
939
 | PACKSSWB of arity2
Julian Kranz's avatar
Julian Kranz committed
940
 | PACKUSDW of arity2
Julian Kranz's avatar
Julian Kranz committed
941
 | PACKUSWB of arity2
Julian Kranz's avatar
Julian Kranz committed
942 943
 | PADDB of arity2
 | PADDD of arity2
Julian Kranz's avatar
Julian Kranz committed
944
 | PADDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
945 946
 | PADDSB of arity2
 | PADDSW of arity2
Julian Kranz's avatar
Julian Kranz committed
947 948
 | PADDUSB of arity2
 | PADDUSW of arity2
Julian Kranz's avatar
Julian Kranz committed
949
 | PADDW of arity2
mb0's avatar
mb0 committed
950 951
 | PALIGNR of arity3
 | PAND of arity2
Julian Kranz's avatar
Julian Kranz committed
952
 | PANDN of arity2
Julian Kranz's avatar
Julian Kranz committed
953
 | PAUSE
Julian Kranz's avatar
Julian Kranz committed
954 955
 | PAVGB of arity2
 | PAVGW of arity2
Julian Kranz's avatar
Julian Kranz committed
956
 | PBLENDVB of arity2
Julian Kranz's avatar
Julian Kranz committed
957
 | PBLENDW of arity3
Julian Kranz's avatar
Julian Kranz committed
958
 | PCLMULQDQ of arity3
mb0's avatar
mb0 committed
959 960 961 962 963
 | PCMPEQB of arity2
 | PCMPEQD of arity2
 | PCMPEQQ of arity2
 | PCMPEQW of arity2
 | PCMPESTRI of arity3
Julian Kranz's avatar
Julian Kranz committed
964
 | PCMPESTRM of arity3
mb0's avatar
mb0 committed
965 966 967
 | PCMPGRD of arity2
 | PCMPGTB of arity2
 | PCMPGTD of arity2
Julian Kranz's avatar
Julian Kranz committed
968
 | PCMPGTQ of arity2
Julian Kranz's avatar
Julian Kranz committed
969
 | PCMPGTW of arity2
mb0's avatar
mb0 committed
970
 | PCMPISTRI of arity3
Julian Kranz's avatar
Julian Kranz committed
971
 | PCMPISTRM of arity3
Julian Kranz's avatar
Julian Kranz committed
972 973 974
 | PEXTRB of arity3
 | PEXTRD of arity3
 | PEXTRQ of arity3
Julian Kranz's avatar
Julian Kranz committed
975
 | PEXTRW of arity3
mb0's avatar
mb0 committed
976
 | PHADDD of arity2
Julian Kranz's avatar
Julian Kranz committed
977
 | PHADDSW of arity2
Julian Kranz's avatar
Julian Kranz committed
978
 | PHADDW of arity2
Julian Kranz's avatar
Julian Kranz committed
979
 | PHMINPOSUW of arity2
Julian Kranz's avatar
Julian Kranz committed
980
 | PHSUBD of arity2
Julian Kranz's avatar
Julian Kranz committed
981
 | PHSUBSW of arity2
Julian Kranz's avatar
Julian Kranz committed
982
 | PHSUBW of arity2
mb0's avatar
mb0 committed
983 984 985
 | PINSRB of arity3
 | PINSRD of arity3
 | PINSRQ of arity3
Julian Kranz's avatar
Julian Kranz committed
986
 | PINSRW of arity3
Julian Kranz's avatar
Julian Kranz committed
987
 | PMADDUBSW of arity2
Julian Kranz's avatar
Julian Kranz committed
988 989
 | PMADDWD of arity2
 | PMAXSB of arity2
Julian Kranz's avatar
Julian Kranz committed
990
 | PMAXSD of arity2
Julian Kranz's avatar
Julian Kranz committed
991
 | PMAXSW of arity2
Julian Kranz's avatar
Julian Kranz committed
992
 | PMAXUB of arity2
Julian Kranz's avatar
Julian Kranz committed
993
 | PMAXUD of arity2
Julian Kranz's avatar
Julian Kranz committed
994 995
 | PMAXUW of arity2
 | PMINSB of arity2
Julian Kranz's avatar
Julian Kranz committed
996
 | PMINSD of arity2
Julian Kranz's avatar
Julian Kranz committed
997 998
 | PMINSW of arity2
 | PMINUB of arity2
Julian Kranz's avatar
Julian Kranz committed
999 1000
 | PMINUD of arity2
 | PMINUW of arity2
mb0's avatar
mb0 committed
1001
 | PMOVMSKB of arity2
Julian Kranz's avatar
Julian Kranz committed
1002 1003
 | PMOVSXBD of arity2
 | PMOVSXBQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1004 1005
 | PMOVSXBW of arity2
 | PMOVSXDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1006 1007 1008 1009
 | PMOVSXWD of arity2
 | PMOVSXWQ of arity2
 | PMOVZXBD of arity2
 | PMOVZXBQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1010 1011
 | PMOVZXBW of arity2
 | PMOVZXDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1012 1013 1014 1015 1016 1017 1018 1019
 | 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
1020
 | PMULUDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1021
 | POP of arity1
Julian Kranz's avatar
Julian Kranz committed
1022 1023 1024 1025 1026 1027
 | POPA
 | POPAD
 | POPCNT of arity2
 | POPF
 | POPFD
 | POPFQ
mb0's avatar
mb0 committed
1028 1029 1030 1031 1032 1033
 | 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
1034
 | PSADBW of arity2
mb0's avatar
mb0 committed
1035 1036
 | PSHUFB of arity2
 | PSHUFD of arity3
Julian Kranz's avatar
Julian Kranz committed
1037 1038 1039 1040 1041
 | PSHUFHW of arity3
 | PSHUFLW of arity3
 | PSHUFW of arity3
 | PSIGNB of arity2
 | PSIGND of arity2
Julian Kranz's avatar
Julian Kranz committed
1042
 | PSIGNW of arity2
Julian Kranz's avatar
Julian Kranz committed
1043
 | PSLLD of arity2
Julian Kranz's avatar
Julian Kranz committed
1044
 | PSLLDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1045
 | PSLLQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1046
 | PSLLW of arity2
Julian Kranz's avatar
Julian Kranz committed