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 |