Subversion Repositories Kolibri OS

Rev

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

Rev 2664 Rev 2665
Line 66... Line 66...
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]
Line 205... Line 209...
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
Line 227... Line 234...
227
	pop	edx ecx ebx
234
	pop	edx ecx ebx
228
      imm4_ok:
235
      imm4_ok:
229
	ret
236
	ret
230
 
237
 
Line 231... Line -...
231
avx_128bit_instruction:
-
 
232
	mov	[mmx_size],16
-
 
233
	mov	[opcode_prefix],66h
-
 
234
	jmp	avx_instruction
-
 
235
avx_single_source_128bit_instruction_38:
238
avx_single_source_128bit_instruction_38:
236
	or	[vex_required],2
239
	or	[vex_required],2
237
avx_128bit_instruction_38:
240
avx_128bit_instruction_38:
238
	mov	[mmx_size],16
241
	mov	[mmx_size],16
-
 
242
	jmp	avx_instruction_38_setup
-
 
243
avx_single_source_instruction_38:
-
 
244
	or	[vex_required],2
-
 
245
avx_instruction_38:
-
 
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
-
 
247
	jmp	avx_instruction_38_setup
254
	jmp	avx_instruction_38
-
 
255
 
248
avx_ss_instruction_3a_imm8:
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
Line 260... Line 268...
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
271
	jmp	avx_instruction_3a_setup
264
avx_triple_source_128bit_instruction_3a:
272
avx_single_source_instruction_3a_imm8:
265
	mov	[mmx_size],16
-
 
266
	mov	[immediate_size],-1
-
 
267
	mov	byte [value],0
-
 
268
	jmp	avx_instruction_3a_setup
-
 
269
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
Line 281... Line 284...
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:
-
 
290
	or	[vex_required],2
-
 
291
	or	[rex_prefix],8
-
 
292
avx_perm2f128_instruction:
286
	call	setup_66_0f_3a
293
	mov	[immediate_size],1
287
	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
 
-
 
Line 302... Line 311...
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:
Line 338... Line 347...
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
Line 360... Line 369...
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
Line 374... Line 385...
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
380
	mov	al,2Ah
402
	xor	cx,cx
381
	mov	cl,16
-
 
382
	jmp	avx_load_instruction_38
403
	jmp	avx_load_instruction_38
383
avx_broadcastss_instruction:
404
avx_broadcastss_instruction:
384
	mov	[mmx_size],4
405
	mov	[mmx_size],4
385
	mov	al,18h
406
	xor	cl,cl
386
	xor	cl,cl
-
 
387
	jmp	avx_load_instruction_38
407
	mov	ch,16
-
 
408
	jmp	avx_load_instruction_38
388
avx_broadcastsd_instruction:
409
avx_broadcastsd_instruction:
389
	mov	[mmx_size],8
410
	mov	[mmx_size],8
390
	mov	al,19h
411
	mov	cl,32
391
	mov	cl,32
-
 
392
	jmp	avx_load_instruction_38
412
	mov	ch,16
-
 
413
	jmp	avx_load_instruction_38
-
 
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:
-
 
421
	mov	[mmx_size],4
-
 
422
	jmp	avx_pbroadcast_instruction
-
 
423
avx_pbroadcastq_instruction:
-
 
424
	mov	[mmx_size],8
-
 
425
      avx_pbroadcast_instruction:
-
 
426
	xor	cl,cl
-
 
427
	mov	ch,16
-
 
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
-
 
397
      avx_load_instruction_38:
432
	xor	ch,ch
-
 
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:
Line 465... Line 501...
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:
-
 
506
	or	[rex_prefix],8
-
 
507
avx_maskmov_instruction:
470
	mov	[opcode_prefix],66h
508
	call	setup_66_0f_38
471
	mov	[base_code],0Fh
-
 
472
	mov	[extended_code],38h
-
 
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
Line 506... Line 541...
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
Line 636... Line 677...
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
Line 751... Line 793...
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
Line 838... Line 886...
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
Line 861... Line 945...
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]
Line 913... Line 1030...
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
Line 951... Line 1050...
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
Line 970... Line 1069...
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
 
Line 983... Line 1106...
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
Line 1024... Line 1147...
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
 
Line -... Line 1151...
-
 
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
 
1028
fma_instruction_pd:
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
Line 1217... Line 1500...
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
 
Line -... Line 1504...
-
 
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
 
-
 
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
 
1221
take_avx_register:
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
Line 1274... Line 1708...
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