Subversion Repositories Kolibri OS

Rev

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

Rev 2664 Rev 2665
Line 1... Line 1...
1
; flat assembler core
1
; flat assembler core
2
; Copyright (c) 1999-2012, Tomasz Grysztar.
2
; Copyright (c) 1999-2012, Tomasz Grysztar.
3
; All rights reserved.
3
; All rights reserved.
4
 
4
 
5
avx_single_source_pd_instruction:
5
avx_single_source_pd_instruction:
6
	or	[vex_required],2
6
	or	[vex_required],2
7
	jmp	avx_pd_instruction
7
	jmp	avx_pd_instruction
8
avx_pd_instruction_imm8:
8
avx_pd_instruction_imm8:
9
	mov	[immediate_size],1
9
	mov	[immediate_size],1
10
avx_pd_instruction:
10
avx_pd_instruction:
11
	mov	[opcode_prefix],66h
11
	mov	[opcode_prefix],66h
Line 63... Line 63...
63
	mov	[opcode_prefix],0F2h
63
	mov	[opcode_prefix],0F2h
64
	mov	[mmx_size],0
64
	mov	[mmx_size],0
65
	jmp	avx_instruction
65
	jmp	avx_instruction
66
avx_movshdup_instruction:
66
avx_movshdup_instruction:
67
	or	[vex_required],2
67
	or	[vex_required],2
68
	mov	[opcode_prefix],0F3h
68
	mov	[opcode_prefix],0F3h
69
	mov	[mmx_size],0
69
	mov	[mmx_size],0
70
avx_instruction:
70
	jmp	avx_instruction
-
 
71
avx_128bit_instruction:
-
 
72
	mov	[mmx_size],16
-
 
73
	mov	[opcode_prefix],66h
-
 
74
avx_instruction:
71
	mov	[base_code],0Fh
75
	mov	[base_code],0Fh
72
	mov	[extended_code],al
76
	mov	[extended_code],al
73
      avx_common:
77
      avx_common:
74
	or	[vex_required],1
78
	or	[vex_required],1
75
	lods	byte [esi]
79
	lods	byte [esi]
76
	call	get_size_operator
80
	call	get_size_operator
77
	cmp	al,10h
81
	cmp	al,10h
78
	jne	invalid_operand
82
	jne	invalid_operand
Line 202... Line 206...
202
	cmp	al,[operand_size]
206
	cmp	al,[operand_size]
203
	jne	operand_sizes_do_not_match
207
	jne	operand_sizes_do_not_match
204
      avx_mem_ok:
208
      avx_mem_ok:
205
	clc
209
	clc
206
	ret
210
	ret
207
      avx_smem:
211
      avx_smem:
208
	xchg	al,[operand_size]
212
	xchg	al,[operand_size]
209
	cmp	al,[mmx_size]
213
	or	al,al
-
 
214
	jz	avx_smem_ok
-
 
215
	cmp	al,[mmx_size]
210
	jne	invalid_operand_size
216
	jne	invalid_operand_size
211
	clc
217
      avx_smem_ok:
-
 
218
	clc
212
	ret
219
	ret
213
      take_imm4_if_needed:
220
      take_imm4_if_needed:
214
	cmp	[immediate_size],-3
221
	cmp	[immediate_size],-3
215
	jne	imm4_ok
222
	jne	imm4_ok
216
	push	ebx ecx edx
223
	push	ebx ecx edx
217
	lods	byte [esi]
224
	lods	byte [esi]
218
	cmp	al,','
225
	cmp	al,','
219
	jne	invalid_operand
226
	jne	invalid_operand
Line 224... Line 231...
224
	test	al,11110000b
231
	test	al,11110000b
225
	jnz	value_out_of_range
232
	jnz	value_out_of_range
226
	or	byte [value],al
233
	or	byte [value],al
227
	pop	edx ecx ebx
234
	pop	edx ecx ebx
228
      imm4_ok:
235
      imm4_ok:
229
	ret
236
	ret
230
 
237
 
231
avx_128bit_instruction:
238
avx_single_source_128bit_instruction_38:
232
	mov	[mmx_size],16
239
	or	[vex_required],2
233
	mov	[opcode_prefix],66h
240
avx_128bit_instruction_38:
-
 
241
	mov	[mmx_size],16
234
	jmp	avx_instruction
242
	jmp	avx_instruction_38_setup
235
avx_single_source_128bit_instruction_38:
243
avx_single_source_instruction_38:
236
	or	[vex_required],2
244
	or	[vex_required],2
237
avx_128bit_instruction_38:
245
avx_instruction_38:
238
	mov	[mmx_size],16
246
	mov	[mmx_size],0
239
      avx_instruction_38_setup:
247
      avx_instruction_38_setup:
240
	mov	[opcode_prefix],66h
248
	mov	[opcode_prefix],66h
241
	mov	[supplemental_code],al
249
	mov	[supplemental_code],al
242
	mov	al,38h
250
	mov	al,38h
243
	jmp	avx_instruction
251
	jmp	avx_instruction
244
avx_single_source_instruction_38:
252
avx_instruction_38_w1:
245
	or	[vex_required],2
253
	or	[rex_prefix],8
246
	mov	[mmx_size],0
254
	jmp	avx_instruction_38
247
	jmp	avx_instruction_38_setup
-
 
248
avx_ss_instruction_3a_imm8:
255
 
-
 
256
avx_ss_instruction_3a_imm8:
249
	mov	[mmx_size],4
257
	mov	[mmx_size],4
250
	jmp	avx_instruction_3a_imm8_setup
258
	jmp	avx_instruction_3a_imm8_setup
251
avx_sd_instruction_3a_imm8:
259
avx_sd_instruction_3a_imm8:
252
	mov	[mmx_size],8
260
	mov	[mmx_size],8
253
	jmp	avx_instruction_3a_imm8_setup
261
	jmp	avx_instruction_3a_imm8_setup
254
avx_single_source_128bit_instruction_3a_imm8:
262
avx_single_source_128bit_instruction_3a_imm8:
255
	or	[vex_required],2
263
	or	[vex_required],2
256
avx_128bit_instruction_3a_imm8:
264
avx_128bit_instruction_3a_imm8:
257
	mov	[mmx_size],16
265
	mov	[mmx_size],16
258
	jmp	avx_instruction_3a_imm8_setup
266
	jmp	avx_instruction_3a_imm8_setup
259
avx_triple_source_instruction_3a:
267
avx_triple_source_instruction_3a:
260
	mov	[mmx_size],0
268
	mov	[mmx_size],0
261
	mov	[immediate_size],-1
269
	mov	[immediate_size],-1
262
	mov	byte [value],0
270
	mov	byte [value],0
263
	jmp	avx_instruction_3a_setup
-
 
264
avx_triple_source_128bit_instruction_3a:
-
 
265
	mov	[mmx_size],16
-
 
266
	mov	[immediate_size],-1
-
 
267
	mov	byte [value],0
-
 
268
	jmp	avx_instruction_3a_setup
271
	jmp	avx_instruction_3a_setup
269
avx_single_source_instruction_3a_imm8:
272
avx_single_source_instruction_3a_imm8:
270
	or	[vex_required],2
273
	or	[vex_required],2
271
avx_instruction_3a_imm8:
274
avx_instruction_3a_imm8:
272
	mov	[mmx_size],0
275
	mov	[mmx_size],0
273
      avx_instruction_3a_imm8_setup:
276
      avx_instruction_3a_imm8_setup:
274
	mov	[immediate_size],1
277
	mov	[immediate_size],1
275
      avx_instruction_3a_setup:
278
      avx_instruction_3a_setup:
276
	mov	[opcode_prefix],66h
279
	mov	[opcode_prefix],66h
277
	mov	[supplemental_code],al
280
	mov	[supplemental_code],al
278
	mov	al,3Ah
281
	mov	al,3Ah
279
	jmp	avx_instruction
282
	jmp	avx_instruction
280
avx_pclmulqdq_instruction:
283
avx_pclmulqdq_instruction:
281
	mov	byte [value],al
284
	mov	byte [value],al
282
	mov	[mmx_size],16
285
	mov	[mmx_size],16
283
	mov	al,44h
286
	mov	al,44h
284
	jmp	avx_instruction_3a_setup
287
	jmp	avx_instruction_3a_setup
285
avx_perm2f128_instruction:
288
 
-
 
289
avx_permq_instruction:
286
	call	setup_66_0f_3a
290
	or	[vex_required],2
-
 
291
	or	[rex_prefix],8
287
	mov	[immediate_size],1
292
avx_perm2f128_instruction:
-
 
293
	mov	[immediate_size],1
288
	mov	[mmx_size],0
294
	mov	ah,3Ah
-
 
295
	jmp	avx_perm_instruction
-
 
296
avx_permd_instruction:
-
 
297
	mov	ah,38h
-
 
298
      avx_perm_instruction:
-
 
299
	mov	[opcode_prefix],66h
-
 
300
	mov	[base_code],0Fh
-
 
301
	mov	[extended_code],ah
-
 
302
	mov	[supplemental_code],al
-
 
303
	mov	[mmx_size],0
289
	or	[vex_required],1
304
	or	[vex_required],1
290
	call	take_avx_register
305
	call	take_avx_register
291
	cmp	ah,32
306
	cmp	ah,32
292
	jne	invalid_operand_size
307
	jne	invalid_operand_size
293
	mov	[postbyte_register],al
308
	mov	[postbyte_register],al
294
	jmp	avx_vex_reg
309
	jmp	avx_vex_reg
295
     setup_66_0f_3a:
310
 
296
	mov	[opcode_prefix],66h
-
 
297
	mov	[base_code],0Fh
-
 
298
	mov	[extended_code],3Ah
-
 
299
	mov	[supplemental_code],al
-
 
300
	ret
-
 
301
 
-
 
302
avx_movdqu_instruction:
311
avx_movdqu_instruction:
303
	mov	[opcode_prefix],0F3h
312
	mov	[opcode_prefix],0F3h
304
	jmp	avx_movps_instruction
313
	jmp	avx_movps_instruction
305
avx_movpd_instruction:
314
avx_movpd_instruction:
306
	mov	[opcode_prefix],66h
315
	mov	[opcode_prefix],66h
307
avx_movps_instruction:
316
avx_movps_instruction:
308
	mov	[mmx_size],0
317
	mov	[mmx_size],0
309
	or	[vex_required],2
318
	or	[vex_required],2
Line 335... Line 344...
335
	mov	[extended_code],al
344
	mov	[extended_code],al
336
	lods	byte [esi]
345
	lods	byte [esi]
337
	call	get_size_operator
346
	call	get_size_operator
338
	jmp	avx_mem
347
	jmp	avx_mem
339
avx_lddqu_instruction:
348
avx_lddqu_instruction:
340
	mov	[opcode_prefix],0F2h
349
	mov	[opcode_prefix],0F2h
341
	mov	[mmx_size],0
350
	mov	[mmx_size],0
342
	xor	cl,cl
351
	xor	cx,cx
343
      avx_load_instruction:
352
      avx_load_instruction:
344
	mov	[base_code],0Fh
353
	mov	[base_code],0Fh
345
	mov	[extended_code],al
354
	mov	[extended_code],al
346
	or	[vex_required],1
355
	or	[vex_required],1
347
	call	take_avx_register
356
	call	take_avx_register
348
	or	cl,cl
357
	or	cl,cl
349
	jz	avx_load_reg_ok
358
	jz	avx_load_reg_ok
350
	cmp	ah,cl
359
	cmp	ah,cl
351
	jne	invalid_operand
360
	jne	invalid_operand
Line 357... Line 366...
357
	xchg	ah,[operand_size]
366
	xchg	ah,[operand_size]
358
	push	eax
367
	push	eax
359
	lods	byte [esi]
368
	lods	byte [esi]
360
	cmp	al,','
369
	cmp	al,','
361
	jne	invalid_operand
370
	jne	invalid_operand
362
	lods	byte [esi]
371
	lods	byte [esi]
363
	call	get_size_operator
372
	call	get_size_operator
364
	cmp	al,'['
373
	cmp	al,10h
-
 
374
	je	avx_load_reg_reg
-
 
375
	cmp	al,'['
365
	jne	invalid_operand
376
	jne	invalid_operand
366
	call	get_address
377
	call	get_address
367
	pop	eax
378
	pop	eax
368
	xchg	ah,[operand_size]
379
	xchg	ah,[operand_size]
369
	mov	[postbyte_register],al
380
	mov	[postbyte_register],al
370
	mov	al,[mmx_size]
381
	mov	al,[mmx_size]
371
	or	al,al
382
	or	al,al
372
	jz	instruction_ready
383
	jz	instruction_ready
373
	or	ah,ah
384
	or	ah,ah
374
	jz	instruction_ready
385
	jz	instruction_ready
375
	cmp	al,ah
386
	cmp	al,ah
376
	jne	invalid_operand_size
387
	jne	invalid_operand_size
377
	jmp	instruction_ready
388
	jmp	instruction_ready
378
avx_movntdqa_instruction:
389
      avx_load_reg_reg:
-
 
390
	lods	byte [esi]
-
 
391
	call	convert_avx_register
-
 
392
	cmp	ch,ah
-
 
393
	jne	invalid_operand
-
 
394
	mov	bl,al
-
 
395
	pop	eax
-
 
396
	xchg	ah,[operand_size]
-
 
397
	mov	[postbyte_register],al
-
 
398
	jmp	nomem_instruction_ready
-
 
399
 
-
 
400
avx_movntdqa_instruction:
379
	mov	[mmx_size],16
401
	mov	[mmx_size],0
-
 
402
	xor	cx,cx
-
 
403
	jmp	avx_load_instruction_38
-
 
404
avx_broadcastss_instruction:
-
 
405
	mov	[mmx_size],4
380
	mov	al,2Ah
406
	xor	cl,cl
381
	mov	cl,16
407
	mov	ch,16
382
	jmp	avx_load_instruction_38
408
	jmp	avx_load_instruction_38
383
avx_broadcastss_instruction:
409
avx_broadcastsd_instruction:
384
	mov	[mmx_size],4
410
	mov	[mmx_size],8
385
	mov	al,18h
411
	mov	cl,32
386
	xor	cl,cl
412
	mov	ch,16
387
	jmp	avx_load_instruction_38
413
	jmp	avx_load_instruction_38
388
avx_broadcastsd_instruction:
414
avx_pbroadcastb_instruction:
-
 
415
	mov	[mmx_size],1
-
 
416
	jmp	avx_pbroadcast_instruction
-
 
417
avx_pbroadcastw_instruction:
-
 
418
	mov	[mmx_size],2
-
 
419
	jmp	avx_pbroadcast_instruction
-
 
420
avx_pbroadcastd_instruction:
389
	mov	[mmx_size],8
421
	mov	[mmx_size],4
-
 
422
	jmp	avx_pbroadcast_instruction
-
 
423
avx_pbroadcastq_instruction:
-
 
424
	mov	[mmx_size],8
390
	mov	al,19h
425
      avx_pbroadcast_instruction:
-
 
426
	xor	cl,cl
391
	mov	cl,32
427
	mov	ch,16
392
	jmp	avx_load_instruction_38
428
	jmp	avx_load_instruction_38
393
avx_broadcastf128_instruction:
429
avx_broadcastf128_instruction:
394
	mov	[mmx_size],16
430
	mov	[mmx_size],16
395
	mov	al,1Ah
431
	mov	cl,32
396
	mov	cl,32
432
	xor	ch,ch
397
      avx_load_instruction_38:
433
      avx_load_instruction_38:
398
	mov	[opcode_prefix],66h
434
	mov	[opcode_prefix],66h
399
	mov	[supplemental_code],al
435
	mov	[supplemental_code],al
400
	mov	al,38h
436
	mov	al,38h
401
	jmp	avx_load_instruction
437
	jmp	avx_load_instruction
402
avx_movlpd_instruction:
438
avx_movlpd_instruction:
403
	mov	[opcode_prefix],66h
439
	mov	[opcode_prefix],66h
404
avx_movlps_instruction:
440
avx_movlps_instruction:
405
	mov	[base_code],0Fh
441
	mov	[base_code],0Fh
Line 462... Line 498...
462
	mov	[vex_register],al
498
	mov	[vex_register],al
463
	lods	byte [esi]
499
	lods	byte [esi]
464
	cmp	al,','
500
	cmp	al,','
465
	jne	invalid_operand
501
	jne	invalid_operand
466
	call	take_avx_register
502
	call	take_avx_register
467
	mov	bl,al
503
	mov	bl,al
468
	jmp	nomem_instruction_ready
504
	jmp	nomem_instruction_ready
469
avx_maskmov_instruction:
505
avx_maskmov_w1_instruction:
470
	mov	[opcode_prefix],66h
506
	or	[rex_prefix],8
471
	mov	[base_code],0Fh
507
avx_maskmov_instruction:
472
	mov	[extended_code],38h
508
	call	setup_66_0f_38
473
	mov	[supplemental_code],al
509
	mov	[mmx_size],0
474
	mov	[mmx_size],0
-
 
475
	or	[vex_required],1
510
	or	[vex_required],1
476
	lods	byte [esi]
511
	lods	byte [esi]
477
	call	get_size_operator
512
	call	get_size_operator
478
	cmp	al,10h
513
	cmp	al,10h
479
	jne	avx_maskmov_mem
514
	jne	avx_maskmov_mem
480
	lods	byte [esi]
515
	lods	byte [esi]
481
	call	convert_avx_register
516
	call	convert_avx_register
482
	mov	[postbyte_register],al
517
	mov	[postbyte_register],al
Line 503... Line 538...
503
	lods	byte [esi]
538
	lods	byte [esi]
504
	cmp	al,','
539
	cmp	al,','
505
	jne	invalid_operand
540
	jne	invalid_operand
506
	call	take_avx_register
541
	call	take_avx_register
507
	mov	[postbyte_register],al
542
	mov	[postbyte_register],al
508
	add	[supplemental_code],2
543
	add	[supplemental_code],2
509
	jmp	instruction_ready
544
	jmp	instruction_ready
510
avx_movd_instruction:
545
      setup_66_0f_38:
-
 
546
	mov	[extended_code],38h
-
 
547
	mov	[supplemental_code],al
-
 
548
	mov	[base_code],0Fh
-
 
549
	mov	[opcode_prefix],66h
-
 
550
	ret
-
 
551
avx_movd_instruction:
511
	or	[vex_required],1
552
	or	[vex_required],1
512
	jmp	movd_instruction
553
	jmp	movd_instruction
513
avx_movq_instruction:
554
avx_movq_instruction:
514
	or	[vex_required],1
555
	or	[vex_required],1
515
	jmp	movq_instruction
556
	jmp	movq_instruction
516
avx_movddup_instruction:
557
avx_movddup_instruction:
517
	or	[vex_required],1
558
	or	[vex_required],1
518
	mov	[opcode_prefix],0F2h
559
	mov	[opcode_prefix],0F2h
Line 633... Line 674...
633
	mov	[operand_size],cl
674
	mov	[operand_size],cl
634
	jmp	nomem_instruction_ready
675
	jmp	nomem_instruction_ready
635
      avx_cvtdq2pd_reg_mem:
676
      avx_cvtdq2pd_reg_mem:
636
	cmp	al,'['
677
	cmp	al,'['
637
	jne	invalid_operand
678
	jne	invalid_operand
638
	mov	[mmx_size],cl
679
	mov	[mmx_size],cl
639
	call	get_address
680
	call	get_address
640
	mov	al,[operand_size]
681
	mov	al,[mmx_size]
-
 
682
	mov	ah,al
-
 
683
	xchg	al,[operand_size]
641
	or	al,al
684
	or	al,al
642
	jz	instruction_ready
685
	jz	instruction_ready
643
	shl	al,1
686
	shl	al,1
644
	cmp	al,[mmx_size]
687
	cmp	al,ah
645
	jne	invalid_operand_size
688
	jne	invalid_operand_size
646
	mov	[operand_size],al
689
	jmp	instruction_ready
647
	jmp	instruction_ready
-
 
648
avx_cvtpd2dq_instruction:
690
avx_cvtpd2dq_instruction:
649
	mov	[opcode_prefix],0F2h
691
	mov	[opcode_prefix],0F2h
650
	jmp	avx_cvtpd_instruction
692
	jmp	avx_cvtpd_instruction
651
avx_cvtpd2ps_instruction:
693
avx_cvtpd2ps_instruction:
652
	mov	[opcode_prefix],66h
694
	mov	[opcode_prefix],66h
653
      avx_cvtpd_instruction:
695
      avx_cvtpd_instruction:
654
	mov	[base_code],0Fh
696
	mov	[base_code],0Fh
655
	mov	[extended_code],al
697
	mov	[extended_code],al
Line 748... Line 790...
748
	jne	invalid_operand
790
	jne	invalid_operand
749
	call	take_avx_register
791
	call	take_avx_register
750
	cmp	ah,32
792
	cmp	ah,32
751
	jne	invalid_operand_size
793
	jne	invalid_operand_size
752
	mov	[postbyte_register],al
794
	mov	[postbyte_register],al
753
	pop	ebx
795
	pop	ebx
754
	jmp	mmx_nomem_imm8
796
	jmp	mmx_nomem_imm8
755
avx_insertf128_instruction:
797
      setup_66_0f_3a:
-
 
798
	mov	[extended_code],3Ah
-
 
799
	mov	[supplemental_code],al
-
 
800
	mov	[base_code],0Fh
-
 
801
	mov	[opcode_prefix],66h
-
 
802
	ret
-
 
803
avx_insertf128_instruction:
756
	or	[vex_required],1
804
	or	[vex_required],1
757
	call	setup_66_0f_3a
805
	call	setup_66_0f_3a
758
	call	take_avx_register
806
	call	take_avx_register
759
	cmp	ah,32
807
	cmp	ah,32
760
	jne	invalid_operand
808
	jne	invalid_operand
761
	mov	[postbyte_register],al
809
	mov	[postbyte_register],al
762
	lods	byte [esi]
810
	lods	byte [esi]
763
	cmp	al,','
811
	cmp	al,','
Line 835... Line 883...
835
	mov	[vex_register],al
883
	mov	[vex_register],al
836
	jmp	pinsr_xmmreg
884
	jmp	pinsr_xmmreg
837
avx_maskmovdqu_instruction:
885
avx_maskmovdqu_instruction:
838
	or	[vex_required],1
886
	or	[vex_required],1
839
	jmp	maskmovdqu_instruction
887
	jmp	maskmovdqu_instruction
840
avx_pmovmskb_instruction:
888
avx_pmovmskb_instruction:
841
	or	[vex_required],1
889
	or	[vex_required],1
842
	jmp	pmovmskb_instruction
890
	mov	[opcode_prefix],66h
-
 
891
	mov	[base_code],0Fh
-
 
892
	mov	[extended_code],al
-
 
893
	lods	byte [esi]
-
 
894
	call	get_size_operator
-
 
895
	cmp	al,10h
-
 
896
	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
-
 
908
	lods	byte [esi]
-
 
909
	cmp	al,','
-
 
910
	jne	invalid_operand
-
 
911
	call	take_avx_register
-
 
912
	mov	bl,al
-
 
913
	jmp	nomem_instruction_ready
843
avx_pshufd_instruction:
914
avx_pshufd_instruction:
844
	or	[vex_required],1
915
	or	[vex_required],1
845
	jmp	pshufd_instruction
916
	mov	[mmx_size],0
-
 
917
	mov	[opcode_prefix],al
-
 
918
	mov	[base_code],0Fh
-
 
919
	mov	[extended_code],70h
-
 
920
	call	take_avx_register
-
 
921
	mov	[postbyte_register],al
-
 
922
	lods	byte [esi]
-
 
923
	cmp	al,','
-
 
924
	jne	invalid_operand
-
 
925
	call	take_avx_rm
-
 
926
	jnc	mmx_imm8
-
 
927
	mov	bl,al
-
 
928
	jmp	mmx_nomem_imm8
846
avx_pmovsxbw_instruction:
929
 
-
 
930
avx_pmovsxbw_instruction:
847
	mov	[mmx_size],8
931
	mov	[mmx_size],8
848
	jmp	avx_pmovsx_instruction
932
	jmp	avx_pmovsx_instruction
849
avx_pmovsxbd_instruction:
933
avx_pmovsxbd_instruction:
850
	mov	[mmx_size],4
934
	mov	[mmx_size],4
851
	jmp	avx_pmovsx_instruction
935
	jmp	avx_pmovsx_instruction
852
avx_pmovsxbq_instruction:
936
avx_pmovsxbq_instruction:
853
	mov	[mmx_size],2
937
	mov	[mmx_size],2
854
	jmp	avx_pmovsx_instruction
938
	jmp	avx_pmovsx_instruction
Line 858... Line 942...
858
avx_pmovsxwq_instruction:
942
avx_pmovsxwq_instruction:
859
	mov	[mmx_size],4
943
	mov	[mmx_size],4
860
	jmp	avx_pmovsx_instruction
944
	jmp	avx_pmovsx_instruction
861
avx_pmovsxdq_instruction:
945
avx_pmovsxdq_instruction:
862
	mov	[mmx_size],8
946
	mov	[mmx_size],8
863
      avx_pmovsx_instruction:
947
      avx_pmovsx_instruction:
864
	or	[vex_required],1
948
	or	[vex_required],1
865
	jmp	pmovsx_instruction
949
	call	setup_66_0f_38
-
 
950
	call	take_avx_register
-
 
951
	mov	[postbyte_register],al
-
 
952
	lods	byte [esi]
-
 
953
	cmp	al,','
-
 
954
	jne	invalid_operand
-
 
955
	xor	al,al
-
 
956
	xchg	al,[operand_size]
-
 
957
	push	eax
-
 
958
	lods	byte [esi]
-
 
959
	call	get_size_operator
-
 
960
	cmp	al,10h
-
 
961
	je	avx_pmovsx_xmmreg_reg
-
 
962
	cmp	al,'['
-
 
963
	jne	invalid_operand
-
 
964
	call	get_address
-
 
965
	pop	eax
-
 
966
	cmp	al,32
-
 
967
	jb	avx_pmovsx_size_check
-
 
968
	shl	[mmx_size],1
-
 
969
      avx_pmovsx_size_check:
-
 
970
	xchg	al,[operand_size]
-
 
971
	test	al,al
-
 
972
	jz	instruction_ready
-
 
973
	cmp	al,[mmx_size]
-
 
974
	jne	invalid_operand_size
-
 
975
	jmp	instruction_ready
-
 
976
      avx_pmovsx_xmmreg_reg:
-
 
977
	lods	byte [esi]
-
 
978
	call	convert_xmm_register
-
 
979
	mov	bl,al
-
 
980
	pop	eax
-
 
981
	mov	[operand_size],al
-
 
982
	jmp	nomem_instruction_ready
866
avx_permil_instruction:
983
avx_permil_instruction:
867
	call	setup_66_0f_3a
984
	call	setup_66_0f_3a
868
	or	[vex_required],1
985
	or	[vex_required],1
869
	call	take_avx_register
986
	call	take_avx_register
870
	mov	[postbyte_register],al
987
	mov	[postbyte_register],al
871
	lods	byte [esi]
988
	lods	byte [esi]
872
	cmp	al,','
989
	cmp	al,','
873
	jne	invalid_operand
990
	jne	invalid_operand
874
	lods	byte [esi]
991
	lods	byte [esi]
Line 910... Line 1027...
910
	dec	esi
1027
	dec	esi
911
	xor	bl,bl
1028
	xor	bl,bl
912
	xchg	bl,[vex_register]
1029
	xchg	bl,[vex_register]
913
	jmp	mmx_nomem_imm8
1030
	jmp	mmx_nomem_imm8
914
      avx_permil_reg_mem:
1031
      avx_permil_reg_mem:
915
	call	get_address
1032
	call	get_address
916
	jmp	mmx_imm8
1033
	jmp	mmx_imm8
917
avx_pslldq_instruction:
1034
avx_bit_shift_instruction:
918
	mov	[postbyte_register],al
-
 
919
	mov	[opcode_prefix],66h
-
 
920
	mov	[base_code],0Fh
-
 
921
	mov	[extended_code],73h
-
 
922
	or	[vex_required],1
-
 
923
	call	take_avx_register
-
 
924
	cmp	ah,16
-
 
925
	jne	invalid_operand
-
 
926
	mov	[vex_register],al
-
 
927
	lods	byte [esi]
-
 
928
	cmp	al,','
-
 
929
	jne	invalid_operand
-
 
930
	call	take_avx_register
-
 
931
	mov	bl,al
-
 
932
	jmp	mmx_nomem_imm8
-
 
933
avx_bit_shift_instruction:
-
 
934
	mov	[opcode_prefix],66h
1035
	mov	[opcode_prefix],66h
935
	mov	[base_code],0Fh
1036
	mov	[base_code],0Fh
936
	mov	[extended_code],al
1037
	mov	[extended_code],al
937
	or	[vex_required],1
1038
	or	[vex_required],1
938
	call	take_avx_register
1039
	call	take_avx_register
939
	cmp	ah,16
1040
	mov	[postbyte_register],al
940
	jne	invalid_operand
-
 
941
	mov	[postbyte_register],al
-
 
942
	lods	byte [esi]
1041
	lods	byte [esi]
943
	cmp	al,','
1042
	cmp	al,','
944
	jne	invalid_operand
1043
	jne	invalid_operand
945
	call	take_avx_register
1044
	call	take_avx_register
946
	mov	[vex_register],al
1045
	mov	[vex_register],al
947
	lods	byte [esi]
1046
	lods	byte [esi]
948
	cmp	al,','
1047
	cmp	al,','
949
	jne	invalid_operand
1048
	jne	invalid_operand
950
	push	esi
1049
	push	esi
951
	xor	cl,cl
1050
	xor	cl,cl
952
	xchg	cl,[operand_size]
1051
	xchg	cl,[operand_size]
953
	lods	byte [esi]
1052
	lods	byte [esi]
954
	call	get_size_operator
1053
	call	get_size_operator
955
	xchg	cl,[operand_size]
1054
	cmp	al,10h
956
	pop	esi
-
 
957
	cmp	al,10h
-
 
958
	je	avx_bit_shift_regs_reg
1055
	je	avx_bit_shift_regs_reg
959
	cmp	al,'['
1056
	pop	esi
-
 
1057
	cmp	al,'['
960
	je	avx_bit_shift_regs_mem
1058
	je	avx_bit_shift_regs_mem
961
	dec	esi
1059
	xchg	cl,[operand_size]
-
 
1060
	dec	esi
962
	mov	bl,[extended_code]
1061
	mov	bl,[extended_code]
963
	mov	al,bl
1062
	mov	al,bl
964
	shr	bl,4
1063
	shr	bl,4
965
	and	al,1111b
1064
	and	al,1111b
966
	add	al,70h
1065
	add	al,70h
967
	mov	[extended_code],al
1066
	mov	[extended_code],al
968
	sub	bl,0Ch
1067
	sub	bl,0Ch
969
	shl	bl,1
1068
	shl	bl,1
970
	xchg	bl,[postbyte_register]
1069
	xchg	bl,[postbyte_register]
971
	xchg	bl,[vex_register]
1070
	xchg	bl,[vex_register]
972
	jmp	mmx_nomem_imm8
1071
	jmp	mmx_nomem_imm8
973
      avx_bit_shift_regs_reg:
1072
      avx_bit_shift_regs_reg:
974
	call	take_avx_register
1073
	pop	eax
-
 
1074
	lods	byte [esi]
-
 
1075
	call	convert_xmm_register
975
	mov	bl,al
1076
	xchg	cl,[operand_size]
-
 
1077
	mov	bl,al
976
	jmp	nomem_instruction_ready
1078
	jmp	nomem_instruction_ready
977
      avx_bit_shift_regs_mem:
1079
      avx_bit_shift_regs_mem:
978
	lods	byte [esi]
1080
	push	ecx
-
 
1081
	lods	byte [esi]
979
	call	get_size_operator
1082
	call	get_size_operator
980
	call	get_address
1083
	call	get_address
981
	jmp	instruction_ready
1084
	pop	eax
-
 
1085
	xchg	al,[operand_size]
-
 
1086
	test	al,al
-
 
1087
	jz	instruction_ready
-
 
1088
	cmp	al,16
-
 
1089
	jne	invalid_operand_size
-
 
1090
	jmp	instruction_ready
982
 
1091
avx_pslldq_instruction:
-
 
1092
	mov	[postbyte_register],al
-
 
1093
	mov	[opcode_prefix],66h
-
 
1094
	mov	[base_code],0Fh
-
 
1095
	mov	[extended_code],73h
-
 
1096
	or	[vex_required],1
-
 
1097
	call	take_avx_register
-
 
1098
	mov	[vex_register],al
-
 
1099
	lods	byte [esi]
-
 
1100
	cmp	al,','
-
 
1101
	jne	invalid_operand
-
 
1102
	call	take_avx_register
-
 
1103
	mov	bl,al
-
 
1104
	jmp	mmx_nomem_imm8
-
 
1105
 
983
vzeroall_instruction:
1106
vzeroall_instruction:
984
	mov	[operand_size],32
1107
	mov	[operand_size],32
985
vzeroupper_instruction:
1108
vzeroupper_instruction:
986
	mov	[base_code],0Fh
1109
	mov	[base_code],0Fh
987
	mov	[extended_code],al
1110
	mov	[extended_code],al
988
	or	[vex_required],1
1111
	or	[vex_required],1
989
	call	store_instruction_code
1112
	call	store_instruction_code
990
	jmp	instruction_assembled
1113
	jmp	instruction_assembled
Line 1021... Line 1144...
1021
	lods	byte [esi]
1144
	lods	byte [esi]
1022
	cmp	al,','
1145
	cmp	al,','
1023
	jne	invalid_operand
1146
	jne	invalid_operand
1024
	call	take_avx_register
1147
	call	take_avx_register
1025
	mov	[postbyte_register],al
1148
	mov	[postbyte_register],al
1026
	jmp	mmx_nomem_imm8
1149
	jmp	mmx_nomem_imm8
1027
 
1150
 
1028
fma_instruction_pd:
1151
bmi_instruction:
-
 
1152
	mov	[base_code],0Fh
-
 
1153
	mov	[extended_code],38h
-
 
1154
	mov	[supplemental_code],0F3h
-
 
1155
	mov	[postbyte_register],al
-
 
1156
      bmi_reg:
-
 
1157
	or	[vex_required],1
-
 
1158
	lods	byte [esi]
-
 
1159
	call	get_size_operator
-
 
1160
	cmp	al,10h
-
 
1161
	jne	invalid_operand
-
 
1162
	lods	byte [esi]
-
 
1163
	call	convert_register
-
 
1164
	mov	[vex_register],al
-
 
1165
	lods	byte [esi]
-
 
1166
	cmp	al,','
-
 
1167
	jne	invalid_operand
-
 
1168
	lods	byte [esi]
-
 
1169
	call	get_size_operator
-
 
1170
	cmp	al,10h
-
 
1171
	je	bmi_reg_reg
-
 
1172
	cmp	al,'['
-
 
1173
	jne	invalid_argument
-
 
1174
	call	get_address
-
 
1175
	call	operand_32or64
-
 
1176
	jmp	instruction_ready
-
 
1177
      bmi_reg_reg:
-
 
1178
	lods	byte [esi]
-
 
1179
	call	convert_register
-
 
1180
	mov	bl,al
-
 
1181
	call	operand_32or64
-
 
1182
	jmp	nomem_instruction_ready
-
 
1183
      operand_32or64:
-
 
1184
	mov	al,[operand_size]
-
 
1185
	cmp	al,4
-
 
1186
	je	operand_32or64_ok
-
 
1187
	cmp	al,8
-
 
1188
	jne	invalid_operand_size
-
 
1189
	cmp	[code_type],64
-
 
1190
	jne	invalid_operand
-
 
1191
	or	[rex_prefix],8
-
 
1192
      operand_32or64_ok:
-
 
1193
	ret
-
 
1194
pdep_instruction:
-
 
1195
	mov	[opcode_prefix],0F2h
-
 
1196
	jmp	andn_instruction
-
 
1197
pext_instruction:
-
 
1198
	mov	[opcode_prefix],0F3h
-
 
1199
andn_instruction:
-
 
1200
	mov	[base_code],0Fh
-
 
1201
	mov	[extended_code],38h
-
 
1202
	mov	[supplemental_code],al
-
 
1203
	or	[vex_required],1
-
 
1204
	lods	byte [esi]
-
 
1205
	call	get_size_operator
-
 
1206
	cmp	al,10h
-
 
1207
	jne	invalid_operand
-
 
1208
	lods	byte [esi]
-
 
1209
	call	convert_register
-
 
1210
	mov	[postbyte_register],al
-
 
1211
	lods	byte [esi]
-
 
1212
	cmp	al,','
-
 
1213
	jne	invalid_operand
-
 
1214
	jmp	bmi_reg
-
 
1215
sarx_instruction:
-
 
1216
	mov	[opcode_prefix],0F3h
-
 
1217
	jmp	bzhi_instruction
-
 
1218
shrx_instruction:
-
 
1219
	mov	[opcode_prefix],0F2h
-
 
1220
	jmp	bzhi_instruction
-
 
1221
shlx_instruction:
-
 
1222
	mov	[opcode_prefix],66h
-
 
1223
bzhi_instruction:
-
 
1224
	mov	[base_code],0Fh
-
 
1225
	mov	[extended_code],38h
-
 
1226
	mov	[supplemental_code],al
-
 
1227
	or	[vex_required],1
-
 
1228
	call	get_reg_mem
-
 
1229
	jc	bzhi_reg_reg
-
 
1230
	call	get_vex_source_register
-
 
1231
	jc	invalid_operand
-
 
1232
	call	operand_32or64
-
 
1233
	jmp	instruction_ready
-
 
1234
      bzhi_reg_reg:
-
 
1235
	call	get_vex_source_register
-
 
1236
	jc	invalid_operand
-
 
1237
	call	operand_32or64
-
 
1238
	jmp	nomem_instruction_ready
-
 
1239
      get_vex_source_register:
-
 
1240
	lods	byte [esi]
-
 
1241
	cmp	al,','
-
 
1242
	jne	invalid_operand
-
 
1243
	lods	byte [esi]
-
 
1244
	call	get_size_operator
-
 
1245
	cmp	al,10h
-
 
1246
	jne	no_vex_source_register
-
 
1247
	lods	byte [esi]
-
 
1248
	call	convert_register
-
 
1249
	mov	[vex_register],al
-
 
1250
	clc
-
 
1251
	ret
-
 
1252
      no_vex_source_register:
-
 
1253
	stc
-
 
1254
	ret
-
 
1255
bextr_instruction:
-
 
1256
	mov	[base_code],0Fh
-
 
1257
	mov	[extended_code],38h
-
 
1258
	mov	[supplemental_code],al
-
 
1259
	or	[vex_required],1
-
 
1260
	call	get_reg_mem
-
 
1261
	jc	bextr_reg_reg
-
 
1262
	call	get_vex_source_register
-
 
1263
	jc	bextr_reg_mem_imm32
-
 
1264
	call	operand_32or64
-
 
1265
	jmp	instruction_ready
-
 
1266
      bextr_reg_reg:
-
 
1267
	call	get_vex_source_register
-
 
1268
	jc	bextr_reg_reg_imm32
-
 
1269
	call	operand_32or64
-
 
1270
	jmp	nomem_instruction_ready
-
 
1271
      setup_bextr_imm_opcode:
-
 
1272
	mov	[xop_opcode_map],0Ah
-
 
1273
	mov	[base_code],10h
-
 
1274
	call	operand_32or64
-
 
1275
	ret
-
 
1276
      bextr_reg_mem_imm32:
-
 
1277
	call	get_imm32
-
 
1278
	call	setup_bextr_imm_opcode
-
 
1279
	jmp	store_instruction_with_imm32
-
 
1280
      bextr_reg_reg_imm32:
-
 
1281
	call	get_imm32
-
 
1282
	call	setup_bextr_imm_opcode
-
 
1283
      store_nomem_instruction_with_imm32:
-
 
1284
	call	store_nomem_instruction
-
 
1285
	mov	eax,dword [value]
-
 
1286
	call	mark_relocation
-
 
1287
	stos	dword [edi]
-
 
1288
	jmp	instruction_assembled
-
 
1289
      get_imm32:
-
 
1290
	cmp	al,'('
-
 
1291
	jne	invalid_operand
-
 
1292
	push	edx ebx ecx
-
 
1293
	call	get_dword_value
-
 
1294
	mov	dword [value],eax
-
 
1295
	pop	ecx ebx edx
-
 
1296
	ret
-
 
1297
rorx_instruction:
-
 
1298
	mov	[opcode_prefix],0F2h
-
 
1299
	mov	[base_code],0Fh
-
 
1300
	mov	[extended_code],3Ah
-
 
1301
	mov	[supplemental_code],al
-
 
1302
	or	[vex_required],1
-
 
1303
	call	get_reg_mem
-
 
1304
	jc	rorx_reg_reg
-
 
1305
	call	operand_32or64
-
 
1306
	jmp	mmx_imm8
-
 
1307
      rorx_reg_reg:
-
 
1308
	call	operand_32or64
-
 
1309
	jmp	mmx_nomem_imm8
-
 
1310
 
-
 
1311
fma_instruction_pd:
1029
	or	[rex_prefix],8
1312
	or	[rex_prefix],8
1030
fma_instruction_ps:
1313
fma_instruction_ps:
1031
	mov	[mmx_size],0
1314
	mov	[mmx_size],0
1032
	jmp	avx_instruction_38_setup
1315
	jmp	avx_instruction_38_setup
1033
fma_instruction_sd:
1316
fma_instruction_sd:
1034
	or	[rex_prefix],8
1317
	or	[rex_prefix],8
1035
	mov	[mmx_size],8
1318
	mov	[mmx_size],8
1036
	jmp	avx_instruction_38_setup
1319
	jmp	avx_instruction_38_setup
Line 1214... Line 1497...
1214
      vpermil2_instruction_setup:
1497
      vpermil2_instruction_setup:
1215
	mov	[base_code],0Fh
1498
	mov	[base_code],0Fh
1216
	mov	[supplemental_code],al
1499
	mov	[supplemental_code],al
1217
	mov	al,3Ah
1500
	mov	al,3Ah
1218
	mov	[mmx_size],0
1501
	mov	[mmx_size],0
1219
	jmp	avx_instruction
1502
	jmp	avx_instruction
1220
 
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
-
 
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
 
1221
take_avx_register:
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
-
 
1654
 
-
 
1655
take_avx_register:
1222
	lods	byte [esi]
1656
	lods	byte [esi]
1223
	call	get_size_operator
1657
	call	get_size_operator
1224
	cmp	al,10h
1658
	cmp	al,10h
1225
	jne	invalid_operand
1659
	jne	invalid_operand
1226
	lods	byte [esi]
1660
	lods	byte [esi]
1227
convert_avx_register:
1661
convert_avx_register:
1228
	mov	ah,al
1662
	mov	ah,al
1229
	and	al,0Fh
1663
	and	al,0Fh
Line 1271... Line 1705...
1271
	cmp	ah,66h
1705
	cmp	ah,66h
1272
	je	vex_66
1706
	je	vex_66
1273
	cmp	ah,0F3h
1707
	cmp	ah,0F3h
1274
	je	vex_f3
1708
	je	vex_f3
1275
	cmp	ah,0F2h
1709
	cmp	ah,0F2h
1276
	je	vex_f2
1710
	je	vex_f2
1277
	test	ah,ah
1711
	test	ah,ah
1278
	jnz	prefix_conflict
1712
	jnz	disallowed_combination_of_registers
1279
	ret
1713
	ret
1280
      vex_f2:
1714
      vex_f2:
1281
	or	al,11b
1715
	or	al,11b
1282
	ret
1716
	ret
1283
      vex_f3:
1717
      vex_f3:
1284
	or	al,10b
1718
	or	al,10b
1285
	ret
1719
	ret
1286
      vex_66:
1720
      vex_66:
1287
	or	al,1
1721
	or	al,1