-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathasm-x86.k
621 lines (621 loc) · 45.6 KB
/
asm-x86.k
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
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
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
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
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
(load "asm-common.k")
(define-constant _b00 0)
(define-constant _b01 1)
(define-constant _b10 2)
(define-constant _b11 3)
(define-constant _b000 0)
(define-constant _b001 1)
(define-constant _b010 2)
(define-constant _b011 3)
(define-constant _b100 4)
(define-constant _b101 5)
(define-constant _b110 6)
(define-constant _b111 7)
(define-constant _AL 16)
(define-constant _CL 17)
(define-constant _DL 18)
(define-constant _BL 19)
(define-constant _AH 20)
(define-constant _CH 21)
(define-constant _DH 22)
(define-constant _BH 23)
(define-constant _AX 32)
(define-constant _CX 33)
(define-constant _DX 34)
(define-constant _BX 35)
(define-constant _SP 36)
(define-constant _BP 37)
(define-constant _SI 38)
(define-constant _DI 39)
(define-constant _EAX 64)
(define-constant _ECX 65)
(define-constant _EDX 66)
(define-constant _EBX 67)
(define-constant _ESP 68)
(define-constant _EBP 69)
(define-constant _ESI 70)
(define-constant _EDI 71)
(define-function _rS (R) (>> R 4))
(define-function _rN (R) (& R 7))
(define-function _r0P (R) (== R 0))
(define-function _rLP (R) (and (>= R _AL) (<= R _BL)))
(define-function _rHP (R) (and (>= R _AH) (<= R _BH)))
(define-function _r1P (R) (== (_rS R) 1))
(define-function _r2P (R) (== (_rS R) 2))
(define-function _r4P (R) (== (_rS R) 4))
(define-function _rL (R) (if (_rLP R) (_rN R) (ASMFAIL "8-bit L register required")))
(define-function _rH (R) (if (_rHP R) (_rN R) (ASMFAIL "8-bit H register required")))
(define-function _r1 (R) (if (_r1P R) (_rN R) (ASMFAIL "8-bit register required")))
(define-function _r2 (R) (if (_r2P R) (_rN R) (ASMFAIL "16-bit register required")))
(define-function _r4 (R) (if (_r4P R) (_rN R) (ASMFAIL "32-bit register required")))
(define-function _rAL (R) (if (== R _AL) (_rN R) (ASMFAIL "AL register required")))
(define-function _rAX (R) (if (== R _AX) (_rN R) (ASMFAIL "AX register required")))
(define-function _rEAX (R) (if (== R _EAX) (_rN R) (ASMFAIL "EAX register required")))
(define-function _u1P (I) (== (& I -256) 0))
(define-function _u2P (I) (== (& I -65536) 0))
(define-function _s1 (I) (if (_s1P I) I (ASMFAIL "8-bit signed immediate required")))
(define-function _s2 (I) (if (_s2P I) I (ASMFAIL "16-bit signed immediate required")))
(define-function _u1 (I) (if (_u1P I) I (ASMFAIL "8-bit unsigned immediate required")))
(define-function _u2 (I) (if (_u2P I) I (ASMFAIL "16-bit unsigned immediate required")))
(define-function _d1 (I) (if (_s1P I) I (ASMFAIL "8-bit displacement out of range")))
(define-function _M (M) (if (> M 3) (ASMFAIL "internal error: mod = ") M))
(define-function _r (R) (if (> R 7) (ASMFAIL "internal error: reg = ") R))
(define-function _m (M) (if (> M 7) (ASMFAIL "internal error: r/m = ") M))
(define-function _s (S) (if (> S 3) (ASMFAIL "internal error: memory scale = ") S))
(define-function _i (I) (if (> I 7) (ASMFAIL "internal error: memory index = ") I))
(define-function _b (B) (if (> B 7) (ASMFAIL "internal error: memory base = ") B))
(define-function _Mrm (X Md R M) (_B X (| (<< (_M Md) 6) (| (<< (_r R) 3) (_m M)))))
(define-function _SIB (X Sc I B) (_B X (| (<< (_s Sc) 6) (| (<< (_i I) 3) (_b B)))))
(define-function _SCL (S) (if (== S 1) _b00 (if (== S 2) _b01 (if (== S 4) _b10 (if (== S 8) _b11 (ASMFAIL "illegal scale: "))))))
(define-function _r_D (X R D) (let () (_Mrm X _b00 (_rN R) _b101) (_L X D)))
(define-function _r_0B (X R B) (_Mrm X _b00 (_rN R) (_r4 B)))
(define-function _r_0BIS (X R B I S) (let () (_Mrm X _b00 (_rN R) _b100) (_SIB X (_SCL S) (_r4 I) (_r4 B))))
(define-function _r_0DIS (X R D I S) (let () (_Mrm X _b00 (_rN R) _b100) (_SIB X (_SCL S) (_r4 I) 5) (_L X D)))
(define-function _r_1B (X R D B) (let () (_Mrm X _b01 (_rN R) (_r4 B)) (_B X D)))
(define-function _r_1BIS (X R D B I S) (let () (_Mrm X _b01 (_rN R) _b100) (_SIB X (_SCL S) (_r4 I) (_r4 B)) (_B X D)))
(define-function _r_4B (X R D B) (let () (_Mrm X _b10 (_rN R) (_r4 B)) (_L X D)))
(define-function _r_4BIS (X R D B I S) (let () (_Mrm X _b10 (_rN R) _b100) (_SIB X (_SCL S) (_r4 I) (_r4 B)) (_L X D)))
(define-function _r_DB (X R D B) (if (_s0P D) (_r_0B X R B) (if (_s1P D) (_r_1B X R D B) (_r_4B X R D B))))
(define-function _r_DBIS (X R D B I S) (if (_s0P D) (_r_0BIS X R B I S) (if (_s1P D) (_r_1BIS X R D B I S) (_r_4BIS X R D B I S))))
(define-function _r_X (X R D B I S) (if (_r0P I) (if (_r0P B) (_r_D X R D) (if (== _ESP B) (_r_DBIS X R D _ESP _ESP 1) (_r_DB X R D B))) (if (_r0P B) (_r_0DIS X R D I S) (if (!= I _ESP) (_r_DBIS X R D B I S) (ASMFAIL "illegal index register: %esp")))))
(define-function _d16 (X) (_B X 102))
(define-function _O (X OP) (_B X OP))
(define-function _Or (X OP R) (_B X (| OP (_r R))))
(define-function _OO (X OP) (let () (_B X (>> OP 8)) (_B X OP)))
(define-function _OOr (X OP R) (let () (_B X (>> OP 8)) (_B X (| OP (_r R)))))
(define-function _Os (X OP B) (if (_s1P B) (_B X (| OP _b10)) (_B X OP)))
(define-function _sW (X W) (if (_s1P W) (_B X W) (_W X W)))
(define-function _sL (X L) (if (_s1P L) (_B X L) (_L X L)))
(define-function _O_B (X OP B) (let () (_O X OP) (_B X B)))
(define-function _O_W (X OP W) (let () (_O X OP) (_W X W)))
(define-function _O_L (X OP L) (let () (_O X OP) (_L X L)))
(define-function _O_D1 (X OP D) (let () (_O X OP) (_D1 X D)))
(define-function _O_D4 (X OP D) (let () (_O X OP) (_D4 X D)))
(define-function _OO_D4 (X OP D) (let () (_OO X OP) (_D4 X D)))
(define-function _Os_sW (X OP W) (let () (_Os X OP W) (_sW X W)))
(define-function _Os_sL (X OP L) (let () (_Os X OP L) (_sL X L)))
(define-function _O_W_B (X OP W B) (let () (_O X OP) (_W X W) (_B X B)))
(define-function _Or_B (X OP R B) (let () (_Or X OP R) (_B X B)))
(define-function _Or_W (X OP R W) (let () (_Or X OP R) (_W X W)))
(define-function _Or_L (X OP R L) (let () (_Or X OP R) (_L X L)))
(define-function _O_Mrm (X OP MO R M) (let () (_O X OP) (_Mrm X MO R M)))
(define-function _OO_Mrm (X OP MO R M) (let () (_OO X OP) (_Mrm X MO R M)))
(define-function _O_Mrm_B (X OP MO R M B) (let () (_O X OP) (_Mrm X MO R M) (_B X B)))
(define-function _O_Mrm_W (X OP MO R M W) (let () (_O X OP) (_Mrm X MO R M) (_W X W)))
(define-function _O_Mrm_L (X OP MO R M L) (let () (_O X OP) (_Mrm X MO R M) (_L X L)))
(define-function _OO_Mrm_B (X OP MO R M B) (let () (_OO X OP) (_Mrm X MO R M) (_B X B)))
(define-function _Os_Mrm_sW (X OP MO R M W) (let () (_Os X OP W) (_Mrm X MO R M) (_sW X W)))
(define-function _Os_Mrm_sL (X OP MO R M L) (let () (_Os X OP L) (_Mrm X MO R M) (_sL X L)))
(define-function _O_r_X (X OP R MD MB MI MS) (let () (_O X OP) (_r_X X R MD MB MI MS)))
(define-function _OO_r_X (X OP R MD MB MI MS) (let () (_OO X OP) (_r_X X R MD MB MI MS)))
(define-function _O_r_X_B (X OP R MD MB MI MS B) (let () (_O X OP) (_r_X X R MD MB MI MS) (_B X B)))
(define-function _O_r_X_W (X OP R MD MB MI MS W) (let () (_O X OP) (_r_X X R MD MB MI MS) (_W X W)))
(define-function _O_r_X_L (X OP R MD MB MI MS L) (let () (_O X OP) (_r_X X R MD MB MI MS) (_L X L)))
(define-function _OO_r_X_B (X OP R MD MB MI MS B) (let () (_OO X OP) (_r_X X R MD MB MI MS) (_B X B)))
(define-function _Os_r_X_sW (X OP R MD MB MI MS W) (let () (_Os X OP W) (_r_X X R MD MB MI MS) (_sW X W)))
(define-function _Os_r_X_sL (X OP R MD MB MI MS L) (let () (_Os X OP L) (_r_X X R MD MB MI MS) (_sL X L)))
(define-function _O_X_B (X OP MD MB MI MS B) (_O_r_X_B X OP 0 MD MB MI MS B))
(define-function _O_X_W (X OP MD MB MI MS W) (_O_r_X_W X OP 0 MD MB MI MS W))
(define-function _O_X_L (X OP MD MB MI MS L) (_O_r_X_L X OP 0 MD MB MI MS L))
(define-function _wO (X OP) (let () (_d16 X) (_O X OP)))
(define-function _wOr (X OP R) (let () (_d16 X) (_Or X OP R)))
(define-function _wOr_W (X OP R W) (let () (_d16 X) (_Or_W X OP R W)))
(define-function _wOs_sW (X OP W) (let () (_d16 X) (_Os_sW X OP W)))
(define-function _wO_Mrm (X OP MO R M) (let () (_d16 X) (_O_Mrm X OP MO R M)))
(define-function _wOO_Mrm (X OP MO R M) (let () (_d16 X) (_OO_Mrm X OP MO R M)))
(define-function _wO_Mrm_B (X OP MO R M B) (let () (_d16 X) (_O_Mrm_B X OP MO R M B)))
(define-function _wOO_Mrm_B (X OP MO R M B) (let () (_d16 X) (_OO_Mrm_B X OP MO R M B)))
(define-function _wO_Mrm_W (X OP MO R M W) (let () (_d16 X) (_O_Mrm_W X OP MO R M W)))
(define-function _wOs_Mrm_sW (X OP MO R M W) (let () (_d16 X) (_Os_Mrm_sW X OP MO R M W)))
(define-function _wO_X_W (X OP MD MB MI MS W) (let () (_d16 X) (_O_X_W X OP MD MB MI MS W)))
(define-function _wO_r_X (X OP R MD MB MI MS) (let () (_d16 X) (_O_r_X X OP R MD MB MI MS)))
(define-function _wOO_r_X (X OP R MD MB MI MS) (let () (_d16 X) (_OO_r_X X OP R MD MB MI MS)))
(define-function _wO_r_X_B (X OP R MD MB MI MS B) (let () (_d16 X) (_O_r_X_B X OP R MD MB MI MS B)))
(define-function _wOO_r_X_B (X OP R MD MB MI MS B) (let () (_d16 X) (_OO_r_X_B X OP R MD MB MI MS B)))
(define-function _wO_r_X_W (X OP R MD MB MI MS W) (let () (_d16 X) (_O_r_X_W X OP R MD MB MI MS W)))
(define-function _wOs_r_X_sW (X OP R MD MB MI MS W) (let () (_d16 X) (_Os_r_X_sW X OP R MD MB MI MS W)))
(define-function ADCBrr (X RS RD) (_O_Mrm X 16 _b11 (_r1 RS) (_r1 RD)))
(define-function ADCBmr (X MD MB MI MS RD) (_O_r_X X 18 (_r1 RD) MD MB MI MS))
(define-function ADCBrm (X RS MD MB MI MS) (_O_r_X X 16 (_r1 RS) MD MB MI MS))
(define-function ADCBir (X IM RD) (_O_Mrm_B X 128 _b11 _b010 (_r1 RD) (_s1 IM)))
(define-function ADCBim (X IM MD MB MI MS) (_O_r_X_B X 128 _b010 MD MB MI MS (_s1 IM)))
(define-function ADCWrr (X RS RD) (_wO_Mrm X 17 _b11 (_r2 RS) (_r2 RD)))
(define-function ADCWmr (X MD MB MI MS RD) (_wO_r_X X 19 (_r2 RD) MD MB MI MS))
(define-function ADCWrm (X RS MD MB MI MS) (_wO_r_X X 17 (_r2 RS) MD MB MI MS))
(define-function ADCWir (X IM RD) (_wOs_Mrm_sW X 129 _b11 _b010 (_r2 RD) (_s2 IM)))
(define-function ADCWim (X IM MD MB MI MS) (_wOs_r_X_sW X 129 _b010 MD MB MI MS (_s2 IM)))
(define-function ADCLrr (X RS RD) (_O_Mrm X 17 _b11 (_r4 RS) (_r4 RD)))
(define-function ADCLmr (X MD MB MI MS RD) (_O_r_X X 19 (_r4 RD) MD MB MI MS))
(define-function ADCLrm (X RS MD MB MI MS) (_O_r_X X 17 (_r4 RS) MD MB MI MS))
(define-function ADCLir (X IM RD) (_Os_Mrm_sL X 129 _b11 _b010 (_r4 RD) IM))
(define-function ADCLim (X IM MD MB MI MS) (_Os_r_X_sL X 129 _b010 MD MB MI MS IM))
(define-function ADDBrr (X RS RD) (_O_Mrm X 0 _b11 (_r1 RS) (_r1 RD)))
(define-function ADDBmr (X MD MB MI MS RD) (_O_r_X X 2 (_r1 RD) MD MB MI MS))
(define-function ADDBrm (X RS MD MB MI MS) (_O_r_X X 0 (_r1 RS) MD MB MI MS))
(define-function ADDBir (X IM RD) (_O_Mrm_B X 128 _b11 _b000 (_r1 RD) (_s1 IM)))
(define-function ADDBim (X IM MD MB MI MS) (_O_r_X_B X 128 _b000 MD MB MI MS (_s1 IM)))
(define-function ADDWrr (X RS RD) (_wO_Mrm X 1 _b11 (_r2 RS) (_r2 RD)))
(define-function ADDWmr (X MD MB MI MS RD) (_wO_r_X X 3 (_r2 RD) MD MB MI MS))
(define-function ADDWrm (X RS MD MB MI MS) (_wO_r_X X 1 (_r2 RS) MD MB MI MS))
(define-function ADDWir (X IM RD) (_wOs_Mrm_sW X 129 _b11 _b000 (_r2 RD) (_s2 IM)))
(define-function ADDWim (X IM MD MB MI MS) (_wOs_r_X_sW X 129 _b000 MD MB MI MS (_s2 IM)))
(define-function ADDLrr (X RS RD) (_O_Mrm X 1 _b11 (_r4 RS) (_r4 RD)))
(define-function ADDLmr (X MD MB MI MS RD) (_O_r_X X 3 (_r4 RD) MD MB MI MS))
(define-function ADDLrm (X RS MD MB MI MS) (_O_r_X X 1 (_r4 RS) MD MB MI MS))
(define-function ADDLir (X IM RD) (_Os_Mrm_sL X 129 _b11 _b000 (_r4 RD) IM))
(define-function ADDLim (X IM MD MB MI MS) (_Os_r_X_sL X 129 _b000 MD MB MI MS IM))
(define-function ANDBrr (X RS RD) (_O_Mrm X 32 _b11 (_r1 RS) (_r1 RD)))
(define-function ANDBmr (X MD MB MI MS RD) (_O_r_X X 34 (_r1 RD) MD MB MI MS))
(define-function ANDBrm (X RS MD MB MI MS) (_O_r_X X 32 (_r1 RS) MD MB MI MS))
(define-function ANDBir (X IM RD) (_O_Mrm_B X 128 _b11 _b100 (_r1 RD) (_s1 IM)))
(define-function ANDBim (X IM MD MB MI MS) (_O_r_X_B X 128 _b100 MD MB MI MS (_s1 IM)))
(define-function ANDWrr (X RS RD) (_wO_Mrm X 33 _b11 (_r2 RS) (_r2 RD)))
(define-function ANDWmr (X MD MB MI MS RD) (_wO_r_X X 35 (_r2 RD) MD MB MI MS))
(define-function ANDWrm (X RS MD MB MI MS) (_wO_r_X X 33 (_r2 RS) MD MB MI MS))
(define-function ANDWir (X IM RD) (_wOs_Mrm_sW X 129 _b11 _b100 (_r2 RD) (_s2 IM)))
(define-function ANDWim (X IM MD MB MI MS) (_wOs_r_X_sW X 129 _b100 MD MB MI MS (_s2 IM)))
(define-function ANDLrr (X RS RD) (_O_Mrm X 33 _b11 (_r4 RS) (_r4 RD)))
(define-function ANDLmr (X MD MB MI MS RD) (_O_r_X X 35 (_r4 RD) MD MB MI MS))
(define-function ANDLrm (X RS MD MB MI MS) (_O_r_X X 33 (_r4 RS) MD MB MI MS))
(define-function ANDLir (X IM RD) (_Os_Mrm_sL X 129 _b11 _b100 (_r4 RD) IM))
(define-function ANDLim (X IM MD MB MI MS) (_Os_r_X_sL X 129 _b100 MD MB MI MS IM))
(define-function BSWAPLr (X R) (_OOr X 4040 (_r4 R)))
(define-function BTWir (X IM RD) (_wOO_Mrm_B X 4026 _b11 _b100 (_r2 RD) (_u1 IM)))
(define-function BTWim (X IM MD MB MI MS) (_wOO_r_X_B X 4026 _b100 MD MB MI MS (_u1 IM)))
(define-function BTWrr (X RS RD) (_wOO_Mrm X 4003 _b11 (_r2 RS) (_r2 RD)))
(define-function BTWrm (X RS MD MB MI MS) (_wOO_r_X X 4003 (_r2 RS) MD MB MI MS))
(define-function BTLir (X IM RD) (_OO_Mrm_B X 4026 _b11 _b100 (_r4 RD) (_u1 IM)))
(define-function BTLim (X IM MD MB MI MS) (_OO_r_X_B X 4026 _b100 MD MB MI MS (_u1 IM)))
(define-function BTLrr (X RS RD) (_OO_Mrm X 4003 _b11 (_r4 RS) (_r4 RD)))
(define-function BTLrm (X RS MD MB MI MS) (_OO_r_X X 4003 (_r4 RS) MD MB MI MS))
(define-function BTCWir (X IM RD) (_wOO_Mrm_B X 4026 _b11 _b111 (_r2 RD) (_u1 IM)))
(define-function BTCWim (X IM MD MB MI MS) (_wOO_r_X_B X 4026 _b111 MD MB MI MS (_u1 IM)))
(define-function BTCWrr (X RS RD) (_wOO_Mrm X 4027 _b11 (_r2 RS) (_r2 RD)))
(define-function BTCWrm (X RS MD MB MI MS) (_wOO_r_X X 4027 (_r2 RS) MD MB MI MS))
(define-function BTCLir (X IM RD) (_OO_Mrm_B X 4026 _b11 _b111 (_r4 RD) (_u1 IM)))
(define-function BTCLim (X IM MD MB MI MS) (_OO_r_X_B X 4026 _b111 MD MB MI MS (_u1 IM)))
(define-function BTCLrr (X RS RD) (_OO_Mrm X 4027 _b11 (_r4 RS) (_r4 RD)))
(define-function BTCLrm (X RS MD MB MI MS) (_OO_r_X X 4027 (_r4 RS) MD MB MI MS))
(define-function BTRWir (X IM RD) (_wOO_Mrm_B X 4026 _b11 _b110 (_r2 RD) (_u1 IM)))
(define-function BTRWim (X IM MD MB MI MS) (_wOO_r_X_B X 4026 _b110 MD MB MI MS (_u1 IM)))
(define-function BTRWrr (X RS RD) (_wOO_Mrm X 4019 _b11 (_r2 RS) (_r2 RD)))
(define-function BTRWrm (X RS MD MB MI MS) (_wOO_r_X X 4019 (_r2 RS) MD MB MI MS))
(define-function BTRLir (X IM RD) (_OO_Mrm_B X 4026 _b11 _b110 (_r4 RD) (_u1 IM)))
(define-function BTRLim (X IM MD MB MI MS) (_OO_r_X_B X 4026 _b110 MD MB MI MS (_u1 IM)))
(define-function BTRLrr (X RS RD) (_OO_Mrm X 4019 _b11 (_r4 RS) (_r4 RD)))
(define-function BTRLrm (X RS MD MB MI MS) (_OO_r_X X 4019 (_r4 RS) MD MB MI MS))
(define-function BTSWir (X IM RD) (_wOO_Mrm_B X 4026 _b11 _b101 (_r2 RD) (_u1 IM)))
(define-function BTSWim (X IM MD MB MI MS) (_wOO_r_X_B X 4026 _b101 MD MB MI MS (_u1 IM)))
(define-function BTSWrr (X RS RD) (_wOO_Mrm X 4011 _b11 (_r2 RS) (_r2 RD)))
(define-function BTSWrm (X RS MD MB MI MS) (_wOO_r_X X 4011 (_r2 RS) MD MB MI MS))
(define-function BTSLir (X IM RD) (_OO_Mrm_B X 4026 _b11 _b101 (_r4 RD) (_u1 IM)))
(define-function BTSLim (X IM MD MB MI MS) (_OO_r_X_B X 4026 _b101 MD MB MI MS (_u1 IM)))
(define-function BTSLrr (X RS RD) (_OO_Mrm X 4011 _b11 (_r4 RS) (_r4 RD)))
(define-function BTSLrm (X RS MD MB MI MS) (_OO_r_X X 4011 (_r4 RS) MD MB MI MS))
(define-function CALLm (X MD MB MI MS) (let () (if (and (_r0P MB) (_r0P MI)) (_O_D4 X 232 MD) (if (_r0P MI) (_O_Mrm X 255 _b11 _b010 (_r4 MB)) (_O_r_X X 255 _b010 MD MB MI MS)))))
(define-function CBW (X) (_O X 152))
(define-function CLC (X) (_O X 248))
(define-function CLTD (X) (_O X 153))
(define-function CMC (X) (_O X 245))
(define-function CMPBrr (X RS RD) (_O_Mrm X 56 _b11 (_r1 RS) (_r1 RD)))
(define-function CMPBmr (X MD MB MI MS RD) (_O_r_X X 58 (_r1 RD) MD MB MI MS))
(define-function CMPBrm (X RS MD MB MI MS) (_O_r_X X 56 (_r1 RS) MD MB MI MS))
(define-function CMPBir (X IM RD) (_O_Mrm_B X 128 _b11 _b111 (_r1 RD) (_s1 IM)))
(define-function CMPBim (X IM MD MB MI MS) (_O_r_X_B X 128 _b111 MD MB MI MS (_s1 IM)))
(define-function CMPWrr (X RS RD) (_wO_Mrm X 57 _b11 (_r2 RS) (_r2 RD)))
(define-function CMPWmr (X MD MB MI MS RD) (_wO_r_X X 59 (_r2 RD) MD MB MI MS))
(define-function CMPWrm (X RS MD MB MI MS) (_wO_r_X X 57 (_r2 RS) MD MB MI MS))
(define-function CMPWir (X IM RD) (_wOs_Mrm_sW X 129 _b11 _b111 (_r2 RD) (_s2 IM)))
(define-function CMPWim (X IM MD MB MI MS) (_wOs_r_X_sW X 129 _b111 MD MB MI MS (_s2 IM)))
(define-function CMPLrr (X RS RD) (_O_Mrm X 57 _b11 (_r4 RS) (_r4 RD)))
(define-function CMPLmr (X MD MB MI MS RD) (_O_r_X X 59 (_r4 RD) MD MB MI MS))
(define-function CMPLrm (X RS MD MB MI MS) (_O_r_X X 57 (_r4 RS) MD MB MI MS))
(define-function CMPLir (X IM RD) (_O_Mrm_L X 129 _b11 _b111 (_r4 RD) IM))
(define-function CMPLim (X IM MD MB MI MS) (_O_r_X_L X 129 _b111 MD MB MI MS IM))
(define-function CWD (X) (_O X 153))
(define-function CMPXCHGBrr (X RS RD) (_OO_Mrm X 4016 _b11 (_r1 RS) (_r1 RD)))
(define-function CMPXCHGBrm (X RS MD MB MI MS) (_OO_r_X X 4016 (_r1 RS) MD MB MI MS))
(define-function CMPXCHGWrr (X RS RD) (_wOO_Mrm X 4017 _b11 (_r2 RS) (_r2 RD)))
(define-function CMPXCHGWrm (X RS MD MB MI MS) (_wOO_r_X X 4017 (_r2 RS) MD MB MI MS))
(define-function CMPXCHGLrr (X RS RD) (_OO_Mrm X 4017 _b11 (_r4 RS) (_r4 RD)))
(define-function CMPXCHGLrm (X RS MD MB MI MS) (_OO_r_X X 4017 (_r4 RS) MD MB MI MS))
(define-function DECBr (X RD) (_O_Mrm X 254 _b11 _b001 (_r1 RD)))
(define-function DECBm (X MD MB MI MS) (_O_r_X X 254 _b001 MD MB MI MS))
(define-function DECWr (X RD) (_wOr X 72 (_r2 RD)))
(define-function DECWm (X MD MB MI MS) (_wO_r_X X 255 _b001 MD MB MI MS))
(define-function DECLr (X RD) (_Or X 72 (_r4 RD)))
(define-function DECLm (X MD MB MI MS) (_O_r_X X 255 _b001 MD MB MI MS))
(define-function DIVBrr (X RS RD) (+ (_rAL RD) (_O_Mrm X 246 _b11 _b110 (_r1 RS))))
(define-function DIVBmr (X MD MB MI MS RD) (+ (_rAL RD) (_O_r_X X 246 _b110 MD MB MI MS)))
(define-function DIVWrr (X RS RD) (+ (_rAX RD) (_wO_Mrm X 247 _b11 _b110 (_r2 RS))))
(define-function DIVWmr (X MD MB MI MS RD) (+ (_rAX RD) (_wO_r_X X 247 _b110 MD MB MI MS)))
(define-function DIVLrr (X RS RD) (+ (_rEAX RD) (_O_Mrm X 247 _b11 _b110 (_r4 RS))))
(define-function DIVLmr (X MD MB MI MS RD) (+ (_rEAX RD) (_O_r_X X 247 _b110 MD MB MI MS)))
(define-function ENTERii (X W B) (_O_W_B X 200 (_s2 W) (_s1 B)))
(define-function HLT (X) (_O X 244))
(define-function IDIVBrr (X RS RD) (+ (_rAL RD) (_O_Mrm X 246 _b11 _b111 (_r1 RS))))
(define-function IDIVBmr (X MD MB MI MS RD) (+ (_rAL RD) (_O_r_X X 246 _b111 MD MB MI MS)))
(define-function IDIVWrr (X RS RD) (+ (_rAX RD) (_wO_Mrm X 247 _b11 _b111 (_r2 RS))))
(define-function IDIVWmr (X MD MB MI MS RD) (+ (_rAX RD) (_wO_r_X X 247 _b111 MD MB MI MS)))
(define-function IDIVLrr (X RS RD) (+ (_rEAX RD) (_O_Mrm X 247 _b11 _b111 (_r4 RS))))
(define-function IDIVLmr (X MD MB MI MS RD) (+ (_rEAX RD) (_O_r_X X 247 _b111 MD MB MI MS)))
(define-function IMULWrr (X RS RD) (_wOO_Mrm X 4015 _b11 (_r2 RS) (_r2 RD)))
(define-function IMULWmr (X MD MB MI MS RD) (_wOO_r_X X 4015 (_r2 RD) MD MB MI MS))
(define-function IMULWirr (X IM RS RD) (_wOs_Mrm_sW X 105 _b11 (_r2 RS) (_r2 RD) IM))
(define-function IMULWimr (X IM MD MB MI MS RD) (_wOs_r_X_sW X 105 (_r2 RD) MD MB MI MS IM))
(define-function IMULLrr (X RS RD) (_OO_Mrm X 4015 _b11 (_r4 RD) (_r4 RS)))
(define-function IMULLmr (X MD MB MI MS RD) (_OO_r_X X 4015 (_r4 RD) MD MB MI MS))
(define-function IMULLirr (X IM RS RD) (_Os_Mrm_sL X 105 _b11 (_r4 RS) (_r4 RD) IM))
(define-function IMULLimr (X IM MD MB MI MS RD) (_Os_r_X_sL X 105 (_r4 RD) MD MB MI MS IM))
(define-function INCBr (X RD) (_O_Mrm X 254 _b11 _b000 (_r1 RD)))
(define-function INCBm (X MD MB MI MS) (_O_r_X X 254 _b000 MD MB MI MS))
(define-function INCWr (X RD) (_wOr X 64 (_r2 RD)))
(define-function INCWm (X MD MB MI MS) (_wO_r_X X 255 _b000 MD MB MI MS))
(define-function INCLr (X RD) (_Or X 64 (_r4 RD)))
(define-function INCLm (X MD MB MI MS) (_O_r_X X 255 _b000 MD MB MI MS))
(define-function INTi (X IM) (_O_B X 0xCD IM))
(define-function INVD (X) (_OO X 3848))
(define-function INVLPGm (X MD MB MI MS) (_OO_r_X X 3841 _b111 MD MB MI MS))
(define-function JCCSim (X CC D B I S) (if (and (_r0P B) (_r0P I)) (_O_D1 X (| 112 CC) D) (ASMFAIL "illegal mode in conditional jump")))
(define-function JOSm (X D B I S) (JCCSim X 0 D B I S))
(define-function JNOSm (X D B I S) (JCCSim X 1 D B I S))
(define-function JBSm (X D B I S) (JCCSim X 2 D B I S))
(define-function JNAESm (X D B I S) (JCCSim X 2 D B I S))
(define-function JNBSm (X D B I S) (JCCSim X 3 D B I S))
(define-function JAESm (X D B I S) (JCCSim X 3 D B I S))
(define-function JESm (X D B I S) (JCCSim X 4 D B I S))
(define-function JZSm (X D B I S) (JCCSim X 4 D B I S))
(define-function JNESm (X D B I S) (JCCSim X 5 D B I S))
(define-function JNZSm (X D B I S) (JCCSim X 5 D B I S))
(define-function JBESm (X D B I S) (JCCSim X 6 D B I S))
(define-function JNASm (X D B I S) (JCCSim X 6 D B I S))
(define-function JNBESm (X D B I S) (JCCSim X 7 D B I S))
(define-function JASm (X D B I S) (JCCSim X 7 D B I S))
(define-function JSSm (X D B I S) (JCCSim X 8 D B I S))
(define-function JNSSm (X D B I S) (JCCSim X 9 D B I S))
(define-function JPSm (X D B I S) (JCCSim X 10 D B I S))
(define-function JPESm (X D B I S) (JCCSim X 10 D B I S))
(define-function JNPSm (X D B I S) (JCCSim X 11 D B I S))
(define-function JPOSm (X D B I S) (JCCSim X 11 D B I S))
(define-function JLSm (X D B I S) (JCCSim X 12 D B I S))
(define-function JNGESm (X D B I S) (JCCSim X 12 D B I S))
(define-function JNLSm (X D B I S) (JCCSim X 13 D B I S))
(define-function JGESm (X D B I S) (JCCSim X 13 D B I S))
(define-function JLESm (X D B I S) (JCCSim X 14 D B I S))
(define-function JNGSm (X D B I S) (JCCSim X 14 D B I S))
(define-function JNLESm (X D B I S) (JCCSim X 15 D B I S))
(define-function JGSm (X D B I S) (JCCSim X 15 D B I S))
(define-function JCCim (X CC D B I S) (if (and (_r0P B) (_r0P I)) (_OO_D4 X (| 3968 CC) D) (ASMFAIL "illegal mode in conditional jump")))
(define-function JOm (X D B I S) (JCCim X 0 D B I S))
(define-function JNOm (X D B I S) (JCCim X 1 D B I S))
(define-function JBm (X D B I S) (JCCim X 2 D B I S))
(define-function JNAEm (X D B I S) (JCCim X 2 D B I S))
(define-function JNBm (X D B I S) (JCCim X 3 D B I S))
(define-function JAEm (X D B I S) (JCCim X 3 D B I S))
(define-function JEm (X D B I S) (JCCim X 4 D B I S))
(define-function JZm (X D B I S) (JCCim X 4 D B I S))
(define-function JNEm (X D B I S) (JCCim X 5 D B I S))
(define-function JNZm (X D B I S) (JCCim X 5 D B I S))
(define-function JBEm (X D B I S) (JCCim X 6 D B I S))
(define-function JNAm (X D B I S) (JCCim X 6 D B I S))
(define-function JNBEm (X D B I S) (JCCim X 7 D B I S))
(define-function JAm (X D B I S) (JCCim X 7 D B I S))
(define-function JSm (X D B I S) (JCCim X 8 D B I S))
(define-function JNSm (X D B I S) (JCCim X 9 D B I S))
(define-function JPm (X D B I S) (JCCim X 10 D B I S))
(define-function JPEm (X D B I S) (JCCim X 10 D B I S))
(define-function JNPm (X D B I S) (JCCim X 11 D B I S))
(define-function JPOm (X D B I S) (JCCim X 11 D B I S))
(define-function JLm (X D B I S) (JCCim X 12 D B I S))
(define-function JNGEm (X D B I S) (JCCim X 12 D B I S))
(define-function JNLm (X D B I S) (JCCim X 13 D B I S))
(define-function JGEm (X D B I S) (JCCim X 13 D B I S))
(define-function JLEm (X D B I S) (JCCim X 14 D B I S))
(define-function JNGm (X D B I S) (JCCim X 14 D B I S))
(define-function JNLEm (X D B I S) (JCCim X 15 D B I S))
(define-function JGm (X D B I S) (JCCim X 15 D B I S))
(define-function JMPSm (X D B I S) (if (and (_r0P B) (_r0P I)) (_O_D1 X 235 D) (ASMFAIL "illegal mode in short jump")))
(define-function JMPm (X D B I S) (if (and (_r0P B) (_r0P I)) (_O_D4 X 233 D) (if (_r0P I) (_O_Mrm X 255 _b11 _b100 (_r4 B)) (_O_r_X X 255 _b100 D B I S))))
(define-function LAHF (X) (_O X 159))
(define-function LEALmr (X MD MB MI MS RD) (_O_r_X X 141 (_r4 RD) MD MB MI MS))
(define-function LEAVE (X) (_O X 201))
(define-function LMSWr (X RS) (_OO_Mrm X 3841 _b11 _b110 (_r4 RS)))
(define-function LMSWm (X MD MB MI MS) (_OO_r_X X 3841 _b110 MD MB MI MS))
(define-function LOOPm (X MD MB MI MS) (if (and (_r0P MB) (_r0P MI)) (_O_D1 X 226 MD) (ASMFAIL "illegal mode in loop")))
(define-function LOOPEm (X MD MB MI MS) (if (and (_r0P MB) (_r0P MI)) (_O_D1 X 225 MD) (ASMFAIL "illegal mode in loope")))
(define-function LOOPZm (X MD MB MI MS) (if (and (_r0P MB) (_r0P MI)) (_O_D1 X 225 MD) (ASMFAIL "illegal mode in loopz")))
(define-function LOOPNEm (X MD MB MI MS) (if (and (_r0P MB) (_r0P MI)) (_O_D1 X 224 MD) (ASMFAIL "illegal mode in loopne")))
(define-function LOOPNZm (X MD MB MI MS) (if (and (_r0P MB) (_r0P MI)) (_O_D1 X 224 MD) (ASMFAIL "illegal mode in loopnz")))
(define-function MOVBrr (X RS RD) (_O_Mrm X 128 _b11 (_r1 RS) (_r1 RD)))
(define-function MOVBmr (X MD MB MI MS RD) (_O_r_X X 138 (_r1 RD) MD MB MI MS))
(define-function MOVBrm (X RS MD MB MI MS) (_O_r_X X 136 (_r1 RS) MD MB MI MS))
(define-function MOVBir (X IM R) (_Or_B X 176 (_r1 R) (_s1 IM)))
(define-function MOVBim (X IM MD MB MI MS) (_O_X_B X 198 MD MB MI MS (_s1 IM)))
(define-function MOVWrr (X RS RD) (_wO_Mrm X 137 _b11 (_r2 RS) (_r2 RD)))
(define-function MOVWmr (X MD MB MI MS RD) (_wO_r_X X 139 (_r2 RD) MD MB MI MS))
(define-function MOVWrm (X RS MD MB MI MS) (_wO_r_X X 137 (_r2 RS) MD MB MI MS))
(define-function MOVWir (X IM R) (_wOr_W X 184 (_r2 R) (_s2 IM)))
(define-function MOVWim (X IM MD MB MI MS) (_wO_X_W X 199 MD MB MI MS (_s2 IM)))
(define-function MOVLrr (X RS RD) (_O_Mrm X 137 _b11 (_r4 RS) (_r4 RD)))
(define-function MOVLmr (X MD MB MI MS RD) (_O_r_X X 139 (_r4 RD) MD MB MI MS))
(define-function MOVLrm (X RS MD MB MI MS) (_O_r_X X 137 (_r4 RS) MD MB MI MS))
(define-function MOVLir (X IM R) (_Or_L X 184 (_r4 R) IM))
(define-function MOVLim (X IM MD MB MI MS) (_O_X_L X 199 MD MB MI MS IM))
(define-function MOVSBLrr (X RS RD) (_OO_Mrm X 4030 _b11 (_r1 RS) (_r4 RD)))
(define-function MOVSBLmr (X MD MB MI MS RD) (_OO_r_X X 4030 (_r4 RD) MD MB MI MS))
(define-function MULBrr (X RS RD) (+ (_rAL RD) (_O_Mrm X 246 _b11 _b100 (_r1 RS))))
(define-function MULBmr (X MD MB MI MS RD) (+ (_rAL RD) (_O_r_X X 246 _b100 MD MB MI MS)))
(define-function MULWrr (X RS RD) (+ (_rAX RD) (_wO_Mrm X 247 _b11 _b100 (_r2 RS))))
(define-function MULWmr (X MD MB MI MS RD) (+ (_rAX RD) (_wO_r_X X 247 _b100 MD MB MI MS)))
(define-function MULLrr (X RS RD) (+ (_rEAX RD) (_O_Mrm X 247 _b11 _b100 (_r4 RS))))
(define-function MULLmr (X MD MB MI MS RD) (+ (_rEAX RD) (_O_r_X X 247 _b100 MD MB MI MS)))
(define-function NEGBr (X RD) (_O_Mrm X 246 _b11 _b011 (_r1 RD)))
(define-function NEGBm (X MD MB MI MS) (_O_r_X X 246 _b011 MD MB MI MS))
(define-function NEGWr (X RD) (_wO_Mrm X 247 _b11 _b011 (_r2 RD)))
(define-function NEGWm (X MD MB MI MS) (_wO_r_X X 247 _b011 MD MB MI MS))
(define-function NEGLr (X RD) (_O_Mrm X 247 _b11 _b011 (_r4 RD)))
(define-function NEGLm (X MD MB MI MS) (_O_r_X X 247 _b011 MD MB MI MS))
(define-function NOP (X) (_O X 144))
(define-function NOTBr (X RD) (_O_Mrm X 246 _b11 _b010 (_r1 RD)))
(define-function NOTBm (X MD MB MI MS) (_O_r_X X 246 _b010 MD MB MI MS))
(define-function NOTWr (X RD) (_wO_Mrm X 247 _b11 _b010 (_r2 RD)))
(define-function NOTWm (X MD MB MI MS) (_wO_r_X X 247 _b010 MD MB MI MS))
(define-function NOTLr (X RD) (_O_Mrm X 247 _b11 _b010 (_r4 RD)))
(define-function NOTLm (X MD MB MI MS) (_O_r_X X 247 _b010 MD MB MI MS))
(define-function ORBrr (X RS RD) (_O_Mrm X 8 _b11 (_r1 RS) (_r1 RD)))
(define-function ORBmr (X MD MB MI MS RD) (_O_r_X X 10 (_r1 RD) MD MB MI MS))
(define-function ORBrm (X RS MD MB MI MS) (_O_r_X X 8 (_r1 RS) MD MB MI MS))
(define-function ORBir (X IM RD) (_O_Mrm_B X 128 _b11 _b001 (_r1 RD) (_s1 IM)))
(define-function ORBim (X IM MD MB MI MS) (_O_r_X_B X 128 _b001 MD MB MI MS (_s1 IM)))
(define-function ORWrr (X RS RD) (_wO_Mrm X 9 _b11 (_r2 RS) (_r2 RD)))
(define-function ORWmr (X MD MB MI MS RD) (_wO_r_X X 11 (_r2 RD) MD MB MI MS))
(define-function ORWrm (X RS MD MB MI MS) (_wO_r_X X 9 (_r2 RS) MD MB MI MS))
(define-function ORWir (X IM RD) (_wOs_Mrm_sW X 129 _b11 _b001 (_r2 RD) (_s2 IM)))
(define-function ORWim (X IM MD MB MI MS) (_wOs_r_X_sW X 129 _b001 MD MB MI MS (_s2 IM)))
(define-function ORLrr (X RS RD) (_O_Mrm X 9 _b11 (_r4 RS) (_r4 RD)))
(define-function ORLmr (X MD MB MI MS RD) (_O_r_X X 11 (_r4 RD) MD MB MI MS))
(define-function ORLrm (X RS MD MB MI MS) (_O_r_X X 9 (_r4 RS) MD MB MI MS))
(define-function ORLir (X IM RD) (_Os_Mrm_sL X 129 _b11 _b001 (_r4 RD) IM))
(define-function ORLim (X IM MD MB MI MS) (_Os_r_X_sL X 129 _b001 MD MB MI MS IM))
(define-function POPWr (X RD) (_wOr X 88 (_r2 RD)))
(define-function POPWm (X MD MB MI MS) (_wO_r_X X 143 _b000 MD MB MI MS))
(define-function POPLr (X RD) (_Or X 88 (_r4 RD)))
(define-function POPLm (X MD MB MI MS) (_O_r_X X 143 _b000 MD MB MI MS))
(define-function POPA (X) (_wO X 97))
(define-function POPAD (X) (_O X 97))
(define-function POPF (X) (_wO X 157))
(define-function POPFD (X) (_O X 157))
(define-function PUSHWr (X R) (_wOr X 80 (_r2 R)))
(define-function PUSHWm (X MD MB MI MS) (_wO_r_X X 255 _b110 MD MB MI MS))
(define-function PUSHWi (X IM) (_wOs_sW X 104 IM))
(define-function PUSHLr (X R) (_Or X 80 (_r4 R)))
(define-function PUSHLm (X MD MB MI MS) (_O_r_X X 255 _b110 MD MB MI MS))
(define-function PUSHLi (X IM) (_Os_sL X 104 IM))
(define-function PUSHLil (X IM) (_O_L X 104 IM))
(define-function PUSHA (X) (_wO X 96))
(define-function PUSHAD (X) (_O X 96))
(define-function PUSHF (X) (_O X 156))
(define-function PUSHFD (X) (_wO X 156))
(define-function RET (X) (_O X 195))
(define-function RETi (X IM) (_O_W X 194 (_s2 IM)))
(define-function ROLBir (X IM RD) (if (== IM 1) (_O_Mrm X 208 _b11 _b000 (_r1 RD)) (_O_Mrm_B X 192 _b11 _b000 (_r1 RD) (_u1 IM))))
(define-function ROLBim (X IM MD MB MS MI) (if (== IM 1) (_O_r_X X 208 _b000 MD MB MI MS) (_O_r_X_B X 192 _b000 MD MB MI MS (_u1 IM))))
(define-function ROLBrr (X RS RD) (if (== RS _CL) (_O_Mrm X 210 _b11 _b000 (_r1 RD)) (ASMFAIL "source register must be CL")))
(define-function ROLBrm (X RS MD MB MS MI) (if (== RS _CL) (_O_r_X X 210 _b000 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function ROLWir (X IM RD) (if (== IM 1) (_wO_Mrm X 209 _b11 _b000 (_r2 RD)) (_wO_Mrm_B X 193 _b11 _b000 (_r2 RD) (_u1 IM))))
(define-function ROLWim (X IM MD MB MS MI) (if (== IM 1) (_wO_r_X X 209 _b000 MD MB MI MS) (_wO_r_X_B X 193 _b000 MD MB MI MS (_u1 IM))))
(define-function ROLWrr (X RS RD) (if (== RS _CL) (_wO_Mrm X 211 _b11 _b000 (_r2 RD)) (ASMFAIL "source register must be CL")))
(define-function ROLWrm (X RS MD MB MS MI) (if (== RS _CL) (_wO_r_X X 211 _b000 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function ROLLir (X IM RD) (if (== IM 1) (_O_Mrm X 209 _b11 _b000 (_r4 RD)) (_O_Mrm_B X 193 _b11 _b000 (_r4 RD) (_u1 IM))))
(define-function ROLLim (X IM MD MB MS MI) (if (== IM 1) (_O_r_X X 209 _b000 MD MB MI MS) (_O_r_X_B X 193 _b000 MD MB MI MS (_u1 IM))))
(define-function ROLLrr (X RS RD) (if (== RS _CL) (_O_Mrm X 211 _b11 _b000 (_r4 RD)) (ASMFAIL "source register must be CL")))
(define-function ROLLrm (X RS MD MB MS MI) (if (== RS _CL) (_O_r_X X 211 _b000 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function RORBir (X IM RD) (if (== IM 1) (_O_Mrm X 208 _b11 _b001 (_r1 RD)) (_O_Mrm_B X 192 _b11 _b001 (_r1 RD) (_u1 IM))))
(define-function RORBim (X IM MD MB MS MI) (if (== IM 1) (_O_r_X X 208 _b001 MD MB MI MS) (_O_r_X_B X 192 _b001 MD MB MI MS (_u1 IM))))
(define-function RORBrr (X RS RD) (if (== RS _CL) (_O_Mrm X 210 _b11 _b001 (_r1 RD)) (ASMFAIL "source register must be CL")))
(define-function RORBrm (X RS MD MB MS MI) (if (== RS _CL) (_O_r_X X 210 _b001 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function RORWir (X IM RD) (if (== IM 1) (_wO_Mrm X 209 _b11 _b001 (_r2 RD)) (_wO_Mrm_B X 193 _b11 _b001 (_r2 RD) (_u1 IM))))
(define-function RORWim (X IM MD MB MS MI) (if (== IM 1) (_wO_r_X X 209 _b001 MD MB MI MS) (_wO_r_X_B X 193 _b001 MD MB MI MS (_u1 IM))))
(define-function RORWrr (X RS RD) (if (== RS _CL) (_wO_Mrm X 211 _b11 _b001 (_r2 RD)) (ASMFAIL "source register must be CL")))
(define-function RORWrm (X RS MD MB MS MI) (if (== RS _CL) (_wO_r_X X 211 _b001 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function RORLir (X IM RD) (if (== IM 1) (_O_Mrm X 209 _b11 _b001 (_r4 RD)) (_O_Mrm_B X 193 _b11 _b001 (_r4 RD) (_u1 IM))))
(define-function RORLim (X IM MD MB MS MI) (if (== IM 1) (_O_r_X X 209 _b001 MD MB MI MS) (_O_r_X_B X 193 _b001 MD MB MI MS (_u1 IM))))
(define-function RORLrr (X RS RD) (if (== RS _CL) (_O_Mrm X 211 _b11 _b001 (_r4 RD)) (ASMFAIL "source register must be CL")))
(define-function RORLrm (X RS MD MB MS MI) (if (== RS _CL) (_O_r_X X 211 _b001 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function SAHF (X) (_O X 158))
(define-function SARBir (X IM RD) (if (== IM 1) (_O_Mrm X 208 _b11 _b111 (_r1 RD)) (_O_Mrm_B X 192 _b11 _b111 (_r1 RD) (_u1 IM))))
(define-function SARBim (X IM MD MB MS MI) (if (== IM 1) (_O_r_X X 208 _b111 MD MB MI MS) (_O_r_X_B X 192 _b111 MD MB MI MS (_u1 IM))))
(define-function SARBrr (X RS RD) (if (== RS _CL) (_O_Mrm X 210 _b11 _b111 (_r1 RD)) (ASMFAIL "source register must be CL")))
(define-function SARBrm (X RS MD MB MS MI) (if (== RS _CL) (_O_r_X X 210 _b111 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function SARWir (X IM RD) (if (== IM 1) (_wO_Mrm X 209 _b11 _b111 (_r2 RD)) (_wO_Mrm_B X 193 _b11 _b111 (_r2 RD) (_u1 IM))))
(define-function SARWim (X IM MD MB MS MI) (if (== IM 1) (_wO_r_X X 209 _b111 MD MB MI MS) (_wO_r_X_B X 193 _b111 MD MB MI MS (_u1 IM))))
(define-function SARWrr (X RS RD) (if (== RS _CL) (_wO_Mrm X 211 _b11 _b111 (_r2 RD)) (ASMFAIL "source register must be CL")))
(define-function SARWrm (X RS MD MB MS MI) (if (== RS _CL) (_wO_r_X X 211 _b111 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function SARLir (X IM RD) (if (== IM 1) (_O_Mrm X 209 _b11 _b111 (_r4 RD)) (_O_Mrm_B X 193 _b11 _b111 (_r4 RD) (_u1 IM))))
(define-function SARLim (X IM MD MB MS MI) (if (== IM 1) (_O_r_X X 209 _b111 MD MB MI MS) (_O_r_X_B X 193 _b111 MD MB MI MS (_u1 IM))))
(define-function SARLrr (X RS RD) (if (== RS _CL) (_O_Mrm X 211 _b11 _b111 (_r4 RD)) (ASMFAIL "source register must be CL")))
(define-function SARLrm (X RS MD MB MS MI) (if (== RS _CL) (_O_r_X X 211 _b111 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function SBBBrr (X RS RD) (_O_Mrm X 24 _b11 (_r1 RS) (_r1 RD)))
(define-function SBBBmr (X MD MB MI MS RD) (_O_r_X X 26 (_r1 RD) MD MB MI MS))
(define-function SBBBrm (X RS MD MB MI MS) (_O_r_X X 24 (_r1 RS) MD MB MI MS))
(define-function SBBBir (X IM RD) (_O_Mrm_B X 128 _b11 _b011 (_r1 RD) (_s1 IM)))
(define-function SBBBim (X IM MD MB MI MS) (_O_r_X_B X 128 _b011 MD MB MI MS (_s1 IM)))
(define-function SBBWrr (X RS RD) (_wO_Mrm X 25 _b11 (_r2 RS) (_r2 RD)))
(define-function SBBWmr (X MD MB MI MS RD) (_wO_r_X X 27 (_r2 RD) MD MB MI MS))
(define-function SBBWrm (X RS MD MB MI MS) (_wO_r_X X 25 (_r2 RS) MD MB MI MS))
(define-function SBBWir (X IM RD) (_wOs_Mrm_sW X 129 _b11 _b011 (_r2 RD) (_s2 IM)))
(define-function SBBWim (X IM MD MB MI MS) (_wOs_r_X_sW X 129 _b011 MD MB MI MS (_s2 IM)))
(define-function SBBLrr (X RS RD) (_O_Mrm X 25 _b11 (_r4 RS) (_r4 RD)))
(define-function SBBLmr (X MD MB MI MS RD) (_O_r_X X 27 (_r4 RD) MD MB MI MS))
(define-function SBBLrm (X RS MD MB MI MS) (_O_r_X X 25 (_r4 RS) MD MB MI MS))
(define-function SBBLir (X IM RD) (_Os_Mrm_sL X 129 _b11 _b011 (_r4 RD) IM))
(define-function SBBLim (X IM MD MB MI MS) (_Os_r_X_sL X 129 _b011 MD MB MI MS IM))
(define-function SETCCir (X CC RD) (_OO_Mrm X (| 3984 CC) _b11 _b000 (_r1 RD)))
(define-function SETOr (X RD) (SETCCir X 0 RD))
(define-function SETNOr (X RD) (SETCCir X 1 RD))
(define-function SETBr (X RD) (SETCCir X 2 RD))
(define-function SETNAEr (X RD) (SETCCir X 2 RD))
(define-function SETNBr (X RD) (SETCCir X 3 RD))
(define-function SETAEr (X RD) (SETCCir X 3 RD))
(define-function SETEr (X RD) (SETCCir X 4 RD))
(define-function SETZr (X RD) (SETCCir X 4 RD))
(define-function SETNEr (X RD) (SETCCir X 5 RD))
(define-function SETNZr (X RD) (SETCCir X 5 RD))
(define-function SETBEr (X RD) (SETCCir X 6 RD))
(define-function SETNAr (X RD) (SETCCir X 6 RD))
(define-function SETNBEr (X RD) (SETCCir X 7 RD))
(define-function SETAr (X RD) (SETCCir X 7 RD))
(define-function SETSr (X RD) (SETCCir X 8 RD))
(define-function SETNSr (X RD) (SETCCir X 9 RD))
(define-function SETPr (X RD) (SETCCir X 10 RD))
(define-function SETPEr (X RD) (SETCCir X 10 RD))
(define-function SETNPr (X RD) (SETCCir X 11 RD))
(define-function SETPOr (X RD) (SETCCir X 11 RD))
(define-function SETLr (X RD) (SETCCir X 12 RD))
(define-function SETNGEr (X RD) (SETCCir X 12 RD))
(define-function SETNLr (X RD) (SETCCir X 13 RD))
(define-function SETGEr (X RD) (SETCCir X 13 RD))
(define-function SETLEr (X RD) (SETCCir X 14 RD))
(define-function SETNGr (X RD) (SETCCir X 14 RD))
(define-function SETNLEr (X RD) (SETCCir X 15 RD))
(define-function SETGr (X RD) (SETCCir X 15 RD))
(define-function SETCCim (X CC MD MB MI MS) (_OO_r_X X (| 3984 CC) _b000 MD MB MI MS))
(define-function SETOm (X D B I S) (SETCCim X 0 D B I S))
(define-function SETNOm (X D B I S) (SETCCim X 1 D B I S))
(define-function SETBm (X D B I S) (SETCCim X 2 D B I S))
(define-function SETNAEm (X D B I S) (SETCCim X 2 D B I S))
(define-function SETNBm (X D B I S) (SETCCim X 3 D B I S))
(define-function SETAEm (X D B I S) (SETCCim X 3 D B I S))
(define-function SETEm (X D B I S) (SETCCim X 4 D B I S))
(define-function SETZm (X D B I S) (SETCCim X 4 D B I S))
(define-function SETNEm (X D B I S) (SETCCim X 5 D B I S))
(define-function SETNZm (X D B I S) (SETCCim X 5 D B I S))
(define-function SETBEm (X D B I S) (SETCCim X 6 D B I S))
(define-function SETNAm (X D B I S) (SETCCim X 6 D B I S))
(define-function SETNBEm (X D B I S) (SETCCim X 7 D B I S))
(define-function SETAm (X D B I S) (SETCCim X 7 D B I S))
(define-function SETSm (X D B I S) (SETCCim X 8 D B I S))
(define-function SETNSm (X D B I S) (SETCCim X 9 D B I S))
(define-function SETPm (X D B I S) (SETCCim X 10 D B I S))
(define-function SETPEm (X D B I S) (SETCCim X 10 D B I S))
(define-function SETNPm (X D B I S) (SETCCim X 11 D B I S))
(define-function SETPOm (X D B I S) (SETCCim X 11 D B I S))
(define-function SETLm (X D B I S) (SETCCim X 12 D B I S))
(define-function SETNGEm (X D B I S) (SETCCim X 12 D B I S))
(define-function SETNLm (X D B I S) (SETCCim X 13 D B I S))
(define-function SETGEm (X D B I S) (SETCCim X 13 D B I S))
(define-function SETLEm (X D B I S) (SETCCim X 14 D B I S))
(define-function SETNGm (X D B I S) (SETCCim X 14 D B I S))
(define-function SETNLEm (X D B I S) (SETCCim X 15 D B I S))
(define-function SETGm (X D B I S) (SETCCim X 15 D B I S))
(define-function SHLBir (X IM RD) (if (== IM 1) (_O_Mrm X 208 _b11 _b100 (_r1 RD)) (_O_Mrm_B X 192 _b11 _b100 (_r1 RD) (_u1 IM))))
(define-function SHLBim (X IM MD MB MS MI) (if (== IM 1) (_O_r_X X 208 _b100 MD MB MI MS) (_O_r_X_B X 192 _b100 MD MB MI MS (_u1 IM))))
(define-function SHLBrr (X RS RD) (if (== RS _CL) (_O_Mrm X 210 _b11 _b100 (_r1 RD)) (ASMFAIL "source register must be CL")))
(define-function SHLBrm (X RS MD MB MS MI) (if (== RS _CL) (_O_r_X X 210 _b100 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function SHLWir (X IM RD) (if (== IM 1) (_wO_Mrm X 209 _b11 _b100 (_r2 RD)) (_wO_Mrm_B X 193 _b11 _b100 (_r2 RD) (_u1 IM))))
(define-function SHLWim (X IM MD MB MS MI) (if (== IM 1) (_wO_r_X X 209 _b100 MD MB MI MS) (_wO_r_X_B X 193 _b100 MD MB MI MS (_u1 IM))))
(define-function SHLWrr (X RS RD) (if (== RS _CL) (_wO_Mrm X 211 _b11 _b100 (_r2 RD)) (ASMFAIL "source register must be CL")))
(define-function SHLWrm (X RS MD MB MS MI) (if (== RS _CL) (_wO_r_X X 211 _b100 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function SHLLir (X IM RD) (if (== IM 1) (_O_Mrm X 209 _b11 _b100 (_r4 RD)) (_O_Mrm_B X 193 _b11 _b100 (_r4 RD) (_u1 IM))))
(define-function SHLLim (X IM MD MB MS MI) (if (== IM 1) (_O_r_X X 209 _b100 MD MB MI MS) (_O_r_X_B X 193 _b100 MD MB MI MS (_u1 IM))))
(define-function SHLLrr (X RS RD) (if (== RS _CL) (_O_Mrm X 211 _b11 _b100 (_r4 RD)) (ASMFAIL "source register must be CL")))
(define-function SHLLrm (X RS MD MB MS MI) (if (== RS _CL) (_O_r_X X 211 _b100 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function SHRBir (X IM RD) (if (== IM 1) (_O_Mrm X 208 _b11 _b101 (_r1 RD)) (_O_Mrm_B X 192 _b11 _b101 (_r1 RD) (_u1 IM))))
(define-function SHRBim (X IM MD MB MS MI) (if (== IM 1) (_O_r_X X 208 _b101 MD MB MI MS) (_O_r_X_B X 192 _b101 MD MB MI MS (_u1 IM))))
(define-function SHRBrr (X RS RD) (if (== RS _CL) (_O_Mrm X 210 _b11 _b101 (_r1 RD)) (ASMFAIL "source register must be CL")))
(define-function SHRBrm (X RS MD MB MS MI) (if (== RS _CL) (_O_r_X X 210 _b101 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function SHRWir (X IM RD) (if (== IM 1) (_wO_Mrm X 209 _b11 _b101 (_r2 RD)) (_wO_Mrm_B X 193 _b11 _b101 (_r2 RD) (_u1 IM))))
(define-function SHRWim (X IM MD MB MS MI) (if (== IM 1) (_wO_r_X X 209 _b101 MD MB MI MS) (_wO_r_X_B X 193 _b101 MD MB MI MS (_u1 IM))))
(define-function SHRWrr (X RS RD) (if (== RS _CL) (_wO_Mrm X 211 _b11 _b101 (_r2 RD)) (ASMFAIL "source register must be CL")))
(define-function SHRWrm (X RS MD MB MS MI) (if (== RS _CL) (_wO_r_X X 211 _b101 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function SHRLir (X IM RD) (if (== IM 1) (_O_Mrm X 209 _b11 _b101 (_r4 RD)) (_O_Mrm_B X 193 _b11 _b101 (_r4 RD) (_u1 IM))))
(define-function SHRLim (X IM MD MB MS MI) (if (== IM 1) (_O_r_X X 209 _b101 MD MB MI MS) (_O_r_X_B X 193 _b101 MD MB MI MS (_u1 IM))))
(define-function SHRLrr (X RS RD) (if (== RS _CL) (_O_Mrm X 211 _b11 _b101 (_r4 RD)) (ASMFAIL "source register must be CL")))
(define-function SHRLrm (X RS MD MB MS MI) (if (== RS _CL) (_O_r_X X 211 _b101 MD MB MI MS) (ASMFAIL "source register must be CL")))
(define-function STC (X) (_O X 249))
(define-function SUBBrr (X RS RD) (_O_Mrm X 40 _b11 (_r1 RS) (_r1 RD)))
(define-function SUBBmr (X MD MB MI MS RD) (_O_r_X X 42 (_r1 RD) MD MB MI MS))
(define-function SUBBrm (X RS MD MB MI MS) (_O_r_X X 40 (_r1 RS) MD MB MI MS))
(define-function SUBBir (X IM RD) (_O_Mrm_B X 128 _b11 _b101 (_r1 RD) (_s1 IM)))
(define-function SUBBim (X IM MD MB MI MS) (_O_r_X_B X 128 _b101 MD MB MI MS (_s1 IM)))
(define-function SUBWrr (X RS RD) (_wO_Mrm X 41 _b11 (_r2 RS) (_r2 RD)))
(define-function SUBWmr (X MD MB MI MS RD) (_wO_r_X X 43 (_r2 RD) MD MB MI MS))
(define-function SUBWrm (X RS MD MB MI MS) (_wO_r_X X 41 (_r2 RS) MD MB MI MS))
(define-function SUBWir (X IM RD) (_wOs_Mrm_sW X 129 _b11 _b101 (_r2 RD) (_s2 IM)))
(define-function SUBWim (X IM MD MB MI MS) (_wOs_r_X_sW X 129 _b101 MD MB MI MS (_s2 IM)))
(define-function SUBLrr (X RS RD) (_O_Mrm X 41 _b11 (_r4 RS) (_r4 RD)))
(define-function SUBLmr (X MD MB MI MS RD) (_O_r_X X 43 (_r4 RD) MD MB MI MS))
(define-function SUBLrm (X RS MD MB MI MS) (_O_r_X X 41 (_r4 RS) MD MB MI MS))
(define-function SUBLir (X IM RD) (_Os_Mrm_sL X 129 _b11 _b101 (_r4 RD) IM))
(define-function SUBLim (X IM MD MB MI MS) (_Os_r_X_sL X 129 _b101 MD MB MI MS IM))
(define-function TESTBrr (X RS RD) (_O_Mrm X 132 _b11 (_r1 RS) (_r1 RD)))
(define-function TESTBrm (X RS MD MB MI MS) (_O_r_X X 132 (_r1 RS) MD MB MI MS))
(define-function TESTBir (X IM RD) (_O_Mrm_B X 246 _b11 _b000 (_r1 RD) (_u1 IM)))
(define-function TESTBim (X IM MD MB MI MS) (_O_r_X_B X 246 _b000 MD MB MI MS (_u1 IM)))
(define-function TESTWrr (X RS RD) (_wO_Mrm X 133 _b11 (_r2 RS) (_r2 RD)))
(define-function TESTWrm (X RS MD MB MI MS) (_wO_r_X X 133 (_r2 RS) MD MB MI MS))
(define-function TESTWir (X IM RD) (_wO_Mrm_W X 247 _b11 _b000 (_r2 RD) (_u2 IM)))
(define-function TESTWim (X IM MD MB MI MS) (_wO_r_X_W X 247 _b000 MD MB MI MS (_u2 IM)))
(define-function TESTLrr (X RS RD) (_O_Mrm X 133 _b11 (_r4 RS) (_r4 RD)))
(define-function TESTLrm (X RS MD MB MI MS) (_O_r_X X 133 (_r4 RS) MD MB MI MS))
(define-function TESTLir (X IM RD) (_O_Mrm_L X 247 _b11 _b000 (_r4 RD) IM))
(define-function TESTLim (X IM MD MB MI MS) (_O_r_X_L X 247 _b000 MD MB MI MS IM))
(define-function XADDBrr (X RS RD) (_OO_Mrm X 4032 _b11 (_r1 RS) (_r1 RD)))
(define-function XADDBrm (X RS MD MB MI MS) (_OO_r_X X 4032 (_r1 RS) MD MB MI MS))
(define-function XADDWrr (X RS RD) (_wOO_Mrm X 4033 _b11 (_r2 RS) (_r2 RD)))
(define-function XADDWrm (X RS MD MB MI MS) (_wOO_r_X X 4033 (_r2 RS) MD MB MI MS))
(define-function XADDLrr (X RS RD) (_OO_Mrm X 4033 _b11 (_r4 RS) (_r4 RD)))
(define-function XADDLrm (X RS MD MB MI MS) (_OO_r_X X 4033 (_r4 RS) MD MB MI MS))
(define-function XCHGBrr (X RS RD) (_O_Mrm X 134 _b11 (_r1 RS) (_r1 RD)))
(define-function XCHGBrm (X RS MD MB MI MS) (_O_r_X X 134 (_r1 RS) MD MB MI MS))
(define-function XCHGWrr (X RS RD) (_wO_Mrm X 135 _b11 (_r2 RS) (_r2 RD)))
(define-function XCHGWrm (X RS MD MB MI MS) (_wO_r_X X 135 (_r2 RS) MD MB MI MS))
(define-function XCHGLrr (X RS RD) (_O_Mrm X 135 _b11 (_r4 RS) (_r4 RD)))
(define-function XCHGLrm (X RS MD MB MI MS) (_O_r_X X 135 (_r4 RS) MD MB MI MS))
(define-function XORBrr (X RS RD) (_O_Mrm X 48 _b11 (_r1 RS) (_r1 RD)))
(define-function XORBmr (X MD MB MI MS RD) (_O_r_X X 50 (_r1 RD) MD MB MI MS))
(define-function XORBrm (X RS MD MB MI MS) (_O_r_X X 48 (_r1 RS) MD MB MI MS))
(define-function XORBir (X IM RD) (_O_Mrm_B X 128 _b11 _b110 (_r1 RD) (_s1 IM)))
(define-function XORBim (X IM MD MB MI MS) (_O_r_X_B X 128 _b110 MD MB MI MS (_s1 IM)))
(define-function XORWrr (X RS RD) (_wO_Mrm X 49 _b11 (_r2 RS) (_r2 RD)))
(define-function XORWmr (X MD MB MI MS RD) (_wO_r_X X 51 (_r2 RD) MD MB MI MS))
(define-function XORWrm (X RS MD MB MI MS) (_wO_r_X X 49 (_r2 RS) MD MB MI MS))
(define-function XORWir (X IM RD) (_wOs_Mrm_sW X 129 _b11 _b110 (_r2 RD) (_s2 IM)))
(define-function XORWim (X IM MD MB MI MS) (_wOs_r_X_sW X 129 _b110 MD MB MI MS (_s2 IM)))
(define-function XORLrr (X RS RD) (_O_Mrm X 49 _b11 (_r4 RS) (_r4 RD)))
(define-function XORLmr (X MD MB MI MS RD) (_O_r_X X 51 (_r4 RD) MD MB MI MS))
(define-function XORLrm (X RS MD MB MI MS) (_O_r_X X 49 (_r4 RS) MD MB MI MS))
(define-function XORLir (X IM RD) (_Os_Mrm_sL X 129 _b11 _b110 (_r4 RD) IM))
(define-function XORLim (X IM MD MB MI MS) (_Os_r_X_sL X 129 _b110 MD MB MI MS IM))
(define-constant SALBir SHLBir)
(define-constant SALBim SHLBim)
(define-constant SALBrr SHLBrr)
(define-constant SALBrm SHLBrm)
(define-constant SALWir SHLWir)
(define-constant SALWim SHLWim)
(define-constant SALWrr SHLWrr)
(define-constant SALWrm SHLWrm)
(define-constant SALLir SHLLir)
(define-constant SALLim SHLLim)
(define-constant SALLrr SHLLrr)
(define-constant SALLrm SHLLrm)