x86.ml 180 KB
Newer Older
mb0's avatar
mb0 committed
1
granularity = 8
Julian Kranz's avatar
Merge  
Julian Kranz committed
2
export = config-default config-mode64 config-default-opnd-sz-32 decode features-get{features}
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

Julian Kranz's avatar
Julian Kranz committed
18 19 20 21 22 23 24
val config-default            = '11'
val config-mode64             = '01'
val config-default-opnd-sz-32 = '10'

val test-opt opt config = if (zx (opt and config)) > 0 then '1' else '0'

val decode config = do
Axel Simon's avatar
Axel Simon committed
25
   update @{tab=void};
Julian Kranz's avatar
Julian Kranz committed
26
   main config
Axel Simon's avatar
Axel Simon committed
27 28
end

Julian Kranz's avatar
Julian Kranz committed
29 30 31
val force-int-for-decode-config = decode config-default

val main config = do
Axel Simon's avatar
Axel Simon committed
32
   t <- query $tab;
mb0's avatar
mb0 committed
33
   update
Julian Kranz's avatar
Julian Kranz committed
34
      @{mode64=test-opt config-mode64 config,
mb0's avatar
mb0 committed
35 36 37 38 39 40 41 42
        repne='0',
        rep='0',
        rex='0',
        rexw='0',
        rexb='0',
        rexr='0',
        rexx='0',
        addrsz='0',
Julian Kranz's avatar
Julian Kranz committed
43
        opndsz='0',
mb0's avatar
mb0 committed
44
        lock='0',
Julian Kranz's avatar
Julian Kranz committed
45
        segment=SEG_NONE,
Julian Kranz's avatar
Julian Kranz committed
46
	      default-operand-size=if test-opt config-mode64 config then 32 else 16,
Axel Simon's avatar
Axel Simon committed
47 48 49 50 51
        ptrty=32, #TODO: check
        ~tab};
   instr <- p64;
   update @{tab=t};
   return instr
mb0's avatar
mb0 committed
52 53
end

Axel Simon's avatar
Axel Simon committed
54 55
val complement v = not v

Axel Simon's avatar
Axel Simon committed
56 57
# Segment prefix handling
type seg_override =
Julian Kranz's avatar
Julian Kranz committed
58
     SEG_NONE
Axel Simon's avatar
Axel Simon committed
59 60
   | SEG_OVERRIDE of register

Julian Kranz's avatar
Julian Kranz committed
61 62 63
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
64 65
val set-FS = update@{segment=SEG_OVERRIDE FS}
val set-GS = update@{segment=SEG_OVERRIDE GS}
Julian Kranz's avatar
Julian Kranz committed
66
val set-SS = update@{segment=SEG_OVERRIDE SS}
Axel Simon's avatar
Axel Simon committed
67

mb0's avatar
mb0 committed
68
val set-lock = update@{lock='1'}
mb0's avatar
mb0 committed
69 70
val set-addrsz = update@{addrsz='1'}

71 72
val opndsz-set-from-d = return void

mb0's avatar
mb0 committed
73 74
## Decoding prefixes

mb0's avatar
mb0 committed
75
# The functions 'after' and 'continue' are used to try different decoders
Axel Simon's avatar
Axel Simon committed
76 77 78
# 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
79
val after fst snd = do
80 81 82
  update@{tab=snd};
  r <- fst;
  # make the type checker happy
Axel Simon's avatar
Axel Simon committed
83
  update@{~tab};
84
  return r
Axel Simon's avatar
Axel Simon committed
85 86 87
end

val continue = do
88 89
  t <- query$tab;
  # make the type checker happy
Julian Kranz's avatar
Julian Kranz committed
90
  update@{~tab};
91 92
  # make the type checker happy
  r <- t;
Axel Simon's avatar
Axel Simon committed
93
  update@{~tab};
94
  return r
Axel Simon's avatar
Axel Simon committed
95 96
end

Julian Kranz's avatar
Julian Kranz committed
97 98 99 100
#val after fst snd = do
#   update@{tab=snd};
#   fst
#end
Julian Kranz's avatar
Julian Kranz committed
101
#
Julian Kranz's avatar
Julian Kranz committed
102 103 104 105
#val continue = do
#   t <- query$tab;
#   t
#end
106

Axel Simon's avatar
Axel Simon committed
107 108 109
val /66 [] = continue
val /f2 [] = continue
val /f3 [] = continue
Julian Kranz's avatar
Julian Kranz committed
110
#val / [] = arity0 none MWAIT
Axel Simon's avatar
Axel Simon committed
111

Axel Simon's avatar
Axel Simon committed
112 113 114 115
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
116 117 118 119 120 121 122 123
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
124

Julian Kranz's avatar
Julian Kranz committed
125 126 127
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
128

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

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

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

mb0's avatar
mb0 committed
164 165 166
        vexm='00001'}
end

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

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

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

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

mb0's avatar
mb0 committed
215
val p/vex/f2/0f [0xc5 'r:1 v:4 l:1 11'] = do
mb0's avatar
mb0 committed
216 217 218 219 220 221
   update
      @{rex='1',
        rexw='0',
        vexw='0',
        rexr=not r,
        vexl=l,
222
        vexv=complement v,
mb0's avatar
mb0 committed
223 224 225
        vexm='00001'} #TODO: sane default value for vexm,rexw,rexb,..
end

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

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

mb0's avatar
mb0 committed
252
val p/vex/f2/0f/38 [0xc4 'r:1 x:1 b:1 00010' 'w:1 v:4 l:1 11'] = do
mb0's avatar
mb0 committed
253 254 255 256 257 258 259 260
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
261
        vexv=complement v,
mb0's avatar
mb0 committed
262 263 264
        vexm='00010'}
end

mb0's avatar
mb0 committed
265
val p/vex/f3/0f/38 [0xc4 'r:1 x:1 b:1 00010' 'w:1 v:4 l:1 10'] = do
mb0's avatar
mb0 committed
266 267 268 269 270 271 272 273
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
274
        vexv=complement v,
mb0's avatar
mb0 committed
275 276 277
        vexm='00010'}
end

mb0's avatar
mb0 committed
278
val p/vex/0f/3a [0xc4 'r:1 x:1 b:1 00011' 'w:1 v:4 l:1 00'] = do
mb0's avatar
mb0 committed
279 280 281 282 283 284 285 286
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
287
        vexv=complement v,
mb0's avatar
mb0 committed
288 289 290
        vexm='00011'}
end

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

mb0's avatar
mb0 committed
304
val p/vex/f2/0f/3a [0xc4 'r:1 x:1 b:1 00011' 'w:1 v:4 l:1 11'] = do
mb0's avatar
mb0 committed
305 306
   update
      @{rex='1',
Julian Kranz's avatar
Julian Kranz committed
307
	rexw=w,
mb0's avatar
mb0 committed
308 309 310 311 312
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
313
        vexv=complement v,
mb0's avatar
mb0 committed
314 315 316
        vexm='00011'}
end

mb0's avatar
mb0 committed
317
val p/vex/f3/0f/3a [0xc4 'r:1 x:1 b:1 00011' 'w:1 v:4 l:1 10'] = do
mb0's avatar
mb0 committed
318 319 320 321 322 323 324 325
   update
      @{rex='1',
        rexw=w,
        vexw=w,
        rexr=not r,
        rexb=not b,
        rexx=not x,
        vexl=l,
326
        vexv=complement v,
mb0's avatar
mb0 committed
327 328 329
        vexm='00011'}
end

Julian Kranz's avatar
Julian Kranz committed
330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354
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
355 356 357
val p64 [/66-p] = p/66
val p64 [/f2-p] = p/f2
val p64 [/f3-p] = p/f3
mb0's avatar
mb0 committed
358
val p64 [/legacy-p] = p64
Julian Kranz's avatar
Julian Kranz committed
359 360
val p64 [/rex-p]
 | mode64? = p64
Julian Kranz's avatar
Julian Kranz committed
361 362
 | mode32? & rexw? = unop none DEC rex/reg32
 | mode32? & // rexw? = unop none INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
363 364 365
val p64 [p/vex/0f]
 | vndd? = /vex/0f/vexv
 | otherwise = /vex/0f
Julian Kranz's avatar
Julian Kranz committed
366 367 368 369 370
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
371
 | otherwise = /vex/f3/0f
Julian Kranz's avatar
Julian Kranz committed
372 373 374 375 376 377 378 379 380 381 382 383 384 385 386
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
387
val p64 [] = /
mb0's avatar
mb0 committed
388

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

Julian Kranz's avatar
Julian Kranz committed
399 400 401
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
402
val p/f2 [/legacy-p] = p/f2
Julian Kranz's avatar
Julian Kranz committed
403 404
val p/f2 [/rex-p]
 | mode64? = p/f2
Julian Kranz's avatar
Julian Kranz committed
405 406
 | mode32? & rexw? = unop none DEC rex/reg32
 | mode32? & // rexw? = unop none INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
407
val p/f2 [] = after /f2 (with-f2 /)
mb0's avatar
mb0 committed
408

Julian Kranz's avatar
Julian Kranz committed
409 410 411
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
412
val p/f3 [/legacy-p] = p/f3
Julian Kranz's avatar
Julian Kranz committed
413 414
val p/f3 [/rex-p]
 | mode64? = p/f3
Julian Kranz's avatar
Julian Kranz committed
415 416
 | mode32? & rexw? = unop none DEC rex/reg32
 | mode32? & // rexw? = unop none INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
417
val p/f3 [] = after /f3 (with-f3 /)
mb0's avatar
mb0 committed
418

Julian Kranz's avatar
Julian Kranz committed
419 420 421
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
422
val p/f2/f3 [/legacy-p] = p/f2/f3
Julian Kranz's avatar
Julian Kranz committed
423 424
val p/f2/f3 [/rex-p]
 | mode64? = p/f2/f3
Julian Kranz's avatar
Julian Kranz committed
425 426
 | mode32? & rexw? = unop none DEC rex/reg32
 | mode32? & // rexw? = unop none INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
427 428
val p/f2/f3 [] = after (with-f2 /f3) (
                 after (with-f3 /f2) (with-f2 (with-f3 /)))
mb0's avatar
mb0 committed
429

Julian Kranz's avatar
Julian Kranz committed
430 431 432
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
433
val p/f3/f2 [/legacy-p] = p/f3/f2
Julian Kranz's avatar
Julian Kranz committed
434 435
val p/f3/f2 [/rex-p]
 | mode64? = p/f3/f2
Julian Kranz's avatar
Julian Kranz committed
436 437
 | mode32? & rexw? = unop none DEC rex/reg32
 | mode32? & // rexw? = unop none INC rex/reg32
Julian Kranz's avatar
Julian Kranz committed
438 439
val p/f3/f2 [] = after (with-f3 /f2) (
                 after (with-f2 /f3) (with-f2 (with-f3 /)))
mb0's avatar
mb0 committed
440

Julian Kranz's avatar
Julian Kranz committed
441 442 443
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
444
val p/66/f2 [/legacy-p] = p/66/f2
Julian Kranz's avatar
Julian Kranz committed
445 446
val p/66/f2 [/rex-p]
 | mode64? = p/66/f2
Julian Kranz's avatar
Julian Kranz committed
447 448
 | mode32? & rexw? = unop none DEC rex/reg16
 | mode32? & // rexw? = unop none INC rex/reg16
Julian Kranz's avatar
Julian Kranz committed
449 450
val p/66/f2 [] = after (with-66 /f2) (
                 after (with-f2 /66) (with-66 (with-f2 /)))
mb0's avatar
mb0 committed
451

Julian Kranz's avatar
Julian Kranz committed
452 453 454
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
455
val p/66/f3 [/legacy-p] = p/66/f3
Julian Kranz's avatar
Julian Kranz committed
456 457
val p/66/f3 [/rex-p]
 | mode64? = p/66/f3
Julian Kranz's avatar
Julian Kranz committed
458 459
 | mode32? & rexw? = unop none DEC rex/reg16
 | mode32? & // rexw? = unop none INC rex/reg16
Julian Kranz's avatar
Julian Kranz committed
460 461 462
val p/66/f3 [] = after (with-66 /f3) (
                 after (with-f3 /66) (
                        with-66 (with-f3 /)))
mb0's avatar
mb0 committed
463

Julian Kranz's avatar
Julian Kranz committed
464 465 466
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
467
val p/66/f2/f3 [/legacy-p] = p/66/f2/f3
Julian Kranz's avatar
Julian Kranz committed
468 469
val p/66/f2/f3 [/rex-p]
 | mode64? = p/66/f2/f3
Julian Kranz's avatar
Julian Kranz committed
470 471
 | mode32? & rexw? = unop none DEC rex/reg16
 | mode32? & // rexw? = unop none INC rex/reg16
Julian Kranz's avatar
Julian Kranz committed
472 473 474 475 476 477 478 479
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
480
val p/66/f3/f2 [/legacy-p] = p/66/f3/f2
Julian Kranz's avatar
Julian Kranz committed
481 482
val p/66/f3/f2 [/rex-p]
 | mode64? = p/66/f3/f2
Julian Kranz's avatar
Julian Kranz committed
483 484
 | mode32? & rexw? = unop none DEC rex/reg16
 | mode32? & // rexw? = unop none INC rex/reg16
Julian Kranz's avatar
Julian Kranz committed
485 486 487 488
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
489

Julian Kranz's avatar
Julian Kranz committed
490 491 492 493 494 495 496 497 498 499 500
val /vex/0f [] = /vex/0f/vexv
val /vex/66/0f [] = /vex/66/0f/vexv
val /vex/f2/0f [] = /vex/f2/0f/vexv
val /vex/f3/0f [] = /vex/f3/0f/vexv
val /vex/66/0f/38 [] = /vex/66/0f/38/vexv
#val /vex/f2/0f/38 [] = /vex/f2/0f/38/vexv
#val /vex/f3/0f/38 [] = /vex/f3/0f/38/vexv
val /vex/66/0f/3a [] = /vex/66/0f/3a/vexv
#val /vex/f2/0f/3a [] = /vex/f2/0f/3a/vexv
#val /vex/f3/0f/3a [] = /vex/f3/0f/3a/vexv

mb0's avatar
Foo.  
mb0 committed
501
type register =
mb0's avatar
mb0 committed
502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522
   AL
 | AH
 | AX
 | EAX
 | RAX
 | BL
 | BH
 | BX
 | EBX
 | RBX
 | CL
 | CH
 | CX
 | ECX
 | RCX
 | DL
 | DH
 | DX
 | EDX
 | RDX
 | R8L
523
 | R8W
mb0's avatar
mb0 committed
524
 | R8D
Julian Kranz's avatar
Julian Kranz committed
525
 | R8
mb0's avatar
mb0 committed
526
 | R9L
527
 | R9W
mb0's avatar
mb0 committed
528
 | R9D
Julian Kranz's avatar
Julian Kranz committed
529
 | R9
mb0's avatar
mb0 committed
530
 | R10L
531
 | R10W
mb0's avatar
mb0 committed
532
 | R10D
Julian Kranz's avatar
Julian Kranz committed
533
 | R10
mb0's avatar
mb0 committed
534
 | R11L
535
 | R11W
mb0's avatar
mb0 committed
536
 | R11D
Julian Kranz's avatar
Julian Kranz committed
537
 | R11
mb0's avatar
mb0 committed
538
 | R12L
539
 | R12W
mb0's avatar
mb0 committed
540
 | R12D
Julian Kranz's avatar
Julian Kranz committed
541
 | R12
mb0's avatar
mb0 committed
542
 | R13L
543
 | R13W
mb0's avatar
mb0 committed
544
 | R13D
Julian Kranz's avatar
Julian Kranz committed
545
 | R13
mb0's avatar
mb0 committed
546
 | R14L
547
 | R14W
mb0's avatar
mb0 committed
548
 | R14D
Julian Kranz's avatar
Julian Kranz committed
549
 | R14
mb0's avatar
mb0 committed
550
 | R15L
551
 | R15W
mb0's avatar
mb0 committed
552
 | R15D
Julian Kranz's avatar
Julian Kranz committed
553
 | R15
554
 | SPL
mb0's avatar
mb0 committed
555 556 557
 | SP
 | ESP
 | RSP
558
 | BPL
mb0's avatar
mb0 committed
559 560 561
 | BP
 | EBP
 | RBP
562
 | SIL
mb0's avatar
mb0 committed
563 564 565
 | SI
 | ESI
 | RSI
566
 | DIL
mb0's avatar
mb0 committed
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 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615
 | 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
616 617 618 619 620 621 622 623
 | ST0
 | ST1
 | ST2
 | ST3
 | ST4
 | ST5
 | ST6
 | ST7
mb0's avatar
mb0 committed
624
 | RIP
Julian Kranz's avatar
Julian Kranz committed
625
 | FLAGS
mb0's avatar
mb0 committed
626

mb0's avatar
Foo.  
mb0 committed
627
type opnd =
Julian Kranz's avatar
*  
Julian Kranz committed
628 629 630 631
   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
632
 | REG of register
Julian Kranz's avatar
Julian Kranz committed
633
 | MEM of {sz:int,psz:int,segment:seg_override,opnd:opnd}
mb0's avatar
sem.  
mb0 committed
634 635
 | SUM of {a:opnd,b:opnd}
 | SCALE of {imm:2,opnd:opnd}
mb0's avatar
mb0 committed
636

mb0's avatar
Foo.  
mb0 committed
637
type flowopnd =
mb0's avatar
mb0 committed
638 639 640 641
   REL8 of 8
 | REL16 of 16
 | REL32 of 32
 | REL64 of 64
Julian Kranz's avatar
Julian Kranz committed
642 643
 | PTR16/16 of 32
 | PTR16/32 of 48
mb0's avatar
mb0 committed
644 645 646
 | NEARABS of opnd
 | FARABS of opnd

Julian Kranz's avatar
Julian Kranz committed
647
#feature vector: aes, avx, f16c, invpcid, mmx, clmul, rdrand, fsgsbase, sse, sse2, sse3, sse4_1, sse4_2, ssse3, xsaveopt, illegal rep, illegal repne, illegal lock, illegal lock (for register)
Julian Kranz's avatar
Julian Kranz committed
648 649

val none_ a                  = '0000000000000000000' 
Julian Kranz's avatar
Julian Kranz committed
650 651 652 653 654 655 656 657 658
val aes_ a                   = '0000000000000000001' 
val avx_ a                   = '0000000000000000010'
val f16c_ a                  = '0000000000000000100'
val invpcid_ a               = '0000000000000001000'
val mmx_ a                   = '0000000000000010000'
val clmul_ a                 = '0000000000000100000'
val rdrand_ a                = '0000000000001000000'
val fsgsbase_ a              = '0000000000010000000'
val sse_ a                   = '0000000000100000000'
Julian Kranz's avatar
Julian Kranz committed
659
val sse2_ a                  = '0000000001000000000'
Julian Kranz's avatar
Julian Kranz committed
660 661 662 663 664 665 666 667 668
val sse3_ a                  = '0000000010000000000'
val sse4_1_ a                = '0000000100000000000'
val sse4_2_ a                = '0000001000000000000'
val ssse3_ a                 = '0000010000000000000'
val xsaveopt_ a              = '0000100000000000000'
val illegal-rep_ a           = '0001000000000000000'
val illegal-repne_ a         = '0010000000000000000'
val illegal-lock_ a          = '0100000000000000000'
val illegal-lock-register_ a = '1000000000000000000'
Julian Kranz's avatar
Julian Kranz committed
669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690

val none                  = return (none_ 0)
val aes                   = return (aes_ 0)
val avx                   = return (avx_ 0)
val f16c                  = return (f16c_ 0)
val invpcid               = return (invpcid_ 0)
val mmx                   = return (mmx_ 0)
val clmul                 = return (clmul_ 0)
val rdrand                = return (rdrand_ 0)
val fsgsbase              = return (fsgsbase_ 0)
val sse                   = return (sse_ 0)
val sse2                  = return (sse2_ 0)
val sse3                  = return (sse3_ 0)
val sse4_1                = return (sse4_1_ 0)
val sse4_2                = return (sse4_2_ 0)
val ssse3                 = return (ssse3_ 0)
val xsaveopt              = return (xsaveopt_ 0)
val illegal-rep           = return (illegal-rep_ 0)
val illegal-repne         = return (illegal-repne_ 0)
val illegal-lock          = return (illegal-lock_ 0)
val illegal-lock-register = return (illegal-lock-register_ 0)

Julian Kranz's avatar
---  
Julian Kranz committed
691 692
val features-get insn = (zx insn.features)

Julian Kranz's avatar
Julian Kranz committed
693 694 695 696 697 698
type flow1 = {features:19,opnd-sz:int,addr-sz:int,rep:1,repne:1,lock:1,opnd1:flowopnd}
type arity0 = {features:19,opnd-sz:int,addr-sz:int,rep:1,repne:1,lock:1}
type arity1 = {features:19,opnd-sz:int,addr-sz:int,rep:1,repne:1,lock:1,opnd1:opnd}
type arity2 = {features:19,opnd-sz:int,addr-sz:int,rep:1,repne:1,lock:1,opnd1:opnd,opnd2:opnd}
type arity3 = {features:19,opnd-sz:int,addr-sz:int,rep:1,repne:1,lock:1,opnd1:opnd,opnd2:opnd,opnd3:opnd}
type arity4 = {features:19,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
699

mb0's avatar
Foo.  
mb0 committed
700
type varity =
Julian Kranz's avatar
Julian Kranz committed
701
   VA0 of arity0
mb0's avatar
mb0 committed
702 703 704 705 706
 | VA1 of arity1
 | VA2 of arity2
 | VA3 of arity3
 | VA4 of arity4

mb0's avatar
Foo.  
mb0 committed
707
type insn =
Julian Kranz's avatar
Julian Kranz committed
708
   AAA of arity0
mb0's avatar
mb0 committed
709 710
 | AAD of arity1
 | AAM of arity1
Julian Kranz's avatar
Julian Kranz committed
711
 | AAS of arity0
mb0's avatar
mb0 committed
712
 | ADC of arity2
mb0's avatar
mb0 committed
713
 | ADD of arity2
mb0's avatar
mb0 committed
714
 | ADDPD of arity2
Julian Kranz's avatar
Merge  
Julian Kranz committed
715 716 717 718 719 720 721 722 723 724 725
 | 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
726
 | AND of arity2
Julian Kranz's avatar
Julian Kranz committed
727 728
 | ANDNPD of arity2
 | ANDNPS of arity2
Julian Kranz's avatar
Julian Kranz committed
729 730
 | ANDPD of arity2
 | ANDPS of arity2
Julian Kranz's avatar
Julian Kranz committed
731 732 733
 | ARPL of arity2
 | BLENDPD of arity3
 | BLENDPS of arity3
Julian Kranz's avatar
Julian Kranz committed
734
 | BLENDVPD of arity3
Julian Kranz's avatar
Julian Kranz committed
735
 | BLENDVPS of arity3
Julian Kranz's avatar
Julian Kranz committed
736
 | BOUND of arity2
mb0's avatar
mb0 committed
737 738
 | BSF of arity2
 | BSR of arity2
mb0's avatar
mb0 committed
739
 | BSWAP of arity1
mb0's avatar
mb0 committed
740
 | BT of arity2
Julian Kranz's avatar
Julian Kranz committed
741 742 743
 | BTC of arity2
 | BTR of arity2
 | BTS of arity2
mb0's avatar
mb0 committed
744
 | CALL of flow1
Julian Kranz's avatar
Julian Kranz committed
745 746 747 748 749
 | CBW of arity0
 | CDQ of arity0
 | CDQE of arity0
 | CLC of arity0
 | CLD of arity0
Julian Kranz's avatar
Julian Kranz committed
750
 | CLFLUSH of arity1
Julian Kranz's avatar
Julian Kranz committed
751 752 753
 | CLI of arity0
 | CLTS of arity0
 | CMC of arity0
mb0's avatar
mb0 committed
754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784
 | 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
785 786
 | CMPPD of arity3
 | CMPPS of arity3
Julian Kranz's avatar
Julian Kranz committed
787
 | CMPS of arity2
Julian Kranz's avatar
Julian Kranz committed
788
 | CMPSD of arity3
Julian Kranz's avatar
Julian Kranz committed
789
 | CMPSS of arity3
mb0's avatar
mb0 committed
790
 | CMPXCHG of arity2
Julian Kranz's avatar
Julian Kranz committed
791
 | CMPXCHG16B of arity1
Julian Kranz's avatar
Julian Kranz committed
792
 | CMPXCHG8B of arity1
Julian Kranz's avatar
Julian Kranz committed
793 794
 | COMISD of arity2
 | COMISS of arity2
Julian Kranz's avatar
Julian Kranz committed
795 796
 | CPUID of arity0
 | CQO of arity0
Julian Kranz's avatar
Julian Kranz committed
797
 | CRC32 of arity2
Julian Kranz's avatar
Julian Kranz committed
798 799 800
 | CVTDQ2PD of arity2
 | CVTDQ2PS of arity2
 | CVTPD2DQ of arity2
mb0's avatar
mb0 committed
801
 | CVTPD2PI of arity2
Julian Kranz's avatar
Julian Kranz committed
802 803 804 805 806 807 808 809
 | 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
810
 | CVTSI2SD of arity2
Julian Kranz's avatar
Julian Kranz committed
811 812 813 814 815 816 817 818 819
 | 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
820 821 822 823
 | CWD of arity0
 | CWDE of arity0
 | DAA of arity0
 | DAS of arity0
mb0's avatar
mb0 committed
824 825
 | DEC of arity1
 | DIV of arity1
Julian Kranz's avatar
Julian Kranz committed
826 827 828 829 830 831
 | 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
832
 | EMMS of arity0
Julian Kranz's avatar
Julian Kranz committed
833 834
 | ENTER of arity2
 | EXTRACTPS of arity3
Julian Kranz's avatar
Julian Kranz committed
835 836
 | F2XM1 of arity0
 | FABS of arity0
Julian Kranz's avatar
Julian Kranz committed
837
 | FADD of arity2
Julian Kranz's avatar
Julian Kranz committed
838
 | FADDP of arity2
Julian Kranz's avatar
Julian Kranz committed
839 840
 | FBLD of arity1
 | FBSTP of arity1
Julian Kranz's avatar
Julian Kranz committed
841 842
 | FCHS of arity0
 | FCLEX of arity0
mb0's avatar
mb0 committed
843 844 845 846 847 848 849 850
 | 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
851
 | FCOM of arity1
mb0's avatar
mb0 committed
852 853
 | FCOMI of arity2
 | FCOMIP of arity2
Julian Kranz's avatar
Julian Kranz committed
854
 | FCOMP of arity1
Julian Kranz's avatar
Julian Kranz committed
855 856 857
 | FCOMPP of arity0
 | FCOS of arity0
 | FDECSTP of arity0
Julian Kranz's avatar
Julian Kranz committed
858 859 860 861 862
 | FDIV of arity2
 | FDIVP of arity2
 | FDIVR of arity2
 | FDIVRP of arity2
 | FFREE of arity1
Julian Kranz's avatar
Julian Kranz committed
863
 | FIADD of arity1
Julian Kranz's avatar
Julian Kranz committed
864 865
 | FICOM of arity1
 | FICOMP of arity1
Julian Kranz's avatar
Julian Kranz committed
866 867
 | FIDIV of arity2
 | FIDIVR of arity1
Julian Kranz's avatar
Julian Kranz committed
868
 | FILD of arity1
Julian Kranz's avatar
Julian Kranz committed
869
 | FIMUL of arity1
Julian Kranz's avatar
Julian Kranz committed
870 871
 | FINCSTP of arity0
 | FINIT of arity0
Julian Kranz's avatar
Julian Kranz committed
872 873 874
 | FIST of arity1
 | FISTP of arity1
 | FISTTP of arity1
Julian Kranz's avatar
Julian Kranz committed
875 876
 | FISUB of arity1
 | FISUBR of arity1
mb0's avatar
mb0 committed
877
 | FLD of arity1
Julian Kranz's avatar
Julian Kranz committed
878
 | FLD1 of arity0
Julian Kranz's avatar
Julian Kranz committed
879 880
 | FLDCW of arity1
 | FLDENV of arity1
Julian Kranz's avatar
Julian Kranz committed
881 882 883 884 885 886
 | 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
887 888
 | FMUL of arity2
 | FMULP of arity2
Julian Kranz's avatar
Julian Kranz committed
889 890 891
 | FNCLEX of arity0
 | FNINIT of arity0
 | FNOP of arity0
Julian Kranz's avatar
Julian Kranz committed
892 893 894 895
 | FNSAVE of arity1
 | FNSTCW of arity1
 | FNSTENV of arity1
 | FNSTSW of arity1
Julian Kranz's avatar
Julian Kranz committed
896 897 898 899 900
 | FPATAN of arity0
 | FPREM of arity0
 | FPREM1 of arity0
 | FPTAN of arity0
 | FRNDINT of arity0
Julian Kranz's avatar
Julian Kranz committed
901 902
 | FRSTOR of arity1
 | FSAVE of arity1
Julian Kranz's avatar
Julian Kranz committed
903 904 905 906
 | FSCALE of arity0
 | FSIN of arity0
 | FSINCOS of arity0
 | FSQRT of arity0
mb0's avatar
mb0 committed
907
 | FST of arity1
Julian Kranz's avatar
Julian Kranz committed
908
 | FSTCW of arity1
Julian Kranz's avatar
Julian Kranz committed
909
 | FSTENV of arity1
Julian Kranz's avatar
Julian Kranz committed
910
 | FSTP of arity1
Julian Kranz's avatar
Julian Kranz committed
911 912 913 914 915
 | FSTSW of arity1
 | FSUB of arity2
 | FSUBP of arity2
 | FSUBR of arity2
 | FSUBRP of arity2
Julian Kranz's avatar
Julian Kranz committed
916
 | FTST of arity0
Julian Kranz's avatar
Julian Kranz committed
917
 | FUCOM of arity1
Julian Kranz's avatar
Julian Kranz committed
918 919
 | FUCOMI of arity1
 | FUCOMIP of arity1
Julian Kranz's avatar
Julian Kranz committed
920
 | FUCOMP of arity1
Julian Kranz's avatar
Julian Kranz committed
921 922
 | FUCOMPP of arity0
 | FXAM of arity0
Julian Kranz's avatar
Julian Kranz committed
923
 | FXCH of arity1
Julian Kranz's avatar
Julian Kranz committed
924
 | FXRSTOR of arity1
Julian Kranz's avatar
Julian Kranz committed
925
 | FXRSTOR64 of arity1
Julian Kranz's avatar
Julian Kranz committed
926
 | FXSAVE of arity1
Julian Kranz's avatar
Julian Kranz committed
927
 | FXSAVE64 of arity1
Julian Kranz's avatar
Julian Kranz committed
928 929 930
 | FXTRACT of arity0
 | FYL2X of arity0
 | FYL2XP1 of arity0
Julian Kranz's avatar
Julian Kranz committed
931 932
 | HADDPD of arity2
 | HADDPS of arity2
Julian Kranz's avatar
Julian Kranz committed
933
 | HLT of arity0
Julian Kranz's avatar
Julian Kranz committed
934
 | HSUBPD of arity2
Julian Kranz's avatar
Julian Kranz committed
935
 | HSUBPS of arity2
mb0's avatar
mb0 committed
936
 | IDIV of arity1
Julian Kranz's avatar
Julian Kranz committed
937 938
 | IMUL of varity
 | IN of arity2
mb0's avatar
mb0 committed
939
 | INC of arity1
Julian Kranz's avatar
Julian Kranz committed
940 941
 | INSB of arity0
 | INSD of arity0
Julian Kranz's avatar
Julian Kranz committed
942
 | INSERTPS of arity3
Julian Kranz's avatar
Julian Kranz committed
943
 | INSW of arity0
Julian Kranz's avatar
Julian Kranz committed
944
 | INT of arity1
Julian Kranz's avatar
Julian Kranz committed
945 946 947
 | INT0 of arity0
 | INT3 of arity0
 | INVD of arity0
Julian Kranz's avatar
Julian Kranz committed
948
 | INVLPG of arity1
Julian Kranz's avatar
Julian Kranz committed
949
 | INVPCID of arity2
Julian Kranz's avatar
Julian Kranz committed
950 951 952
 | IRET of arity0
 | IRETD of arity0
 | IRETQ of arity0
mb0's avatar
mb0 committed
953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986
 | 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
987
 | LAHF of arity0
Julian Kranz's avatar
Julian Kranz committed
988
 | LAR of arity2
mb0's avatar
mb0 committed
989
 | LDDQU of arity2
Julian Kranz's avatar
Julian Kranz committed
990 991
 | LDMXCSR of arity1
 | LDS of arity2
mb0's avatar
mb0 committed
992
 | LEA of arity2
Julian Kranz's avatar
Julian Kranz committed
993
 | LEAVE of arity0
Julian Kranz's avatar
Julian Kranz committed
994
 | LES of arity2
Julian Kranz's avatar
Julian Kranz committed
995
 | LFENCE of arity0
Julian Kranz's avatar
Julian Kranz committed
996
 | LFS of arity2
Julian Kranz's avatar
Julian Kranz committed
997
 | LGDT of arity1
Julian Kranz's avatar
Julian Kranz committed
998
 | LGS of arity2
Julian Kranz's avatar
Julian Kranz committed
999
 | LIDT of arity1
Julian Kranz's avatar
Julian Kranz committed
1000 1001
 | LLDT of arity1
 | LMSW of arity1
Julian Kranz's avatar
Julian Kranz committed
1002
 | LODS of arity1
Julian Kranz's avatar
Julian Kranz committed
1003 1004 1005 1006
 | LOOP of flow1
 | LOOPE of flow1
 | LOOPNE of flow1
 | LSL of arity2
Julian Kranz's avatar
Julian Kranz committed
1007
 | LSS of arity2
Julian Kranz's avatar
Julian Kranz committed
1008
 | LTR of arity1
Julian Kranz's avatar
Julian Kranz committed
1009
 | MASKMOVDQU of arity3
Julian Kranz's avatar
Julian Kranz committed
1010
 | MASKMOVQ of arity3
mb0's avatar
mb0 committed
1011 1012 1013 1014
 | MAXPD of arity2
 | MAXPS of arity2
 | MAXSD of arity2
 | MAXSS of arity2
Julian Kranz's avatar
Julian Kranz committed
1015
 | MFENCE of arity0
mb0's avatar
mb0 committed
1016 1017 1018 1019
 | MINPD of arity2
 | MINPS of arity2
 | MINSD of arity2
 | MINSS of arity2
Julian Kranz's avatar
Julian Kranz committed
1020
 | MONITOR of arity0
mb0's avatar
mb0 committed
1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045
 | 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
1046 1047
 | MOVS of arity2
 | MOVSD of arity2
mb0's avatar
mb0 committed
1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062
 | 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
1063
 | MWAIT of arity0
mb0's avatar
mb0 committed
1064 1065 1066 1067 1068 1069 1070
 | 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
1071 1072 1073 1074
 | OUTS of arity0
 | OUTSB of arity0
 | OUTSD of arity0
 | OUTSW of arity0
Julian Kranz's avatar
Julian Kranz committed
1075 1076
 | PABSB of arity2
 | PABSD of arity2
Julian Kranz's avatar
Julian Kranz committed
1077
 | PABSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1078
 | PACKSSDW of arity2
Julian Kranz's avatar
Julian Kranz committed
1079
 | PACKSSWB of arity2
Julian Kranz's avatar
Julian Kranz committed
1080
 | PACKUSDW of arity2
Julian Kranz's avatar
Julian Kranz committed
1081
 | PACKUSWB of arity2
Julian Kranz's avatar
Julian Kranz committed
1082 1083
 | PADDB of arity2
 | PADDD of arity2
Julian Kranz's avatar
Julian Kranz committed
1084
 | PADDQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1085 1086
 | PADDSB of arity2
 | PADDSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1087 1088
 | PADDUSB of arity2
 | PADDUSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1089
 | PADDW of arity2
mb0's avatar
mb0 committed
1090 1091
 | PALIGNR of arity3
 | PAND of arity2
Julian Kranz's avatar
Julian Kranz committed
1092
 | PANDN of arity2
Julian Kranz's avatar
Julian Kranz committed
1093
 | PAUSE of arity0
Julian Kranz's avatar
Julian Kranz committed
1094 1095
 | PAVGB of arity2
 | PAVGW of arity2
Julian Kranz's avatar
Julian Kranz committed
1096
 | PBLENDVB of arity2
Julian Kranz's avatar
Julian Kranz committed
1097
 | PBLENDW of arity3
Julian Kranz's avatar
Julian Kranz committed
1098
 | PCLMULQDQ of arity3
mb0's avatar
mb0 committed
1099 1100 1101 1102 1103
 | PCMPEQB of arity2
 | PCMPEQD of arity2
 | PCMPEQQ of arity2
 | PCMPEQW of arity2
 | PCMPESTRI of arity3
Julian Kranz's avatar
Julian Kranz committed
1104
 | PCMPESTRM of arity3
mb0's avatar
mb0 committed
1105 1106 1107
 | PCMPGRD of arity2
 | PCMPGTB of arity2
 | PCMPGTD of arity2
Julian Kranz's avatar
Julian Kranz committed
1108
 | PCMPGTQ of arity2
Julian Kranz's avatar
Julian Kranz committed
1109
 | PCMPGTW of arity2
mb0's avatar
mb0 committed
1110
 | PCMPISTRI of arity3
Julian Kranz's avatar
Julian Kranz committed
1111
 | PCMPISTRM of arity3
Julian Kranz's avatar
Julian Kranz committed
1112 1113 1114
 | PEXTRB of arity3
 | PEXTRD of arity3
 | PEXTRQ of arity3
Julian Kranz's avatar
Julian Kranz committed
1115
 | PEXTRW of arity3
mb0's avatar
mb0 committed
1116
 | PHADDD of arity2
Julian Kranz's avatar
Julian Kranz committed
1117
 | PHADDSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1118
 | PHADDW of arity2
Julian Kranz's avatar
Julian Kranz committed
1119
 | PHMINPOSUW of arity2
Julian Kranz's avatar
Julian Kranz committed
1120
 | PHSUBD of arity2
Julian Kranz's avatar
Julian Kranz committed
1121
 | PHSUBSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1122
 | PHSUBW of arity2
mb0's avatar
mb0 committed
1123 1124 1125
 | PINSRB of arity3
 | PINSRD of arity3
 | PINSRQ of arity3
Julian Kranz's avatar
Julian Kranz committed
1126
 | PINSRW of arity3
Julian Kranz's avatar
Julian Kranz committed
1127
 | PMADDUBSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1128 1129
 | PMADDWD of arity2
 | PMAXSB of arity2
Julian Kranz's avatar
Julian Kranz committed
1130
 | PMAXSD of arity2
Julian Kranz's avatar
Julian Kranz committed
1131
 | PMAXSW of arity2
Julian Kranz's avatar
Julian Kranz committed
1132
 | PMAXUB of arity2