File: apx-shifts.asm

package info (click to toggle)
nasm 3.01-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 23,660 kB
  • sloc: ansic: 129,101; asm: 40,471; perl: 8,238; sh: 4,146; makefile: 1,281; xml: 726; python: 582; lisp: 578; sed: 11
file content (388 lines) | stat: -rw-r--r-- 21,674 bytes parent folder | download
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
; APX shift testcases

%macro testcase 2
 %ifdef BIN
  db %1
 %endif
 %ifdef SRC
  %2
 %endif
%endmacro

bits 64

; --- Rotate instructions : RCL/RCR/ROL/ROR ---
; legacy - rcl
testcase	{0xD0, 0x12},			{rcl byte [rdx], 1}
testcase	{0xD2, 0x12},			{rcl byte [rdx], cl}
testcase	{0xC0, 0x12, 0x03},		{rcl byte [rdx], 0x03}
testcase	{0x66, 0xD1, 0x12},		{rcl word [rdx], 1}
testcase	{0x66, 0xD3, 0x12},		{rcl word [rdx], cl}
testcase	{0x66, 0xC1, 0x12, 0x03},	{rcl word [rdx], 0x03}
testcase	{0xD1, 0x12},			{rcl dword [rdx], 1}
testcase	{0xD3, 0x12},			{rcl dword [rdx], cl}
testcase	{0xC1, 0x12, 0x03},		{rcl dword [rdx], 0x03}
testcase	{0x48, 0xD1, 0x12},		{rcl qword [rdx], 1}
testcase	{0x48, 0xD3, 0x12},		{rcl qword [rdx], cl}
testcase	{0x48, 0xC1, 0x12, 0x03},	{rcl qword [rdx], 0x03}
; legacy - rcr
testcase	{0xD0, 0x1A},			{rcr byte [rdx], 1}
testcase	{0xD2, 0x1A},			{rcr byte [rdx], cl}
testcase	{0xC0, 0x1A, 0x03},		{rcr byte [rdx], 0x03}
testcase	{0x66, 0xD1, 0x1A},		{rcr word [rdx], 1}
testcase	{0x66, 0xD3, 0x1A},		{rcr word [rdx], cl}
testcase	{0x66, 0xC1, 0x1A, 0x03},	{rcr word [rdx], 0x03}
testcase	{0xD1, 0x1A},			{rcr dword [rdx], 1}
testcase	{0xD3, 0x1A},			{rcr dword [rdx], cl}
testcase	{0xC1, 0x1A, 0x03},		{rcr dword [rdx], 0x03}
testcase	{0x48, 0xD1, 0x1A},		{rcr qword [rdx], 1}
testcase	{0x48, 0xD3, 0x1A},		{rcr qword [rdx], cl}
testcase	{0x48, 0xC1, 0x1A, 0x03},	{rcr qword [rdx], 0x03}
; legacy - rol
testcase	{0xD0, 0x02},			{rol byte [rdx], 1}
testcase	{0xD2, 0x02},			{rol byte [rdx], cl}
testcase	{0xC0, 0x02, 0x03},		{rol byte [rdx], 0x03}
testcase	{0x66, 0xD1, 0x02},		{rol word [rdx], 1}
testcase	{0x66, 0xD3, 0x02},		{rol word [rdx], cl}
testcase	{0x66, 0xC1, 0x02, 0x03},	{rol word [rdx], 0x03}
testcase	{0xD1, 0x02},			{rol dword [rdx], 1}
testcase	{0xD3, 0x02},			{rol dword [rdx], cl}
testcase	{0xC1, 0x02, 0x03},		{rol dword [rdx], 0x03}
testcase	{0x48, 0xD1, 0x02},		{rol qword [rdx], 1}
testcase	{0x48, 0xD3, 0x02},		{rol qword [rdx], cl}
testcase	{0x48, 0xC1, 0x02, 0x03},	{rol qword [rdx], 0x03}
; legacy - ror
testcase	{0xD0, 0x0A},			{ror byte [rdx], 1}
testcase	{0xD2, 0x0A},			{ror byte [rdx], cl}
testcase	{0xC0, 0x0A, 0x03},		{ror byte [rdx], 0x03}
testcase	{0x66, 0xD1, 0x0A},		{ror word [rdx], 1}
testcase	{0x66, 0xD3, 0x0A},		{ror word [rdx], cl}
testcase	{0x66, 0xC1, 0x0A, 0x03},	{ror word [rdx], 0x03}
testcase	{0xD1, 0x0A},			{ror dword [rdx], 1}
testcase	{0xD3, 0x0A},			{ror dword [rdx], cl}
testcase	{0xC1, 0x0A, 0x03},		{ror dword [rdx], 0x03}
testcase	{0x48, 0xD1, 0x0A},		{ror qword [rdx], 1}
testcase	{0x48, 0xD3, 0x0A},		{ror qword [rdx], cl}
testcase	{0x48, 0xC1, 0x0A, 0x03},	{ror qword [rdx], 0x03}

; implicit evex through EGPRs - rcl
testcase	{0xD5, 0x11, 0xD0, 0x12},		{rcl byte [r26], 1}
testcase	{0xD5, 0x11, 0xD2, 0x12},		{rcl byte [r26], cl}
testcase	{0xD5, 0x11, 0xC0, 0x12, 0x03},		{rcl byte [r26], 0x03}
testcase	{0x66, 0xD5, 0x11, 0xD1, 0x12},		{rcl word [r26], 1}
testcase	{0x66, 0xD5, 0x11, 0xD3, 0x12},		{rcl word [r26], cl}
testcase	{0x66, 0xD5, 0x11, 0xC1, 0x12, 0x03},	{rcl word [r26], 0x03}
testcase	{0xD5, 0x11, 0xD1, 0x12},		{rcl dword [r26], 1}
testcase	{0xD5, 0x11, 0xD3, 0x12},		{rcl dword [r26], cl}
testcase	{0xD5, 0x11, 0xC1, 0x12, 0x03},		{rcl dword [r26], 0x03}
testcase	{0xD5, 0x19, 0xD1, 0x12},		{rcl qword [r26], 1}
testcase	{0xD5, 0x19, 0xD3, 0x12},		{rcl qword [r26], cl}
testcase	{0xD5, 0x19, 0xC1, 0x12, 0x03},		{rcl qword [r26], 0x03}
; implicit evex through ND - rcl
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD0, 0x12},		{rcl r25b, byte [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD2, 0x12},		{rcl r25b, byte [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC0, 0x12, 0x03},	{rcl r25b, byte [r26], 0x03}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD1, 0x12},		{rcl r25w, word [r26], 1}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD3, 0x12},		{rcl r25w, word [r26], cl}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xC1, 0x12, 0x03},	{rcl r25w, word [r26], 0x03}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD1, 0x12},		{rcl r25d, dword [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD3, 0x12},		{rcl r25d, dword [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC1, 0x12, 0x03},	{rcl r25d, dword [r26], 0x03}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x12},		{rcl r25, qword [r26], 1}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x12},		{rcl r25, qword [r26], cl}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x12, 0x03},	{rcl r25, qword [r26], 0x03}
; implicit evex through EGPRs - rcr
testcase	{0xD5, 0x11, 0xD0, 0x1A},		{rcr byte [r26], 1}
testcase	{0xD5, 0x11, 0xD2, 0x1A},		{rcr byte [r26], cl}
testcase	{0xD5, 0x11, 0xC0, 0x1A, 0x03},		{rcr byte [r26], 0x03}
testcase	{0x66, 0xD5, 0x11, 0xD1, 0x1A},		{rcr word [r26], 1}
testcase	{0x66, 0xD5, 0x11, 0xD3, 0x1A},		{rcr word [r26], cl}
testcase	{0x66, 0xD5, 0x11, 0xC1, 0x1A, 0x03},	{rcr word [r26], 0x03}
testcase	{0xD5, 0x11, 0xD1, 0x1A},		{rcr dword [r26], 1}
testcase	{0xD5, 0x11, 0xD3, 0x1A},		{rcr dword [r26], cl}
testcase	{0xD5, 0x11, 0xC1, 0x1A, 0x03},		{rcr dword [r26], 0x03}
testcase	{0xD5, 0x19, 0xD1, 0x1A},		{rcr qword [r26], 1}
testcase	{0xD5, 0x19, 0xD3, 0x1A},		{rcr qword [r26], cl}
testcase	{0xD5, 0x19, 0xC1, 0x1A, 0x03},		{rcr qword [r26], 0x03}
; implicit evex through ND - rcr
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD0, 0x1A},		{rcr r25b, byte [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD2, 0x1A},		{rcr r25b, byte [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC0, 0x1A, 0x03},	{rcr r25b, byte [r26], 0x03}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD1, 0x1A},		{rcr r25w, word [r26], 1}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD3, 0x1A},		{rcr r25w, word [r26], cl}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xC1, 0x1A, 0x03},	{rcr r25w, word [r26], 0x03}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD1, 0x1A},		{rcr r25d, dword [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD3, 0x1A},		{rcr r25d, dword [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC1, 0x1A, 0x03},	{rcr r25d, dword [r26], 0x03}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x1A},		{rcr r25, qword [r26], 1}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x1A},		{rcr r25, qword [r26], cl}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x1A, 0x03},	{rcr r25, qword [r26], 0x03}
; implicit evex through EGPRs - rol
testcase	{0xD5, 0x11, 0xD0, 0x02},		{rol byte [r26], 1}
testcase	{0xD5, 0x11, 0xD2, 0x02},		{rol byte [r26], cl}
testcase	{0xD5, 0x11, 0xC0, 0x02, 0x03},		{rol byte [r26], 0x03}
testcase	{0x66, 0xD5, 0x11, 0xD1, 0x02},		{rol word [r26], 1}
testcase	{0x66, 0xD5, 0x11, 0xD3, 0x02},		{rol word [r26], cl}
testcase	{0x66, 0xD5, 0x11, 0xC1, 0x02, 0x03},	{rol word [r26], 0x03}
testcase	{0xD5, 0x11, 0xD1, 0x02},		{rol dword [r26], 1}
testcase	{0xD5, 0x11, 0xD3, 0x02},		{rol dword [r26], cl}
testcase	{0xD5, 0x11, 0xC1, 0x02, 0x03},		{rol dword [r26], 0x03}
testcase	{0xD5, 0x19, 0xD1, 0x02},		{rol qword [r26], 1}
testcase	{0xD5, 0x19, 0xD3, 0x02},		{rol qword [r26], cl}
testcase	{0xD5, 0x19, 0xC1, 0x02, 0x03},		{rol qword [r26], 0x03}
; implicit evex through ND - rol
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD0, 0x02},		{rol r25b, byte [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD2, 0x02},		{rol r25b, byte [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC0, 0x02, 0x03},	{rol r25b, byte [r26], 0x03}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD1, 0x02},		{rol r25w, word [r26], 1}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD3, 0x02},		{rol r25w, word [r26], cl}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xC1, 0x02, 0x03},	{rol r25w, word [r26], 0x03}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD1, 0x02},		{rol r25d, dword [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD3, 0x02},		{rol r25d, dword [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC1, 0x02, 0x03},	{rol r25d, dword [r26], 0x03}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x02},		{rol r25, qword [r26], 1}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x02},		{rol r25, qword [r26], cl}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x02, 0x03},	{rol r25, qword [r26], 0x03}
; implicit evex through EGPRs - ror
testcase	{0xD5, 0x11, 0xD0, 0x0A},		{ror byte [r26], 1}
testcase	{0xD5, 0x11, 0xD2, 0x0A},		{ror byte [r26], cl}
testcase	{0xD5, 0x11, 0xC0, 0x0A, 0x03},		{ror byte [r26], 0x03}
testcase	{0x66, 0xD5, 0x11, 0xD1, 0x0A},		{ror word [r26], 1}
testcase	{0x66, 0xD5, 0x11, 0xD3, 0x0A},		{ror word [r26], cl}
testcase	{0x66, 0xD5, 0x11, 0xC1, 0x0A, 0x03},	{ror word [r26], 0x03}
testcase	{0xD5, 0x11, 0xD1, 0x0A},		{ror dword [r26], 1}
testcase	{0xD5, 0x11, 0xD3, 0x0A},		{ror dword [r26], cl}
testcase	{0xD5, 0x11, 0xC1, 0x0A, 0x03},		{ror dword [r26], 0x03}
testcase	{0xD5, 0x19, 0xD1, 0x0A},		{ror qword [r26], 1}
testcase	{0xD5, 0x19, 0xD3, 0x0A},		{ror qword [r26], cl}
testcase	{0xD5, 0x19, 0xC1, 0x0A, 0x03},		{ror qword [r26], 0x03}
; implicit evex through ND - ror
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD0, 0x0A},		{ror r25b, byte [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD2, 0x0A},		{ror r25b, byte [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC0, 0x0A, 0x03},	{ror r25b, byte [r26], 0x03}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD1, 0x0A},		{ror r25w, word [r26], 1}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD3, 0x0A},		{ror r25w, word [r26], cl}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xC1, 0x0A, 0x03},	{ror r25w, word [r26], 0x03}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD1, 0x0A},		{ror r25d, dword [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD3, 0x0A},		{ror r25d, dword [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC1, 0x0A, 0x03},	{ror r25d, dword [r26], 0x03}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x0A},		{ror r25, qword [r26], 1}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x0A},		{ror r25, qword [r26], cl}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x0A, 0x03},	{ror r25, qword [r26], 0x03}

; --- rorx instruction ---
; legacy
testcase	{0xC4, 0xE3, 0x7B, 0xF0, 0x0A, 0x03},	{rorx ecx, [rdx], 0x03}
testcase	{0xC4, 0xE3, 0xFB, 0xF0, 0x0A, 0x03},	{rorx rcx, [rdx], 0x03}
; implicit evex through EGPRs
testcase	{0x62, 0x63, 0x7F, 0x08, 0xF0, 0x0A, 0x03},	{rorx r25d, [rdx], 0x03}
testcase	{0x62, 0x63, 0xFF, 0x08, 0xF0, 0x0A, 0x03},	{rorx r25, [rdx], 0x03}

; --- sar instruction ---
; legacy - sar
testcase	{0xD0, 0x3A},			{sar byte [rdx], 1}
testcase	{0xD2, 0x3A},			{sar byte [rdx], cl}
testcase	{0xC0, 0x3A, 0x03},		{sar byte [rdx], 0x03}
testcase	{0x66, 0xD1, 0x3A},		{sar word [rdx], 1}
testcase	{0x66, 0xD3, 0x3A},		{sar word [rdx], cl}
testcase	{0x66, 0xC1, 0x3A, 0x03},	{sar word [rdx], 0x03}
testcase	{0xD1, 0x3A},			{sar dword [rdx], 1}
testcase	{0xD3, 0x3A},			{sar dword [rdx], cl}
testcase	{0xC1, 0x3A, 0x03},		{sar dword [rdx], 0x03}
testcase	{0x48, 0xD1, 0x3A},		{sar qword [rdx], 1}
testcase	{0x48, 0xD3, 0x3A},		{sar qword [rdx], cl}
testcase	{0x48, 0xC1, 0x3A, 0x03},	{sar qword [rdx], 0x03}
; legacy - shl
testcase	{0xD0, 0x22},			{shl byte [rdx], 1}
testcase	{0xD2, 0x22},			{shl byte [rdx], cl}
testcase	{0xC0, 0x22, 0x03},		{shl byte [rdx], 0x03}
testcase	{0x66, 0xD1, 0x22},		{shl word [rdx], 1}
testcase	{0x66, 0xD3, 0x22},		{shl word [rdx], cl}
testcase	{0x66, 0xC1, 0x22, 0x03},	{shl word [rdx], 0x03}
testcase	{0xD1, 0x22},			{shl dword [rdx], 1}
testcase	{0xD3, 0x22},			{shl dword [rdx], cl}
testcase	{0xC1, 0x22, 0x03},		{shl dword [rdx], 0x03}
testcase	{0x48, 0xD1, 0x22},		{shl qword [rdx], 1}
testcase	{0x48, 0xD3, 0x22},		{shl qword [rdx], cl}
testcase	{0x48, 0xC1, 0x22, 0x03},	{shl qword [rdx], 0x03}
; legacy - shr
testcase	{0xD0, 0x2A},			{shr byte [rdx], 1}
testcase	{0xD2, 0x2A},			{shr byte [rdx], cl}
testcase	{0xC0, 0x2A, 0x03},		{shr byte [rdx], 0x03}
testcase	{0x66, 0xD1, 0x2A},		{shr word [rdx], 1}
testcase	{0x66, 0xD3, 0x2A},		{shr word [rdx], cl}
testcase	{0x66, 0xC1, 0x2A, 0x03},	{shr word [rdx], 0x03}
testcase	{0xD1, 0x2A},			{shr dword [rdx], 1}
testcase	{0xD3, 0x2A},			{shr dword [rdx], cl}
testcase	{0xC1, 0x2A, 0x03},		{shr dword [rdx], 0x03}
testcase	{0x48, 0xD1, 0x2A},		{shr qword [rdx], 1}
testcase	{0x48, 0xD3, 0x2A},		{shr qword [rdx], cl}
testcase	{0x48, 0xC1, 0x2A, 0x03},	{shr qword [rdx], 0x03}

; implicit evex through EGPRs - sar
testcase	{0xD5, 0x11, 0xD0, 0x3A},		{sar byte [r26], 1}
testcase	{0xD5, 0x11, 0xD2, 0x3A},		{sar byte [r26], cl}
testcase	{0xD5, 0x11, 0xC0, 0x3A, 0x03},		{sar byte [r26], 0x03}
testcase	{0x66, 0xD5, 0x11, 0xD1, 0x3A},		{sar word [r26], 1}
testcase	{0x66, 0xD5, 0x11, 0xD3, 0x3A},		{sar word [r26], cl}
testcase	{0x66, 0xD5, 0x11, 0xC1, 0x3A, 0x03},	{sar word [r26], 0x03}
testcase	{0xD5, 0x11, 0xD1, 0x3A},		{sar dword [r26], 1}
testcase	{0xD5, 0x11, 0xD3, 0x3A},		{sar dword [r26], cl}
testcase	{0xD5, 0x11, 0xC1, 0x3A, 0x03},		{sar dword [r26], 0x03}
testcase	{0xD5, 0x19, 0xD1, 0x3A},		{sar qword [r26], 1}
testcase	{0xD5, 0x19, 0xD3, 0x3A},		{sar qword [r26], cl}
testcase	{0xD5, 0x19, 0xC1, 0x3A, 0x03},		{sar qword [r26], 0x03}
; implicit evex through ND - sar
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD0, 0x3A},		{sar r25b, byte [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD2, 0x3A},		{sar r25b, byte [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC0, 0x3A, 0x03},	{sar r25b, byte [r26], 0x03}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD1, 0x3A},		{sar r25w, word [r26], 1}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD3, 0x3A},		{sar r25w, word [r26], cl}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xC1, 0x3A, 0x03},	{sar r25w, word [r26], 0x03}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD1, 0x3A},		{sar r25d, dword [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD3, 0x3A},		{sar r25d, dword [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC1, 0x3A, 0x03},	{sar r25d, dword [r26], 0x03}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x3A},		{sar r25, qword [r26], 1}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x3A},		{sar r25, qword [r26], cl}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x3A, 0x03},	{sar r25, qword [r26], 0x03}
; implicit evex through EGPRs - shl
testcase	{0xD5, 0x11, 0xD0, 0x22},		{shl byte [r26], 1}
testcase	{0xD5, 0x11, 0xD2, 0x22},		{shl byte [r26], cl}
testcase	{0xD5, 0x11, 0xC0, 0x22, 0x03},		{shl byte [r26], 0x03}
testcase	{0x66, 0xD5, 0x11, 0xD1, 0x22},		{shl word [r26], 1}
testcase	{0x66, 0xD5, 0x11, 0xD3, 0x22},		{shl word [r26], cl}
testcase	{0x66, 0xD5, 0x11, 0xC1, 0x22, 0x03},	{shl word [r26], 0x03}
testcase	{0xD5, 0x11, 0xD1, 0x22},		{shl dword [r26], 1}
testcase	{0xD5, 0x11, 0xD3, 0x22},		{shl dword [r26], cl}
testcase	{0xD5, 0x11, 0xC1, 0x22, 0x03},		{shl dword [r26], 0x03}
testcase	{0xD5, 0x19, 0xD1, 0x22},		{shl qword [r26], 1}
testcase	{0xD5, 0x19, 0xD3, 0x22},		{shl qword [r26], cl}
testcase	{0xD5, 0x19, 0xC1, 0x22, 0x03},		{shl qword [r26], 0x03}
; implicit evex through ND - shl
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD0, 0x22},		{shl r25b, byte [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD2, 0x22},		{shl r25b, byte [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC0, 0x22, 0x03},	{shl r25b, byte [r26], 0x03}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD1, 0x22},		{shl r25w, word [r26], 1}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD3, 0x22},		{shl r25w, word [r26], cl}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xC1, 0x22, 0x03},	{shl r25w, word [r26], 0x03}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD1, 0x22},		{shl r25d, dword [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD3, 0x22},		{shl r25d, dword [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC1, 0x22, 0x03},	{shl r25d, dword [r26], 0x03}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x22},		{shl r25, qword [r26], 1}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x22},		{shl r25, qword [r26], cl}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x22, 0x03},	{shl r25, qword [r26], 0x03}
; implicit evex through EGPRs - shr
testcase	{0xD5, 0x11, 0xD0, 0x2A},		{shr byte [r26], 1}
testcase	{0xD5, 0x11, 0xD2, 0x2A},		{shr byte [r26], cl}
testcase	{0xD5, 0x11, 0xC0, 0x2A, 0x03},		{shr byte [r26], 0x03}
testcase	{0x66, 0xD5, 0x11, 0xD1, 0x2A},		{shr word [r26], 1}
testcase	{0x66, 0xD5, 0x11, 0xD3, 0x2A},		{shr word [r26], cl}
testcase	{0x66, 0xD5, 0x11, 0xC1, 0x2A, 0x03},	{shr word [r26], 0x03}
testcase	{0xD5, 0x11, 0xD1, 0x2A},		{shr dword [r26], 1}
testcase	{0xD5, 0x11, 0xD3, 0x2A},		{shr dword [r26], cl}
testcase	{0xD5, 0x11, 0xC1, 0x2A, 0x03},		{shr dword [r26], 0x03}
testcase	{0xD5, 0x19, 0xD1, 0x2A},		{shr qword [r26], 1}
testcase	{0xD5, 0x19, 0xD3, 0x2A},		{shr qword [r26], cl}
testcase	{0xD5, 0x19, 0xC1, 0x2A, 0x03},		{shr qword [r26], 0x03}
; implicit evex through ND - shr
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD0, 0x2A},		{shr r25b, byte [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD2, 0x2A},		{shr r25b, byte [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC0, 0x2A, 0x03},	{shr r25b, byte [r26], 0x03}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD1, 0x2A},		{shr r25w, word [r26], 1}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xD3, 0x2A},		{shr r25w, word [r26], cl}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xC1, 0x2A, 0x03},	{shr r25w, word [r26], 0x03}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD1, 0x2A},		{shr r25d, dword [r26], 1}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xD3, 0x2A},		{shr r25d, dword [r26], cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xC1, 0x2A, 0x03},	{shr r25d, dword [r26], 0x03}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD1, 0x2A},		{shr r25, qword [r26], 1}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xD3, 0x2A},		{shr r25, qword [r26], cl}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xC1, 0x2A, 0x03},	{shr r25, qword [r26], 0x03}

; --- sarx instruction ---
; legacy
testcase	{0xC4, 0xE2, 0x2A, 0xF7, 0x0A},	{sarx ecx, [rdx], r10d}
testcase	{0xC4, 0xE2, 0xAA, 0xF7, 0x0A},	{sarx rcx, [rdx], r10}
; implicit evex through EGPRs
testcase	{0x62, 0x62, 0x2E, 0x08, 0xF7, 0x0A},	{sarx r25d, [rdx], r10d}
testcase	{0x62, 0x62, 0xAE, 0x08, 0xF7, 0x0A},	{sarx r25, [rdx], r10}
; --- shlx instruction ---
; legacy
testcase	{0xC4, 0xE2, 0x29, 0xF7, 0x0A},	{shlx ecx, [rdx], r10d}
testcase	{0xC4, 0xE2, 0xA9, 0xF7, 0x0A},	{shlx rcx, [rdx], r10}
; implicit evex through EGPRs
testcase	{0x62, 0x62, 0x2D, 0x08, 0xF7, 0x0A},	{shlx r25d, [rdx], r10d}
testcase	{0x62, 0x62, 0xAD, 0x08, 0xF7, 0x0A},	{shlx r25, [rdx], r10}
; --- shrx instruction ---
; legacy
testcase	{0xC4, 0xE2, 0x2B, 0xF7, 0x0A},	{shrx ecx, [rdx], r10d}
testcase	{0xC4, 0xE2, 0xAB, 0xF7, 0x0A},	{shrx rcx, [rdx], r10}
; implicit evex through EGPRs
testcase	{0x62, 0x62, 0x2F, 0x08, 0xF7, 0x0A},	{shrx r25d, [rdx], r10d}
testcase	{0x62, 0x62, 0xAF, 0x08, 0xF7, 0x0A},	{shrx r25, [rdx], r10}

; --- shld instruction ---
; legacy
testcase	{0x66, 0x0F, 0xA4, 0x02, 0x03},		{shld [rdx], ax, 0x03}
testcase	{0x0F, 0xA4, 0x02, 0x03},		{shld [rdx], eax, 0x03}
testcase	{0x48, 0x0F, 0xA4, 0x02, 0x03},		{shld [rdx], rax, 0x03}
testcase	{0x66, 0x0F, 0xA5, 0x02},		{shld [rdx], ax, cl}
testcase	{0x0F, 0xA5, 0x02},			{shld [rdx], eax, cl}
testcase	{0x48, 0x0F, 0xA5, 0x02},		{shld [rdx], rax, cl}

; implicit rex2 through EGPRs
testcase	{0x66, 0xD5, 0x91, 0xA4, 0x02, 0x03},	{shld [r26], ax, 0x03}
testcase	{0xD5, 0x91, 0xA4, 0x02, 0x03},		{shld [r26], eax, 0x03}
testcase	{0xD5, 0x99, 0xA4, 0x02, 0x03},		{shld [r26], rax, 0x03}
testcase	{0x66, 0xD5, 0x91, 0xA5, 0x02},		{shld [r26], ax, cl}
testcase	{0xD5, 0x91, 0xA5, 0x02},		{shld [r26], eax, cl}
testcase	{0xD5, 0x99, 0xA5, 0x02},		{shld [r26], rax, cl}

; implicit evex through ND
testcase	{0x62, 0xDC, 0x35, 0x10, 0x24, 0x02, 0x03},	{shld r25w, [r26], ax, 0x03}
testcase	{0x62, 0xDC, 0x34, 0x10, 0x24, 0x02, 0x03},	{shld r25d, [r26], eax, 0x03}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0x24, 0x02, 0x03},	{shld r25, [r26], rax, 0x03}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xA5, 0x02},		{shld r25w, [r26], ax, cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xA5, 0x02},		{shld r25d, [r26], eax, cl}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xA5, 0x02},		{shld r25, [r26], rax, cl}

; implicit evex through ND
testcase	{0x62, 0xDC, 0x7D, 0x0C, 0x24, 0x02, 0x03},	{shld{nf} [r26], ax, 0x03}
testcase	{0x62, 0xDC, 0x7C, 0x0C, 0x24, 0x02, 0x03},	{shld{nf} [r26], eax, 0x03}
testcase	{0x62, 0xDC, 0xFC, 0x0C, 0x24, 0x02, 0x03},	{shld{nf} [r26], rax, 0x03}
testcase	{0x62, 0xDC, 0x7D, 0x0C, 0xA5, 0x02},		{shld{nf} [r26], ax, cl}
testcase	{0x62, 0xDC, 0x7C, 0x0C, 0xA5, 0x02},		{shld{nf} [r26], eax, cl}
testcase	{0x62, 0xDC, 0xFC, 0x0C, 0xA5, 0x02},		{shld{nf} [r26], rax, cl}

; --- shrd instruction ---
; legacy
testcase	{0x66, 0x0F, 0xAC, 0x02, 0x03},		{shrd [rdx], ax, 0x03}
testcase	{0x0F, 0xAC, 0x02, 0x03},		{shrd [rdx], eax, 0x03}
testcase	{0x48, 0x0F, 0xAC, 0x02, 0x03},		{shrd [rdx], rax, 0x03}
testcase	{0x66, 0x0F, 0xAD, 0x02},		{shrd [rdx], ax, cl}
testcase	{0x0F, 0xAD, 0x02},			{shrd [rdx], eax, cl}
testcase	{0x48, 0x0F, 0xAD, 0x02},		{shrd [rdx], rax, cl}

; implicit rex2 through EGPRs
testcase	{0x66, 0xD5, 0x91, 0xAC, 0x02, 0x03},	{shrd [r26], ax, 0x03}
testcase	{0xD5, 0x91, 0xAC, 0x02, 0x03},		{shrd [r26], eax, 0x03}
testcase	{0xD5, 0x99, 0xAC, 0x02, 0x03},		{shrd [r26], rax, 0x03}
testcase	{0x66, 0xD5, 0x91, 0xAD, 0x02},		{shrd [r26], ax, cl}
testcase	{0xD5, 0x91, 0xAD, 0x02},		{shrd [r26], eax, cl}
testcase	{0xD5, 0x99, 0xAD, 0x02},		{shrd [r26], rax, cl}

; implicit evex through ND
testcase	{0x62, 0xDC, 0x35, 0x10, 0x2C, 0x02, 0x03},	{shrd r25w, [r26], ax, 0x03}
testcase	{0x62, 0xDC, 0x34, 0x10, 0x2C, 0x02, 0x03},	{shrd r25d, [r26], eax, 0x03}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0x2C, 0x02, 0x03},	{shrd r25, [r26], rax, 0x03}
testcase	{0x62, 0xDC, 0x35, 0x10, 0xAD, 0x02},		{shrd r25w, [r26], ax, cl}
testcase	{0x62, 0xDC, 0x34, 0x10, 0xAD, 0x02},		{shrd r25d, [r26], eax, cl}
testcase	{0x62, 0xDC, 0xB4, 0x10, 0xAD, 0x02},		{shrd r25, [r26], rax, cl}

; implicit evex through ND
testcase	{0x62, 0xDC, 0x7D, 0x0C, 0x2C, 0x02, 0x03},	{shrd{nf} [r26], ax, 0x03}
testcase	{0x62, 0xDC, 0x7C, 0x0C, 0x2C, 0x02, 0x03},	{shrd{nf} [r26], eax, 0x03}
testcase	{0x62, 0xDC, 0xFC, 0x0C, 0x2C, 0x02, 0x03},	{shrd{nf} [r26], rax, 0x03}
testcase	{0x62, 0xDC, 0x7D, 0x0C, 0xAD, 0x02},		{shrd{nf} [r26], ax, cl}
testcase	{0x62, 0xDC, 0x7C, 0x0C, 0xAD, 0x02},		{shrd{nf} [r26], eax, cl}
testcase	{0x62, 0xDC, 0xFC, 0x0C, 0xAD, 0x02},		{shrd{nf} [r26], rax, cl}