Subversion Repositories Kolibri OS

Rev

Rev 4478 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4478 Rev 6467
Line 1... Line 1...
1
; flat assembler core
1
; flat assembler core
2
; Copyright (c) 1999-2013, Tomasz Grysztar.
2
; Copyright (c) 1999-2016, Tomasz Grysztar.
3
; All rights reserved.
3
; All rights reserved.
Line -... Line 4...
-
 
4
 
-
 
5
avx_single_source_pd_instruction_er_evex:
4
 
6
	or	[vex_required],8
-
 
7
avx_single_source_pd_instruction_er:
-
 
8
	or	[operand_flags],2+4+8
-
 
9
	jmp	avx_pd_instruction
5
avx_single_source_pd_instruction:
10
avx_single_source_pd_instruction_sae_evex:
-
 
11
	or	[vex_required],8
6
	or	[vex_required],2
12
	or	[operand_flags],2+4
7
	jmp	avx_pd_instruction
13
	jmp	avx_pd_instruction
8
avx_pd_instruction_imm8:
14
avx_pd_instruction_imm8:
-
 
15
	mov	[immediate_size],1
-
 
16
	jmp	avx_pd_instruction
-
 
17
avx_pd_instruction_er:
-
 
18
	or	[operand_flags],8
-
 
19
avx_pd_instruction_sae:
9
	mov	[immediate_size],1
20
	or	[operand_flags],4
10
avx_pd_instruction:
21
avx_pd_instruction:
-
 
22
	mov	[opcode_prefix],66h
-
 
23
	or	[rex_prefix],80h
-
 
24
	mov	cx,0800h
-
 
25
	jmp	avx_instruction_with_broadcast
11
	mov	[opcode_prefix],66h
26
avx_pd_instruction_38_evex:
-
 
27
	or	[vex_required],8
-
 
28
	mov	[supplemental_code],al
12
	mov	[mmx_size],0
29
	mov	al,38h
-
 
30
	jmp	avx_pd_instruction
-
 
31
avx_cvtps2dq_instruction:
-
 
32
	mov	[opcode_prefix],66h
-
 
33
	jmp	avx_single_source_ps_instruction_er
-
 
34
avx_cvtudq2ps_instruction:
-
 
35
	mov	[opcode_prefix],0F2h
-
 
36
avx_single_source_ps_instruction_er_evex:
13
	jmp	avx_instruction
37
	or	[vex_required],8
-
 
38
avx_single_source_ps_instruction_er:
-
 
39
	or	[operand_flags],2+4+8
-
 
40
	jmp	avx_ps_instruction
-
 
41
avx_single_source_ps_instruction_noevex:
14
avx_single_source_ps_instruction:
42
	or	[operand_flags],2
15
	or	[vex_required],2
43
	or	[vex_required],2
16
	jmp	avx_ps_instruction
44
	jmp	avx_ps_instruction
17
avx_ps_instruction_imm8:
45
avx_ps_instruction_imm8:
-
 
46
	mov	[immediate_size],1
-
 
47
	jmp	avx_ps_instruction
-
 
48
avx_ps_instruction_er:
-
 
49
	or	[operand_flags],8
-
 
50
avx_ps_instruction_sae:
18
	mov	[immediate_size],1
51
	or	[operand_flags],4
-
 
52
avx_ps_instruction:
-
 
53
	mov	cx,0400h
-
 
54
	jmp	avx_instruction_with_broadcast
19
avx_ps_instruction:
55
avx_ps_instruction_66_38_evex:
-
 
56
	or	[vex_required],8
-
 
57
	mov	[opcode_prefix],66h
-
 
58
	mov	[supplemental_code],al
20
	mov	[mmx_size],0
59
	mov	al,38h
-
 
60
	jmp	avx_ps_instruction
-
 
61
avx_sd_instruction_er:
21
	jmp	avx_instruction
62
	or	[operand_flags],8
22
avx_sd_instruction_imm8:
63
avx_sd_instruction_sae:
23
	mov	[immediate_size],1
64
	or	[operand_flags],4
24
avx_sd_instruction:
65
avx_sd_instruction:
25
	mov	[opcode_prefix],0F2h
66
	mov	[opcode_prefix],0F2h
-
 
67
	or	[rex_prefix],80h
26
	mov	[mmx_size],8
68
	mov	cl,8
-
 
69
	jmp	avx_instruction
-
 
70
avx_ss_instruction_er:
27
	jmp	avx_instruction
71
	or	[operand_flags],8
28
avx_ss_instruction_imm8:
72
avx_ss_instruction_sae:
29
	mov	[immediate_size],1
73
	or	[operand_flags],4
30
avx_ss_instruction:
74
avx_ss_instruction:
31
	mov	[opcode_prefix],0F3h
-
 
32
	mov	[mmx_size],4
-
 
33
	jmp	avx_instruction
-
 
34
avx_cmp_pd_instruction:
-
 
35
	mov	[opcode_prefix],66h
-
 
36
avx_cmp_ps_instruction:
-
 
37
	mov	[mmx_size],0
-
 
38
	mov	byte [value],al
75
	mov	[opcode_prefix],0F3h
39
	mov	al,0C2h
-
 
40
	jmp	avx_instruction
-
 
41
avx_cmp_sd_instruction:
-
 
42
	mov	[opcode_prefix],0F2h
-
 
43
	mov	[mmx_size],8
-
 
44
	mov	byte [value],al
-
 
45
	mov	al,0C2h
-
 
46
	jmp	avx_instruction
-
 
47
avx_cmp_ss_instruction:
-
 
48
	mov	[opcode_prefix],0F3h
-
 
49
	mov	[mmx_size],4
-
 
50
	mov	byte [value],al
-
 
51
	mov	al,0C2h
76
	mov	cl,4
52
	jmp	avx_instruction
77
	jmp	avx_instruction
53
avx_comiss_instruction:
78
avx_ss_instruction_noevex:
-
 
79
	or	[vex_required],2
-
 
80
	jmp	avx_ss_instruction
-
 
81
avx_single_source_q_instruction_38_evex:
-
 
82
	or	[operand_flags],2
-
 
83
avx_q_instruction_38_evex:
-
 
84
	or	[vex_required],8
-
 
85
avx_q_instruction_38:
-
 
86
	mov	[supplemental_code],al
-
 
87
	mov	al,38h
-
 
88
	jmp	avx_q_instruction
-
 
89
avx_q_instruction_38_w1_evex:
-
 
90
	or	[vex_required],8
-
 
91
avx_q_instruction_38_w1:
-
 
92
	or	[rex_prefix],8
-
 
93
	jmp	avx_q_instruction_38
-
 
94
avx_q_instruction_3a_imm8_evex:
-
 
95
	mov	[immediate_size],1
-
 
96
	or	[vex_required],8
-
 
97
	mov	[supplemental_code],al
-
 
98
	mov	al,3Ah
-
 
99
	jmp	avx_q_instruction
-
 
100
avx_q_instruction_evex:
-
 
101
	or	[vex_required],8
-
 
102
avx_q_instruction:
-
 
103
	or	[rex_prefix],80h
-
 
104
	mov	ch,8
-
 
105
	jmp	avx_pi_instruction
-
 
106
avx_single_source_d_instruction_38_evex:
-
 
107
	or	[vex_required],8
-
 
108
avx_single_source_d_instruction_38:
-
 
109
	or	[operand_flags],2
-
 
110
	jmp	avx_d_instruction_38
-
 
111
avx_d_instruction_38_evex:
-
 
112
	or	[vex_required],8
-
 
113
avx_d_instruction_38:
-
 
114
	mov	[supplemental_code],al
-
 
115
	mov	al,38h
-
 
116
	jmp	avx_d_instruction
-
 
117
avx_d_instruction_3a_imm8_evex:
-
 
118
	mov	[immediate_size],1
-
 
119
	or	[vex_required],8
-
 
120
	mov	[supplemental_code],al
-
 
121
	mov	al,3Ah
-
 
122
	jmp	avx_d_instruction
-
 
123
avx_single_source_d_instruction_imm8:
54
	or	[vex_required],2
124
	or	[operand_flags],2
55
	mov	[mmx_size],4
125
	mov	[immediate_size],1
-
 
126
	jmp	avx_d_instruction
-
 
127
avx_d_instruction_evex:
56
	jmp	avx_instruction
128
	or	[vex_required],8
-
 
129
avx_d_instruction:
-
 
130
	mov	ch,4
-
 
131
	jmp	avx_pi_instruction
-
 
132
avx_single_source_bw_instruction_38:
-
 
133
	or	[operand_flags],2
-
 
134
avx_bw_instruction_38:
-
 
135
	mov	[supplemental_code],al
-
 
136
	mov	al,38h
-
 
137
avx_bw_instruction:
-
 
138
	xor	ch,ch
-
 
139
      avx_pi_instruction:
-
 
140
	mov	[opcode_prefix],66h
-
 
141
	xor	cl,cl
-
 
142
	jmp	avx_instruction_with_broadcast
-
 
143
avx_bw_instruction_38_w1_evex:
-
 
144
	or	[rex_prefix],8
-
 
145
avx_bw_instruction_38_evex:
-
 
146
	or	[vex_required],8
-
 
147
	jmp	avx_bw_instruction_38
-
 
148
avx_pd_instruction_noevex:
57
avx_comisd_instruction:
149
	xor	cl,cl
58
	or	[vex_required],2
150
	or	[vex_required],2
59
	mov	[opcode_prefix],66h
-
 
60
	mov	[mmx_size],8
151
	mov	[opcode_prefix],66h
61
	jmp	avx_instruction
152
	jmp	avx_instruction
62
avx_haddps_instruction:
-
 
63
	mov	[opcode_prefix],0F2h
-
 
64
	mov	[mmx_size],0
-
 
65
	jmp	avx_instruction
-
 
66
avx_movshdup_instruction:
153
avx_ps_instruction_noevex:
67
	or	[vex_required],2
154
	or	[vex_required],2
68
	mov	[opcode_prefix],0F3h
155
	mov	[opcode_prefix],0F2h
69
	mov	[mmx_size],0
156
	xor	cl,cl
70
	jmp	avx_instruction
-
 
71
avx_128bit_instruction:
-
 
72
	mov	[mmx_size],16
-
 
73
	mov	[opcode_prefix],66h
157
	jmp	avx_instruction
-
 
158
avx_instruction:
-
 
159
	xor	ch,ch
-
 
160
      avx_instruction_with_broadcast:
-
 
161
	mov	[mmx_size],cl
74
avx_instruction:
162
	mov	[broadcast_size],ch
75
	mov	[base_code],0Fh
163
	mov	[base_code],0Fh
76
	mov	[extended_code],al
164
	mov	[extended_code],al
77
      avx_common:
165
      avx_xop_common:
78
	or	[vex_required],1
166
	or	[vex_required],1
79
	lods	byte [esi]
167
	lods	byte [esi]
80
	call	get_size_operator
168
	call	get_size_operator
81
	cmp	al,10h
169
	cmp	al,10h
82
	jne	invalid_operand
170
	jne	invalid_operand
83
      avx_reg:
171
      avx_reg:
84
	lods	byte [esi]
172
	lods	byte [esi]
85
	call	convert_avx_register
173
	call	convert_avx_register
-
 
174
	mov	[postbyte_register],al
86
	mov	[postbyte_register],al
175
	call	take_avx512_mask
87
      avx_vex_reg:
176
      avx_vex_reg:
88
	test	[vex_required],2
177
	test	[operand_flags],2
89
	jnz	avx_vex_reg_ok
178
	jnz	avx_vex_reg_ok
90
	lods	byte [esi]
179
	lods	byte [esi]
91
	cmp	al,','
180
	cmp	al,','
92
	jne	invalid_operand
181
	jne	invalid_operand
93
	call	take_avx_register
182
	call	take_avx_register
94
	mov	[vex_register],al
183
	mov	[vex_register],al
95
      avx_vex_reg_ok:
184
      avx_vex_reg_ok:
-
 
185
	mov	al,[mmx_size]
-
 
186
	or	al,al
-
 
187
	jz	avx_regs_size_ok
-
 
188
	mov	ah,[operand_size]
-
 
189
	or	ah,ah
-
 
190
	jz	avx_regs_size_ok
96
	cmp	[mmx_size],0
191
	cmp	al,ah
-
 
192
	je	avx_regs_size_ok
97
	je	avx_regs_size_ok
193
	ja	invalid_operand_size
98
	cmp	ah,16
194
	cmp	ah,16
99
	jne	invalid_operand
195
	jne	invalid_operand_size
100
      avx_regs_size_ok:
196
      avx_regs_size_ok:
101
	lods	byte [esi]
197
	lods	byte [esi]
102
	cmp	al,','
198
	cmp	al,','
-
 
199
	jne	invalid_operand
103
	jne	invalid_operand
200
      avx_regs_rm:
104
	call	take_avx_rm
201
	call	take_avx_rm
105
	jc	avx_regs_reg
202
	jc	avx_regs_reg
106
	mov	al,[extended_code]
-
 
107
	mov	ah,[supplemental_code]
203
	mov	al,[immediate_size]
108
	cmp	al,0C2h
-
 
109
	je	sse_cmp_mem_ok
-
 
110
	cmp	ax,443Ah
-
 
111
	je	sse_cmp_mem_ok
-
 
112
	mov	al,[base_code]
-
 
113
	and	al,11011100b
-
 
114
	cmp	al,11001100b
-
 
115
	je	sse_cmp_mem_ok
-
 
116
	cmp	[immediate_size],1
204
	cmp	al,1
117
	je	mmx_imm8
205
	je	mmx_imm8
-
 
206
	jb	instruction_ready
118
	cmp	[immediate_size],0
207
	cmp	al,-4
119
	jge	instruction_ready
208
	je	sse_cmp_mem_ok
120
	cmp	byte [esi],','
209
	cmp	byte [esi],','
121
	jne	invalid_operand
210
	jne	invalid_operand
122
	inc	esi
211
	inc	esi
123
	call	take_avx_register
212
	call	take_avx_register
-
 
213
	shl	al,4
124
	shl	al,4
214
	jc	invalid_operand
125
	or	byte [value],al
215
	or	byte [value],al
126
	test	al,80h
216
	test	al,80h
127
	jz	avx_regs_mem_reg_store
217
	jz	avx_regs_mem_reg_store
128
	cmp	[code_type],64
218
	cmp	[code_type],64
Line 132... Line 222...
132
	call	store_instruction_with_imm8
222
	call	store_instruction_with_imm8
133
	jmp	instruction_assembled
223
	jmp	instruction_assembled
134
      avx_regs_reg:
224
      avx_regs_reg:
135
	mov	bl,al
225
	mov	bl,al
136
	mov	al,[extended_code]
226
	call	take_avx512_rounding
137
	mov	ah,[supplemental_code]
227
	mov	al,[immediate_size]
138
	cmp	al,0C2h
228
	cmp	al,1
139
	je	sse_cmp_nomem_ok
229
	je	mmx_nomem_imm8
140
	cmp	ax,443Ah
-
 
141
	je	sse_cmp_nomem_ok
-
 
142
	mov	al,[base_code]
-
 
143
	and	al,11011100b
-
 
144
	cmp	al,11001100b
-
 
145
	je	sse_cmp_nomem_ok
-
 
146
	cmp	[immediate_size],1
-
 
147
	je	mmx_nomem_imm8
-
 
148
	cmp	[immediate_size],0
230
	jb	nomem_instruction_ready
149
	jge	nomem_instruction_ready
231
	cmp	al,-4
-
 
232
	je	sse_cmp_nomem_ok
150
	lods	byte [esi]
233
	lods	byte [esi]
151
	cmp	al,','
234
	cmp	al,','
152
	jne	invalid_operand
235
	jne	invalid_operand
153
	mov	al,bl
236
	mov	al,bl
154
	shl	al,4
237
	shl	al,4
155
	or	byte [value],al
238
	jc	invalid_operand
-
 
239
	or	byte [value],al
156
	test	al,80h
240
	test	al,80h
157
	jz	avx_regs_reg_
241
	jz	avx_regs_reg_
158
	cmp	[code_type],64
242
	cmp	[code_type],64
159
	jne	invalid_operand
243
	jne	invalid_operand
160
      avx_regs_reg_:
244
      avx_regs_reg_:
Line 167... Line 251...
167
	call	store_instruction_with_imm8
251
	call	store_instruction_with_imm8
168
	jmp	instruction_assembled
252
	jmp	instruction_assembled
169
      avx_regs_reg_reg:
253
      avx_regs_reg_reg:
170
	shl	al,4
254
	shl	al,4
171
	and	byte [value],1111b
255
	jc	invalid_operand
-
 
256
	and	byte [value],1111b
172
	or	byte [value],al
257
	or	byte [value],al
173
	call	take_imm4_if_needed
258
	call	take_imm4_if_needed
174
	call	store_nomem_instruction
259
	call	store_nomem_instruction
175
	mov	al,byte [value]
260
	mov	al,byte [value]
176
	stos	byte [edi]
261
	stos	byte [edi]
Line 181... Line 266...
181
	lods	byte [esi]
266
	lods	byte [esi]
182
	call	get_size_operator
267
	call	get_size_operator
183
	cmp	al,'['
268
	cmp	al,'['
184
	je	take_avx_mem
269
	je	take_avx_mem
185
	mov	[operand_size],cl
270
	cmp	al,10h
186
	cmp	al,10h
-
 
187
	jne	invalid_operand
271
	jne	invalid_operand
188
	lods	byte [esi]
272
	mov	[operand_size],cl
-
 
273
	lods	byte [esi]
189
	call	convert_avx_register
274
	call	convert_avx_register
190
	cmp	[mmx_size],0
275
	or	cl,cl
-
 
276
	jnz	avx_reg_ok
-
 
277
	or	cl,[mmx_size]
191
	je	avx_reg_ok
278
	jz	avx_reg_ok
-
 
279
	cmp	ah,cl
-
 
280
	je	avx_reg_ok
192
	cmp	ah,16
281
	jb	invalid_operand_size
-
 
282
	cmp	ah,16
193
	jne	invalid_operand
283
	jne	invalid_operand_size
194
      avx_reg_ok:
284
      avx_reg_ok:
195
	stc
285
	stc
196
	ret
286
	ret
197
      take_avx_mem:
287
      take_avx_mem:
198
	push	ecx
288
	push	ecx
199
	call	get_address
289
	call	get_address
200
	pop	eax
290
	cmp	byte [esi],'{'
-
 
291
	jne	avx_mem_ok
-
 
292
	inc	esi
-
 
293
	lods	byte [esi]
-
 
294
	cmp	al,1Fh
-
 
295
	jne	invalid_operand
-
 
296
	mov	al,[esi]
-
 
297
	shr	al,4
-
 
298
	cmp	al,1
-
 
299
	jne	invalid_operand
-
 
300
	mov	al,[mmx_size]
-
 
301
	or	al,al
-
 
302
	jnz	avx_mem_broadcast_check
-
 
303
	mov	eax,[esp]
-
 
304
	or	al,al
-
 
305
	jnz	avx_mem_broadcast_check
-
 
306
	mov	al,[broadcast_size]
-
 
307
	mov	[mmx_size],al
-
 
308
	mov	ah,cl
-
 
309
	lods	byte [esi]
-
 
310
	and	al,1111b
-
 
311
	mov	cl,al
-
 
312
	mov	al,[broadcast_size]
-
 
313
	shl	al,cl
-
 
314
	mov	[esp],al
-
 
315
	mov	cl,ah
-
 
316
	jmp	avx_mem_broadcast_ok
-
 
317
      avx_mem_broadcast_check:
-
 
318
	bsf	eax,eax
-
 
319
	xchg	al,[broadcast_size]
-
 
320
	mov	[mmx_size],al
-
 
321
	bsf	eax,eax
-
 
322
	jz	invalid_operand
-
 
323
	mov	ah,[broadcast_size]
-
 
324
	sub	ah,al
-
 
325
	lods	byte [esi]
-
 
326
	and	al,1111b
-
 
327
	cmp	al,ah
-
 
328
	jne	invalid_operand_size
-
 
329
      avx_mem_broadcast_ok:
-
 
330
	or	[vex_required],40h
-
 
331
	lods	byte [esi]
-
 
332
	cmp	al,'}'
-
 
333
	jne	invalid_operand
-
 
334
      avx_mem_ok:
-
 
335
	pop	eax
201
	cmp	[mmx_size],0
336
	or	al,al
202
	jne	avx_smem
337
	jz	avx_mem_size_deciding
203
	xchg	al,[operand_size]
338
	xchg	al,[operand_size]
204
	or	al,al
339
	cmp	[mmx_size],0
-
 
340
	jne	avx_mem_size_enforced
-
 
341
	or	al,al
205
	jz	avx_mem_ok
342
	jz	avx_mem_size_ok
206
	cmp	al,[operand_size]
343
	cmp	al,[operand_size]
207
	jne	operand_sizes_do_not_match
344
	jne	operand_sizes_do_not_match
208
      avx_mem_ok:
345
      avx_mem_size_ok:
209
	clc
346
	clc
210
	ret
347
	ret
211
      avx_smem:
348
      avx_mem_size_deciding:
212
	xchg	al,[operand_size]
349
	mov	al,[operand_size]
213
	or	al,al
350
	cmp	[mmx_size],0
-
 
351
	jne	avx_mem_size_enforced
-
 
352
	cmp	al,16
-
 
353
	je	avx_mem_size_ok
-
 
354
	cmp	al,32
-
 
355
	je	avx_mem_size_ok
-
 
356
	cmp	al,64
-
 
357
	je	avx_mem_size_ok
-
 
358
	or	al,al
-
 
359
	jnz	invalid_operand_size
-
 
360
	call	recoverable_unknown_size
-
 
361
      avx_mem_size_enforced:
-
 
362
	or	al,al
214
	jz	avx_smem_ok
363
	jz	avx_mem_size_ok
215
	cmp	al,[mmx_size]
364
	cmp	al,[mmx_size]
216
	jne	invalid_operand_size
365
	je	avx_mem_size_ok
217
      avx_smem_ok:
366
	jmp	invalid_operand_size
218
	clc
367
      take_imm4_if_needed:
219
	ret
-
 
220
      take_imm4_if_needed:
-
 
221
	cmp	[immediate_size],-3
368
	cmp	[immediate_size],-3
222
	jne	imm4_ok
369
	jne	imm4_ok
223
	push	ebx ecx edx
370
	push	ebx ecx edx
224
	lods	byte [esi]
371
	lods	byte [esi]
225
	cmp	al,','
372
	cmp	al,','
Line 233... Line 380...
233
	or	byte [value],al
380
	or	byte [value],al
234
	pop	edx ecx ebx
381
	pop	edx ecx ebx
235
      imm4_ok:
382
      imm4_ok:
236
	ret
383
	ret
237
 
384
      take_avx512_mask:
-
 
385
	cmp	byte [esi],'{'
-
 
386
	jne	avx512_masking_ok
-
 
387
	test	[operand_flags],10h
-
 
388
	jnz	invalid_operand
-
 
389
	inc	esi
-
 
390
	lods	byte [esi]
-
 
391
	cmp	al,14h
-
 
392
	jne	invalid_operand
-
 
393
	lods	byte [esi]
-
 
394
	mov	ah,al
-
 
395
	shr	ah,4
-
 
396
	cmp	ah,5
-
 
397
	jne	invalid_operand
-
 
398
	or	al,al
-
 
399
	jz	invalid_operand
-
 
400
	and	al,111b
-
 
401
	mov	[mask_register],al
-
 
402
	or	[vex_required],20h
-
 
403
	lods	byte [esi]
-
 
404
	cmp	al,'}'
-
 
405
	jne	invalid_operand
-
 
406
	cmp	byte [esi],'{'
-
 
407
	jne	avx512_masking_ok
-
 
408
	test	[operand_flags],20h
-
 
409
	jnz	invalid_operand
-
 
410
	inc	esi
-
 
411
	lods	byte [esi]
-
 
412
	cmp	al,1Fh
-
 
413
	jne	invalid_operand
-
 
414
	lods	byte [esi]
-
 
415
	or	al,al
-
 
416
	jnz	invalid_operand
-
 
417
	or	[mask_register],80h
-
 
418
	lods	byte [esi]
-
 
419
	cmp	al,'}'
-
 
420
	jne	invalid_operand
-
 
421
      avx512_masking_ok:
-
 
422
	retn
-
 
423
      take_avx512_rounding:
-
 
424
	test	[operand_flags],4+8
-
 
425
	jz	avx512_rounding_done
-
 
426
	cmp	[mmx_size],0
-
 
427
	jne	avx512_rounding_allowed
-
 
428
	cmp	[operand_size],64
-
 
429
	jne	avx512_rounding_done
-
 
430
      avx512_rounding_allowed:
-
 
431
	cmp	byte [esi],','
-
 
432
	jne	avx512_rounding_done
-
 
433
	cmp	byte [esi+1],'{'
-
 
434
	jne	avx512_rounding_done
-
 
435
	add	esi,2
-
 
436
	mov	[rounding_mode],0
-
 
437
	or	[vex_required],40h+80h
-
 
438
	test	[operand_flags],8
-
 
439
	jz	take_sae
-
 
440
	lods	byte [esi]
-
 
441
	cmp	al,1Fh
-
 
442
	jne	invalid_operand
-
 
443
	lods	byte [esi]
-
 
444
	mov	ah,al
-
 
445
	shr	ah,4
-
 
446
	cmp	ah,2
-
 
447
	jne	invalid_operand
-
 
448
	and	al,11b
-
 
449
	mov	[rounding_mode],al
-
 
450
	lods	byte [esi]
-
 
451
	cmp	al,'-'
-
 
452
	jne	invalid_operand
-
 
453
      take_sae:
-
 
454
	lods	byte [esi]
-
 
455
	cmp	al,1Fh
-
 
456
	jne	invalid_operand
-
 
457
	lods	byte [esi]
-
 
458
	cmp	al,30h
-
 
459
	jne	invalid_operand
-
 
460
	lods	byte [esi]
-
 
461
	cmp	al,'}'
-
 
462
	jne	invalid_operand
-
 
463
      avx512_rounding_done:
-
 
464
	retn
-
 
465
 
Line 238... Line 466...
238
avx_single_source_128bit_instruction_38:
466
avx_movdqu_instruction:
-
 
467
	mov	ah,0F3h
239
	or	[vex_required],2
468
	jmp	avx_movdq_instruction
240
avx_128bit_instruction_38:
469
avx_movdqa_instruction:
241
	mov	[mmx_size],16
470
	mov	ah,66h
242
	jmp	avx_instruction_38_setup
471
      avx_movdq_instruction:
243
avx_single_source_instruction_38:
472
	mov	[opcode_prefix],ah
244
	or	[vex_required],2
473
	or	[vex_required],2
245
avx_instruction_38:
-
 
246
	mov	[mmx_size],0
-
 
247
      avx_instruction_38_setup:
-
 
248
	mov	[opcode_prefix],66h
-
 
249
	mov	[supplemental_code],al
-
 
250
	mov	al,38h
-
 
251
	jmp	avx_instruction
474
	jmp	avx_movps_instruction
252
avx_instruction_38_w1:
475
avx512_movdqu16_instruction:
253
	or	[rex_prefix],8
476
	or	[rex_prefix],8
254
	jmp	avx_instruction_38
-
 
255
 
-
 
256
avx_ss_instruction_3a_imm8:
-
 
257
	mov	[mmx_size],4
-
 
258
	jmp	avx_instruction_3a_imm8_setup
-
 
259
avx_sd_instruction_3a_imm8:
-
 
260
	mov	[mmx_size],8
-
 
261
	jmp	avx_instruction_3a_imm8_setup
-
 
262
avx_single_source_128bit_instruction_3a_imm8:
-
 
263
	or	[vex_required],2
-
 
264
avx_128bit_instruction_3a_imm8:
-
 
265
	mov	[mmx_size],16
-
 
266
	jmp	avx_instruction_3a_imm8_setup
-
 
267
avx_triple_source_instruction_3a:
-
 
268
	mov	[mmx_size],0
-
 
269
	mov	[immediate_size],-1
-
 
270
	mov	byte [value],0
-
 
271
	jmp	avx_instruction_3a_setup
-
 
272
avx_single_source_instruction_3a_imm8:
-
 
273
	or	[vex_required],2
-
 
274
avx_instruction_3a_imm8:
-
 
275
	mov	[mmx_size],0
-
 
276
      avx_instruction_3a_imm8_setup:
-
 
277
	mov	[immediate_size],1
-
 
278
      avx_instruction_3a_setup:
-
 
279
	mov	[opcode_prefix],66h
-
 
280
	mov	[supplemental_code],al
-
 
281
	mov	al,3Ah
-
 
282
	jmp	avx_instruction
-
 
283
avx_pclmulqdq_instruction:
477
avx512_movdqu8_instruction:
284
	mov	byte [value],al
-
 
285
	mov	[mmx_size],16
-
 
286
	mov	al,44h
478
	mov	ah,0F2h
287
	jmp	avx_instruction_3a_setup
479
	jmp	avx_movdq_instruction_evex
288
 
-
 
289
avx_permq_instruction:
480
avx512_movdqu64_instruction:
290
	or	[vex_required],2
-
 
291
	or	[rex_prefix],8
481
	or	[rex_prefix],8
292
avx_perm2f128_instruction:
482
avx512_movdqu32_instruction:
293
	mov	[immediate_size],1
-
 
294
	mov	ah,3Ah
483
	mov	ah,0F3h
295
	jmp	avx_perm_instruction
484
	jmp	avx_movdq_instruction_evex
296
avx_permd_instruction:
485
avx512_movdqa64_instruction:
297
	mov	ah,38h
486
	or	[rex_prefix],8
298
      avx_perm_instruction:
487
avx512_movdqa32_instruction:
299
	mov	[opcode_prefix],66h
488
	mov	ah,66h
300
	mov	[base_code],0Fh
489
      avx_movdq_instruction_evex:
301
	mov	[extended_code],ah
490
	mov	[opcode_prefix],ah
302
	mov	[supplemental_code],al
-
 
303
	mov	[mmx_size],0
-
 
304
	or	[vex_required],1
491
	or	[vex_required],8
305
	call	take_avx_register
-
 
306
	cmp	ah,32
-
 
307
	jne	invalid_operand_size
-
 
308
	mov	[postbyte_register],al
-
 
309
	jmp	avx_vex_reg
-
 
310
 
-
 
311
avx_movdqu_instruction:
-
 
312
	mov	[opcode_prefix],0F3h
-
 
313
	jmp	avx_movps_instruction
492
	jmp	avx_movps_instruction
314
avx_movpd_instruction:
493
avx_movpd_instruction:
315
	mov	[opcode_prefix],66h
494
	mov	[opcode_prefix],66h
-
 
495
	or	[rex_prefix],80h
316
avx_movps_instruction:
496
avx_movps_instruction:
317
	mov	[mmx_size],0
-
 
318
	or	[vex_required],2
497
	or	[operand_flags],2
319
	mov	[base_code],0Fh
498
	mov	[base_code],0Fh
320
	mov	[extended_code],al
499
	mov	[extended_code],al
-
 
500
	or	[vex_required],1
-
 
501
	xor	al,al
-
 
502
	mov	[mmx_size],al
-
 
503
	mov	[broadcast_size],al
321
	lods	byte [esi]
504
	lods	byte [esi]
322
	call	get_size_operator
505
	call	get_size_operator
323
	cmp	al,10h
506
	cmp	al,10h
324
	je	avx_reg
507
	je	avx_reg
325
	inc	[extended_code]
508
	inc	[extended_code]
Line 329... Line 512...
329
      avx_mem:
512
      avx_mem:
330
	cmp	al,'['
513
	cmp	al,'['
331
	jne	invalid_operand
514
	jne	invalid_operand
332
	call	get_address
515
	call	get_address
333
	lods	byte [esi]
516
	or	[operand_flags],20h
-
 
517
	call	take_avx512_mask
-
 
518
	lods	byte [esi]
334
	cmp	al,','
519
	cmp	al,','
335
	jne	invalid_operand
520
	jne	invalid_operand
336
	call	take_avx_register
521
	call	take_avx_register
337
	mov	[postbyte_register],al
522
	mov	[postbyte_register],al
338
	jmp	instruction_ready
523
	jmp	instruction_ready
339
avx_movntpd_instruction:
524
avx_movntpd_instruction:
340
	mov	[opcode_prefix],66h
525
	or	[rex_prefix],80h
-
 
526
avx_movntdq_instruction:
-
 
527
	mov	[opcode_prefix],66h
341
avx_movntps_instruction:
528
avx_movntps_instruction:
342
	or	[vex_required],1
529
	mov	[base_code],0Fh
343
	mov	[base_code],0Fh
-
 
344
	mov	[extended_code],al
530
	mov	[extended_code],al
345
	lods	byte [esi]
531
	or	[vex_required],1
-
 
532
	or	[operand_flags],10h
-
 
533
	mov	[mmx_size],0
-
 
534
	lods	byte [esi]
346
	call	get_size_operator
535
	call	get_size_operator
347
	jmp	avx_mem
536
	jmp	avx_mem
348
avx_lddqu_instruction:
537
avx_compress_q_instruction:
349
	mov	[opcode_prefix],0F2h
538
	or	[rex_prefix],8
350
	mov	[mmx_size],0
539
avx_compress_d_instruction:
-
 
540
	or	[vex_required],8
-
 
541
	mov	[mmx_size],0
351
	xor	cx,cx
542
	call	setup_66_0f_38
-
 
543
	lods	byte [esi]
-
 
544
	call	get_size_operator
-
 
545
	cmp	al,10h
-
 
546
	jne	avx_mem
-
 
547
	lods	byte [esi]
-
 
548
	call	convert_avx_register
-
 
549
	mov	bl,al
352
      avx_load_instruction:
550
	call	take_avx512_mask
-
 
551
	lods	byte [esi]
-
 
552
	cmp	al,','
-
 
553
	jne	invalid_operand
-
 
554
	call	take_avx_register
-
 
555
	mov	[postbyte_register],al
-
 
556
	jmp	nomem_instruction_ready
-
 
557
avx_lddqu_instruction:
-
 
558
	mov	ah,0F2h
-
 
559
	or	[vex_required],2
-
 
560
      avx_load_instruction:
353
	mov	[base_code],0Fh
561
	mov	[opcode_prefix],ah
-
 
562
	mov	[base_code],0Fh
354
	mov	[extended_code],al
563
	mov	[extended_code],al
355
	or	[vex_required],1
564
	mov	[mmx_size],0
-
 
565
	or	[vex_required],1
356
	call	take_avx_register
566
	call	take_avx_register
357
	or	cl,cl
567
	mov	[postbyte_register],al
358
	jz	avx_load_reg_ok
-
 
359
	cmp	ah,cl
-
 
360
	jne	invalid_operand
-
 
361
      avx_load_reg_ok:
-
 
362
	cmp	[mmx_size],0
-
 
363
	je	avx_load_reg_
568
	lods	byte [esi]
364
	xor	ah,ah
-
 
365
      avx_load_reg_:
-
 
366
	xchg	ah,[operand_size]
-
 
367
	push	eax
-
 
368
	lods	byte [esi]
-
 
369
	cmp	al,','
569
	cmp	al,','
370
	jne	invalid_operand
570
	jne	invalid_operand
371
	lods	byte [esi]
571
	lods	byte [esi]
372
	call	get_size_operator
572
	call	get_size_operator
373
	cmp	al,10h
573
	cmp	al,'['
-
 
574
	jne	invalid_operand
-
 
575
	call	get_address
-
 
576
	jmp	instruction_ready
-
 
577
avx_movntdqa_instruction:
-
 
578
	mov	[supplemental_code],al
-
 
579
	mov	al,38h
-
 
580
	mov	ah,66h
-
 
581
	jmp	avx_load_instruction
-
 
582
avx_movq_instruction:
-
 
583
	or	[rex_prefix],8
-
 
584
	mov	[mmx_size],8
-
 
585
	jmp	avx_mov_instruction
-
 
586
avx_movd_instruction:
-
 
587
	mov	[mmx_size],4
-
 
588
      avx_mov_instruction:
-
 
589
	or	[vex_required],1
-
 
590
	mov	[opcode_prefix],66h
-
 
591
	mov	[base_code],0Fh
-
 
592
	mov	[extended_code],7Eh
-
 
593
	lods	byte [esi]
-
 
594
	call	get_size_operator
-
 
595
	cmp	al,10h
374
	je	avx_load_reg_reg
596
	je	avx_movd_reg
375
	cmp	al,'['
597
	cmp	al,'['
376
	jne	invalid_operand
598
	jne	invalid_operand
377
	call	get_address
599
	call	get_address
378
	pop	eax
600
	mov	al,[mmx_size]
379
	xchg	ah,[operand_size]
-
 
380
	mov	[postbyte_register],al
-
 
381
	mov	al,[mmx_size]
-
 
382
	or	al,al
601
	not	al
383
	jz	instruction_ready
602
	and	[operand_size],al
-
 
603
	jnz	invalid_operand_size
-
 
604
	lods	byte [esi]
-
 
605
	cmp	al,','
-
 
606
	jne	invalid_operand
384
	or	ah,ah
607
	lods	byte [esi]
-
 
608
	call	get_size_operator
-
 
609
	cmp	al,10h
385
	jz	instruction_ready
610
	jne	invalid_operand
386
	cmp	al,ah
611
	lods	byte [esi]
-
 
612
	call	convert_avx_register
-
 
613
	cmp	ah,16
387
	jne	invalid_operand_size
614
	jne	invalid_operand_size
388
	jmp	instruction_ready
615
	mov	[postbyte_register],al
-
 
616
	cmp	[mmx_size],8
-
 
617
	jne	instruction_ready
-
 
618
	and	[rex_prefix],not 8
-
 
619
	or	[rex_prefix],80h
-
 
620
	mov	[extended_code],0D6h
-
 
621
	jmp	instruction_ready
389
      avx_load_reg_reg:
622
      avx_movd_reg:
390
	lods	byte [esi]
623
	lods	byte [esi]
-
 
624
	cmp	al,0C0h
-
 
625
	jae	avx_movd_xmmreg
-
 
626
	call	convert_register
-
 
627
	cmp	ah,[mmx_size]
-
 
628
	jne	invalid_operand_size
-
 
629
	mov	[operand_size],0
-
 
630
	mov	bl,al
-
 
631
	lods	byte [esi]
-
 
632
	cmp	al,','
-
 
633
	jne	invalid_operand
-
 
634
	lods	byte [esi]
-
 
635
	call	get_size_operator
-
 
636
	cmp	al,10h
-
 
637
	jne	invalid_operand
-
 
638
	lods	byte [esi]
391
	call	convert_avx_register
639
	call	convert_avx_register
392
	cmp	ch,ah
640
	cmp	ah,16
393
	jne	invalid_operand
641
	jne	invalid_operand_size
-
 
642
	mov	[postbyte_register],al
-
 
643
	jmp	nomem_instruction_ready
-
 
644
      avx_movd_xmmreg:
-
 
645
	sub	[extended_code],10h
-
 
646
	call	convert_avx_register
-
 
647
	cmp	ah,16
-
 
648
	jne	invalid_operand_size
-
 
649
	mov	[postbyte_register],al
-
 
650
	mov	[operand_size],0
-
 
651
	lods	byte [esi]
-
 
652
	cmp	al,','
-
 
653
	jne	invalid_operand
-
 
654
	lods	byte [esi]
-
 
655
	call	get_size_operator
-
 
656
	cmp	al,10h
-
 
657
	je	avx_movd_xmmreg_reg
-
 
658
	cmp	al,'['
-
 
659
	jne	invalid_operand
394
	mov	bl,al
660
	call	get_address
-
 
661
	mov	al,[mmx_size]
-
 
662
	cmp	al,8
-
 
663
	jne	avx_movd_xmmreg_mem_ready
-
 
664
	call	avx_movq_xmmreg_xmmreg_opcode
-
 
665
      avx_movd_xmmreg_mem_ready:
-
 
666
	not	al
-
 
667
	test	[operand_size],al
-
 
668
	jnz	invalid_operand_size
-
 
669
	jmp	instruction_ready
-
 
670
      avx_movd_xmmreg_reg:
-
 
671
	lods	byte [esi]
-
 
672
	cmp	al,0C0h
-
 
673
	jae	avx_movq_xmmreg_xmmreg
-
 
674
	call	convert_register
-
 
675
	cmp	ah,[mmx_size]
-
 
676
	jne	invalid_operand_size
-
 
677
	mov	bl,al
395
	pop	eax
678
	jmp	nomem_instruction_ready
396
	xchg	ah,[operand_size]
-
 
397
	mov	[postbyte_register],al
-
 
398
	jmp	nomem_instruction_ready
-
 
399
 
679
      avx_movq_xmmreg_xmmreg:
400
avx_movntdqa_instruction:
-
 
401
	mov	[mmx_size],0
680
	cmp	[mmx_size],8
402
	xor	cx,cx
681
	jne	invalid_operand
403
	jmp	avx_load_instruction_38
-
 
404
avx_broadcastss_instruction:
682
	call	avx_movq_xmmreg_xmmreg_opcode
405
	mov	[mmx_size],4
683
	call	convert_avx_register
406
	xor	cl,cl
684
	cmp	ah,16
407
	mov	ch,16
685
	jne	invalid_operand_size
-
 
686
	mov	bl,al
408
	jmp	avx_load_instruction_38
687
	jmp	nomem_instruction_ready
409
avx_broadcastsd_instruction:
688
      avx_movq_xmmreg_xmmreg_opcode:
410
	mov	[mmx_size],8
689
	and	[rex_prefix],not 8
411
	mov	cl,32
690
	or	[rex_prefix],80h
412
	mov	ch,16
691
	add	[extended_code],10h
413
	jmp	avx_load_instruction_38
692
	mov	[opcode_prefix],0F3h
414
avx_pbroadcastb_instruction:
693
	ret
-
 
694
avx_movddup_instruction:
415
	mov	[mmx_size],1
695
	or	[vex_required],1
416
	jmp	avx_pbroadcast_instruction
696
	mov	[opcode_prefix],0F2h
417
avx_pbroadcastw_instruction:
697
	mov	[base_code],0Fh
-
 
698
	mov	[extended_code],al
418
	mov	[mmx_size],2
699
	or	[rex_prefix],80h
-
 
700
	xor	al,al
-
 
701
	mov	[mmx_size],al
419
	jmp	avx_pbroadcast_instruction
702
	mov	[broadcast_size],al
420
avx_pbroadcastd_instruction:
703
	lods	byte [esi]
-
 
704
	call	get_size_operator
421
	mov	[mmx_size],4
705
	cmp	al,10h
-
 
706
	jne	invalid_operand
-
 
707
	lods	byte [esi]
422
	jmp	avx_pbroadcast_instruction
708
	call	convert_avx_register
-
 
709
	mov	[postbyte_register],al
423
avx_pbroadcastq_instruction:
710
	cmp	ah,16
-
 
711
	ja	avx_movddup_size_ok
424
	mov	[mmx_size],8
712
	mov	[mmx_size],8
425
      avx_pbroadcast_instruction:
713
      avx_movddup_size_ok:
426
	xor	cl,cl
-
 
427
	mov	ch,16
-
 
428
	jmp	avx_load_instruction_38
-
 
429
avx_broadcastf128_instruction:
-
 
430
	mov	[mmx_size],16
-
 
431
	mov	cl,32
-
 
432
	xor	ch,ch
-
 
433
      avx_load_instruction_38:
-
 
434
	mov	[opcode_prefix],66h
714
	call	take_avx512_mask
435
	mov	[supplemental_code],al
715
	jmp	avx_vex_reg_ok
436
	mov	al,38h
-
 
437
	jmp	avx_load_instruction
-
 
438
avx_movlpd_instruction:
716
avx_movlpd_instruction:
439
	mov	[opcode_prefix],66h
717
	mov	[opcode_prefix],66h
440
avx_movlps_instruction:
718
	or	[rex_prefix],80h
-
 
719
avx_movlps_instruction:
441
	mov	[base_code],0Fh
720
	mov	[base_code],0Fh
442
	mov	[extended_code],al
721
	mov	[extended_code],al
443
	mov	[mmx_size],8
722
	mov	[mmx_size],8
444
	or	[vex_required],1
723
	mov	[broadcast_size],0
-
 
724
	or	[vex_required],1
445
	lods	byte [esi]
725
	lods	byte [esi]
446
	call	get_size_operator
726
	call	get_size_operator
447
	cmp	al,10h
727
	cmp	al,10h
448
	jne	avx_movlps_mem
728
	jne	avx_movlps_mem
449
	lods	byte [esi]
729
	lods	byte [esi]
Line 466... Line 746...
466
      avx_movlps_mem:
746
      avx_movlps_mem:
467
	cmp	al,'['
747
	cmp	al,'['
468
	jne	invalid_operand
748
	jne	invalid_operand
469
	call	get_address
749
	call	get_address
470
	mov	al,[operand_size]
750
      avx_movlps_mem_:
-
 
751
	mov	al,[operand_size]
471
	or	al,al
752
	or	al,al
472
	jz	avx_movlps_mem_size_ok
753
	jz	avx_movlps_mem_size_ok
473
	cmp	al,[mmx_size]
754
	cmp	al,[mmx_size]
474
	jne	invalid_operand_size
755
	jne	invalid_operand_size
475
	mov	[operand_size],0
756
	mov	[operand_size],0
Line 501... Line 782...
501
	jne	invalid_operand
782
	jne	invalid_operand
502
	call	take_avx_register
783
	call	take_avx_register
503
	mov	bl,al
784
	mov	bl,al
504
	jmp	nomem_instruction_ready
785
	jmp	nomem_instruction_ready
505
avx_maskmov_w1_instruction:
786
avx_movsd_instruction:
506
	or	[rex_prefix],8
787
	mov	al,0F2h
-
 
788
	mov	cl,8
-
 
789
	or	[rex_prefix],80h
507
avx_maskmov_instruction:
790
	jmp	avx_movs_instruction
-
 
791
avx_movss_instruction:
508
	call	setup_66_0f_38
792
	mov	al,0F3h
509
	mov	[mmx_size],0
793
	mov	cl,4
-
 
794
      avx_movs_instruction:
-
 
795
	mov	[opcode_prefix],al
-
 
796
	mov	[mmx_size],cl
510
	or	[vex_required],1
797
	or	[vex_required],1
511
	lods	byte [esi]
798
	mov	[base_code],0Fh
-
 
799
	mov	[extended_code],10h
-
 
800
	lods	byte [esi]
512
	call	get_size_operator
801
	call	get_size_operator
513
	cmp	al,10h
802
	cmp	al,10h
514
	jne	avx_maskmov_mem
803
	jne	avx_movs_mem
515
	lods	byte [esi]
804
	lods	byte [esi]
516
	call	convert_avx_register
805
	call	convert_avx_register
517
	mov	[postbyte_register],al
806
	cmp	ah,16
-
 
807
	jne	invalid_operand
-
 
808
	mov	[postbyte_register],al
518
	lods	byte [esi]
809
	call	take_avx512_mask
-
 
810
	xor	cl,cl
-
 
811
	xchg	cl,[operand_size]
-
 
812
	lods	byte [esi]
519
	cmp	al,','
813
	cmp	al,','
520
	jne	invalid_operand
814
	jne	invalid_operand
521
	call	take_avx_register
815
	lods	byte [esi]
522
	mov	[vex_register],al
-
 
523
	lods	byte [esi]
-
 
524
	cmp	al,','
816
	call	get_size_operator
525
	jne	invalid_operand
-
 
526
	call	take_avx_rm
817
	cmp	al,10h
527
	jc	invalid_operand
-
 
528
	jmp	instruction_ready
-
 
529
      avx_maskmov_mem:
-
 
530
	cmp	al,'['
-
 
531
	jne	invalid_operand
818
	jne	avx_movs_reg_mem
532
	call	get_address
819
	mov	[operand_size],cl
533
	lods	byte [esi]
820
	lods	byte [esi]
534
	cmp	al,','
821
	call	convert_avx_register
535
	jne	invalid_operand
-
 
536
	call	take_avx_register
-
 
537
	mov	[vex_register],al
822
	mov	[vex_register],al
538
	lods	byte [esi]
823
	lods	byte [esi]
539
	cmp	al,','
824
	cmp	al,','
540
	jne	invalid_operand
825
	jne	invalid_operand
541
	call	take_avx_register
826
	call	take_avx_register
542
	mov	[postbyte_register],al
827
	mov	bl,al
-
 
828
	cmp	bl,8
-
 
829
	jb	nomem_instruction_ready
-
 
830
	inc	[extended_code]
-
 
831
	xchg	bl,[postbyte_register]
543
	add	[supplemental_code],2
832
	jmp	nomem_instruction_ready
-
 
833
      avx_movs_reg_mem:
-
 
834
	cmp	al,'['
-
 
835
	jne	invalid_operand
-
 
836
	call	get_address
-
 
837
	mov	al,[operand_size]
544
	jmp	instruction_ready
838
	or	al,al
-
 
839
	jz	avx_movs_reg_mem_ok
-
 
840
	cmp	al,[mmx_size]
-
 
841
	jne	invalid_operand_size
-
 
842
      avx_movs_reg_mem_ok:
-
 
843
	jmp	instruction_ready
545
      setup_66_0f_38:
844
      avx_movs_mem:
546
	mov	[extended_code],38h
845
	cmp	al,'['
-
 
846
	jne	invalid_operand
-
 
847
	call	get_address
-
 
848
	or	[operand_flags],20h
-
 
849
	call	take_avx512_mask
-
 
850
	jmp	avx_movlps_mem_
-
 
851
 
-
 
852
avx_comiss_instruction:
-
 
853
	or	[operand_flags],2+4+10h
-
 
854
	mov	cl,4
-
 
855
	jmp	avx_instruction
-
 
856
avx_comisd_instruction:
-
 
857
	or	[operand_flags],2+4+10h
-
 
858
	mov	[opcode_prefix],66h
-
 
859
	or	[rex_prefix],80h
-
 
860
	mov	cl,8
-
 
861
	jmp	avx_instruction
-
 
862
avx_movshdup_instruction:
-
 
863
	or	[operand_flags],2
-
 
864
	mov	[opcode_prefix],0F3h
-
 
865
	xor	cl,cl
-
 
866
	jmp	avx_instruction
-
 
867
avx_cvtqq2pd_instruction:
-
 
868
	mov	[opcode_prefix],0F3h
-
 
869
	or	[vex_required],8
-
 
870
	or	[operand_flags],2+4+8
-
 
871
	or	[rex_prefix],8
-
 
872
	mov	cx,0800h
-
 
873
	jmp	avx_instruction_with_broadcast
-
 
874
avx_pshuf_w_instruction:
-
 
875
	mov	[opcode_prefix],al
-
 
876
	or	[operand_flags],2
-
 
877
	mov	[immediate_size],1
-
 
878
	mov	al,70h
-
 
879
	xor	cl,cl
-
 
880
	jmp	avx_instruction
-
 
881
avx_single_source_128bit_instruction_38_noevex:
-
 
882
	or	[operand_flags],2
-
 
883
avx_128bit_instruction_38_noevex:
-
 
884
	mov	cl,16
-
 
885
	jmp	avx_instruction_38_noevex
-
 
886
avx_single_source_instruction_38_noevex:
-
 
887
	or	[operand_flags],2
-
 
888
	jmp	avx_pi_instruction_38_noevex
-
 
889
avx_pi_instruction_38_noevex:
-
 
890
	xor	cl,cl
-
 
891
      avx_instruction_38_noevex:
-
 
892
	or	[vex_required],2
-
 
893
      avx_instruction_38:
-
 
894
	mov	[opcode_prefix],66h
547
	mov	[supplemental_code],al
895
	mov	[supplemental_code],al
548
	mov	[base_code],0Fh
896
	mov	al,38h
-
 
897
	jmp	avx_instruction
-
 
898
avx_ss_instruction_3a_imm8_noevex:
-
 
899
	mov	cl,4
-
 
900
	jmp	avx_instruction_3a_imm8_noevex
-
 
901
avx_sd_instruction_3a_imm8_noevex:
-
 
902
	mov	cl,8
-
 
903
	jmp	avx_instruction_3a_imm8_noevex
-
 
904
avx_single_source_128bit_instruction_3a_imm8_noevex:
-
 
905
	or	[operand_flags],2
-
 
906
avx_128bit_instruction_3a_imm8_noevex:
-
 
907
	mov	cl,16
-
 
908
	jmp	avx_instruction_3a_imm8_noevex
-
 
909
avx_triple_source_instruction_3a_noevex:
-
 
910
	xor	cl,cl
-
 
911
	mov	[immediate_size],-1
-
 
912
	mov	byte [value],0
549
	mov	[opcode_prefix],66h
913
	jmp	avx_instruction_3a_noevex
-
 
914
avx_single_source_instruction_3a_imm8_noevex:
-
 
915
	or	[operand_flags],2
-
 
916
avx_pi_instruction_3a_imm8_noevex:
-
 
917
	xor	cl,cl
-
 
918
      avx_instruction_3a_imm8_noevex:
-
 
919
	mov	[immediate_size],1
-
 
920
      avx_instruction_3a_noevex:
-
 
921
	or	[vex_required],2
-
 
922
      avx_instruction_3a:
-
 
923
	mov	[opcode_prefix],66h
550
	ret
924
	mov	[supplemental_code],al
-
 
925
	mov	al,3Ah
-
 
926
	jmp	avx_instruction
-
 
927
avx_pi_instruction_3a_imm8:
-
 
928
	xor	cl,cl
551
avx_movd_instruction:
929
	mov	[immediate_size],1
-
 
930
	jmp	avx_instruction_3a
-
 
931
avx_pclmulqdq_instruction:
552
	or	[vex_required],1
932
	mov	byte [value],al
-
 
933
	mov	[immediate_size],-4
-
 
934
	or	[vex_required],2
553
	jmp	movd_instruction
935
	mov	cl,16
-
 
936
	mov	al,44h
-
 
937
	jmp	avx_instruction_3a
554
avx_movq_instruction:
938
 
-
 
939
avx512_single_source_pd_instruction_sae_imm8:
-
 
940
	or	[operand_flags],2
-
 
941
avx512_pd_instruction_sae_imm8:
-
 
942
	or	[rex_prefix],8
-
 
943
	mov	cx,0800h
-
 
944
	jmp	avx512_instruction_sae_imm8
-
 
945
avx512_single_source_ps_instruction_sae_imm8:
-
 
946
	or	[operand_flags],2
-
 
947
avx512_ps_instruction_sae_imm8:
-
 
948
	mov	cx,0400h
-
 
949
	jmp	avx512_instruction_sae_imm8
-
 
950
avx512_sd_instruction_sae_imm8:
-
 
951
	or	[rex_prefix],8
-
 
952
	mov	cx,0008h
-
 
953
	jmp	avx512_instruction_sae_imm8
-
 
954
avx512_ss_instruction_sae_imm8:
555
	or	[vex_required],1
955
	mov	cx,0004h
-
 
956
      avx512_instruction_sae_imm8:
-
 
957
	or	[operand_flags],4
-
 
958
      avx512_instruction_imm8:
-
 
959
	or	[vex_required],8
556
	jmp	movq_instruction
960
	mov	[opcode_prefix],66h
-
 
961
	mov	[immediate_size],1
-
 
962
	mov	[supplemental_code],al
-
 
963
	mov	al,3Ah
-
 
964
	jmp	avx_instruction_with_broadcast
-
 
965
avx512_pd_instruction_er:
-
 
966
	or	[operand_flags],4+8
-
 
967
	jmp	avx512_pd_instruction
-
 
968
avx512_single_source_pd_instruction_sae:
-
 
969
	or	[operand_flags],4
-
 
970
avx512_single_source_pd_instruction:
-
 
971
	or	[operand_flags],2
-
 
972
avx512_pd_instruction:
-
 
973
	or	[rex_prefix],8
-
 
974
	mov	cx,0800h
-
 
975
	jmp	avx512_instruction
-
 
976
avx512_ps_instruction_er:
-
 
977
	or	[operand_flags],4+8
-
 
978
	jmp	avx512_ps_instruction
-
 
979
avx512_single_source_ps_instruction_sae:
-
 
980
	or	[operand_flags],4
-
 
981
avx512_single_source_ps_instruction:
-
 
982
	or	[operand_flags],2
-
 
983
avx512_ps_instruction:
-
 
984
	mov	cx,0400h
-
 
985
	jmp	avx512_instruction
557
avx_movddup_instruction:
986
avx512_sd_instruction_er:
-
 
987
	or	[operand_flags],8
-
 
988
avx512_sd_instruction_sae:
-
 
989
	or	[operand_flags],4
-
 
990
avx512_sd_instruction:
558
	or	[vex_required],1
991
	or	[rex_prefix],8
-
 
992
	mov	cx,0008h
-
 
993
	jmp	avx512_instruction
-
 
994
avx512_ss_instruction_er:
-
 
995
	or	[operand_flags],8
-
 
996
avx512_ss_instruction_sae:
-
 
997
	or	[operand_flags],4
-
 
998
avx512_ss_instruction:
-
 
999
	mov	cx,0004h
-
 
1000
      avx512_instruction:
-
 
1001
	or	[vex_required],8
559
	mov	[opcode_prefix],0F2h
1002
	mov	[opcode_prefix],66h
-
 
1003
	mov	[supplemental_code],al
-
 
1004
	mov	al,38h
-
 
1005
	jmp	avx_instruction_with_broadcast
-
 
1006
avx512_exp2pd_instruction:
-
 
1007
	or	[rex_prefix],8
-
 
1008
	or	[operand_flags],2+4
-
 
1009
	mov	cx,0840h
-
 
1010
	jmp	avx512_instruction
-
 
1011
avx512_exp2ps_instruction:
-
 
1012
	or	[operand_flags],2+4
-
 
1013
	mov	cx,0440h
-
 
1014
	jmp	avx512_instruction
-
 
1015
 
-
 
1016
fma_instruction_pd:
-
 
1017
	or	[rex_prefix],8
-
 
1018
	mov	cx,0800h
-
 
1019
	jmp	fma_instruction
-
 
1020
fma_instruction_ps:
-
 
1021
	mov	cx,0400h
-
 
1022
	jmp	fma_instruction
-
 
1023
fma_instruction_sd:
-
 
1024
	or	[rex_prefix],8
-
 
1025
	mov	cx,0008h
-
 
1026
	jmp	fma_instruction
-
 
1027
fma_instruction_ss:
-
 
1028
	mov	cx,0004h
-
 
1029
      fma_instruction:
-
 
1030
	or	[operand_flags],4+8
-
 
1031
	mov	[opcode_prefix],66h
-
 
1032
	mov	[supplemental_code],al
-
 
1033
	mov	al,38h
-
 
1034
	jmp	avx_instruction_with_broadcast
-
 
1035
 
-
 
1036
fma4_instruction_p:
-
 
1037
	xor	cl,cl
-
 
1038
	jmp	fma4_instruction
-
 
1039
fma4_instruction_sd:
-
 
1040
	mov	cl,8
-
 
1041
	jmp	fma4_instruction
-
 
1042
fma4_instruction_ss:
-
 
1043
	mov	cl,4
-
 
1044
      fma4_instruction:
-
 
1045
	mov	[immediate_size],-2
-
 
1046
	mov	byte [value],0
-
 
1047
	jmp	avx_instruction_3a_noevex
-
 
1048
 
-
 
1049
avx_cmp_pd_instruction:
-
 
1050
	mov	[opcode_prefix],66h
-
 
1051
	or	[rex_prefix],80h
-
 
1052
	mov	cx,0800h
-
 
1053
	jmp	avx_cmp_instruction
-
 
1054
avx_cmp_ps_instruction:
-
 
1055
	mov	cx,0400h
-
 
1056
	jmp	avx_cmp_instruction
-
 
1057
avx_cmp_sd_instruction:
-
 
1058
	mov	[opcode_prefix],0F2h
560
	mov	[base_code],0Fh
1059
	or	[rex_prefix],80h
-
 
1060
	mov	cx,0008h
-
 
1061
	jmp	avx_cmp_instruction
-
 
1062
avx_cmp_ss_instruction:
-
 
1063
	mov	[opcode_prefix],0F3h
-
 
1064
	mov	cx,0004h
-
 
1065
      avx_cmp_instruction:
-
 
1066
	mov	byte [value],al
-
 
1067
	mov	[immediate_size],-4
-
 
1068
	or	[operand_flags],4+20h
-
 
1069
	mov	al,0C2h
-
 
1070
	jmp	avx_cmp_common
-
 
1071
avx_cmpeqq_instruction:
-
 
1072
	or	[rex_prefix],80h
-
 
1073
	mov	ch,8
-
 
1074
	mov	[supplemental_code],al
-
 
1075
	mov	al,38h
-
 
1076
	jmp	avx_cmp_pi_instruction
-
 
1077
avx_cmpeqd_instruction:
-
 
1078
	mov	ch,4
-
 
1079
	jmp	avx_cmp_pi_instruction
-
 
1080
avx_cmpeqb_instruction:
-
 
1081
	xor	ch,ch
-
 
1082
	jmp	avx_cmp_pi_instruction
-
 
1083
avx512_cmp_uq_instruction:
-
 
1084
	or	[rex_prefix],8
-
 
1085
	mov	ch,8
-
 
1086
	mov	ah,1Eh
-
 
1087
	jmp	avx_cmp_pi_instruction_evex
-
 
1088
avx512_cmp_ud_instruction:
-
 
1089
	mov	ch,4
-
 
1090
	mov	ah,1Eh
-
 
1091
	jmp	avx_cmp_pi_instruction_evex
-
 
1092
avx512_cmp_q_instruction:
-
 
1093
	or	[rex_prefix],8
-
 
1094
	mov	ch,8
-
 
1095
	mov	ah,1Fh
-
 
1096
	jmp	avx_cmp_pi_instruction_evex
-
 
1097
avx512_cmp_d_instruction:
-
 
1098
	mov	ch,4
-
 
1099
	mov	ah,1Fh
-
 
1100
	jmp	avx_cmp_pi_instruction_evex
-
 
1101
avx512_cmp_uw_instruction:
-
 
1102
	or	[rex_prefix],8
-
 
1103
avx512_cmp_ub_instruction:
-
 
1104
	xor	ch,ch
-
 
1105
	mov	ah,3Eh
-
 
1106
	jmp	avx_cmp_pi_instruction_evex
-
 
1107
avx512_cmp_w_instruction:
-
 
1108
	or	[rex_prefix],8
-
 
1109
avx512_cmp_b_instruction:
-
 
1110
	xor	ch,ch
-
 
1111
	mov	ah,3Fh
-
 
1112
      avx_cmp_pi_instruction_evex:
-
 
1113
	mov	byte [value],al
-
 
1114
	mov	[immediate_size],-4
-
 
1115
	mov	[supplemental_code],ah
-
 
1116
	mov	al,3Ah
-
 
1117
	or	[vex_required],8
-
 
1118
      avx_cmp_pi_instruction:
-
 
1119
	xor	cl,cl
-
 
1120
	or	[operand_flags],20h
-
 
1121
	mov	[opcode_prefix],66h
-
 
1122
      avx_cmp_common:
-
 
1123
	mov	[mmx_size],cl
-
 
1124
	mov	[broadcast_size],ch
561
	mov	[extended_code],al
1125
	mov	[extended_code],al
562
	lods	byte [esi]
1126
	mov	[base_code],0Fh
-
 
1127
	lods	byte [esi]
563
	call	get_size_operator
1128
	call	get_size_operator
564
	cmp	al,10h
1129
	cmp	al,14h
-
 
1130
	je	avx_maskreg
-
 
1131
	cmp	al,10h
565
	jne	invalid_operand
1132
	jne	invalid_operand
566
	lods	byte [esi]
1133
	or	[vex_required],2
-
 
1134
	jmp	avx_reg
-
 
1135
      avx_maskreg:
-
 
1136
	cmp	[operand_size],0
-
 
1137
	jne	invalid_operand_size
-
 
1138
	or	[vex_required],8
-
 
1139
	lods	byte [esi]
567
	call	convert_avx_register
1140
	call	convert_mask_register
568
	mov	[postbyte_register],al
1141
	mov	[postbyte_register],al
569
	mov	[mmx_size],0
1142
	call	take_avx512_mask
-
 
1143
	jmp	avx_vex_reg
-
 
1144
avx512_fpclasspd_instruction:
-
 
1145
	or	[rex_prefix],8
-
 
1146
	mov	cx,0800h
-
 
1147
	jmp	avx_fpclass_instruction
-
 
1148
avx512_fpclassps_instruction:
-
 
1149
	mov	cx,0400h
-
 
1150
	jmp	avx_fpclass_instruction
-
 
1151
avx512_fpclasssd_instruction:
-
 
1152
	or	[rex_prefix],8
-
 
1153
	mov	cx,0008h
-
 
1154
	jmp	avx_fpclass_instruction
-
 
1155
avx512_fpclassss_instruction:
-
 
1156
	mov	cx,0004h
-
 
1157
      avx_fpclass_instruction:
-
 
1158
	mov	[broadcast_size],ch
-
 
1159
	mov	[mmx_size],cl
570
	cmp	ah,32
1160
	or	[operand_flags],2
-
 
1161
	call	setup_66_0f_3a
-
 
1162
	mov	[immediate_size],1
-
 
1163
	lods	byte [esi]
-
 
1164
	cmp	al,14h
571
	je	avx_regs_size_ok
1165
	je	avx_maskreg
572
	mov	[mmx_size],8
1166
	jmp	invalid_operand
-
 
1167
avx512_ptestnmd_instruction:
-
 
1168
	mov	ch,4
-
 
1169
	jmp	avx512_ptestnm_instruction
-
 
1170
avx512_ptestnmq_instruction:
-
 
1171
	or	[rex_prefix],8
-
 
1172
	mov	ch,8
-
 
1173
	jmp	avx512_ptestnm_instruction
-
 
1174
avx512_ptestnmw_instruction:
-
 
1175
	or	[rex_prefix],8
-
 
1176
avx512_ptestnmb_instruction:
-
 
1177
	xor	ch,ch
-
 
1178
      avx512_ptestnm_instruction:
-
 
1179
	mov	ah,0F3h
-
 
1180
	jmp	avx512_ptest_instruction
-
 
1181
avx512_ptestmd_instruction:
-
 
1182
	mov	ch,4
-
 
1183
	jmp	avx512_ptestm_instruction
-
 
1184
avx512_ptestmq_instruction:
-
 
1185
	or	[rex_prefix],8
-
 
1186
	mov	ch,8
-
 
1187
	jmp	avx512_ptestm_instruction
-
 
1188
avx512_ptestmw_instruction:
-
 
1189
	or	[rex_prefix],8
-
 
1190
avx512_ptestmb_instruction:
-
 
1191
	xor	ch,ch
-
 
1192
      avx512_ptestm_instruction:
-
 
1193
	mov	ah,66h
-
 
1194
      avx512_ptest_instruction:
-
 
1195
	xor	cl,cl
-
 
1196
	mov	[opcode_prefix],ah
-
 
1197
	mov	[supplemental_code],al
-
 
1198
	mov	al,38h
-
 
1199
	or	[vex_required],8
573
	jmp	avx_regs_size_ok
1200
	jmp	avx_cmp_common
574
avx_movmskpd_instruction:
1201
 
-
 
1202
mask_shift_instruction_q:
-
 
1203
	or	[rex_prefix],8
-
 
1204
mask_shift_instruction_d:
575
	mov	[opcode_prefix],66h
1205
	or	[operand_flags],2
-
 
1206
	or	[immediate_size],1
-
 
1207
	mov	[opcode_prefix],66h
576
avx_movmskps_instruction:
1208
	mov	[supplemental_code],al
-
 
1209
	mov	al,3Ah
-
 
1210
	jmp	mask_instruction
577
	mov	[base_code],0Fh
1211
mask_instruction_single_source_b:
-
 
1212
	mov	[opcode_prefix],66h
-
 
1213
	jmp	mask_instruction_single_source_w
-
 
1214
mask_instruction_single_source_d:
-
 
1215
	mov	[opcode_prefix],66h
-
 
1216
mask_instruction_single_source_q:
-
 
1217
	or	[rex_prefix],8
-
 
1218
mask_instruction_single_source_w:
-
 
1219
	or	[operand_flags],2
-
 
1220
	jmp	mask_instruction
-
 
1221
mask_instruction_b:
-
 
1222
	mov	[opcode_prefix],66h
-
 
1223
	jmp	mask_instruction_w
-
 
1224
mask_instruction_d:
-
 
1225
	mov	[opcode_prefix],66h
578
	mov	[extended_code],50h
1226
mask_instruction_q:
-
 
1227
	or	[rex_prefix],8
-
 
1228
mask_instruction_w:
-
 
1229
	mov	[operand_size],32
579
	or	[vex_required],1
1230
mask_instruction:
-
 
1231
	or	[vex_required],1
580
	lods	byte [esi]
1232
	mov	[base_code],0Fh
581
	call	get_size_operator
-
 
582
	cmp	al,10h
1233
	mov	[extended_code],al
583
	jne	invalid_operand
-
 
584
	lods	byte [esi]
1234
	call	take_mask_register
585
	call	convert_register
-
 
586
	mov	[postbyte_register],al
1235
	mov	[postbyte_register],al
587
	cmp	ah,4
1236
	test	[operand_flags],2
588
	je	avx_movmskps_reg_ok
1237
	jnz	mask_instruction_nds_ok
589
	cmp	ah,8
1238
	lods	byte [esi]
590
	jne	invalid_operand_size
-
 
591
	cmp	[code_type],64
1239
	cmp	al,','
592
	jne	invalid_operand
1240
	jne	invalid_operand
593
      avx_movmskps_reg_ok:
1241
	call	take_mask_register
594
	mov	[operand_size],0
1242
	mov	[vex_register],al
595
	lods	byte [esi]
1243
      mask_instruction_nds_ok:
-
 
1244
	lods	byte [esi]
596
	cmp	al,','
1245
	cmp	al,','
597
	jne	invalid_operand
1246
	jne	invalid_operand
598
	call	take_avx_register
1247
	call	take_mask_register
599
	mov	bl,al
1248
	mov	bl,al
600
	jmp	nomem_instruction_ready
1249
	cmp	[immediate_size],0
-
 
1250
	jne	mmx_nomem_imm8
-
 
1251
	jmp	nomem_instruction_ready
601
avx_movsd_instruction:
1252
take_mask_register:
602
	mov	[opcode_prefix],0F2h
1253
	lods	byte [esi]
603
	mov	[mmx_size],8
1254
	cmp	al,14h
604
	jmp	avx_movs_instruction
1255
	jne	invalid_operand
605
avx_movss_instruction:
1256
	lods	byte [esi]
606
	mov	[opcode_prefix],0F3h
1257
convert_mask_register:
607
	mov	[mmx_size],4
1258
	mov	ah,al
608
      avx_movs_instruction:
1259
	shr	ah,4
-
 
1260
	cmp	ah,5
-
 
1261
	jne	invalid_operand
-
 
1262
	and	al,1111b
-
 
1263
	ret
-
 
1264
kmov_instruction:
609
	or	[vex_required],1
1265
	mov	[mmx_size],al
-
 
1266
	or	[vex_required],1
610
	mov	[base_code],0Fh
1267
	mov	[base_code],0Fh
611
	mov	[extended_code],10h
1268
	mov	[extended_code],90h
612
	lods	byte [esi]
1269
	lods	byte [esi]
613
	call	get_size_operator
1270
	cmp	al,14h
-
 
1271
	je	kmov_maskreg
614
	cmp	al,10h
1272
	cmp	al,10h
615
	jne	avx_movlps_mem
1273
	je	kmov_reg
616
	lods	byte [esi]
1274
	call	get_size_operator
-
 
1275
	inc	[extended_code]
-
 
1276
	cmp	al,'['
-
 
1277
	jne	invalid_argument
-
 
1278
	call	get_address
-
 
1279
	lods	byte [esi]
617
	call	convert_xmm_register
1280
	cmp	al,','
-
 
1281
	jne	invalid_operand
-
 
1282
	call	take_mask_register
-
 
1283
	mov	[postbyte_register],al
-
 
1284
      kmov_with_mem:
-
 
1285
	mov	ah,[mmx_size]
-
 
1286
	mov	al,[operand_size]
-
 
1287
	or	al,al
-
 
1288
	jz	kmov_mem_size_ok
-
 
1289
	cmp	al,ah
-
 
1290
	jne	invalid_operand_size
-
 
1291
      kmov_mem_size_ok:
-
 
1292
	call	setup_kmov_prefix
-
 
1293
	jmp	instruction_ready
-
 
1294
      setup_kmov_prefix:
-
 
1295
	cmp	ah,4
-
 
1296
	jb	kmov_w_ok
-
 
1297
	or	[rex_prefix],8
-
 
1298
      kmov_w_ok:
-
 
1299
	test	ah,1 or 4
-
 
1300
	jz	kmov_prefix_ok
-
 
1301
	mov	[opcode_prefix],66h
-
 
1302
      kmov_prefix_ok:
-
 
1303
	ret
-
 
1304
      kmov_maskreg:
-
 
1305
	lods	byte [esi]
-
 
1306
	call	convert_mask_register
618
	mov	[postbyte_register],al
1307
	mov	[postbyte_register],al
619
	xor	cl,cl
1308
	lods	byte [esi]
620
	xchg	cl,[operand_size]
-
 
621
	lods	byte [esi]
-
 
622
	cmp	al,','
1309
	cmp	al,','
623
	jne	invalid_operand
1310
	jne	invalid_operand
624
	lods	byte [esi]
1311
	lods	byte [esi]
625
	call	get_size_operator
1312
	cmp	al,14h
-
 
1313
	je	kmov_maskreg_maskreg
626
	cmp	al,10h
1314
	cmp	al,10h
627
	jne	avx_movs_reg_mem
1315
	je	kmov_maskreg_reg
628
	mov	[operand_size],cl
1316
	call	get_size_operator
-
 
1317
	cmp	al,'['
-
 
1318
	jne	invalid_argument
629
	lods	byte [esi]
1319
	call	get_address
-
 
1320
	jmp	kmov_with_mem
-
 
1321
      kmov_maskreg_maskreg:
-
 
1322
	lods	byte [esi]
630
	call	convert_avx_register
1323
	call	convert_mask_register
631
	mov	[vex_register],al
1324
	mov	bl,al
-
 
1325
	mov	ah,[mmx_size]
-
 
1326
	call	setup_kmov_prefix
-
 
1327
	jmp	nomem_instruction_ready
-
 
1328
      kmov_maskreg_reg:
-
 
1329
	add	[extended_code],2
-
 
1330
	lods	byte [esi]
-
 
1331
	call	convert_register
-
 
1332
      kmov_with_reg:
-
 
1333
	mov	bl,al
-
 
1334
	mov	al,[mmx_size]
-
 
1335
	mov	ah,4
-
 
1336
	cmp	al,ah
-
 
1337
	jbe	kmov_reg_size_check
-
 
1338
	mov	ah,al
-
 
1339
      kmov_reg_size_check:
-
 
1340
	cmp	ah,[operand_size]
-
 
1341
	jne	invalid_operand_size
-
 
1342
	cmp	al,8
-
 
1343
	je	kmov_f2_w1
-
 
1344
	cmp	al,2
-
 
1345
	ja	kmov_f2
-
 
1346
	je	nomem_instruction_ready
-
 
1347
	mov	[opcode_prefix],66h
-
 
1348
	jmp	nomem_instruction_ready
-
 
1349
      kmov_f2_w1:
-
 
1350
	or	[rex_prefix],8
-
 
1351
      kmov_f2:
-
 
1352
	mov	[opcode_prefix],0F2h
-
 
1353
	jmp	nomem_instruction_ready
-
 
1354
      kmov_reg:
-
 
1355
	add	[extended_code],3
-
 
1356
	lods	byte [esi]
-
 
1357
	call	convert_register
-
 
1358
	mov	[postbyte_register],al
632
	lods	byte [esi]
1359
	lods	byte [esi]
633
	cmp	al,','
1360
	cmp	al,','
634
	jne	invalid_operand
1361
	jne	invalid_operand
635
	call	take_avx_register
1362
	call	take_mask_register
-
 
1363
	jmp	kmov_with_reg
-
 
1364
avx512_pmov_m2_instruction_w1:
-
 
1365
	or	[rex_prefix],8
-
 
1366
avx512_pmov_m2_instruction:
-
 
1367
	or	[vex_required],8
-
 
1368
	call	setup_f3_0f_38
-
 
1369
	call	take_avx_register
636
	mov	bl,al
1370
	mov	[postbyte_register],al
-
 
1371
	lods	byte [esi]
-
 
1372
	cmp	al,','
-
 
1373
	jne	invalid_operand
-
 
1374
	call	take_mask_register
-
 
1375
	mov	bl,al
637
	cmp	bl,8
1376
	jmp	nomem_instruction_ready
638
	jb	nomem_instruction_ready
-
 
639
	inc	[extended_code]
-
 
640
	xchg	bl,[postbyte_register]
-
 
641
	jmp	nomem_instruction_ready
-
 
642
      avx_movs_reg_mem:
1377
avx512_pmov_2m_instruction_w1:
-
 
1378
	or	[rex_prefix],8
-
 
1379
avx512_pmov_2m_instruction:
-
 
1380
	or	[vex_required],8
-
 
1381
	call	setup_f3_0f_38
-
 
1382
	call	take_mask_register
643
	cmp	al,'['
1383
	mov	[postbyte_register],al
-
 
1384
	lods	byte [esi]
-
 
1385
	cmp	al,','
644
	jne	invalid_operand
1386
	jne	invalid_operand
645
	call	get_address
1387
	call	take_avx_register
646
	mov	al,[operand_size]
1388
	mov	bl,al
647
	or	al,al
-
 
648
	jz	avx_movs_reg_mem_ok
1389
	jmp	nomem_instruction_ready
649
	cmp	al,[mmx_size]
1390
      setup_f3_0f_38:
650
	jne	invalid_operand_size
1391
	mov	[extended_code],38h
651
      avx_movs_reg_mem_ok:
1392
	mov	[supplemental_code],al
652
	jmp	instruction_ready
1393
	mov	[base_code],0Fh
653
 
1394
	mov	[opcode_prefix],0F3h
654
avx_cvtdq2pd_instruction:
-
 
655
	mov	[opcode_prefix],0F3h
-
 
656
avx_cvtps2pd_instruction:
1395
	ret
-
 
1396
 
-
 
1397
vzeroall_instruction:
-
 
1398
	mov	[operand_size],32
-
 
1399
vzeroupper_instruction:
657
	mov	[base_code],0Fh
1400
	mov	[base_code],0Fh
658
	mov	[extended_code],al
1401
	mov	[extended_code],al
659
	or	[vex_required],1
1402
	and	[displacement_compression],0
-
 
1403
	call	store_vex_instruction_code
-
 
1404
	jmp	instruction_assembled
-
 
1405
vldmxcsr_instruction:
-
 
1406
	or	[vex_required],2
-
 
1407
	jmp	fxsave_instruction
-
 
1408
 
-
 
1409
avx_perm2f128_instruction:
-
 
1410
	or	[vex_required],2
-
 
1411
	xor	ch,ch
-
 
1412
      avx_instruction_imm8_without_128bit:
-
 
1413
	mov	[immediate_size],1
-
 
1414
	mov	ah,3Ah
-
 
1415
	jmp	avx_instruction_without_128bit
-
 
1416
avx512_shuf_q_instruction:
-
 
1417
	or	[rex_prefix],8
-
 
1418
	or	[vex_required],8
-
 
1419
	mov	ch,8
-
 
1420
	jmp	avx_instruction_imm8_without_128bit
-
 
1421
avx512_shuf_d_instruction:
-
 
1422
	or	[vex_required],8
-
 
1423
	mov	ch,4
-
 
1424
	jmp	avx_instruction_imm8_without_128bit
-
 
1425
avx_permd_instruction:
-
 
1426
	mov	ah,38h
-
 
1427
	mov	ch,4
-
 
1428
      avx_instruction_without_128bit:
-
 
1429
	xor	cl,cl
-
 
1430
	call	setup_avx_66_supplemental
-
 
1431
	call	take_avx_register
-
 
1432
	cmp	ah,32
-
 
1433
	jb	invalid_operand_size
-
 
1434
	mov	[postbyte_register],al
-
 
1435
	call	take_avx512_mask
-
 
1436
	jmp	avx_vex_reg
-
 
1437
      setup_avx_66_supplemental:
-
 
1438
	mov	[opcode_prefix],66h
-
 
1439
	mov	[broadcast_size],ch
-
 
1440
	mov	[mmx_size],cl
-
 
1441
	mov	[base_code],0Fh
-
 
1442
	mov	[extended_code],ah
-
 
1443
	mov	[supplemental_code],al
-
 
1444
	or	[vex_required],1
660
	call	take_avx_register
1445
	ret
-
 
1446
avx_permq_instruction:
-
 
1447
	or	[rex_prefix],8
-
 
1448
	mov	ch,8
-
 
1449
	jmp	avx_permil_instruction
-
 
1450
avx_permilpd_instruction:
-
 
1451
	or	[rex_prefix],80h
-
 
1452
	mov	ch,8
-
 
1453
	jmp	avx_permil_instruction
-
 
1454
avx_permilps_instruction:
-
 
1455
	mov	ch,4
-
 
1456
      avx_permil_instruction:
-
 
1457
	or	[operand_flags],2
-
 
1458
	xor	cl,cl
-
 
1459
	mov	ah,3Ah
-
 
1460
	call	setup_avx_66_supplemental
-
 
1461
	call	take_avx_register
661
	mov	[postbyte_register],al
1462
	cmp	[supplemental_code],4
-
 
1463
	jae	avx_permil_size_ok
-
 
1464
	cmp	ah,32
-
 
1465
	jb	invalid_operand_size
-
 
1466
      avx_permil_size_ok:
-
 
1467
	mov	[postbyte_register],al
662
	lods	byte [esi]
1468
	call	take_avx512_mask
-
 
1469
	lods	byte [esi]
-
 
1470
	cmp	al,','
-
 
1471
	jne	invalid_operand
-
 
1472
	call	take_avx_rm
-
 
1473
	jnc	mmx_imm8
-
 
1474
	mov	bl,al
-
 
1475
	cmp	byte [esi],','
-
 
1476
	jne	invalid_operand
-
 
1477
	mov	al,[esi+1]
-
 
1478
	cmp	al,11h
-
 
1479
	jne	avx_permil_rm_or_imm8
-
 
1480
	mov	al,[esi+3]
-
 
1481
      avx_permil_rm_or_imm8:
-
 
1482
	cmp	al,'('
-
 
1483
	je	mmx_nomem_imm8
-
 
1484
	mov	[vex_register],bl
-
 
1485
	inc	esi
-
 
1486
	mov	[extended_code],38h
-
 
1487
	mov	al,[supplemental_code]
-
 
1488
	cmp	al,4
-
 
1489
	jb	avx_permq_rm
-
 
1490
	add	[supplemental_code],8
-
 
1491
	jmp	avx_regs_rm
-
 
1492
      avx_permq_rm:
-
 
1493
	or	[vex_required],8
-
 
1494
	shl	al,5
-
 
1495
	neg	al
-
 
1496
	add	al,36h
-
 
1497
	mov	[supplemental_code],al
-
 
1498
	jmp	avx_regs_rm
-
 
1499
vpermil_2pd_instruction:
-
 
1500
	mov	[immediate_size],-2
-
 
1501
	mov	byte [value],al
-
 
1502
	mov	al,49h
-
 
1503
	jmp	vpermil2_instruction_setup
-
 
1504
vpermil_2ps_instruction:
-
 
1505
	mov	[immediate_size],-2
-
 
1506
	mov	byte [value],al
-
 
1507
	mov	al,48h
-
 
1508
	jmp	vpermil2_instruction_setup
-
 
1509
vpermil2_instruction:
-
 
1510
	mov	[immediate_size],-3
-
 
1511
	mov	byte [value],0
-
 
1512
      vpermil2_instruction_setup:
-
 
1513
	or	[vex_required],2
-
 
1514
	mov	[base_code],0Fh
-
 
1515
	mov	[supplemental_code],al
-
 
1516
	mov	al,3Ah
-
 
1517
	xor	cl,cl
-
 
1518
	jmp	avx_instruction
-
 
1519
 
-
 
1520
avx_shift_q_instruction_evex:
-
 
1521
	or	[vex_required],8
-
 
1522
avx_shift_q_instruction:
-
 
1523
	or	[rex_prefix],80h
-
 
1524
	mov	cl,8
-
 
1525
	jmp	avx_shift_instruction
-
 
1526
avx_shift_d_instruction:
-
 
1527
	mov	cl,4
-
 
1528
	jmp	avx_shift_instruction
-
 
1529
avx_shift_bw_instruction:
-
 
1530
	xor	cl,cl
-
 
1531
       avx_shift_instruction:
-
 
1532
	mov	[broadcast_size],cl
-
 
1533
	mov	[mmx_size],0
-
 
1534
	mov	[opcode_prefix],66h
-
 
1535
	mov	[base_code],0Fh
-
 
1536
	mov	[extended_code],al
-
 
1537
	or	[vex_required],1
-
 
1538
	call	take_avx_register
-
 
1539
	mov	[postbyte_register],al
-
 
1540
	call	take_avx512_mask
-
 
1541
	lods	byte [esi]
663
	cmp	al,','
1542
	cmp	al,','
664
	jne	invalid_operand
1543
	jne	invalid_operand
665
	xor	cl,cl
1544
	xor	cl,cl
666
	xchg	cl,[operand_size]
1545
	xchg	cl,[operand_size]
667
	lods	byte [esi]
1546
	lods	byte [esi]
668
	call	get_size_operator
1547
	call	get_size_operator
669
	cmp	al,10h
1548
	cmp	al,'['
-
 
1549
	je	avx_shift_reg_mem
-
 
1550
	mov	[operand_size],cl
-
 
1551
	cmp	al,10h
670
	jne	avx_cvtdq2pd_reg_mem
1552
	jne	invalid_operand
-
 
1553
	lods	byte [esi]
-
 
1554
	call	convert_avx_register
-
 
1555
	mov	[vex_register],al
-
 
1556
	lods	byte [esi]
-
 
1557
	cmp	al,','
-
 
1558
	jne	invalid_operand
-
 
1559
	push	esi
-
 
1560
	xor	cl,cl
-
 
1561
	xchg	cl,[operand_size]
-
 
1562
	lods	byte [esi]
-
 
1563
	call	get_size_operator
-
 
1564
	cmp	al,10h
-
 
1565
	je	avx_shift_reg_reg_reg
-
 
1566
	pop	esi
-
 
1567
	cmp	al,'['
-
 
1568
	je	avx_shift_reg_reg_mem
671
	lods	byte [esi]
1569
	xchg	cl,[operand_size]
-
 
1570
	test	cl,not 1
-
 
1571
	jnz	invalid_operand_size
-
 
1572
	dec	esi
-
 
1573
	call	convert_avx_shift_opcode
-
 
1574
	mov	bl,al
-
 
1575
	jmp	mmx_nomem_imm8
-
 
1576
      convert_avx_shift_opcode:
-
 
1577
	mov	al,[extended_code]
-
 
1578
	mov	ah,al
-
 
1579
	and	ah,1111b
-
 
1580
	add	ah,70h
-
 
1581
	mov	[extended_code],ah
-
 
1582
	shr	al,4
-
 
1583
	sub	al,0Ch
-
 
1584
	shl	al,1
-
 
1585
	xchg	al,[postbyte_register]
-
 
1586
	xchg	al,[vex_register]
-
 
1587
	ret
-
 
1588
      avx_shift_reg_reg_reg:
-
 
1589
	pop	eax
-
 
1590
	lods	byte [esi]
672
	call	convert_xmm_register
1591
	call	convert_xmm_register
673
	mov	bl,al
1592
	xchg	cl,[operand_size]
-
 
1593
	mov	bl,al
674
	mov	[operand_size],cl
1594
	jmp	nomem_instruction_ready
675
	jmp	nomem_instruction_ready
-
 
676
      avx_cvtdq2pd_reg_mem:
1595
      avx_shift_reg_reg_mem:
677
	cmp	al,'['
1596
	mov	[mmx_size],16
-
 
1597
	push	ecx
678
	jne	invalid_operand
1598
	lods	byte [esi]
679
	mov	[mmx_size],cl
1599
	call	get_size_operator
680
	call	get_address
1600
	call	get_address
681
	mov	al,[mmx_size]
1601
	pop	eax
682
	mov	ah,al
-
 
683
	xchg	al,[operand_size]
1602
	xchg	al,[operand_size]
684
	or	al,al
1603
	test	al,al
685
	jz	instruction_ready
1604
	jz	instruction_ready
686
	shl	al,1
1605
	cmp	al,16
687
	cmp	al,ah
-
 
688
	jne	invalid_operand_size
1606
	jne	invalid_operand_size
689
	jmp	instruction_ready
1607
	jmp	instruction_ready
690
avx_cvtpd2dq_instruction:
1608
      avx_shift_reg_mem:
691
	mov	[opcode_prefix],0F2h
1609
	or	[vex_required],8
692
	jmp	avx_cvtpd_instruction
1610
	call	take_avx_mem
-
 
1611
	call	convert_avx_shift_opcode
693
avx_cvtpd2ps_instruction:
1612
	jmp	mmx_imm8
-
 
1613
avx_shift_dq_instruction:
694
	mov	[opcode_prefix],66h
1614
	mov	[postbyte_register],al
-
 
1615
	mov	[opcode_prefix],66h
695
      avx_cvtpd_instruction:
1616
	mov	[base_code],0Fh
696
	mov	[base_code],0Fh
-
 
697
	mov	[extended_code],al
1617
	mov	[extended_code],73h
698
	or	[vex_required],1
1618
	or	[vex_required],1
699
	call	take_avx_register
1619
	mov	[mmx_size],0
-
 
1620
	call	take_avx_register
700
	mov	[postbyte_register],al
1621
	mov	[vex_register],al
701
	cmp	ah,16
1622
	lods	byte [esi]
-
 
1623
	cmp	al,','
-
 
1624
	jne	invalid_operand
-
 
1625
	lods	byte [esi]
-
 
1626
	call	get_size_operator
-
 
1627
	cmp	al,'['
-
 
1628
	je	avx_shift_dq_reg_mem
-
 
1629
	cmp	al,10h
702
	jne	invalid_operand
1630
	jne	invalid_operand
703
	lods	byte [esi]
1631
	lods	byte [esi]
704
	cmp	al,','
1632
	call	convert_avx_register
-
 
1633
	mov	bl,al
-
 
1634
	jmp	mmx_nomem_imm8
-
 
1635
      avx_shift_dq_reg_mem:
-
 
1636
	or	[vex_required],8
-
 
1637
	call	get_address
-
 
1638
	jmp	mmx_imm8
-
 
1639
avx512_rotate_q_instruction:
-
 
1640
	mov	cl,8
-
 
1641
	or	[rex_prefix],cl
-
 
1642
	jmp	avx512_rotate_instruction
-
 
1643
avx512_rotate_d_instruction:
-
 
1644
	mov	cl,4
-
 
1645
      avx512_rotate_instruction:
-
 
1646
	mov	[broadcast_size],cl
-
 
1647
	mov	[postbyte_register],al
-
 
1648
	mov	[opcode_prefix],66h
-
 
1649
	mov	[base_code],0Fh
-
 
1650
	mov	[extended_code],72h
-
 
1651
	or	[vex_required],8
-
 
1652
	mov	[mmx_size],0
-
 
1653
	mov	[immediate_size],1
-
 
1654
	call	take_avx_register
-
 
1655
	mov	[vex_register],al
-
 
1656
	call	take_avx512_mask
-
 
1657
	jmp	avx_vex_reg_ok
-
 
1658
 
-
 
1659
avx_pmovsxbq_instruction:
-
 
1660
	mov	cl,2
-
 
1661
	jmp	avx_pmovsx_instruction
-
 
1662
avx_pmovsxbd_instruction:
-
 
1663
	mov	cl,4
-
 
1664
	jmp	avx_pmovsx_instruction
-
 
1665
avx_pmovsxbw_instruction:
-
 
1666
	mov	cl,8
-
 
1667
      avx_pmovsx_instruction:
-
 
1668
	mov	[mmx_size],cl
-
 
1669
	or	[vex_required],1
-
 
1670
	call	setup_66_0f_38
-
 
1671
	call	take_avx_register
-
 
1672
	mov	[postbyte_register],al
-
 
1673
	call	take_avx512_mask
-
 
1674
	lods	byte [esi]
-
 
1675
	cmp	al,','
705
	jne	invalid_operand
1676
	jne	invalid_operand
706
	mov	[operand_size],0
1677
	xor	al,al
-
 
1678
	xchg	al,[operand_size]
707
	lods	byte [esi]
1679
	bsf	ecx,eax
-
 
1680
	sub	cl,4
-
 
1681
	shl	[mmx_size],cl
-
 
1682
	push	eax
-
 
1683
	lods	byte [esi]
708
	call	get_size_operator
1684
	call	get_size_operator
709
	cmp	al,10h
1685
	cmp	al,10h
710
	jne	avx_cvtpd2dq_reg_mem
1686
	je	avx_pmovsx_reg_reg
711
	lods	byte [esi]
1687
	cmp	al,'['
-
 
1688
	jne	invalid_operand
-
 
1689
	call	get_address
-
 
1690
	pop	eax
-
 
1691
	xchg	al,[operand_size]
-
 
1692
	or	al,al
-
 
1693
	jz	instruction_ready
-
 
1694
	cmp	al,[mmx_size]
-
 
1695
	jne	invalid_operand_size
-
 
1696
	jmp	instruction_ready
-
 
1697
      avx_pmovsx_reg_reg:
-
 
1698
	lods	byte [esi]
712
	call	convert_avx_register
1699
	call	convert_avx_register
713
	mov	bl,al
1700
	mov	bl,al
714
	jmp	nomem_instruction_ready
1701
	cmp	ah,[mmx_size]
-
 
1702
	je	avx_pmovsx_xmmreg_reg_size_ok
-
 
1703
	jb	invalid_operand_size
-
 
1704
	cmp	ah,16
-
 
1705
	jne	invalid_operand_size
-
 
1706
      avx_pmovsx_xmmreg_reg_size_ok:
-
 
1707
	pop	eax
-
 
1708
	mov	[operand_size],al
-
 
1709
	jmp	nomem_instruction_ready
715
      avx_cvtpd2dq_reg_mem:
1710
avx512_pmovqb_instruction:
-
 
1711
	mov	cl,2
-
 
1712
	jmp	avx512_pmov_instruction
-
 
1713
avx512_pmovdb_instruction:
-
 
1714
	mov	cl,4
-
 
1715
	jmp	avx512_pmov_instruction
-
 
1716
avx512_pmovwb_instruction:
-
 
1717
	mov	cl,8
-
 
1718
      avx512_pmov_instruction:
716
	cmp	al,'['
1719
	mov	[mmx_size],cl
-
 
1720
	or	[vex_required],8
-
 
1721
	mov	[extended_code],38h
-
 
1722
	mov	[supplemental_code],al
-
 
1723
	mov	[base_code],0Fh
-
 
1724
	mov	[opcode_prefix],0F3h
-
 
1725
	lods	byte [esi]
-
 
1726
	call	get_size_operator
-
 
1727
	cmp	al,10h
-
 
1728
	je	avx512_pmov_reg
-
 
1729
	cmp	al,'['
717
	jne	invalid_operand
1730
	jne	invalid_operand
718
	call	get_address
1731
	call	get_address
719
	mov	al,[operand_size]
1732
	or	[operand_flags],20h
720
	or	al,al
1733
	call	avx512_pmov_common
-
 
1734
	or	al,al
721
	jz	operand_size_not_specified
1735
	jz	instruction_ready
722
	cmp	al,16
-
 
723
	je	instruction_ready
-
 
724
	cmp	al,32
1736
	cmp	al,[mmx_size]
725
	jne	invalid_operand_size
1737
	jne	invalid_operand_size
726
	jmp	instruction_ready
1738
	jmp	instruction_ready
727
avx_cvttps2dq_instruction:
1739
      avx512_pmov_common:
-
 
1740
	call	take_avx512_mask
-
 
1741
	xor	al,al
-
 
1742
	xchg	al,[operand_size]
-
 
1743
	push	eax
-
 
1744
	lods	byte [esi]
-
 
1745
	cmp	al,','
-
 
1746
	jne	invalid_operand
-
 
1747
	call	take_avx_register
-
 
1748
	mov	[postbyte_register],al
-
 
1749
	mov	al,ah
-
 
1750
	mov	ah,cl
-
 
1751
	bsf	ecx,eax
-
 
1752
	sub	cl,4
-
 
1753
	shl	[mmx_size],cl
-
 
1754
	mov	cl,ah
-
 
1755
	pop	eax
-
 
1756
	ret
-
 
1757
      avx512_pmov_reg:
-
 
1758
	lods	byte [esi]
-
 
1759
	call	convert_avx_register
-
 
1760
	mov	bl,al
-
 
1761
	call	avx512_pmov_common
-
 
1762
	cmp	al,[mmx_size]
-
 
1763
	je	nomem_instruction_ready
-
 
1764
	jb	invalid_operand_size
-
 
1765
	cmp	al,16
-
 
1766
	jne	invalid_operand_size
-
 
1767
	jmp	nomem_instruction_ready
-
 
1768
 
-
 
1769
avx_broadcast_128_instruction_noevex:
728
	or	[vex_required],2
1770
	or	[vex_required],2
729
	mov	[opcode_prefix],0F3h
1771
	mov	cl,10h
-
 
1772
	jmp	avx_broadcast_instruction
-
 
1773
avx512_broadcast_32x2_instruction:
-
 
1774
	mov	cl,08h
730
	mov	[mmx_size],0
1775
	jmp	avx_broadcast_instruction_evex
-
 
1776
avx512_broadcast_32x4_instruction:
-
 
1777
	mov	cl,10h
731
	jmp	avx_instruction
1778
	jmp	avx_broadcast_instruction_evex
732
avx_cvtsd2si_instruction:
1779
avx512_broadcast_32x8_instruction:
733
	or	[vex_required],1
1780
	mov	cl,20h
-
 
1781
	jmp	avx_broadcast_instruction_evex
-
 
1782
avx512_broadcast_64x2_instruction:
-
 
1783
	mov	cl,10h
-
 
1784
	jmp	avx_broadcast_instruction_w1_evex
-
 
1785
avx512_broadcast_64x4_instruction:
-
 
1786
	mov	cl,20h
-
 
1787
      avx_broadcast_instruction_w1_evex:
-
 
1788
	or	[rex_prefix],8
-
 
1789
      avx_broadcast_instruction_evex:
-
 
1790
	or	[vex_required],8
734
	jmp	cvtsd2si_instruction
1791
	jmp	avx_broadcast_instruction
-
 
1792
avx_broadcastss_instruction:
-
 
1793
	mov	cl,4
-
 
1794
	jmp	avx_broadcast_instruction
735
avx_cvtss2si_instruction:
1795
avx_broadcastsd_instruction:
736
	or	[vex_required],1
1796
	or	[rex_prefix],80h
737
	jmp	cvtss2si_instruction
1797
	mov	cl,8
-
 
1798
	jmp	avx_broadcast_instruction
738
avx_cvtsi2ss_instruction:
1799
avx_pbroadcastb_instruction:
739
	mov	[opcode_prefix],0F3h
1800
	mov	cl,1
-
 
1801
	jmp	avx_broadcast_pi_instruction
740
	jmp	avx_cvtsi_instruction
1802
avx_pbroadcastw_instruction:
-
 
1803
	mov	cl,2
-
 
1804
	jmp	avx_broadcast_pi_instruction
741
avx_cvtsi2sd_instruction:
1805
avx_pbroadcastd_instruction:
742
	mov	[opcode_prefix],0F2h
1806
	mov	cl,4
-
 
1807
	jmp	avx_broadcast_pi_instruction
-
 
1808
avx_pbroadcastq_instruction:
-
 
1809
	mov	cl,8
-
 
1810
	or	[rex_prefix],80h
743
      avx_cvtsi_instruction:
1811
      avx_broadcast_pi_instruction:
-
 
1812
	or	[operand_flags],40h
-
 
1813
      avx_broadcast_instruction:
744
	mov	[base_code],0Fh
1814
	mov	[opcode_prefix],66h
-
 
1815
	mov	[supplemental_code],al
-
 
1816
	mov	al,38h
-
 
1817
	mov	[mmx_size],cl
-
 
1818
	mov	[base_code],0Fh
745
	mov	[extended_code],al
1819
	mov	[extended_code],al
746
	or	[vex_required],1
1820
	or	[vex_required],1
747
	call	take_avx_register
1821
	call	take_avx_register
748
	cmp	ah,16
1822
	cmp	ah,[mmx_size]
-
 
1823
	je	invalid_operand_size
-
 
1824
	test	[operand_flags],40h
-
 
1825
	jnz	avx_broadcast_destination_size_ok
-
 
1826
	cmp	[mmx_size],4
-
 
1827
	je	avx_broadcast_destination_size_ok
-
 
1828
	cmp	[supplemental_code],59h
-
 
1829
	je	avx_broadcast_destination_size_ok
-
 
1830
	cmp	ah,16
749
	jne	invalid_operand_size
1831
	je	invalid_operand_size
750
	mov	[postbyte_register],al
1832
      avx_broadcast_destination_size_ok:
-
 
1833
	xor	ah,ah
-
 
1834
	xchg	ah,[operand_size]
751
	lods	byte [esi]
1835
	push	eax
-
 
1836
	call	take_avx512_mask
-
 
1837
	lods	byte [esi]
752
	cmp	al,','
1838
	cmp	al,','
753
	jne	invalid_operand
1839
	jne	invalid_operand
754
	call	take_avx_register
1840
	lods	byte [esi]
-
 
1841
	call	get_size_operator
-
 
1842
	cmp	al,10h
-
 
1843
	je	avx_broadcast_reg_reg
-
 
1844
	cmp	al,'['
-
 
1845
	jne	invalid_operand
-
 
1846
	call	get_address
-
 
1847
	pop	eax
-
 
1848
	xchg	ah,[operand_size]
-
 
1849
	mov	[postbyte_register],al
-
 
1850
	mov	al,[broadcast_size]
-
 
1851
	mov	al,[mmx_size]
-
 
1852
	cmp	al,ah
-
 
1853
	je	instruction_ready
-
 
1854
	or	al,al
-
 
1855
	jz	instruction_ready
-
 
1856
	or	ah,ah
-
 
1857
	jz	instruction_ready
-
 
1858
	jmp	invalid_operand_size
-
 
1859
      avx_broadcast_reg_reg:
-
 
1860
	lods	byte [esi]
-
 
1861
	test	[operand_flags],40h
-
 
1862
	jz	avx_broadcast_reg_avx_reg
-
 
1863
	cmp	al,60h
-
 
1864
	jb	avx_broadcast_reg_general_reg
-
 
1865
	cmp	al,80h
-
 
1866
	jb	avx_broadcast_reg_avx_reg
-
 
1867
	cmp	al,0C0h
-
 
1868
	jb	avx_broadcast_reg_general_reg
-
 
1869
      avx_broadcast_reg_avx_reg:
-
 
1870
	call	convert_avx_register
755
	mov	[vex_register],al
1871
	mov	bl,al
-
 
1872
	mov	al,[mmx_size]
-
 
1873
	or	al,al
-
 
1874
	jz	avx_broadcast_reg_avx_reg_size_ok
-
 
1875
	cmp	ah,16
-
 
1876
	jne	invalid_operand_size
-
 
1877
	cmp	al,ah
-
 
1878
	jae	invalid_operand
-
 
1879
      avx_broadcast_reg_avx_reg_size_ok:
-
 
1880
	pop	eax
-
 
1881
	xchg	ah,[operand_size]
-
 
1882
	mov	[postbyte_register],al
756
	jmp	cvtsi_xmmreg
1883
	test	[vex_required],2
-
 
1884
	jnz	invalid_operand
757
 
1885
	jmp	nomem_instruction_ready
-
 
1886
      avx_broadcast_reg_general_reg:
-
 
1887
	call	convert_register
-
 
1888
	mov	bl,al
-
 
1889
	mov	al,[mmx_size]
-
 
1890
	or	al,al
-
 
1891
	jz	avx_broadcast_reg_general_reg_size_ok
-
 
1892
	cmp	al,ah
-
 
1893
	jne	invalid_operand_size
-
 
1894
      avx_broadcast_reg_general_reg_size_ok:
-
 
1895
	cmp	al,4
-
 
1896
	jb	avx_broadcast_reg_general_reg_ready
-
 
1897
	cmp	al,8
-
 
1898
	mov	al,3
-
 
1899
	jne	avx_broadcast_reg_general_reg_ready
-
 
1900
	or	[rex_prefix],8
-
 
1901
      avx_broadcast_reg_general_reg_ready:
-
 
1902
	add	al,7Ah-1
-
 
1903
	mov	[supplemental_code],al
-
 
1904
	or	[vex_required],8
-
 
1905
	pop	eax
-
 
1906
	xchg	ah,[operand_size]
-
 
1907
	mov	[postbyte_register],al
-
 
1908
	jmp	nomem_instruction_ready
-
 
1909
 
Line -... Line 1910...
-
 
1910
avx512_extract_64x4_instruction:
-
 
1911
	or	[rex_prefix],8
-
 
1912
avx512_extract_32x8_instruction:
-
 
1913
	or	[vex_required],8
-
 
1914
	mov	cl,32
-
 
1915
	jmp	avx_extractf_instruction
-
 
1916
avx512_extract_64x2_instruction:
-
 
1917
	or	[rex_prefix],8
-
 
1918
avx512_extract_32x4_instruction:
-
 
1919
	or	[vex_required],8
-
 
1920
	mov	cl,16
-
 
1921
	jmp	avx_extractf_instruction
758
avx_extractf128_instruction:
1922
avx_extractf128_instruction:
759
	or	[vex_required],1
1923
	or	[vex_required],2
-
 
1924
	mov	cl,16
-
 
1925
      avx_extractf_instruction:
-
 
1926
	mov	[mmx_size],cl
760
	call	setup_66_0f_3a
1927
	call	setup_66_0f_3a
761
	lods	byte [esi]
1928
	lods	byte [esi]
762
	call	get_size_operator
1929
	call	get_size_operator
763
	cmp	al,10h
1930
	cmp	al,10h
764
	je	avx_extractf128_reg
1931
	je	avx_extractf_reg
765
	cmp	al,'['
1932
	cmp	al,'['
766
	jne	invalid_operand
1933
	jne	invalid_operand
767
	call	get_address
1934
	call	get_address
768
	xor	al,al
1935
	xor	al,al
769
	xchg	al,[operand_size]
1936
	xchg	al,[operand_size]
770
	or	al,al
1937
	or	al,al
771
	jz	avx_extractf128_mem_size_ok
1938
	jz	avx_extractf_mem_size_ok
772
	cmp	al,16
1939
	cmp	al,[mmx_size]
773
	jne	invalid_operand_size
1940
	jne	invalid_operand_size
774
      avx_extractf128_mem_size_ok:
1941
      avx_extractf_mem_size_ok:
-
 
1942
	call	take_avx512_mask
775
	lods	byte [esi]
1943
	lods	byte [esi]
776
	cmp	al,','
1944
	cmp	al,','
777
	jne	invalid_operand
1945
	jne	invalid_operand
778
	call	take_avx_register
1946
	call	take_avx_register
779
	cmp	ah,32
1947
	cmp	ah,[mmx_size]
780
	jne	invalid_operand_size
1948
	jbe	invalid_operand_size
781
	mov	[postbyte_register],al
1949
	mov	[postbyte_register],al
782
	jmp	mmx_imm8
1950
	jmp	mmx_imm8
783
      avx_extractf128_reg:
1951
      avx_extractf_reg:
784
	lods	byte [esi]
1952
	lods	byte [esi]
785
	call	convert_xmm_register
1953
	call	convert_avx_register
-
 
1954
	cmp	ah,[mmx_size]
786
	mov	[operand_size],0
1955
	jne	invalid_operand_size
787
	push	eax
1956
	push	eax
-
 
1957
	call	take_avx512_mask
-
 
1958
	mov	[operand_size],0
788
	lods	byte [esi]
1959
	lods	byte [esi]
789
	cmp	al,','
1960
	cmp	al,','
790
	jne	invalid_operand
1961
	jne	invalid_operand
791
	call	take_avx_register
1962
	call	take_avx_register
792
	cmp	ah,32
1963
	cmp	ah,[mmx_size]
793
	jne	invalid_operand_size
1964
	jbe	invalid_operand_size
794
	mov	[postbyte_register],al
1965
	mov	[postbyte_register],al
795
	pop	ebx
1966
	pop	ebx
796
	jmp	mmx_nomem_imm8
1967
	jmp	mmx_nomem_imm8
797
      setup_66_0f_3a:
1968
avx512_insert_64x4_instruction:
798
	mov	[extended_code],3Ah
1969
	or	[rex_prefix],8
-
 
1970
avx512_insert_32x8_instruction:
799
	mov	[supplemental_code],al
1971
	or	[vex_required],8
800
	mov	[base_code],0Fh
1972
	mov	cl,32
-
 
1973
	jmp	avx_insertf_instruction
-
 
1974
avx512_insert_64x2_instruction:
801
	mov	[opcode_prefix],66h
1975
	or	[rex_prefix],8
-
 
1976
avx512_insert_32x4_instruction:
-
 
1977
	or	[vex_required],8
802
	ret
1978
	mov	cl,16
-
 
1979
	jmp	avx_insertf_instruction
803
avx_insertf128_instruction:
1980
avx_insertf128_instruction:
804
	or	[vex_required],1
1981
	or	[vex_required],2
-
 
1982
	mov	cl,16
-
 
1983
      avx_insertf_instruction:
-
 
1984
	mov	[mmx_size],cl
-
 
1985
	mov	[broadcast_size],0
805
	call	setup_66_0f_3a
1986
	call	setup_66_0f_3a
806
	call	take_avx_register
1987
	call	take_avx_register
807
	cmp	ah,32
1988
	cmp	ah,[mmx_size]
808
	jne	invalid_operand
1989
	jbe	invalid_operand
809
	mov	[postbyte_register],al
1990
	mov	[postbyte_register],al
-
 
1991
	call	take_avx512_mask
810
	lods	byte [esi]
1992
	lods	byte [esi]
811
	cmp	al,','
1993
	cmp	al,','
812
	jne	invalid_operand
1994
	jne	invalid_operand
813
	call	take_avx_register
1995
	call	take_avx_register
814
	mov	[vex_register],al
1996
	mov	[vex_register],al
815
	mov	[operand_size],0
1997
	mov	al,[mmx_size]
816
	mov	[mmx_size],16
1998
	xchg	al,[operand_size]
-
 
1999
	push	eax
817
	lods	byte [esi]
2000
	lods	byte [esi]
818
	cmp	al,','
2001
	cmp	al,','
819
	jne	invalid_operand
2002
	jne	invalid_operand
-
 
2003
	lods	byte [esi]
-
 
2004
	call	get_size_operator
-
 
2005
	cmp	al,10h
-
 
2006
	je	avx_insertf_reg_reg_reg
-
 
2007
	cmp	al,'['
-
 
2008
	jne	invalid_operand
820
	call	take_avx_rm
2009
	call	get_address
-
 
2010
	pop	eax
821
	mov	[operand_size],32
2011
	mov	[operand_size],al
822
	jnc	mmx_imm8
2012
	jmp	mmx_imm8
-
 
2013
      avx_insertf_reg_reg_reg:
-
 
2014
	lods	byte [esi]
-
 
2015
	call	convert_avx_register
823
	mov	bl,al
2016
	mov	bl,al
-
 
2017
	pop	eax
-
 
2018
	mov	[operand_size],al
824
	jmp	mmx_nomem_imm8
2019
	jmp	mmx_nomem_imm8
825
avx_extractps_instruction:
2020
avx_extract_b_instruction:
-
 
2021
	mov	cl,1
-
 
2022
	jmp	avx_extract_instruction
-
 
2023
avx_extract_w_instruction:
-
 
2024
	mov	cl,2
-
 
2025
	jmp	avx_extract_instruction
-
 
2026
avx_extract_q_instruction:
826
	or	[vex_required],1
2027
	or	[rex_prefix],8
-
 
2028
	mov	cl,8
827
	jmp	extractps_instruction
2029
	jmp	avx_extract_instruction
828
avx_insertps_instruction:
2030
avx_extract_d_instruction:
-
 
2031
	mov	cl,4
-
 
2032
      avx_extract_instruction:
-
 
2033
	mov	[mmx_size],cl
-
 
2034
	call	setup_66_0f_3a
829
	or	[vex_required],1
2035
	or	[vex_required],1
-
 
2036
	lods	byte [esi]
-
 
2037
	call	get_size_operator
-
 
2038
	cmp	al,10h
-
 
2039
	je	avx_extractps_reg
-
 
2040
	cmp	al,'['
-
 
2041
	jne	invalid_operand
-
 
2042
	call	get_address
-
 
2043
	mov	al,[mmx_size]
-
 
2044
	not	al
-
 
2045
	and	[operand_size],al
-
 
2046
	jnz	invalid_operand_size
-
 
2047
	lods	byte [esi]
-
 
2048
	cmp	al,','
-
 
2049
	jne	invalid_operand
-
 
2050
	lods	byte [esi]
-
 
2051
	call	get_size_operator
-
 
2052
	cmp	al,10h
-
 
2053
	jne	invalid_operand
-
 
2054
	lods	byte [esi]
830
	call	take_avx_register
2055
	call	convert_avx_register
831
	cmp	ah,16
2056
	cmp	ah,16
832
	jne	invalid_operand_size
2057
	jne	invalid_operand_size
833
	mov	[postbyte_register],al
2058
	mov	[postbyte_register],al
-
 
2059
	jmp	mmx_imm8
-
 
2060
      avx_extractps_reg:
-
 
2061
	lods	byte [esi]
-
 
2062
	call	convert_register
-
 
2063
	mov	bl,al
-
 
2064
	mov	al,[mmx_size]
-
 
2065
	cmp	ah,al
-
 
2066
	jb	invalid_operand_size
-
 
2067
	cmp	ah,4
-
 
2068
	je	avx_extractps_reg_size_ok
-
 
2069
	cmp	ah,8
-
 
2070
	jne	invalid_operand_size
-
 
2071
	cmp	[code_type],64
-
 
2072
	jne	invalid_operand
-
 
2073
	cmp	al,4
-
 
2074
	jae	avx_extractps_reg_size_ok
-
 
2075
	or	[rex_prefix],8
-
 
2076
      avx_extractps_reg_size_ok:
-
 
2077
	mov	[operand_size],0
834
	lods	byte [esi]
2078
	lods	byte [esi]
835
	cmp	al,','
2079
	cmp	al,','
836
	jne	invalid_operand
2080
	jne	invalid_operand
-
 
2081
	lods	byte [esi]
837
	call	take_avx_register
2082
	call	get_size_operator
-
 
2083
	cmp	al,10h
838
	mov	[vex_register],al
2084
	jne	invalid_operand
-
 
2085
	lods	byte [esi]
839
	jmp	insertps_xmmreg
2086
	call	convert_avx_register
-
 
2087
	cmp	ah,16
840
avx_pextrb_instruction:
2088
	jne	invalid_operand_size
841
	or	[vex_required],1
2089
	mov	[postbyte_register],al
842
	jmp	pextrb_instruction
2090
	cmp	[supplemental_code],15h
843
avx_pextrw_instruction:
2091
	jne	mmx_nomem_imm8
844
	or	[vex_required],1
2092
	mov	[extended_code],0C5h
-
 
2093
	xchg	bl,[postbyte_register]
845
	jmp	pextrw_instruction
2094
	jmp	mmx_nomem_imm8
846
avx_pextrd_instruction:
2095
avx_insertps_instruction:
847
	or	[vex_required],1
2096
	mov	[immediate_size],1
848
	jmp	pextrd_instruction
2097
	or	[operand_flags],10h
849
avx_pextrq_instruction:
2098
	mov	[opcode_prefix],66h
850
	or	[vex_required],1
2099
	mov	[supplemental_code],al
-
 
2100
	mov	al,3Ah
-
 
2101
	mov	cl,4
851
	jmp	pextrq_instruction
2102
	jmp	avx_instruction
852
avx_pinsrb_instruction:
2103
avx_pinsrb_instruction:
853
	mov	[mmx_size],1
2104
	mov	cl,1
854
	or	[vex_required],1
-
 
855
	jmp	avx_pinsr_instruction_3a
2105
	jmp	avx_pinsr_instruction_3a
856
avx_pinsrw_instruction:
2106
avx_pinsrw_instruction:
857
	mov	[mmx_size],2
2107
	mov	cl,2
858
	or	[vex_required],1
-
 
859
	jmp	avx_pinsr_instruction
2108
	jmp	avx_pinsr_instruction
860
avx_pinsrd_instruction:
2109
avx_pinsrd_instruction:
861
	mov	[mmx_size],4
2110
	mov	cl,4
862
	or	[vex_required],1
-
 
863
	jmp	avx_pinsr_instruction_3a
2111
	jmp	avx_pinsr_instruction_3a
864
avx_pinsrq_instruction:
2112
avx_pinsrq_instruction:
865
	mov	[mmx_size],8
2113
	mov	cl,8
866
	or	[vex_required],1
2114
	or	[rex_prefix],8
867
	call	operand_64bit
-
 
868
      avx_pinsr_instruction_3a:
2115
      avx_pinsr_instruction_3a:
869
	mov	[supplemental_code],al
2116
	mov	[supplemental_code],al
870
	mov	al,3Ah
2117
	mov	al,3Ah
871
      avx_pinsr_instruction:
2118
      avx_pinsr_instruction:
872
	mov	[opcode_prefix],66h
2119
	mov	[opcode_prefix],66h
873
	mov	[base_code],0Fh
2120
	mov	[base_code],0Fh
874
	mov	[extended_code],al
2121
	mov	[extended_code],al
-
 
2122
	mov	[mmx_size],cl
-
 
2123
	or	[vex_required],1
875
	call	take_avx_register
2124
	call	take_avx_register
876
	cmp	ah,16
2125
	cmp	ah,16
877
	jne	invalid_operand_size
2126
	jne	invalid_operand_size
878
	mov	[postbyte_register],al
2127
	mov	[postbyte_register],al
879
	lods	byte [esi]
2128
	lods	byte [esi]
880
	cmp	al,','
2129
	cmp	al,','
881
	jne	invalid_operand
2130
	jne	invalid_operand
882
	call	take_avx_register
2131
	call	take_avx_register
883
	mov	[vex_register],al
2132
	mov	[vex_register],al
884
	jmp	pinsr_xmmreg
2133
	jmp	pinsr_xmmreg
-
 
2134
 
885
avx_maskmovdqu_instruction:
2135
avx_cvtudq2pd_instruction:
886
	or	[vex_required],1
2136
	or	[vex_required],8
-
 
2137
avx_cvtdq2pd_instruction:
-
 
2138
	mov	[opcode_prefix],0F3h
-
 
2139
	mov	cl,4
887
	jmp	maskmovdqu_instruction
2140
	jmp	avx_cvt_d_instruction
-
 
2141
avx_cvtps2qq_instruction:
-
 
2142
	or	[operand_flags],8
888
avx_pmovmskb_instruction:
2143
avx_cvttps2qq_instruction:
-
 
2144
	or	[operand_flags],4
889
	or	[vex_required],1
2145
	or	[vex_required],8
890
	mov	[opcode_prefix],66h
2146
	mov	[opcode_prefix],66h
-
 
2147
	mov	cl,4
-
 
2148
	jmp	avx_cvt_d_instruction
-
 
2149
avx_cvtps2pd_instruction:
-
 
2150
	or	[operand_flags],4
-
 
2151
	mov	cl,4
-
 
2152
      avx_cvt_d_instruction:
891
	mov	[base_code],0Fh
2153
	mov	[base_code],0Fh
892
	mov	[extended_code],al
2154
	mov	[extended_code],al
-
 
2155
	or	[vex_required],1
-
 
2156
	mov	[broadcast_size],cl
-
 
2157
	call	take_avx_register
-
 
2158
	mov	[postbyte_register],al
-
 
2159
	call	take_avx512_mask
-
 
2160
	lods	byte [esi]
-
 
2161
	cmp	al,','
-
 
2162
	jne	invalid_operand
-
 
2163
	xor	ecx,ecx
-
 
2164
	xchg	cl,[operand_size]
-
 
2165
	mov	al,cl
-
 
2166
	shr	al,1
-
 
2167
	mov	[mmx_size],al
893
	lods	byte [esi]
2168
	lods	byte [esi]
894
	call	get_size_operator
2169
	call	get_size_operator
-
 
2170
	cmp	al,'['
-
 
2171
	je	avx_cvt_d_reg_mem
895
	cmp	al,10h
2172
	cmp	al,10h
896
	jne	invalid_operand
2173
	jne	invalid_operand
897
	lods	byte [esi]
-
 
898
	call	convert_register
-
 
899
	cmp	ah,4
-
 
900
	je	avx_pmovmskb_reg_size_ok
-
 
901
	cmp	[code_type],64
-
 
902
	jne	invalid_operand_size
-
 
903
	cmp	ah,8
-
 
904
	jnz	invalid_operand_size
-
 
905
      avx_pmovmskb_reg_size_ok:
-
 
906
	mov	[postbyte_register],al
-
 
907
	mov	[operand_size],0
2174
	mov	[operand_size],0
908
	lods	byte [esi]
2175
	lods	byte [esi]
-
 
2176
	call	convert_avx_register
-
 
2177
	cmp	ah,[mmx_size]
-
 
2178
	je	avx_cvt_d_reg_reg_size_ok
-
 
2179
	jb	invalid_operand_size
909
	cmp	al,','
2180
	cmp	ah,16
910
	jne	invalid_operand
2181
	jne	invalid_operand_size
911
	call	take_avx_register
2182
      avx_cvt_d_reg_reg_size_ok:
912
	mov	bl,al
2183
	mov	bl,al
-
 
2184
	mov	[operand_size],cl
-
 
2185
	call	take_avx512_rounding
913
	jmp	nomem_instruction_ready
2186
	jmp	nomem_instruction_ready
-
 
2187
      avx_cvt_d_reg_mem:
-
 
2188
	call	take_avx_mem
-
 
2189
	jmp	instruction_ready
-
 
2190
avx_cvtpd2dq_instruction:
-
 
2191
	or	[operand_flags],4+8
-
 
2192
	mov	[opcode_prefix],0F2h
-
 
2193
	jmp	avx_cvt_q_instruction
-
 
2194
avx_cvtuqq2ps_instruction:
-
 
2195
	mov	[opcode_prefix],0F2h
914
avx_pshufd_instruction:
2196
avx_cvtpd2udq_instruction:
-
 
2197
	or	[operand_flags],8
-
 
2198
avx_cvttpd2udq_instruction:
-
 
2199
	or	[operand_flags],4
915
	or	[vex_required],1
2200
	or	[vex_required],8
-
 
2201
	jmp	avx_cvt_q_instruction
-
 
2202
avx_cvtpd2ps_instruction:
-
 
2203
	or	[operand_flags],8
-
 
2204
avx_cvttpd2dq_instruction:
916
	mov	[mmx_size],0
2205
	or	[operand_flags],4
917
	mov	[opcode_prefix],al
2206
	mov	[opcode_prefix],66h
-
 
2207
      avx_cvt_q_instruction:
-
 
2208
	mov	[broadcast_size],8
918
	mov	[base_code],0Fh
2209
	mov	[base_code],0Fh
919
	mov	[extended_code],70h
2210
	mov	[extended_code],al
-
 
2211
	or	[vex_required],1
-
 
2212
	or	[rex_prefix],80h
920
	call	take_avx_register
2213
	call	take_avx_register
921
	mov	[postbyte_register],al
2214
	mov	[postbyte_register],al
-
 
2215
	push	eax
-
 
2216
	call	take_avx512_mask
922
	lods	byte [esi]
2217
	lods	byte [esi]
923
	cmp	al,','
2218
	cmp	al,','
924
	jne	invalid_operand
2219
	jne	invalid_operand
-
 
2220
	xor	al,al
-
 
2221
	mov	[operand_size],al
-
 
2222
	mov	[mmx_size],al
925
	call	take_avx_rm
2223
	call	take_avx_rm
926
	jnc	mmx_imm8
2224
	jnc	avx_cvt_q_reg_mem
927
	mov	bl,al
2225
	mov	bl,al
-
 
2226
	pop	eax
-
 
2227
	call	avx_cvt_q_check_size
-
 
2228
	call	take_avx512_rounding
928
	jmp	mmx_nomem_imm8
2229
	jmp	nomem_instruction_ready
-
 
2230
      avx_cvt_q_reg_mem:
929
 
2231
	pop	eax
-
 
2232
	call	avx_cvt_q_check_size
930
avx_pmovsxbw_instruction:
2233
	jmp	instruction_ready
-
 
2234
      avx_cvt_q_check_size:
931
	mov	[mmx_size],8
2235
	mov	al,[operand_size]
-
 
2236
	or	al,al
-
 
2237
	jz	avx_cvt_q_size_not_specified
-
 
2238
	shr	al,1
-
 
2239
	cmp	al,ah
932
	jmp	avx_pmovsx_instruction
2240
	je	avx_cvt_q_size_ok
933
avx_pmovsxbd_instruction:
2241
	ja	invalid_operand_size
-
 
2242
	cmp	ah,16
934
	mov	[mmx_size],4
2243
	jne	invalid_operand_size
935
	jmp	avx_pmovsx_instruction
2244
      avx_cvt_q_size_ok:
-
 
2245
	ret
936
avx_pmovsxbq_instruction:
2246
      avx_cvt_q_size_not_specified:
937
	mov	[mmx_size],2
2247
	cmp	ah,64 shr 1
938
	jmp	avx_pmovsx_instruction
2248
	jne	recoverable_unknown_size
-
 
2249
	mov	[operand_size],64
-
 
2250
	ret
939
avx_pmovsxwd_instruction:
2251
avx_cvttps2udq_instruction:
940
	mov	[mmx_size],8
2252
	or	[vex_required],8
-
 
2253
	or	[operand_flags],2+4
-
 
2254
	mov	cx,0400h
941
	jmp	avx_pmovsx_instruction
2255
	jmp	avx_instruction_with_broadcast
942
avx_pmovsxwq_instruction:
2256
avx_cvttps2dq_instruction:
-
 
2257
	mov	[opcode_prefix],0F3h
-
 
2258
	or	[operand_flags],2+4
943
	mov	[mmx_size],4
2259
	mov	cx,0400h
944
	jmp	avx_pmovsx_instruction
2260
	jmp	avx_instruction_with_broadcast
945
avx_pmovsxdq_instruction:
2261
avx_cvtph2ps_instruction:
-
 
2262
	mov	[opcode_prefix],66h
946
	mov	[mmx_size],8
2263
	mov	[supplemental_code],al
-
 
2264
	or	[operand_flags],4
-
 
2265
	mov	al,38h
-
 
2266
	xor	cl,cl
947
      avx_pmovsx_instruction:
2267
	jmp	avx_cvt_d_instruction
-
 
2268
avx_cvtps2ph_instruction:
-
 
2269
	call	setup_66_0f_3a
948
	or	[vex_required],1
2270
	or	[vex_required],1
-
 
2271
	or	[operand_flags],4
-
 
2272
	lods	byte [esi]
-
 
2273
	call	get_size_operator
-
 
2274
	cmp	al,10h
-
 
2275
	je	vcvtps2ph_reg
-
 
2276
	cmp	al,'['
-
 
2277
	jne	invalid_operand
949
	call	setup_66_0f_38
2278
	call	get_address
-
 
2279
	call	take_avx512_mask
-
 
2280
	lods	byte [esi]
-
 
2281
	cmp	al,','
-
 
2282
	jne	invalid_operand
-
 
2283
	shl	[operand_size],1
950
	call	take_avx_register
2284
	call	take_avx_register
951
	mov	[postbyte_register],al
2285
	mov	[postbyte_register],al
-
 
2286
	shr	ah,1
-
 
2287
	mov	[mmx_size],ah
-
 
2288
	jmp	mmx_imm8
-
 
2289
      vcvtps2ph_reg:
-
 
2290
	lods	byte [esi]
-
 
2291
	call	convert_avx_register
-
 
2292
	mov	bl,al
-
 
2293
	call	take_avx512_mask
-
 
2294
	xor	cl,cl
-
 
2295
	xchg	cl,[operand_size]
-
 
2296
	shl	cl,1
952
	lods	byte [esi]
2297
	lods	byte [esi]
953
	cmp	al,','
2298
	cmp	al,','
954
	jne	invalid_operand
2299
	jne	invalid_operand
-
 
2300
	call	take_avx_register
-
 
2301
	mov	[postbyte_register],al
955
	xor	al,al
2302
	or	cl,cl
-
 
2303
	jz	vcvtps2ph_reg_size_ok
-
 
2304
	cmp	cl,ah
-
 
2305
	je	vcvtps2ph_reg_size_ok
956
	xchg	al,[operand_size]
2306
	jb	invalid_operand_size
957
	push	eax
2307
	cmp	ah,16
-
 
2308
	jne	invalid_operand_size
-
 
2309
      vcvtps2ph_reg_size_ok:
-
 
2310
	call	take_avx512_rounding
-
 
2311
	jmp	mmx_nomem_imm8
-
 
2312
 
-
 
2313
avx_cvtsd2usi_instruction:
-
 
2314
	or	[operand_flags],8
-
 
2315
avx_cvttsd2usi_instruction:
-
 
2316
	or	[vex_required],8
-
 
2317
	jmp	avx_cvttsd2si_instruction
-
 
2318
avx_cvtsd2si_instruction:
-
 
2319
	or	[operand_flags],8
-
 
2320
avx_cvttsd2si_instruction:
-
 
2321
	mov	ah,0F2h
-
 
2322
	mov	cl,8
-
 
2323
	jmp	avx_cvt_2si_instruction
-
 
2324
avx_cvtss2usi_instruction:
-
 
2325
	or	[operand_flags],8
-
 
2326
avx_cvttss2usi_instruction:
-
 
2327
	or	[vex_required],8
-
 
2328
	jmp	avx_cvttss2si_instruction
-
 
2329
avx_cvtss2si_instruction:
-
 
2330
	or	[operand_flags],8
-
 
2331
avx_cvttss2si_instruction:
-
 
2332
	mov	ah,0F3h
-
 
2333
	mov	cl,4
-
 
2334
      avx_cvt_2si_instruction:
-
 
2335
	or	[operand_flags],2+4
-
 
2336
	mov	[mmx_size],cl
-
 
2337
	mov	[broadcast_size],0
-
 
2338
	mov	[opcode_prefix],ah
-
 
2339
	mov	[base_code],0Fh
-
 
2340
	mov	[extended_code],al
-
 
2341
	or	[vex_required],1
958
	lods	byte [esi]
2342
	lods	byte [esi]
959
	call	get_size_operator
2343
	call	get_size_operator
960
	cmp	al,10h
2344
	cmp	al,10h
961
	je	avx_pmovsx_xmmreg_reg
-
 
962
	cmp	al,'['
-
 
963
	jne	invalid_operand
2345
	jne	invalid_operand
964
	call	get_address
2346
	lods	byte [esi]
965
	pop	eax
-
 
966
	cmp	al,32
-
 
967
	jb	avx_pmovsx_size_check
2347
	call	convert_register
968
	shl	[mmx_size],1
2348
	mov	[postbyte_register],al
969
      avx_pmovsx_size_check:
-
 
970
	xchg	al,[operand_size]
2349
	mov	[operand_size],0
971
	test	al,al
2350
	cmp	ah,4
972
	jz	instruction_ready
2351
	je	avx_cvt_2si_reg
973
	cmp	al,[mmx_size]
2352
	cmp	ah,8
974
	jne	invalid_operand_size
2353
	jne	invalid_operand_size
975
	jmp	instruction_ready
2354
	call	operand_64bit
976
      avx_pmovsx_xmmreg_reg:
2355
      avx_cvt_2si_reg:
977
	lods	byte [esi]
2356
	lods	byte [esi]
-
 
2357
	cmp	al,','
-
 
2358
	jne	invalid_operand
978
	call	convert_xmm_register
2359
	call	take_avx_rm
-
 
2360
	jnc	instruction_ready
979
	mov	bl,al
2361
	mov	bl,al
980
	pop	eax
-
 
981
	mov	[operand_size],al
2362
	call	take_avx512_rounding
982
	jmp	nomem_instruction_ready
2363
	jmp	nomem_instruction_ready
-
 
2364
avx_cvtusi2sd_instruction:
-
 
2365
	or	[vex_required],8
983
avx_permil_instruction:
2366
avx_cvtsi2sd_instruction:
-
 
2367
	mov	ah,0F2h
-
 
2368
	mov	cl,8
-
 
2369
	jmp	avx_cvtsi_instruction
-
 
2370
avx_cvtusi2ss_instruction:
-
 
2371
	or	[vex_required],8
-
 
2372
avx_cvtsi2ss_instruction:
-
 
2373
	mov	ah,0F3h
-
 
2374
	mov	cl,4
-
 
2375
      avx_cvtsi_instruction:
-
 
2376
	or	[operand_flags],2+4+8
-
 
2377
	mov	[mmx_size],cl
-
 
2378
	mov	[opcode_prefix],ah
-
 
2379
	mov	[base_code],0Fh
984
	call	setup_66_0f_3a
2380
	mov	[extended_code],al
985
	or	[vex_required],1
2381
	or	[vex_required],1
986
	call	take_avx_register
2382
	call	take_avx_register
-
 
2383
	cmp	ah,16
-
 
2384
	jne	invalid_operand_size
987
	mov	[postbyte_register],al
2385
	mov	[postbyte_register],al
988
	lods	byte [esi]
2386
	lods	byte [esi]
989
	cmp	al,','
2387
	cmp	al,','
990
	jne	invalid_operand
2388
	jne	invalid_operand
-
 
2389
	call	take_avx_register
-
 
2390
	mov	[vex_register],al
-
 
2391
	lods	byte [esi]
-
 
2392
	cmp	al,','
-
 
2393
	jne	invalid_operand
-
 
2394
	mov	[operand_size],0
991
	lods	byte [esi]
2395
	lods	byte [esi]
992
	call	get_size_operator
2396
	call	get_size_operator
993
	cmp	al,'['
2397
	cmp	al,'['
994
	je	avx_permil_reg_mem
2398
	je	avx_cvtsi_reg_reg_mem
995
	cmp	al,10h
2399
	cmp	al,10h
996
	jne	invalid_operand
2400
	jne	invalid_operand
997
	lods	byte [esi]
2401
	lods	byte [esi]
-
 
2402
	call	convert_register
-
 
2403
	mov	bl,al
-
 
2404
	cmp	ah,4
-
 
2405
	je	avx_cvtsi_reg_reg_reg32
-
 
2406
	cmp	ah,8
-
 
2407
	jne	invalid_operand_size
-
 
2408
	call	operand_64bit
-
 
2409
      avx_cvtsi_rounding:
-
 
2410
	call	take_avx512_rounding
-
 
2411
	jmp	nomem_instruction_ready
-
 
2412
      avx_cvtsi_reg_reg_reg32:
-
 
2413
	cmp	[mmx_size],8
-
 
2414
	jne	avx_cvtsi_rounding
-
 
2415
	jmp	nomem_instruction_ready
-
 
2416
      avx_cvtsi_reg_reg_mem:
-
 
2417
	call	get_address
-
 
2418
	mov	al,[operand_size]
-
 
2419
	mov	[mmx_size],al
-
 
2420
	or	al,al
-
 
2421
	jz	single_mem_nosize
-
 
2422
	cmp	al,4
-
 
2423
	je	instruction_ready
-
 
2424
	cmp	al,8
-
 
2425
	jne	invalid_operand_size
-
 
2426
	call	operand_64bit
-
 
2427
	jmp	instruction_ready
-
 
2428
 
-
 
2429
avx_maskmov_w1_instruction:
-
 
2430
	or	[rex_prefix],8
-
 
2431
avx_maskmov_instruction:
-
 
2432
	call	setup_66_0f_38
-
 
2433
	mov	[mmx_size],0
-
 
2434
	or	[vex_required],2
-
 
2435
	lods	byte [esi]
-
 
2436
	call	get_size_operator
-
 
2437
	cmp	al,10h
-
 
2438
	jne	avx_maskmov_mem
-
 
2439
	lods	byte [esi]
998
	call	convert_avx_register
2440
	call	convert_avx_register
-
 
2441
	mov	[postbyte_register],al
-
 
2442
	lods	byte [esi]
-
 
2443
	cmp	al,','
-
 
2444
	jne	invalid_operand
-
 
2445
	call	take_avx_register
999
	mov	[vex_register],al
2446
	mov	[vex_register],al
1000
	lods	byte [esi]
2447
	lods	byte [esi]
1001
	cmp	al,','
2448
	cmp	al,','
1002
	jne	invalid_operand
2449
	jne	invalid_operand
1003
	push	esi
-
 
1004
	xor	cl,cl
-
 
1005
	xchg	cl,[operand_size]
-
 
1006
	lods	byte [esi]
2450
	lods	byte [esi]
1007
	call	get_size_operator
-
 
1008
	xchg	cl,[operand_size]
-
 
1009
	pop	esi
-
 
1010
	cmp	al,'['
2451
	cmp	al,'['
1011
	je	avx_permil_reg_reg_mem
-
 
1012
	cmp	al,10h
-
 
1013
	jne	avx_permil_reg_reg_imm8
-
 
1014
	call	take_avx_register
-
 
1015
	mov	bl,al
-
 
1016
	mov	[extended_code],38h
-
 
1017
	add	[supplemental_code],8
-
 
1018
	jmp	nomem_instruction_ready
-
 
1019
      avx_permil_reg_reg_mem:
-
 
1020
	lods	byte [esi]
-
 
1021
	call	get_size_operator
2452
	jne	invalid_operand
1022
	call	get_address
2453
	call	get_address
1023
	mov	[extended_code],38h
-
 
1024
	add	[supplemental_code],8
-
 
1025
	jmp	instruction_ready
2454
	jmp	instruction_ready
1026
      avx_permil_reg_reg_imm8:
2455
      avx_maskmov_mem:
1027
	dec	esi
-
 
1028
	xor	bl,bl
2456
	cmp	al,'['
1029
	xchg	bl,[vex_register]
-
 
1030
	jmp	mmx_nomem_imm8
2457
	jne	invalid_operand
1031
      avx_permil_reg_mem:
-
 
1032
	call	get_address
2458
	call	get_address
1033
	jmp	mmx_imm8
-
 
1034
avx_bit_shift_instruction:
-
 
1035
	mov	[opcode_prefix],66h
-
 
1036
	mov	[base_code],0Fh
-
 
1037
	mov	[extended_code],al
-
 
1038
	or	[vex_required],1
-
 
1039
	call	take_avx_register
-
 
1040
	mov	[postbyte_register],al
-
 
1041
	lods	byte [esi]
2459
	lods	byte [esi]
1042
	cmp	al,','
2460
	cmp	al,','
1043
	jne	invalid_operand
2461
	jne	invalid_operand
1044
	call	take_avx_register
2462
	call	take_avx_register
1045
	mov	[vex_register],al
2463
	mov	[vex_register],al
1046
	lods	byte [esi]
2464
	lods	byte [esi]
1047
	cmp	al,','
2465
	cmp	al,','
1048
	jne	invalid_operand
2466
	jne	invalid_operand
-
 
2467
	call	take_avx_register
-
 
2468
	mov	[postbyte_register],al
-
 
2469
	add	[supplemental_code],2
1049
	push	esi
2470
	jmp	instruction_ready
-
 
2471
avx_movmskpd_instruction:
-
 
2472
	mov	[opcode_prefix],66h
-
 
2473
avx_movmskps_instruction:
1050
	xor	cl,cl
2474
	mov	[base_code],0Fh
1051
	xchg	cl,[operand_size]
2475
	mov	[extended_code],50h
-
 
2476
	or	[vex_required],2
1052
	lods	byte [esi]
2477
	lods	byte [esi]
1053
	call	get_size_operator
2478
	call	get_size_operator
1054
	cmp	al,10h
2479
	cmp	al,10h
1055
	je	avx_bit_shift_regs_reg
2480
	jne	invalid_operand
1056
	pop	esi
2481
	lods	byte [esi]
-
 
2482
	call	convert_register
-
 
2483
	mov	[postbyte_register],al
1057
	cmp	al,'['
2484
	cmp	ah,4
1058
	je	avx_bit_shift_regs_mem
2485
	je	avx_movmskps_reg_ok
-
 
2486
	cmp	ah,8
1059
	xchg	cl,[operand_size]
2487
	jne	invalid_operand_size
1060
	dec	esi
2488
	cmp	[code_type],64
-
 
2489
	jne	invalid_operand
-
 
2490
      avx_movmskps_reg_ok:
1061
	mov	bl,[extended_code]
2491
	mov	[operand_size],0
-
 
2492
	lods	byte [esi]
1062
	mov	al,bl
2493
	cmp	al,','
-
 
2494
	jne	invalid_operand
-
 
2495
	call	take_avx_register
1063
	shr	bl,4
2496
	mov	bl,al
-
 
2497
	jmp	nomem_instruction_ready
-
 
2498
avx_maskmovdqu_instruction:
-
 
2499
	or	[vex_required],2
-
 
2500
	jmp	maskmovdqu_instruction
-
 
2501
avx_pmovmskb_instruction:
1064
	and	al,1111b
2502
	or	[vex_required],2
-
 
2503
	mov	[opcode_prefix],66h
1065
	add	al,70h
2504
	mov	[base_code],0Fh
1066
	mov	[extended_code],al
2505
	mov	[extended_code],al
1067
	sub	bl,0Ch
-
 
1068
	shl	bl,1
-
 
1069
	xchg	bl,[postbyte_register]
-
 
1070
	xchg	bl,[vex_register]
-
 
1071
	jmp	mmx_nomem_imm8
-
 
1072
      avx_bit_shift_regs_reg:
-
 
1073
	pop	eax
-
 
1074
	lods	byte [esi]
2506
	lods	byte [esi]
-
 
2507
	call	get_size_operator
-
 
2508
	cmp	al,10h
-
 
2509
	jne	invalid_operand
-
 
2510
	lods	byte [esi]
1075
	call	convert_xmm_register
2511
	call	convert_register
-
 
2512
	cmp	ah,4
-
 
2513
	je	avx_pmovmskb_reg_size_ok
-
 
2514
	cmp	[code_type],64
-
 
2515
	jne	invalid_operand_size
-
 
2516
	cmp	ah,8
-
 
2517
	jnz	invalid_operand_size
-
 
2518
      avx_pmovmskb_reg_size_ok:
-
 
2519
	mov	[postbyte_register],al
1076
	xchg	cl,[operand_size]
2520
	mov	[operand_size],0
-
 
2521
	lods	byte [esi]
-
 
2522
	cmp	al,','
-
 
2523
	jne	invalid_operand
-
 
2524
	call	take_avx_register
1077
	mov	bl,al
2525
	mov	bl,al
1078
	jmp	nomem_instruction_ready
2526
	jmp	nomem_instruction_ready
-
 
2527
 
-
 
2528
gather_pd_instruction:
-
 
2529
	or	[rex_prefix],8
-
 
2530
gather_ps_instruction:
-
 
2531
	call	setup_66_0f_38
-
 
2532
	or	[vex_required],4
-
 
2533
	or	[operand_flags],20h
1079
      avx_bit_shift_regs_mem:
2534
	call	take_avx_register
-
 
2535
	mov	[postbyte_register],al
-
 
2536
	call	take_avx512_mask
-
 
2537
	lods	byte [esi]
-
 
2538
	cmp	al,','
-
 
2539
	jne	invalid_operand
-
 
2540
	xor	cl,cl
-
 
2541
	xchg	cl,[operand_size]
1080
	push	ecx
2542
	push	ecx
1081
	lods	byte [esi]
2543
	lods	byte [esi]
1082
	call	get_size_operator
2544
	call	get_size_operator
-
 
2545
	cmp	al,'['
-
 
2546
	jne	invalid_argument
1083
	call	get_address
2547
	call	get_address
1084
	pop	eax
2548
	pop	eax
1085
	xchg	al,[operand_size]
2549
	xchg	al,[operand_size]
-
 
2550
      gather_mem_size_check:
-
 
2551
	mov	ah,4
-
 
2552
	test	[rex_prefix],8
-
 
2553
	jz	gather_elements_size_ok
-
 
2554
	add	ah,ah
-
 
2555
      gather_elements_size_ok:
-
 
2556
	mov	[mmx_size],ah
1086
	test	al,al
2557
	test	al,al
1087
	jz	instruction_ready
2558
	jz	gather_mem_size_ok
1088
	cmp	al,16
2559
	cmp	al,ah
1089
	jne	invalid_operand_size
2560
	jne	invalid_operand_size
-
 
2561
      gather_mem_size_ok:
1090
	jmp	instruction_ready
2562
	cmp	byte [esi],','
1091
avx_pslldq_instruction:
2563
	je	gather_reg_mem_reg
1092
	mov	[postbyte_register],al
2564
	test	[vex_required],20h
-
 
2565
	jz	invalid_operand
1093
	mov	[opcode_prefix],66h
2566
	mov	ah,[operand_size]
1094
	mov	[base_code],0Fh
2567
	mov	al,80h
1095
	mov	[extended_code],73h
2568
	jmp	gather_arguments_ok
-
 
2569
      gather_reg_mem_reg:
1096
	or	[vex_required],1
2570
	or	[vex_required],2
-
 
2571
	inc	esi
1097
	call	take_avx_register
2572
	call	take_avx_register
-
 
2573
      gather_arguments_ok:
1098
	mov	[vex_register],al
2574
	mov	[vex_register],al
1099
	lods	byte [esi]
2575
	cmp	al,[postbyte_register]
-
 
2576
	je	disallowed_combination_of_registers
1100
	cmp	al,','
2577
	mov	al,bl
1101
	jne	invalid_operand
2578
	and	al,11111b
-
 
2579
	cmp	al,[postbyte_register]
-
 
2580
	je	disallowed_combination_of_registers
1102
	call	take_avx_register
2581
	cmp	al,[vex_register]
-
 
2582
	je	disallowed_combination_of_registers
1103
	mov	bl,al
2583
	mov	al,bl
-
 
2584
	shr	al,5
-
 
2585
	cmp	al,0Ch shr 1
1104
	jmp	mmx_nomem_imm8
2586
	je	gather_vr128
-
 
2587
	mov	ah,32
-
 
2588
	cmp	al,6 shr 1
-
 
2589
	jne	gather_regular
1105
 
2590
	add	ah,ah
1106
vzeroall_instruction:
2591
      gather_regular:
1107
	mov	[operand_size],32
2592
	mov	al,[rex_prefix]
-
 
2593
	shr	al,3
1108
vzeroupper_instruction:
2594
	xor	al,[supplemental_code]
-
 
2595
	test	al,1
1109
	mov	[base_code],0Fh
2596
	jz	gather_uniform
1110
	mov	[extended_code],al
2597
	test	[supplemental_code],1
1111
	or	[vex_required],1
2598
	jz	gather_double
-
 
2599
	mov	al,ah
-
 
2600
	xchg	al,[operand_size]
-
 
2601
	add	al,al
-
 
2602
	cmp	al,ah
1112
	call	store_instruction_code
2603
	jne	invalid_operand_size
1113
	jmp	instruction_assembled
2604
	jmp	instruction_ready
-
 
2605
      gather_double:
-
 
2606
	add	ah,ah
1114
vldmxcsr_instruction:
2607
      gather_uniform:
1115
	or	[vex_required],1
2608
	cmp	ah,[operand_size]
-
 
2609
	jne	invalid_operand_size
1116
	jmp	fxsave_instruction
2610
	jmp	instruction_ready
-
 
2611
      gather_vr128:
-
 
2612
	cmp	ah,16
1117
vcvtph2ps_instruction:
2613
	je	instruction_ready
-
 
2614
	cmp	ah,32
1118
	mov	[opcode_prefix],66h
2615
	jne	invalid_operand_size
1119
	mov	[supplemental_code],al
2616
	test	[supplemental_code],1
-
 
2617
	jnz	invalid_operand_size
1120
	mov	al,38h
2618
	test	[rex_prefix],8
-
 
2619
	jz	invalid_operand_size
-
 
2620
	jmp	instruction_ready
1121
	jmp	avx_cvtps2pd_instruction
2621
scatter_pd_instruction:
-
 
2622
	or	[rex_prefix],8
1122
vcvtps2ph_instruction:
2623
scatter_ps_instruction:
1123
	call	setup_66_0f_3a
2624
	call	setup_66_0f_38
1124
	or	[vex_required],1
2625
	or	[vex_required],4+8
-
 
2626
	or	[operand_flags],20h
1125
	lods	byte [esi]
2627
	lods	byte [esi]
1126
	call	get_size_operator
2628
	call	get_size_operator
1127
	cmp	al,10h
-
 
1128
	je	vcvtps2ph_reg
-
 
1129
	cmp	al,'['
2629
	cmp	al,'['
1130
	jne	invalid_operand
2630
	jne	invalid_argument
1131
	call	get_address
2631
	call	get_address
-
 
2632
	call	take_avx512_mask
1132
	lods	byte [esi]
2633
	lods	byte [esi]
1133
	cmp	al,','
2634
	cmp	al,','
1134
	jne	invalid_operand
2635
	jne	invalid_operand
-
 
2636
	xor	al,al
1135
	shl	[operand_size],1
2637
	xchg	al,[operand_size]
-
 
2638
	push	eax
1136
	call	take_avx_register
2639
	call	take_avx_register
1137
	mov	[postbyte_register],al
2640
	mov	[postbyte_register],al
1138
	jmp	mmx_imm8
2641
	pop	eax
-
 
2642
	jmp	gather_mem_size_check
-
 
2643
gatherpf_qpd_instruction:
-
 
2644
	mov	ah,0C7h
-
 
2645
	jmp	gatherpf_pd_instruction
-
 
2646
gatherpf_dpd_instruction:
-
 
2647
	mov	ah,0C6h
1139
      vcvtps2ph_reg:
2648
      gatherpf_pd_instruction:
1140
	lods	byte [esi]
2649
	or	[rex_prefix],8
-
 
2650
	mov	cl,8
-
 
2651
	jmp	gatherpf_instruction
-
 
2652
gatherpf_qps_instruction:
-
 
2653
	mov	ah,0C7h
-
 
2654
	jmp	gatherpf_ps_instruction
-
 
2655
gatherpf_dps_instruction:
-
 
2656
	mov	ah,0C6h
-
 
2657
      gatherpf_ps_instruction:
-
 
2658
	mov	cl,4
-
 
2659
      gatherpf_instruction:
-
 
2660
	mov	[mmx_size],cl
1141
	call	convert_xmm_register
2661
	mov	[postbyte_register],al
1142
	mov	bl,al
2662
	mov	al,ah
-
 
2663
	call	setup_66_0f_38
-
 
2664
	or	[vex_required],4+8
1143
	mov	[operand_size],0
2665
	or	[operand_flags],20h
1144
	lods	byte [esi]
2666
	lods	byte [esi]
-
 
2667
	call	get_size_operator
1145
	cmp	al,','
2668
	cmp	al,'['
-
 
2669
	jne	invalid_argument
-
 
2670
	call	get_address
-
 
2671
	call	take_avx512_mask
-
 
2672
	mov	ah,[mmx_size]
-
 
2673
	mov	al,[operand_size]
-
 
2674
	or	al,al
-
 
2675
	jz	gatherpf_mem_size_ok
-
 
2676
	cmp	al,ah
-
 
2677
	jne	invalid_operand_size
-
 
2678
      gatherpf_mem_size_ok:
-
 
2679
	mov	[operand_size],64
-
 
2680
	mov	al,6 shr 1
-
 
2681
	cmp	ah,4
-
 
2682
	je	gatherpf_check_vsib
-
 
2683
	cmp	[supplemental_code],0C6h
-
 
2684
	jne	gatherpf_check_vsib
-
 
2685
	mov	al,0Eh shr 1
-
 
2686
      gatherpf_check_vsib:
-
 
2687
	mov	ah,bl
-
 
2688
	shr	ah,5
-
 
2689
	cmp	al,ah
1146
	jne	invalid_operand
2690
	jne	invalid_operand
1147
	call	take_avx_register
-
 
1148
	mov	[postbyte_register],al
-
 
1149
	jmp	mmx_nomem_imm8
2691
	jmp	instruction_ready
Line 1150... Line 2692...
1150
 
2692
 
1151
bmi_instruction:
2693
bmi_instruction:
1152
	mov	[base_code],0Fh
2694
	mov	[base_code],0Fh
1153
	mov	[extended_code],38h
2695
	mov	[extended_code],38h
1154
	mov	[supplemental_code],0F3h
2696
	mov	[supplemental_code],0F3h
1155
	mov	[postbyte_register],al
2697
	mov	[postbyte_register],al
1156
      bmi_reg:
2698
      bmi_reg:
1157
	or	[vex_required],1
2699
	or	[vex_required],2
1158
	lods	byte [esi]
2700
	lods	byte [esi]
1159
	call	get_size_operator
2701
	call	get_size_operator
1160
	cmp	al,10h
2702
	cmp	al,10h
1161
	jne	invalid_operand
2703
	jne	invalid_operand
Line 1199... Line 2741...
1199
andn_instruction:
2741
andn_instruction:
1200
	mov	[base_code],0Fh
2742
	mov	[base_code],0Fh
1201
	mov	[extended_code],38h
2743
	mov	[extended_code],38h
1202
	mov	[supplemental_code],al
2744
	mov	[supplemental_code],al
1203
	or	[vex_required],1
2745
	or	[vex_required],2
1204
	lods	byte [esi]
2746
	lods	byte [esi]
1205
	call	get_size_operator
2747
	call	get_size_operator
1206
	cmp	al,10h
2748
	cmp	al,10h
1207
	jne	invalid_operand
2749
	jne	invalid_operand
1208
	lods	byte [esi]
2750
	lods	byte [esi]
1209
	call	convert_register
2751
	call	convert_register
Line 1223... Line 2765...
1223
bzhi_instruction:
2765
bzhi_instruction:
1224
	mov	[base_code],0Fh
2766
	mov	[base_code],0Fh
1225
	mov	[extended_code],38h
2767
	mov	[extended_code],38h
1226
	mov	[supplemental_code],al
2768
	mov	[supplemental_code],al
1227
	or	[vex_required],1
2769
	or	[vex_required],2
1228
	call	get_reg_mem
2770
	call	get_reg_mem
1229
	jc	bzhi_reg_reg
2771
	jc	bzhi_reg_reg
1230
	call	get_vex_source_register
2772
	call	get_vex_source_register
1231
	jc	invalid_operand
2773
	jc	invalid_operand
1232
	call	operand_32or64
2774
	call	operand_32or64
1233
	jmp	instruction_ready
2775
	jmp	instruction_ready
Line 1255... Line 2797...
1255
bextr_instruction:
2797
bextr_instruction:
1256
	mov	[base_code],0Fh
2798
	mov	[base_code],0Fh
1257
	mov	[extended_code],38h
2799
	mov	[extended_code],38h
1258
	mov	[supplemental_code],al
2800
	mov	[supplemental_code],al
1259
	or	[vex_required],1
2801
	or	[vex_required],2
1260
	call	get_reg_mem
2802
	call	get_reg_mem
1261
	jc	bextr_reg_reg
2803
	jc	bextr_reg_reg
1262
	call	get_vex_source_register
2804
	call	get_vex_source_register
1263
	jc	bextr_reg_mem_imm32
2805
	jc	bextr_reg_mem_imm32
1264
	call	operand_32or64
2806
	call	operand_32or64
1265
	jmp	instruction_ready
2807
	jmp	instruction_ready
Line 1298... Line 2840...
1298
	mov	[opcode_prefix],0F2h
2840
	mov	[opcode_prefix],0F2h
1299
	mov	[base_code],0Fh
2841
	mov	[base_code],0Fh
1300
	mov	[extended_code],3Ah
2842
	mov	[extended_code],3Ah
1301
	mov	[supplemental_code],al
2843
	mov	[supplemental_code],al
1302
	or	[vex_required],1
2844
	or	[vex_required],2
1303
	call	get_reg_mem
2845
	call	get_reg_mem
1304
	jc	rorx_reg_reg
2846
	jc	rorx_reg_reg
1305
	call	operand_32or64
2847
	call	operand_32or64
1306
	jmp	mmx_imm8
2848
	jmp	mmx_imm8
1307
      rorx_reg_reg:
2849
      rorx_reg_reg:
1308
	call	operand_32or64
2850
	call	operand_32or64
1309
	jmp	mmx_nomem_imm8
2851
	jmp	mmx_nomem_imm8
1310
 
2852
 
Line 1311... Line 2853...
1311
fma_instruction_pd:
2853
tbm_instruction:
1312
	or	[rex_prefix],8
2854
	mov	[xop_opcode_map],9
1313
fma_instruction_ps:
-
 
1314
	mov	[mmx_size],0
2855
	mov	ah,al
1315
	jmp	avx_instruction_38_setup
-
 
1316
fma_instruction_sd:
2856
	shr	ah,4
1317
	or	[rex_prefix],8
2857
	and	al,111b
1318
	mov	[mmx_size],8
2858
	mov	[base_code],ah
1319
	jmp	avx_instruction_38_setup
2859
	mov	[postbyte_register],al
1320
fma_instruction_ss:
-
 
1321
	mov	[mmx_size],4
2860
	jmp	bmi_reg
1322
	jmp	avx_instruction_38_setup
-
 
Line 1323... Line 2861...
1323
 
2861
 
-
 
2862
llwpcb_instruction:
-
 
2863
	or	[vex_required],2
1324
fma4_instruction_p:
2864
	mov	[xop_opcode_map],9
-
 
2865
	mov	[base_code],12h
-
 
2866
	mov	[postbyte_register],al
-
 
2867
	lods	byte [esi]
-
 
2868
	call	get_size_operator
-
 
2869
	cmp	al,10h
-
 
2870
	jne	invalid_operand
-
 
2871
	lods	byte [esi]
-
 
2872
	call	convert_register
-
 
2873
	mov	bl,al
1325
	mov	[mmx_size],0
2874
	call	operand_32or64
1326
	jmp	fma4_instruction_setup
2875
	jmp	nomem_instruction_ready
1327
fma4_instruction_sd:
2876
lwpins_instruction:
1328
	mov	[mmx_size],8
2877
	or	[vex_required],2
1329
	jmp	fma4_instruction_setup
2878
	mov	[xop_opcode_map],0Ah
1330
fma4_instruction_ss:
2879
	mov	[base_code],12h
-
 
2880
	mov	[vex_register],al
-
 
2881
	lods	byte [esi]
-
 
2882
	call	get_size_operator
-
 
2883
	cmp	al,10h
-
 
2884
	jne	invalid_operand
-
 
2885
	lods	byte [esi]
-
 
2886
	call	convert_register
-
 
2887
	mov	[postbyte_register],al
-
 
2888
	lods	byte [esi]
-
 
2889
	cmp	al,','
-
 
2890
	jne	invalid_operand
-
 
2891
	xor	cl,cl
-
 
2892
	xchg	cl,[operand_size]
-
 
2893
	lods	byte [esi]
-
 
2894
	call	get_size_operator
-
 
2895
	cmp	al,10h
-
 
2896
	je	lwpins_reg_reg
-
 
2897
	cmp	al,'['
-
 
2898
	jne	invalid_argument
-
 
2899
	push	ecx
-
 
2900
	call	get_address
-
 
2901
	pop	eax
-
 
2902
	xchg	al,[operand_size]
-
 
2903
	test	al,al
-
 
2904
	jz	lwpins_reg_mem_size_ok
-
 
2905
	cmp	al,4
1331
	mov	[mmx_size],4
2906
	jne	invalid_operand_size
-
 
2907
      lwpins_reg_mem_size_ok:
-
 
2908
	call	prepare_lwpins
-
 
2909
	jmp	store_instruction_with_imm32
-
 
2910
      lwpins_reg_reg:
-
 
2911
	lods	byte [esi]
-
 
2912
	call	convert_register
-
 
2913
	cmp	ah,4
1332
      fma4_instruction_setup:
2914
	jne	invalid_operand_size
1333
	mov	[immediate_size],-2
2915
	mov	[operand_size],cl
-
 
2916
	mov	bl,al
1334
	mov	byte [value],0
2917
	call	prepare_lwpins
-
 
2918
	jmp	store_nomem_instruction_with_imm32
-
 
2919
      prepare_lwpins:
-
 
2920
	lods	byte [esi]
-
 
2921
	cmp	al,','
-
 
2922
	jne	invalid_operand
-
 
2923
	lods	byte [esi]
-
 
2924
	call	get_imm32
-
 
2925
	call	operand_32or64
-
 
2926
	mov	al,[vex_register]
-
 
2927
	xchg	al,[postbyte_register]
-
 
2928
	mov	[vex_register],al
Line 1335... Line 2929...
1335
	jmp	avx_instruction_3a_setup
2929
	ret
1336
 
2930
 
1337
xop_single_source_sd_instruction:
2931
xop_single_source_sd_instruction:
1338
	or	[vex_required],2
2932
	or	[operand_flags],2
1339
	mov	[mmx_size],8
2933
	mov	[mmx_size],8
1340
	jmp	xop_instruction_9
2934
	jmp	xop_instruction_9
1341
xop_single_source_ss_instruction:
2935
xop_single_source_ss_instruction:
1342
	or	[vex_required],2
2936
	or	[operand_flags],2
1343
	mov	[mmx_size],4
2937
	mov	[mmx_size],4
1344
	jmp	xop_instruction_9
2938
	jmp	xop_instruction_9
1345
xop_single_source_instruction:
2939
xop_single_source_instruction:
1346
	or	[vex_required],2
2940
	or	[operand_flags],2
1347
	mov	[mmx_size],0
2941
	mov	[mmx_size],0
1348
      xop_instruction_9:
2942
      xop_instruction_9:
1349
	mov	[base_code],al
2943
	mov	[base_code],al
1350
	mov	[xop_opcode_map],9
2944
	mov	[xop_opcode_map],9
1351
	jmp	avx_common
2945
	jmp	avx_xop_common
1352
xop_single_source_128bit_instruction:
2946
xop_single_source_128bit_instruction:
1353
	or	[vex_required],2
2947
	or	[operand_flags],2
1354
	mov	[mmx_size],16
2948
	mov	[mmx_size],16
1355
	jmp	xop_instruction_9
2949
	jmp	xop_instruction_9
1356
xop_triple_source_128bit_instruction:
2950
xop_triple_source_128bit_instruction:
Line 1364... Line 2958...
1364
	mov	[mmx_size],16
2958
	mov	[mmx_size],16
1365
      xop_instruction_8:
2959
      xop_instruction_8:
1366
	mov	[base_code],al
2960
	mov	[base_code],al
1367
	mov	[xop_opcode_map],8
2961
	mov	[xop_opcode_map],8
1368
	jmp	avx_common
2962
	jmp	avx_xop_common
1369
xop_pcom_b_instruction:
2963
xop_pcom_b_instruction:
1370
	mov	ah,0CCh
2964
	mov	ah,0CCh
1371
	jmp	xop_pcom_instruction
2965
	jmp	xop_pcom_instruction
1372
xop_pcom_d_instruction:
2966
xop_pcom_d_instruction:
1373
	mov	ah,0CEh
2967
	mov	ah,0CEh
1374
	jmp	xop_pcom_instruction
2968
	jmp	xop_pcom_instruction
Line 1390... Line 2984...
1390
xop_pcom_uw_instruction:
2984
xop_pcom_uw_instruction:
1391
	mov	ah,0EDh
2985
	mov	ah,0EDh
1392
      xop_pcom_instruction:
2986
      xop_pcom_instruction:
1393
	mov	byte [value],al
2987
	mov	byte [value],al
1394
	mov	[mmx_size],16
2988
	mov	[immediate_size],-4
-
 
2989
	mov	[mmx_size],16
1395
	mov	[base_code],ah
2990
	mov	[base_code],ah
1396
	mov	[xop_opcode_map],8
2991
	mov	[xop_opcode_map],8
1397
	jmp	avx_common
2992
	jmp	avx_xop_common
1398
vpcmov_instruction:
2993
vpcmov_instruction:
1399
	or	[vex_required],1
2994
	or	[vex_required],2
1400
	mov	[immediate_size],-2
2995
	mov	[immediate_size],-2
1401
	mov	byte [value],0
2996
	mov	byte [value],0
1402
	mov	[mmx_size],0
2997
	mov	[mmx_size],0
1403
	mov	[base_code],al
2998
	mov	[base_code],al
1404
	mov	[xop_opcode_map],8
2999
	mov	[xop_opcode_map],8
1405
	jmp	avx_common
3000
	jmp	avx_xop_common
1406
xop_shift_instruction:
3001
xop_shift_instruction:
1407
	mov	[base_code],al
3002
	mov	[base_code],al
1408
	or	[vex_required],1
3003
	or	[vex_required],2
1409
	mov	[xop_opcode_map],9
3004
	mov	[xop_opcode_map],9
1410
	call	take_avx_register
3005
	call	take_avx_register
1411
	cmp	ah,16
3006
	cmp	ah,16
1412
	jne	invalid_operand
3007
	jne	invalid_operand
1413
	mov	[postbyte_register],al
3008
	mov	[postbyte_register],al
1414
	lods	byte [esi]
3009
	lods	byte [esi]
Line 1480... Line 3075...
1480
	mov	[xop_opcode_map],8
3075
	mov	[xop_opcode_map],8
1481
	dec	esi
3076
	dec	esi
1482
	jmp	mmx_imm8
3077
	jmp	mmx_imm8
1483
 
3078
 
Line 1484... Line -...
1484
vpermil_2pd_instruction:
-
 
1485
	mov	[immediate_size],-2
-
 
1486
	mov	byte [value],al
-
 
1487
	mov	al,49h
-
 
1488
	jmp	vpermil2_instruction_setup
-
 
1489
vpermil_2ps_instruction:
-
 
1490
	mov	[immediate_size],-2
-
 
1491
	mov	byte [value],al
-
 
1492
	mov	al,48h
-
 
1493
	jmp	vpermil2_instruction_setup
-
 
1494
vpermil2_instruction:
-
 
1495
	mov	[immediate_size],-3
-
 
1496
	mov	byte [value],0
-
 
1497
      vpermil2_instruction_setup:
-
 
1498
	mov	[base_code],0Fh
-
 
1499
	mov	[supplemental_code],al
-
 
1500
	mov	al,3Ah
-
 
1501
	mov	[mmx_size],0
3079
set_evex_mode:
1502
	jmp	avx_instruction
-
 
1503
 
-
 
1504
tbm_instruction:
-
 
1505
	mov	[xop_opcode_map],9
-
 
1506
	mov	ah,al
-
 
1507
	shr	ah,4
-
 
1508
	and	al,111b
-
 
1509
	mov	[base_code],ah
3080
	mov	[evex_mode],al
1510
	mov	[postbyte_register],al
-
 
1511
	jmp	bmi_reg
-
 
1512
 
-
 
1513
llwpcb_instruction:
-
 
1514
	or	[vex_required],1
-
 
1515
	mov	[xop_opcode_map],9
-
 
1516
	mov	[base_code],12h
-
 
1517
	mov	[postbyte_register],al
-
 
1518
	lods	byte [esi]
-
 
1519
	call	get_size_operator
-
 
1520
	cmp	al,10h
-
 
1521
	jne	invalid_operand
-
 
1522
	lods	byte [esi]
-
 
1523
	call	convert_register
-
 
1524
	mov	bl,al
-
 
1525
	call	operand_32or64
-
 
1526
	jmp	nomem_instruction_ready
-
 
1527
lwpins_instruction:
-
 
1528
	or	[vex_required],1
-
 
1529
	mov	[xop_opcode_map],0Ah
-
 
1530
	mov	[base_code],12h
-
 
1531
	mov	[vex_register],al
-
 
1532
	lods	byte [esi]
-
 
1533
	call	get_size_operator
-
 
1534
	cmp	al,10h
-
 
1535
	jne	invalid_operand
-
 
1536
	lods	byte [esi]
-
 
1537
	call	convert_register
-
 
1538
	mov	[postbyte_register],al
-
 
1539
	lods	byte [esi]
-
 
1540
	cmp	al,','
-
 
1541
	jne	invalid_operand
-
 
1542
	xor	cl,cl
-
 
1543
	xchg	cl,[operand_size]
-
 
1544
	lods	byte [esi]
-
 
1545
	call	get_size_operator
-
 
1546
	cmp	al,10h
-
 
1547
	je	lwpins_reg_reg
-
 
1548
	cmp	al,'['
-
 
1549
	jne	invalid_argument
-
 
1550
	push	ecx
-
 
1551
	call	get_address
-
 
1552
	pop	eax
-
 
1553
	xchg	al,[operand_size]
-
 
1554
	test	al,al
-
 
1555
	jz	lwpins_reg_mem_size_ok
-
 
1556
	cmp	al,4
-
 
1557
	jne	invalid_operand_size
-
 
1558
      lwpins_reg_mem_size_ok:
-
 
1559
	call	prepare_lwpins
-
 
1560
	jmp	store_instruction_with_imm32
-
 
1561
      lwpins_reg_reg:
-
 
1562
	lods	byte [esi]
-
 
1563
	call	convert_register
-
 
1564
	cmp	ah,4
-
 
1565
	jne	invalid_operand_size
-
 
1566
	mov	[operand_size],cl
-
 
1567
	mov	bl,al
-
 
1568
	call	prepare_lwpins
-
 
1569
	jmp	store_nomem_instruction_with_imm32
-
 
1570
      prepare_lwpins:
-
 
1571
	lods	byte [esi]
-
 
1572
	cmp	al,','
-
 
1573
	jne	invalid_operand
-
 
1574
	lods	byte [esi]
-
 
1575
	call	get_imm32
-
 
1576
	call	operand_32or64
-
 
1577
	mov	al,[vex_register]
-
 
1578
	xchg	al,[postbyte_register]
-
 
1579
	mov	[vex_register],al
-
 
1580
	ret
-
 
1581
 
-
 
1582
gather_instruction_pd:
-
 
1583
	or	[rex_prefix],8
-
 
1584
gather_instruction_ps:
-
 
1585
	call	setup_66_0f_38
-
 
1586
	or	[vex_required],4
-
 
1587
	call	take_avx_register
-
 
1588
	mov	[postbyte_register],al
-
 
1589
	lods	byte [esi]
-
 
1590
	cmp	al,','
-
 
1591
	jne	invalid_operand
-
 
1592
	xor	cl,cl
-
 
1593
	xchg	cl,[operand_size]
-
 
1594
	push	ecx
-
 
1595
	lods	byte [esi]
-
 
1596
	call	get_size_operator
-
 
1597
	cmp	al,'['
-
 
1598
	jne	invalid_argument
-
 
1599
	call	get_address
-
 
1600
	pop	eax
-
 
1601
	xchg	al,[operand_size]
-
 
1602
	test	al,al
-
 
1603
	jz	gather_elements_size_ok
-
 
1604
	test	[rex_prefix],8
-
 
1605
	jnz	gather_elements_64bit
-
 
1606
	cmp	al,4
-
 
1607
	jne	invalid_operand_size
-
 
1608
	jmp	gather_elements_size_ok
-
 
1609
      gather_elements_64bit:
-
 
1610
	cmp	al,8
-
 
1611
	jne	invalid_operand_size
-
 
1612
      gather_elements_size_ok:
-
 
1613
	lods	byte [esi]
-
 
1614
	cmp	al,','
-
 
1615
	jne	invalid_operand
-
 
1616
	call	take_avx_register
-
 
1617
	mov	[vex_register],al
-
 
1618
	cmp	al,[postbyte_register]
-
 
1619
	je	disallowed_combination_of_registers
-
 
1620
	mov	al,bl
-
 
1621
	and	al,1111b
-
 
1622
	cmp	al,[postbyte_register]
-
 
1623
	je	disallowed_combination_of_registers
-
 
1624
	cmp	al,[vex_register]
-
 
1625
	je	disallowed_combination_of_registers
-
 
1626
	mov	al,bl
-
 
1627
	shr	al,4
-
 
1628
	cmp	al,0Ch
-
 
1629
	je	gather_vr_128bit
-
 
1630
	mov	al,[rex_prefix]
-
 
1631
	shr	al,3
-
 
1632
	xor	al,[supplemental_code]
-
 
1633
	test	al,1
-
 
1634
	jz	gather_256bit
-
 
1635
	test	[supplemental_code],1
-
 
1636
	jz	invalid_operand_size
-
 
1637
	mov	al,32
-
 
1638
	xchg	al,[operand_size]
-
 
1639
	cmp	al,16
-
 
1640
	jne	invalid_operand_size
-
 
1641
	jmp	instruction_ready
-
 
1642
      gather_256bit:
-
 
1643
	cmp	ah,32
-
 
1644
	jne	invalid_operand_size
-
 
1645
	jmp	instruction_ready
-
 
1646
      gather_vr_128bit:
-
 
1647
	cmp	ah,16
-
 
1648
	je	instruction_ready
-
 
1649
	test	[supplemental_code],1
-
 
1650
	jnz	invalid_operand_size
-
 
1651
	test	[rex_prefix],8
-
 
1652
	jz	invalid_operand_size
-
 
1653
	jmp	instruction_ready
3081
	jmp	instruction_assembled
Line 1654... Line 3082...
1654
 
3082
 
1655
take_avx_register:
3083
take_avx_register:
1656
	lods	byte [esi]
3084
	lods	byte [esi]
1657
	call	get_size_operator
3085
	call	get_size_operator
1658
	cmp	al,10h
3086
	cmp	al,10h
1659
	jne	invalid_operand
3087
	jne	invalid_operand
1660
	lods	byte [esi]
3088
	lods	byte [esi]
1661
convert_avx_register:
3089
convert_avx_register:
1662
	mov	ah,al
3090
	mov	ah,al
1663
	and	al,0Fh
3091
	and	al,1Fh
1664
	and	ah,0F0h
3092
	and	ah,0E0h
1665
	sub	ah,0B0h
3093
	sub	ah,60h
-
 
3094
	jb	invalid_operand
1666
	jbe	invalid_operand
3095
	jz	avx512_register_size
1667
	cmp	ah,32
3096
	sub	ah,60h
-
 
3097
	jb	invalid_operand
-
 
3098
	jnz	avx_register_size_ok
-
 
3099
	mov	ah,16
-
 
3100
	jmp	avx_register_size_ok
-
 
3101
      avx512_register_size:
-
 
3102
	mov	ah,64
1668
	ja	invalid_operand
3103
      avx_register_size_ok:
1669
	cmp	al,8
3104
	cmp	al,8
1670
	jb	match_register_size
3105
	jb	match_register_size
1671
	cmp	[code_type],64
3106
	cmp	[code_type],64
1672
	jne	invalid_operand
3107
	jne	invalid_operand
1673
	jmp	match_register_size
3108
	jmp	match_register_size
-
 
3109
store_vex_instruction_code:
-
 
3110
	test	[rex_prefix],10h
-
 
3111
	jnz	invalid_operand
-
 
3112
	test	[vex_required],0F8h
-
 
3113
	jnz	store_evex_instruction_code
-
 
3114
	test	[vex_register],10000b
-
 
3115
	jnz	store_evex_instruction_code
-
 
3116
	cmp	[operand_size],64
1674
store_vex_instruction_code:
3117
	je	store_evex_instruction_code
1675
	mov	al,[base_code]
3118
	mov	al,[base_code]
1676
	cmp	al,0Fh
3119
	cmp	al,0Fh
-
 
3120
	jne	store_xop_instruction_code
-
 
3121
	test	[vex_required],2
-
 
3122
	jnz	prepare_vex
-
 
3123
	cmp	[evex_mode],0
-
 
3124
	je	prepare_vex
-
 
3125
	cmp	[displacement_compression],1
-
 
3126
	jne	prepare_vex
-
 
3127
	cmp	edx,80h
-
 
3128
	jb	prepare_vex
-
 
3129
	cmp	edx,-80h
-
 
3130
	jae	prepare_vex
-
 
3131
	mov	al,bl
-
 
3132
	or	al,bh
-
 
3133
	shr	al,4
-
 
3134
	cmp	al,2
-
 
3135
	je	prepare_vex
-
 
3136
	call	compress_displacement
-
 
3137
	cmp	[displacement_compression],2
-
 
3138
	ja	prepare_evex
-
 
3139
	jb	prepare_vex
-
 
3140
	dec	[displacement_compression]
-
 
3141
	mov	edx,[uncompressed_displacement]
1677
	jne	store_xop_instruction_code
3142
      prepare_vex:
1678
	mov	ah,[extended_code]
3143
	mov	ah,[extended_code]
1679
	cmp	ah,38h
3144
	cmp	ah,38h
1680
	je	store_vex_0f38_instruction_code
3145
	je	store_vex_0f38_instruction_code
1681
	cmp	ah,3Ah
3146
	cmp	ah,3Ah
Line 1697... Line 3162...
1697
	add	edi,3
3162
	add	edi,3
1698
	ret
3163
	ret
1699
      get_vex_lpp_bits:
3164
      get_vex_lpp_bits:
1700
	cmp	[operand_size],32
3165
	cmp	[operand_size],32
1701
	jne	vex_l_bit_ok
3166
	jne	get_vex_pp_bits
1702
	or	al,100b
3167
	or	al,100b
1703
      vex_l_bit_ok:
3168
      get_vex_pp_bits:
1704
	mov	ah,[opcode_prefix]
3169
	mov	ah,[opcode_prefix]
1705
	cmp	ah,66h
3170
	cmp	ah,66h
1706
	je	vex_66
3171
	je	vex_66
1707
	cmp	ah,0F3h
3172
	cmp	ah,0F3h
1708
	je	vex_f3
3173
	je	vex_f3
1709
	cmp	ah,0F2h
3174
	cmp	ah,0F2h
Line 1783... Line 3248...
1783
	call	get_vex_lpp_bits
3248
	call	get_vex_lpp_bits
1784
	mov	[edi+2],al
3249
	mov	[edi+2],al
1785
	add	edi,4
3250
	add	edi,4
1786
	ret
3251
	ret
1787
3252
store_evex_instruction_code:
-
 
3253
	test	[vex_required],2
-
 
3254
	jnz	invalid_operand
-
 
3255
	cmp	[base_code],0Fh
-
 
3256
	jne	invalid_operand
-
 
3257
	cmp	[displacement_compression],1
-
 
3258
	jne	prepare_evex
-
 
3259
	call	compress_displacement
-
 
3260
      prepare_evex:
-
 
3261
	mov	ah,[extended_code]
-
 
3262
	cmp	ah,38h
-
 
3263
	je	store_evex_0f38_instruction_code
-
 
3264
	cmp	ah,3Ah
-
 
3265
	je	store_evex_0f3a_instruction_code
-
 
3266
	mov	al,11110001b
-
 
3267
      make_evex:
-
 
3268
	mov	[edi+4],ah
-
 
3269
	mov	byte [edi],62h
-
 
3270
	mov	ah,[rex_prefix]
-
 
3271
	shl	ah,5
-
 
3272
	xor	al,ah
-
 
3273
	mov	ah,[vex_required]
-
 
3274
	and	ah,10h
-
 
3275
	xor	al,ah
-
 
3276
	mov	[edi+1],al
-
 
3277
	call	check_vex
-
 
3278
	mov	al,[vex_register]
-
 
3279
	not	al
-
 
3280
	and	al,1111b
-
 
3281
	shl	al,3
-
 
3282
	mov	ah,[rex_prefix]
-
 
3283
	shl	ah,4
-
 
3284
	or	ah,[rex_prefix]
-
 
3285
	and	ah,80h
-
 
3286
	or	al,ah
-
 
3287
	or	al,100b
-
 
3288
	call	get_vex_pp_bits
-
 
3289
	mov	[edi+2],al
-
 
3290
	mov	al,[vex_register]
-
 
3291
	not	al
-
 
3292
	shr	al,1
-
 
3293
	and	al,1000b
-
 
3294
	test	[vex_required],80h
-
 
3295
	jne	evex_rounding
-
 
3296
	mov	ah,[operand_size]
-
 
3297
	cmp	ah,16
-
 
3298
	jbe	evex_l_ok
-
 
3299
	or	al,ah
-
 
3300
	jmp	evex_l_ok
-
 
3301
      evex_rounding:
-
 
3302
	mov	ah,[rounding_mode]
-
 
3303
	shl	ah,5
-
 
3304
	or	al,ah
-
 
3305
      evex_l_ok:
-
 
3306
	test	[vex_required],20h
-
 
3307
	jz	evex_zaaa_ok
-
 
3308
	or	al,[mask_register]
-
 
3309
      evex_zaaa_ok:
-
 
3310
	test	[vex_required],40h
-
 
3311
	jz	evex_b_ok
-
 
3312
	or	al,10h
-
 
3313
      evex_b_ok:
-
 
3314
	mov	[edi+3],al
-
 
3315
	add	edi,5
-
 
3316
	ret
-
 
3317
      store_evex_0f38_instruction_code:
-
 
3318
	mov	al,11110010b
-
 
3319
	mov	ah,[supplemental_code]
-
 
3320
	jmp	make_evex
-
 
3321
      store_evex_0f3a_instruction_code:
-
 
3322
	mov	al,11110011b
-
 
3323
	mov	ah,[supplemental_code]
-
 
3324
	jmp	make_evex
-
 
3325
compress_displacement:
-
 
3326
	mov	ebp,ecx
-
 
3327
	mov	[uncompressed_displacement],edx
-
 
3328
	or	edx,edx
-
 
3329
	jz	displacement_compressed
-
 
3330
	xor	ecx,ecx
-
 
3331
	mov	cl,[mmx_size]
-
 
3332
	test	cl,cl
-
 
3333
	jnz	calculate_displacement_scale
-
 
3334
	mov	cl,[operand_size]
-
 
3335
      calculate_displacement_scale:
-
 
3336
	bsf	ecx,ecx
-
 
3337
	jz	displacement_compression_ok
-
 
3338
	xor	eax,eax
-
 
3339
	shrd	eax,edx,cl
-
 
3340
	jnz	displacement_not_compressed
-
 
3341
	sar	edx,cl
-
 
3342
	cmp	edx,80h
-
 
3343
	jb	displacement_compressed
-
 
3344
	cmp	edx,-80h
-
 
3345
	jnb	displacement_compressed
-
 
3346
	shl	edx,cl
-
 
3347
      displacement_not_compressed:
-
 
3348
	inc	[displacement_compression]
-
 
3349
	jmp	displacement_compression_ok
-
 
3350
      displacement_compressed:
-
 
3351
	add	[displacement_compression],2
-
 
3352
      displacement_compression_ok:
-
 
3353
	mov	ecx,ebp
-
 
3354
	ret
-
 
3355