/programs/develop/fasm/trunk/assemble.inc |
---|
1,6 → 1,6 |
; flat assembler core |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
assembler: |
32,6 → 32,7 |
mov [next_pass_needed],al |
mov [output_format],al |
mov [adjustment_sign],al |
mov [evex_mode],al |
mov [code_type],16 |
call init_addressing_space |
pass_loop: |
192,7 → 193,7 |
new_line: |
lods dword [esi] |
mov [current_line],eax |
mov [prefixed_instruction],0 |
and [prefix_flags],0 |
cmp [symbols_file],0 |
je continue_line |
cmp [next_pass_needed],0 |
329,31 → 330,10 |
cmp eax,0Fh |
jb invalid_use_of_symbol |
je reserved_word_used_as_symbol |
mov edx,[eax+8] |
push edx |
cmp [current_pass],0 |
je get_constant_value |
test dl,4 |
jnz get_constant_value |
mov cx,[current_pass] |
cmp cx,[eax+16] |
je get_constant_value |
or dl,4 |
mov [eax+8],dl |
get_constant_value: |
push eax |
mov al,byte [esi-1] |
push eax |
or [size_override],-1 |
or [operand_flags],1 |
call get_value |
pop ebx |
mov ch,bl |
pop ebx |
pop ecx |
test cl,4 |
jnz constant_referencing_mode_ok |
and byte [ebx+8],not 4 |
constant_referencing_mode_ok: |
xor cl,cl |
mov ch,[value_type] |
cmp ch,3 |
454,15 → 434,15 |
jmp continue_line |
assemble_instruction: |
; mov [operand_size],0 |
; mov [size_override],0 |
; mov [operand_flags],0 |
; mov [operand_prefix],0 |
; mov [rex_prefix],0 |
and dword [operand_size],0 |
; mov [opcode_prefix],0 |
and dword [operand_size],0 |
; mov [rex_prefix],0 |
; mov [vex_required],0 |
; mov [vex_register],0 |
; mov [immediate_size],0 |
and dword [rex_prefix],0 |
and dword [opcode_prefix],0 |
call instruction_handler |
instruction_handler: |
movzx ebx,word [esi] |
471,6 → 451,8 |
add [esp],ebx |
ret |
instruction_assembled: |
test [prefix_flags],not 1 |
jnz illegal_instruction |
mov al,[esi] |
cmp al,0Fh |
je line_assembled |
671,7 → 653,7 |
push ebx |
cmp byte [esi],'.' |
je invalid_value |
or [size_override],-1 |
or [operand_flags],1 |
call get_address_value |
pop ebp |
call calculate_relative_offset |
718,7 → 700,7 |
mov [operand_size],1 |
jmp store_value_ok |
sized_store: |
or [size_override],-1 |
or [operand_flags],1 |
call get_value |
store_value_ok: |
cmp [value_type],0 |
833,7 → 815,7 |
cmp eax,[stack_limit] |
jb stack_overflow |
push esi |
or [prefixed_instruction],-1 |
or [prefix_flags],1 |
call continue_line |
mov eax,[counter_limit] |
cmp [counter],eax |
1008,8 → 990,8 |
addressing_space_closed: |
ret |
repeat_directive: |
cmp [prefixed_instruction],0 |
jne unexpected_instruction |
test [prefix_flags],1 |
jnz unexpected_instruction |
lods byte [esi] |
cmp al,'(' |
jne invalid_argument |
1030,8 → 1012,8 |
mov [ebx+4],eax |
jmp instruction_assembled |
end_repeat: |
cmp [prefixed_instruction],0 |
jne unexpected_instruction |
test [prefix_flags],1 |
jnz unexpected_instruction |
call find_structure_data |
jc unexpected_instruction |
mov eax,[counter_limit] |
1062,8 → 1044,8 |
jne unexpected_instruction |
ret |
while_directive: |
cmp [prefixed_instruction],0 |
jne unexpected_instruction |
test [prefix_flags],1 |
jnz unexpected_instruction |
call allocate_structure_data |
mov word [ebx],while_directive-instruction_handler |
mov eax,1 |
1093,8 → 1075,8 |
pop ebx |
jmp instruction_assembled |
end_while: |
cmp [prefixed_instruction],0 |
jne unexpected_instruction |
test [prefix_flags],1 |
jnz unexpected_instruction |
call find_structure_data |
jc unexpected_instruction |
mov eax,[ebx+4] |
1109,8 → 1091,8 |
jne unexpected_instruction |
ret |
if_directive: |
cmp [prefixed_instruction],0 |
jne unexpected_instruction |
test [prefix_flags],1 |
jnz unexpected_instruction |
call calculate_logical_expression |
mov dl,al |
mov al,[esi] |
1146,8 → 1128,8 |
or al,-1 |
jmp make_if_structure |
else_directive: |
cmp [prefixed_instruction],0 |
jne unexpected_instruction |
test [prefix_flags],1 |
jnz unexpected_instruction |
mov ax,if_directive-instruction_handler |
call find_structure_data |
jc unexpected_instruction |
1173,8 → 1155,8 |
call remove_structure_data |
jmp instruction_assembled |
end_if: |
cmp [prefixed_instruction],0 |
jne unexpected_instruction |
test [prefix_flags],1 |
jnz unexpected_instruction |
call find_structure_data |
jc unexpected_instruction |
call remove_structure_data |
1377,7 → 1359,7 |
inc esi |
or eax,eax |
jz duplicate_zero_times |
cmp byte [esi],'{' |
cmp byte [esi],91h |
jne duplicate_single_data_value |
inc esi |
duplicate_data: |
1389,7 → 1371,7 |
lods byte [esi] |
cmp al,',' |
je duplicated_values |
cmp al,'}' |
cmp al,92h |
jne invalid_argument |
pop ebx eax |
dec eax |
1407,13 → 1389,13 |
mov esi,ebx |
jmp duplicate_single_data_value |
duplicate_zero_times: |
cmp byte [esi],'{' |
cmp byte [esi],91h |
jne skip_single_data_value |
inc esi |
skip_data_value: |
call skip_symbol |
jc invalid_argument |
cmp byte [esi],'}' |
cmp byte [esi],92h |
jne skip_data_value |
inc esi |
jmp data_defined |
/programs/develop/fasm/trunk/avx.inc |
---|
1,81 → 1,169 |
; flat assembler core |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
avx_single_source_pd_instruction: |
or [vex_required],2 |
avx_single_source_pd_instruction_er_evex: |
or [vex_required],8 |
avx_single_source_pd_instruction_er: |
or [operand_flags],2+4+8 |
jmp avx_pd_instruction |
avx_single_source_pd_instruction_sae_evex: |
or [vex_required],8 |
or [operand_flags],2+4 |
jmp avx_pd_instruction |
avx_pd_instruction_imm8: |
mov [immediate_size],1 |
jmp avx_pd_instruction |
avx_pd_instruction_er: |
or [operand_flags],8 |
avx_pd_instruction_sae: |
or [operand_flags],4 |
avx_pd_instruction: |
mov [opcode_prefix],66h |
mov [mmx_size],0 |
jmp avx_instruction |
avx_single_source_ps_instruction: |
or [rex_prefix],80h |
mov cx,0800h |
jmp avx_instruction_with_broadcast |
avx_pd_instruction_38_evex: |
or [vex_required],8 |
mov [supplemental_code],al |
mov al,38h |
jmp avx_pd_instruction |
avx_cvtps2dq_instruction: |
mov [opcode_prefix],66h |
jmp avx_single_source_ps_instruction_er |
avx_cvtudq2ps_instruction: |
mov [opcode_prefix],0F2h |
avx_single_source_ps_instruction_er_evex: |
or [vex_required],8 |
avx_single_source_ps_instruction_er: |
or [operand_flags],2+4+8 |
jmp avx_ps_instruction |
avx_single_source_ps_instruction_noevex: |
or [operand_flags],2 |
or [vex_required],2 |
jmp avx_ps_instruction |
avx_ps_instruction_imm8: |
mov [immediate_size],1 |
jmp avx_ps_instruction |
avx_ps_instruction_er: |
or [operand_flags],8 |
avx_ps_instruction_sae: |
or [operand_flags],4 |
avx_ps_instruction: |
mov [mmx_size],0 |
jmp avx_instruction |
avx_sd_instruction_imm8: |
mov [immediate_size],1 |
mov cx,0400h |
jmp avx_instruction_with_broadcast |
avx_ps_instruction_66_38_evex: |
or [vex_required],8 |
mov [opcode_prefix],66h |
mov [supplemental_code],al |
mov al,38h |
jmp avx_ps_instruction |
avx_sd_instruction_er: |
or [operand_flags],8 |
avx_sd_instruction_sae: |
or [operand_flags],4 |
avx_sd_instruction: |
mov [opcode_prefix],0F2h |
mov [mmx_size],8 |
or [rex_prefix],80h |
mov cl,8 |
jmp avx_instruction |
avx_ss_instruction_imm8: |
mov [immediate_size],1 |
avx_ss_instruction_er: |
or [operand_flags],8 |
avx_ss_instruction_sae: |
or [operand_flags],4 |
avx_ss_instruction: |
mov [opcode_prefix],0F3h |
mov [mmx_size],4 |
mov cl,4 |
jmp avx_instruction |
avx_cmp_pd_instruction: |
avx_ss_instruction_noevex: |
or [vex_required],2 |
jmp avx_ss_instruction |
avx_single_source_q_instruction_38_evex: |
or [operand_flags],2 |
avx_q_instruction_38_evex: |
or [vex_required],8 |
avx_q_instruction_38: |
mov [supplemental_code],al |
mov al,38h |
jmp avx_q_instruction |
avx_q_instruction_38_w1_evex: |
or [vex_required],8 |
avx_q_instruction_38_w1: |
or [rex_prefix],8 |
jmp avx_q_instruction_38 |
avx_q_instruction_3a_imm8_evex: |
mov [immediate_size],1 |
or [vex_required],8 |
mov [supplemental_code],al |
mov al,3Ah |
jmp avx_q_instruction |
avx_q_instruction_evex: |
or [vex_required],8 |
avx_q_instruction: |
or [rex_prefix],80h |
mov ch,8 |
jmp avx_pi_instruction |
avx_single_source_d_instruction_38_evex: |
or [vex_required],8 |
avx_single_source_d_instruction_38: |
or [operand_flags],2 |
jmp avx_d_instruction_38 |
avx_d_instruction_38_evex: |
or [vex_required],8 |
avx_d_instruction_38: |
mov [supplemental_code],al |
mov al,38h |
jmp avx_d_instruction |
avx_d_instruction_3a_imm8_evex: |
mov [immediate_size],1 |
or [vex_required],8 |
mov [supplemental_code],al |
mov al,3Ah |
jmp avx_d_instruction |
avx_single_source_d_instruction_imm8: |
or [operand_flags],2 |
mov [immediate_size],1 |
jmp avx_d_instruction |
avx_d_instruction_evex: |
or [vex_required],8 |
avx_d_instruction: |
mov ch,4 |
jmp avx_pi_instruction |
avx_single_source_bw_instruction_38: |
or [operand_flags],2 |
avx_bw_instruction_38: |
mov [supplemental_code],al |
mov al,38h |
avx_bw_instruction: |
xor ch,ch |
avx_pi_instruction: |
mov [opcode_prefix],66h |
avx_cmp_ps_instruction: |
mov [mmx_size],0 |
mov byte [value],al |
mov al,0C2h |
jmp avx_instruction |
avx_cmp_sd_instruction: |
mov [opcode_prefix],0F2h |
mov [mmx_size],8 |
mov byte [value],al |
mov al,0C2h |
jmp avx_instruction |
avx_cmp_ss_instruction: |
mov [opcode_prefix],0F3h |
mov [mmx_size],4 |
mov byte [value],al |
mov al,0C2h |
jmp avx_instruction |
avx_comiss_instruction: |
xor cl,cl |
jmp avx_instruction_with_broadcast |
avx_bw_instruction_38_w1_evex: |
or [rex_prefix],8 |
avx_bw_instruction_38_evex: |
or [vex_required],8 |
jmp avx_bw_instruction_38 |
avx_pd_instruction_noevex: |
xor cl,cl |
or [vex_required],2 |
mov [mmx_size],4 |
mov [opcode_prefix],66h |
jmp avx_instruction |
avx_comisd_instruction: |
avx_ps_instruction_noevex: |
or [vex_required],2 |
mov [opcode_prefix],66h |
mov [mmx_size],8 |
jmp avx_instruction |
avx_haddps_instruction: |
mov [opcode_prefix],0F2h |
mov [mmx_size],0 |
xor cl,cl |
jmp avx_instruction |
avx_movshdup_instruction: |
or [vex_required],2 |
mov [opcode_prefix],0F3h |
mov [mmx_size],0 |
jmp avx_instruction |
avx_128bit_instruction: |
mov [mmx_size],16 |
mov [opcode_prefix],66h |
avx_instruction: |
xor ch,ch |
avx_instruction_with_broadcast: |
mov [mmx_size],cl |
mov [broadcast_size],ch |
mov [base_code],0Fh |
mov [extended_code],al |
avx_common: |
avx_xop_common: |
or [vex_required],1 |
lods byte [esi] |
call get_size_operator |
85,8 → 173,9 |
lods byte [esi] |
call convert_avx_register |
mov [postbyte_register],al |
call take_avx512_mask |
avx_vex_reg: |
test [vex_required],2 |
test [operand_flags],2 |
jnz avx_vex_reg_ok |
lods byte [esi] |
cmp al,',' |
94,35 → 183,36 |
call take_avx_register |
mov [vex_register],al |
avx_vex_reg_ok: |
cmp [mmx_size],0 |
mov al,[mmx_size] |
or al,al |
jz avx_regs_size_ok |
mov ah,[operand_size] |
or ah,ah |
jz avx_regs_size_ok |
cmp al,ah |
je avx_regs_size_ok |
ja invalid_operand_size |
cmp ah,16 |
jne invalid_operand |
jne invalid_operand_size |
avx_regs_size_ok: |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
avx_regs_rm: |
call take_avx_rm |
jc avx_regs_reg |
mov al,[extended_code] |
mov ah,[supplemental_code] |
cmp al,0C2h |
mov al,[immediate_size] |
cmp al,1 |
je mmx_imm8 |
jb instruction_ready |
cmp al,-4 |
je sse_cmp_mem_ok |
cmp ax,443Ah |
je sse_cmp_mem_ok |
mov al,[base_code] |
and al,11011100b |
cmp al,11001100b |
je sse_cmp_mem_ok |
cmp [immediate_size],1 |
je mmx_imm8 |
cmp [immediate_size],0 |
jge instruction_ready |
cmp byte [esi],',' |
jne invalid_operand |
inc esi |
call take_avx_register |
shl al,4 |
jc invalid_operand |
or byte [value],al |
test al,80h |
jz avx_regs_mem_reg_store |
134,25 → 224,19 |
jmp instruction_assembled |
avx_regs_reg: |
mov bl,al |
mov al,[extended_code] |
mov ah,[supplemental_code] |
cmp al,0C2h |
call take_avx512_rounding |
mov al,[immediate_size] |
cmp al,1 |
je mmx_nomem_imm8 |
jb nomem_instruction_ready |
cmp al,-4 |
je sse_cmp_nomem_ok |
cmp ax,443Ah |
je sse_cmp_nomem_ok |
mov al,[base_code] |
and al,11011100b |
cmp al,11001100b |
je sse_cmp_nomem_ok |
cmp [immediate_size],1 |
je mmx_nomem_imm8 |
cmp [immediate_size],0 |
jge nomem_instruction_ready |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
mov al,bl |
shl al,4 |
jc invalid_operand |
or byte [value],al |
test al,80h |
jz avx_regs_reg_ |
169,6 → 253,7 |
jmp instruction_assembled |
avx_regs_reg_reg: |
shl al,4 |
jc invalid_operand |
and byte [value],1111b |
or byte [value],al |
call take_imm4_if_needed |
183,15 → 268,20 |
call get_size_operator |
cmp al,'[' |
je take_avx_mem |
mov [operand_size],cl |
cmp al,10h |
jne invalid_operand |
mov [operand_size],cl |
lods byte [esi] |
call convert_avx_register |
cmp [mmx_size],0 |
or cl,cl |
jnz avx_reg_ok |
or cl,[mmx_size] |
jz avx_reg_ok |
cmp ah,cl |
je avx_reg_ok |
jb invalid_operand_size |
cmp ah,16 |
jne invalid_operand |
jne invalid_operand_size |
avx_reg_ok: |
stc |
ret |
198,26 → 288,83 |
take_avx_mem: |
push ecx |
call get_address |
cmp byte [esi],'{' |
jne avx_mem_ok |
inc esi |
lods byte [esi] |
cmp al,1Fh |
jne invalid_operand |
mov al,[esi] |
shr al,4 |
cmp al,1 |
jne invalid_operand |
mov al,[mmx_size] |
or al,al |
jnz avx_mem_broadcast_check |
mov eax,[esp] |
or al,al |
jnz avx_mem_broadcast_check |
mov al,[broadcast_size] |
mov [mmx_size],al |
mov ah,cl |
lods byte [esi] |
and al,1111b |
mov cl,al |
mov al,[broadcast_size] |
shl al,cl |
mov [esp],al |
mov cl,ah |
jmp avx_mem_broadcast_ok |
avx_mem_broadcast_check: |
bsf eax,eax |
xchg al,[broadcast_size] |
mov [mmx_size],al |
bsf eax,eax |
jz invalid_operand |
mov ah,[broadcast_size] |
sub ah,al |
lods byte [esi] |
and al,1111b |
cmp al,ah |
jne invalid_operand_size |
avx_mem_broadcast_ok: |
or [vex_required],40h |
lods byte [esi] |
cmp al,'}' |
jne invalid_operand |
avx_mem_ok: |
pop eax |
or al,al |
jz avx_mem_size_deciding |
xchg al,[operand_size] |
cmp [mmx_size],0 |
jne avx_smem |
xchg al,[operand_size] |
jne avx_mem_size_enforced |
or al,al |
jz avx_mem_ok |
jz avx_mem_size_ok |
cmp al,[operand_size] |
jne operand_sizes_do_not_match |
avx_mem_ok: |
avx_mem_size_ok: |
clc |
ret |
avx_smem: |
xchg al,[operand_size] |
avx_mem_size_deciding: |
mov al,[operand_size] |
cmp [mmx_size],0 |
jne avx_mem_size_enforced |
cmp al,16 |
je avx_mem_size_ok |
cmp al,32 |
je avx_mem_size_ok |
cmp al,64 |
je avx_mem_size_ok |
or al,al |
jz avx_smem_ok |
jnz invalid_operand_size |
call recoverable_unknown_size |
avx_mem_size_enforced: |
or al,al |
jz avx_mem_size_ok |
cmp al,[mmx_size] |
jne invalid_operand_size |
avx_smem_ok: |
clc |
ret |
je avx_mem_size_ok |
jmp invalid_operand_size |
take_imm4_if_needed: |
cmp [immediate_size],-3 |
jne imm4_ok |
235,90 → 382,126 |
pop edx ecx ebx |
imm4_ok: |
ret |
take_avx512_mask: |
cmp byte [esi],'{' |
jne avx512_masking_ok |
test [operand_flags],10h |
jnz invalid_operand |
inc esi |
lods byte [esi] |
cmp al,14h |
jne invalid_operand |
lods byte [esi] |
mov ah,al |
shr ah,4 |
cmp ah,5 |
jne invalid_operand |
or al,al |
jz invalid_operand |
and al,111b |
mov [mask_register],al |
or [vex_required],20h |
lods byte [esi] |
cmp al,'}' |
jne invalid_operand |
cmp byte [esi],'{' |
jne avx512_masking_ok |
test [operand_flags],20h |
jnz invalid_operand |
inc esi |
lods byte [esi] |
cmp al,1Fh |
jne invalid_operand |
lods byte [esi] |
or al,al |
jnz invalid_operand |
or [mask_register],80h |
lods byte [esi] |
cmp al,'}' |
jne invalid_operand |
avx512_masking_ok: |
retn |
take_avx512_rounding: |
test [operand_flags],4+8 |
jz avx512_rounding_done |
cmp [mmx_size],0 |
jne avx512_rounding_allowed |
cmp [operand_size],64 |
jne avx512_rounding_done |
avx512_rounding_allowed: |
cmp byte [esi],',' |
jne avx512_rounding_done |
cmp byte [esi+1],'{' |
jne avx512_rounding_done |
add esi,2 |
mov [rounding_mode],0 |
or [vex_required],40h+80h |
test [operand_flags],8 |
jz take_sae |
lods byte [esi] |
cmp al,1Fh |
jne invalid_operand |
lods byte [esi] |
mov ah,al |
shr ah,4 |
cmp ah,2 |
jne invalid_operand |
and al,11b |
mov [rounding_mode],al |
lods byte [esi] |
cmp al,'-' |
jne invalid_operand |
take_sae: |
lods byte [esi] |
cmp al,1Fh |
jne invalid_operand |
lods byte [esi] |
cmp al,30h |
jne invalid_operand |
lods byte [esi] |
cmp al,'}' |
jne invalid_operand |
avx512_rounding_done: |
retn |
avx_single_source_128bit_instruction_38: |
avx_movdqu_instruction: |
mov ah,0F3h |
jmp avx_movdq_instruction |
avx_movdqa_instruction: |
mov ah,66h |
avx_movdq_instruction: |
mov [opcode_prefix],ah |
or [vex_required],2 |
avx_128bit_instruction_38: |
mov [mmx_size],16 |
jmp avx_instruction_38_setup |
avx_single_source_instruction_38: |
or [vex_required],2 |
avx_instruction_38: |
mov [mmx_size],0 |
avx_instruction_38_setup: |
mov [opcode_prefix],66h |
mov [supplemental_code],al |
mov al,38h |
jmp avx_instruction |
avx_instruction_38_w1: |
jmp avx_movps_instruction |
avx512_movdqu16_instruction: |
or [rex_prefix],8 |
jmp avx_instruction_38 |
avx_ss_instruction_3a_imm8: |
mov [mmx_size],4 |
jmp avx_instruction_3a_imm8_setup |
avx_sd_instruction_3a_imm8: |
mov [mmx_size],8 |
jmp avx_instruction_3a_imm8_setup |
avx_single_source_128bit_instruction_3a_imm8: |
or [vex_required],2 |
avx_128bit_instruction_3a_imm8: |
mov [mmx_size],16 |
jmp avx_instruction_3a_imm8_setup |
avx_triple_source_instruction_3a: |
mov [mmx_size],0 |
mov [immediate_size],-1 |
mov byte [value],0 |
jmp avx_instruction_3a_setup |
avx_single_source_instruction_3a_imm8: |
or [vex_required],2 |
avx_instruction_3a_imm8: |
mov [mmx_size],0 |
avx_instruction_3a_imm8_setup: |
mov [immediate_size],1 |
avx_instruction_3a_setup: |
mov [opcode_prefix],66h |
mov [supplemental_code],al |
mov al,3Ah |
jmp avx_instruction |
avx_pclmulqdq_instruction: |
mov byte [value],al |
mov [mmx_size],16 |
mov al,44h |
jmp avx_instruction_3a_setup |
avx_permq_instruction: |
or [vex_required],2 |
avx512_movdqu8_instruction: |
mov ah,0F2h |
jmp avx_movdq_instruction_evex |
avx512_movdqu64_instruction: |
or [rex_prefix],8 |
avx_perm2f128_instruction: |
mov [immediate_size],1 |
mov ah,3Ah |
jmp avx_perm_instruction |
avx_permd_instruction: |
mov ah,38h |
avx_perm_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],ah |
mov [supplemental_code],al |
mov [mmx_size],0 |
or [vex_required],1 |
call take_avx_register |
cmp ah,32 |
jne invalid_operand_size |
mov [postbyte_register],al |
jmp avx_vex_reg |
avx_movdqu_instruction: |
mov [opcode_prefix],0F3h |
avx512_movdqu32_instruction: |
mov ah,0F3h |
jmp avx_movdq_instruction_evex |
avx512_movdqa64_instruction: |
or [rex_prefix],8 |
avx512_movdqa32_instruction: |
mov ah,66h |
avx_movdq_instruction_evex: |
mov [opcode_prefix],ah |
or [vex_required],8 |
jmp avx_movps_instruction |
avx_movpd_instruction: |
mov [opcode_prefix],66h |
or [rex_prefix],80h |
avx_movps_instruction: |
mov [mmx_size],0 |
or [vex_required],2 |
or [operand_flags],2 |
mov [base_code],0Fh |
mov [extended_code],al |
or [vex_required],1 |
xor al,al |
mov [mmx_size],al |
mov [broadcast_size],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
331,6 → 514,8 |
cmp al,'[' |
jne invalid_operand |
call get_address |
or [operand_flags],20h |
call take_avx512_mask |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
338,110 → 523,205 |
mov [postbyte_register],al |
jmp instruction_ready |
avx_movntpd_instruction: |
or [rex_prefix],80h |
avx_movntdq_instruction: |
mov [opcode_prefix],66h |
avx_movntps_instruction: |
or [vex_required],1 |
mov [base_code],0Fh |
mov [extended_code],al |
or [vex_required],1 |
or [operand_flags],10h |
mov [mmx_size],0 |
lods byte [esi] |
call get_size_operator |
jmp avx_mem |
avx_compress_q_instruction: |
or [rex_prefix],8 |
avx_compress_d_instruction: |
or [vex_required],8 |
mov [mmx_size],0 |
call setup_66_0f_38 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne avx_mem |
lods byte [esi] |
call convert_avx_register |
mov bl,al |
call take_avx512_mask |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
mov [postbyte_register],al |
jmp nomem_instruction_ready |
avx_lddqu_instruction: |
mov [opcode_prefix],0F2h |
mov [mmx_size],0 |
xor cx,cx |
mov ah,0F2h |
or [vex_required],2 |
avx_load_instruction: |
mov [opcode_prefix],ah |
mov [base_code],0Fh |
mov [extended_code],al |
mov [mmx_size],0 |
or [vex_required],1 |
call take_avx_register |
or cl,cl |
jz avx_load_reg_ok |
cmp ah,cl |
jne invalid_operand |
avx_load_reg_ok: |
cmp [mmx_size],0 |
je avx_load_reg_ |
xor ah,ah |
avx_load_reg_: |
xchg ah,[operand_size] |
push eax |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,'[' |
jne invalid_operand |
call get_address |
jmp instruction_ready |
avx_movntdqa_instruction: |
mov [supplemental_code],al |
mov al,38h |
mov ah,66h |
jmp avx_load_instruction |
avx_movq_instruction: |
or [rex_prefix],8 |
mov [mmx_size],8 |
jmp avx_mov_instruction |
avx_movd_instruction: |
mov [mmx_size],4 |
avx_mov_instruction: |
or [vex_required],1 |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],7Eh |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je avx_load_reg_reg |
je avx_movd_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
pop eax |
xchg ah,[operand_size] |
mov [postbyte_register],al |
mov al,[mmx_size] |
or al,al |
jz instruction_ready |
or ah,ah |
jz instruction_ready |
cmp al,ah |
not al |
and [operand_size],al |
jnz invalid_operand_size |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_avx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
cmp [mmx_size],8 |
jne instruction_ready |
and [rex_prefix],not 8 |
or [rex_prefix],80h |
mov [extended_code],0D6h |
jmp instruction_ready |
avx_load_reg_reg: |
avx_movd_reg: |
lods byte [esi] |
cmp al,0C0h |
jae avx_movd_xmmreg |
call convert_register |
cmp ah,[mmx_size] |
jne invalid_operand_size |
mov [operand_size],0 |
mov bl,al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_avx_register |
cmp ch,ah |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
jmp nomem_instruction_ready |
avx_movd_xmmreg: |
sub [extended_code],10h |
call convert_avx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je avx_movd_xmmreg_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
mov al,[mmx_size] |
cmp al,8 |
jne avx_movd_xmmreg_mem_ready |
call avx_movq_xmmreg_xmmreg_opcode |
avx_movd_xmmreg_mem_ready: |
not al |
test [operand_size],al |
jnz invalid_operand_size |
jmp instruction_ready |
avx_movd_xmmreg_reg: |
lods byte [esi] |
cmp al,0C0h |
jae avx_movq_xmmreg_xmmreg |
call convert_register |
cmp ah,[mmx_size] |
jne invalid_operand_size |
mov bl,al |
pop eax |
xchg ah,[operand_size] |
jmp nomem_instruction_ready |
avx_movq_xmmreg_xmmreg: |
cmp [mmx_size],8 |
jne invalid_operand |
call avx_movq_xmmreg_xmmreg_opcode |
call convert_avx_register |
cmp ah,16 |
jne invalid_operand_size |
mov bl,al |
jmp nomem_instruction_ready |
avx_movq_xmmreg_xmmreg_opcode: |
and [rex_prefix],not 8 |
or [rex_prefix],80h |
add [extended_code],10h |
mov [opcode_prefix],0F3h |
ret |
avx_movddup_instruction: |
or [vex_required],1 |
mov [opcode_prefix],0F2h |
mov [base_code],0Fh |
mov [extended_code],al |
or [rex_prefix],80h |
xor al,al |
mov [mmx_size],al |
mov [broadcast_size],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_avx_register |
mov [postbyte_register],al |
jmp nomem_instruction_ready |
avx_movntdqa_instruction: |
mov [mmx_size],0 |
xor cx,cx |
jmp avx_load_instruction_38 |
avx_broadcastss_instruction: |
mov [mmx_size],4 |
xor cl,cl |
mov ch,16 |
jmp avx_load_instruction_38 |
avx_broadcastsd_instruction: |
cmp ah,16 |
ja avx_movddup_size_ok |
mov [mmx_size],8 |
mov cl,32 |
mov ch,16 |
jmp avx_load_instruction_38 |
avx_pbroadcastb_instruction: |
mov [mmx_size],1 |
jmp avx_pbroadcast_instruction |
avx_pbroadcastw_instruction: |
mov [mmx_size],2 |
jmp avx_pbroadcast_instruction |
avx_pbroadcastd_instruction: |
mov [mmx_size],4 |
jmp avx_pbroadcast_instruction |
avx_pbroadcastq_instruction: |
mov [mmx_size],8 |
avx_pbroadcast_instruction: |
xor cl,cl |
mov ch,16 |
jmp avx_load_instruction_38 |
avx_broadcastf128_instruction: |
mov [mmx_size],16 |
mov cl,32 |
xor ch,ch |
avx_load_instruction_38: |
mov [opcode_prefix],66h |
mov [supplemental_code],al |
mov al,38h |
jmp avx_load_instruction |
avx_movddup_size_ok: |
call take_avx512_mask |
jmp avx_vex_reg_ok |
avx_movlpd_instruction: |
mov [opcode_prefix],66h |
or [rex_prefix],80h |
avx_movlps_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
mov [mmx_size],8 |
mov [broadcast_size],0 |
or [vex_required],1 |
lods byte [esi] |
call get_size_operator |
468,6 → 748,7 |
cmp al,'[' |
jne invalid_operand |
call get_address |
avx_movlps_mem_: |
mov al,[operand_size] |
or al,al |
jz avx_movlps_mem_size_ok |
503,266 → 784,1152 |
call take_avx_register |
mov bl,al |
jmp nomem_instruction_ready |
avx_maskmov_w1_instruction: |
or [rex_prefix],8 |
avx_maskmov_instruction: |
call setup_66_0f_38 |
mov [mmx_size],0 |
avx_movsd_instruction: |
mov al,0F2h |
mov cl,8 |
or [rex_prefix],80h |
jmp avx_movs_instruction |
avx_movss_instruction: |
mov al,0F3h |
mov cl,4 |
avx_movs_instruction: |
mov [opcode_prefix],al |
mov [mmx_size],cl |
or [vex_required],1 |
mov [base_code],0Fh |
mov [extended_code],10h |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne avx_maskmov_mem |
jne avx_movs_mem |
lods byte [esi] |
call convert_avx_register |
cmp ah,16 |
jne invalid_operand |
mov [postbyte_register],al |
call take_avx512_mask |
xor cl,cl |
xchg cl,[operand_size] |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne avx_movs_reg_mem |
mov [operand_size],cl |
lods byte [esi] |
call convert_avx_register |
mov [vex_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_rm |
jc invalid_operand |
call take_avx_register |
mov bl,al |
cmp bl,8 |
jb nomem_instruction_ready |
inc [extended_code] |
xchg bl,[postbyte_register] |
jmp nomem_instruction_ready |
avx_movs_reg_mem: |
cmp al,'[' |
jne invalid_operand |
call get_address |
mov al,[operand_size] |
or al,al |
jz avx_movs_reg_mem_ok |
cmp al,[mmx_size] |
jne invalid_operand_size |
avx_movs_reg_mem_ok: |
jmp instruction_ready |
avx_maskmov_mem: |
avx_movs_mem: |
cmp al,'[' |
jne invalid_operand |
call get_address |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
mov [vex_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
mov [postbyte_register],al |
add [supplemental_code],2 |
jmp instruction_ready |
setup_66_0f_38: |
mov [extended_code],38h |
or [operand_flags],20h |
call take_avx512_mask |
jmp avx_movlps_mem_ |
avx_comiss_instruction: |
or [operand_flags],2+4+10h |
mov cl,4 |
jmp avx_instruction |
avx_comisd_instruction: |
or [operand_flags],2+4+10h |
mov [opcode_prefix],66h |
or [rex_prefix],80h |
mov cl,8 |
jmp avx_instruction |
avx_movshdup_instruction: |
or [operand_flags],2 |
mov [opcode_prefix],0F3h |
xor cl,cl |
jmp avx_instruction |
avx_cvtqq2pd_instruction: |
mov [opcode_prefix],0F3h |
or [vex_required],8 |
or [operand_flags],2+4+8 |
or [rex_prefix],8 |
mov cx,0800h |
jmp avx_instruction_with_broadcast |
avx_pshuf_w_instruction: |
mov [opcode_prefix],al |
or [operand_flags],2 |
mov [immediate_size],1 |
mov al,70h |
xor cl,cl |
jmp avx_instruction |
avx_single_source_128bit_instruction_38_noevex: |
or [operand_flags],2 |
avx_128bit_instruction_38_noevex: |
mov cl,16 |
jmp avx_instruction_38_noevex |
avx_single_source_instruction_38_noevex: |
or [operand_flags],2 |
jmp avx_pi_instruction_38_noevex |
avx_pi_instruction_38_noevex: |
xor cl,cl |
avx_instruction_38_noevex: |
or [vex_required],2 |
avx_instruction_38: |
mov [opcode_prefix],66h |
mov [supplemental_code],al |
mov [base_code],0Fh |
mov al,38h |
jmp avx_instruction |
avx_ss_instruction_3a_imm8_noevex: |
mov cl,4 |
jmp avx_instruction_3a_imm8_noevex |
avx_sd_instruction_3a_imm8_noevex: |
mov cl,8 |
jmp avx_instruction_3a_imm8_noevex |
avx_single_source_128bit_instruction_3a_imm8_noevex: |
or [operand_flags],2 |
avx_128bit_instruction_3a_imm8_noevex: |
mov cl,16 |
jmp avx_instruction_3a_imm8_noevex |
avx_triple_source_instruction_3a_noevex: |
xor cl,cl |
mov [immediate_size],-1 |
mov byte [value],0 |
jmp avx_instruction_3a_noevex |
avx_single_source_instruction_3a_imm8_noevex: |
or [operand_flags],2 |
avx_pi_instruction_3a_imm8_noevex: |
xor cl,cl |
avx_instruction_3a_imm8_noevex: |
mov [immediate_size],1 |
avx_instruction_3a_noevex: |
or [vex_required],2 |
avx_instruction_3a: |
mov [opcode_prefix],66h |
ret |
avx_movd_instruction: |
or [vex_required],1 |
jmp movd_instruction |
avx_movq_instruction: |
or [vex_required],1 |
jmp movq_instruction |
avx_movddup_instruction: |
or [vex_required],1 |
mov [supplemental_code],al |
mov al,3Ah |
jmp avx_instruction |
avx_pi_instruction_3a_imm8: |
xor cl,cl |
mov [immediate_size],1 |
jmp avx_instruction_3a |
avx_pclmulqdq_instruction: |
mov byte [value],al |
mov [immediate_size],-4 |
or [vex_required],2 |
mov cl,16 |
mov al,44h |
jmp avx_instruction_3a |
avx512_single_source_pd_instruction_sae_imm8: |
or [operand_flags],2 |
avx512_pd_instruction_sae_imm8: |
or [rex_prefix],8 |
mov cx,0800h |
jmp avx512_instruction_sae_imm8 |
avx512_single_source_ps_instruction_sae_imm8: |
or [operand_flags],2 |
avx512_ps_instruction_sae_imm8: |
mov cx,0400h |
jmp avx512_instruction_sae_imm8 |
avx512_sd_instruction_sae_imm8: |
or [rex_prefix],8 |
mov cx,0008h |
jmp avx512_instruction_sae_imm8 |
avx512_ss_instruction_sae_imm8: |
mov cx,0004h |
avx512_instruction_sae_imm8: |
or [operand_flags],4 |
avx512_instruction_imm8: |
or [vex_required],8 |
mov [opcode_prefix],66h |
mov [immediate_size],1 |
mov [supplemental_code],al |
mov al,3Ah |
jmp avx_instruction_with_broadcast |
avx512_pd_instruction_er: |
or [operand_flags],4+8 |
jmp avx512_pd_instruction |
avx512_single_source_pd_instruction_sae: |
or [operand_flags],4 |
avx512_single_source_pd_instruction: |
or [operand_flags],2 |
avx512_pd_instruction: |
or [rex_prefix],8 |
mov cx,0800h |
jmp avx512_instruction |
avx512_ps_instruction_er: |
or [operand_flags],4+8 |
jmp avx512_ps_instruction |
avx512_single_source_ps_instruction_sae: |
or [operand_flags],4 |
avx512_single_source_ps_instruction: |
or [operand_flags],2 |
avx512_ps_instruction: |
mov cx,0400h |
jmp avx512_instruction |
avx512_sd_instruction_er: |
or [operand_flags],8 |
avx512_sd_instruction_sae: |
or [operand_flags],4 |
avx512_sd_instruction: |
or [rex_prefix],8 |
mov cx,0008h |
jmp avx512_instruction |
avx512_ss_instruction_er: |
or [operand_flags],8 |
avx512_ss_instruction_sae: |
or [operand_flags],4 |
avx512_ss_instruction: |
mov cx,0004h |
avx512_instruction: |
or [vex_required],8 |
mov [opcode_prefix],66h |
mov [supplemental_code],al |
mov al,38h |
jmp avx_instruction_with_broadcast |
avx512_exp2pd_instruction: |
or [rex_prefix],8 |
or [operand_flags],2+4 |
mov cx,0840h |
jmp avx512_instruction |
avx512_exp2ps_instruction: |
or [operand_flags],2+4 |
mov cx,0440h |
jmp avx512_instruction |
fma_instruction_pd: |
or [rex_prefix],8 |
mov cx,0800h |
jmp fma_instruction |
fma_instruction_ps: |
mov cx,0400h |
jmp fma_instruction |
fma_instruction_sd: |
or [rex_prefix],8 |
mov cx,0008h |
jmp fma_instruction |
fma_instruction_ss: |
mov cx,0004h |
fma_instruction: |
or [operand_flags],4+8 |
mov [opcode_prefix],66h |
mov [supplemental_code],al |
mov al,38h |
jmp avx_instruction_with_broadcast |
fma4_instruction_p: |
xor cl,cl |
jmp fma4_instruction |
fma4_instruction_sd: |
mov cl,8 |
jmp fma4_instruction |
fma4_instruction_ss: |
mov cl,4 |
fma4_instruction: |
mov [immediate_size],-2 |
mov byte [value],0 |
jmp avx_instruction_3a_noevex |
avx_cmp_pd_instruction: |
mov [opcode_prefix],66h |
or [rex_prefix],80h |
mov cx,0800h |
jmp avx_cmp_instruction |
avx_cmp_ps_instruction: |
mov cx,0400h |
jmp avx_cmp_instruction |
avx_cmp_sd_instruction: |
mov [opcode_prefix],0F2h |
or [rex_prefix],80h |
mov cx,0008h |
jmp avx_cmp_instruction |
avx_cmp_ss_instruction: |
mov [opcode_prefix],0F3h |
mov cx,0004h |
avx_cmp_instruction: |
mov byte [value],al |
mov [immediate_size],-4 |
or [operand_flags],4+20h |
mov al,0C2h |
jmp avx_cmp_common |
avx_cmpeqq_instruction: |
or [rex_prefix],80h |
mov ch,8 |
mov [supplemental_code],al |
mov al,38h |
jmp avx_cmp_pi_instruction |
avx_cmpeqd_instruction: |
mov ch,4 |
jmp avx_cmp_pi_instruction |
avx_cmpeqb_instruction: |
xor ch,ch |
jmp avx_cmp_pi_instruction |
avx512_cmp_uq_instruction: |
or [rex_prefix],8 |
mov ch,8 |
mov ah,1Eh |
jmp avx_cmp_pi_instruction_evex |
avx512_cmp_ud_instruction: |
mov ch,4 |
mov ah,1Eh |
jmp avx_cmp_pi_instruction_evex |
avx512_cmp_q_instruction: |
or [rex_prefix],8 |
mov ch,8 |
mov ah,1Fh |
jmp avx_cmp_pi_instruction_evex |
avx512_cmp_d_instruction: |
mov ch,4 |
mov ah,1Fh |
jmp avx_cmp_pi_instruction_evex |
avx512_cmp_uw_instruction: |
or [rex_prefix],8 |
avx512_cmp_ub_instruction: |
xor ch,ch |
mov ah,3Eh |
jmp avx_cmp_pi_instruction_evex |
avx512_cmp_w_instruction: |
or [rex_prefix],8 |
avx512_cmp_b_instruction: |
xor ch,ch |
mov ah,3Fh |
avx_cmp_pi_instruction_evex: |
mov byte [value],al |
mov [immediate_size],-4 |
mov [supplemental_code],ah |
mov al,3Ah |
or [vex_required],8 |
avx_cmp_pi_instruction: |
xor cl,cl |
or [operand_flags],20h |
mov [opcode_prefix],66h |
avx_cmp_common: |
mov [mmx_size],cl |
mov [broadcast_size],ch |
mov [extended_code],al |
mov [base_code],0Fh |
mov [extended_code],al |
lods byte [esi] |
call get_size_operator |
cmp al,14h |
je avx_maskreg |
cmp al,10h |
jne invalid_operand |
or [vex_required],2 |
jmp avx_reg |
avx_maskreg: |
cmp [operand_size],0 |
jne invalid_operand_size |
or [vex_required],8 |
lods byte [esi] |
call convert_avx_register |
call convert_mask_register |
mov [postbyte_register],al |
mov [mmx_size],0 |
cmp ah,32 |
je avx_regs_size_ok |
mov [mmx_size],8 |
jmp avx_regs_size_ok |
avx_movmskpd_instruction: |
call take_avx512_mask |
jmp avx_vex_reg |
avx512_fpclasspd_instruction: |
or [rex_prefix],8 |
mov cx,0800h |
jmp avx_fpclass_instruction |
avx512_fpclassps_instruction: |
mov cx,0400h |
jmp avx_fpclass_instruction |
avx512_fpclasssd_instruction: |
or [rex_prefix],8 |
mov cx,0008h |
jmp avx_fpclass_instruction |
avx512_fpclassss_instruction: |
mov cx,0004h |
avx_fpclass_instruction: |
mov [broadcast_size],ch |
mov [mmx_size],cl |
or [operand_flags],2 |
call setup_66_0f_3a |
mov [immediate_size],1 |
lods byte [esi] |
cmp al,14h |
je avx_maskreg |
jmp invalid_operand |
avx512_ptestnmd_instruction: |
mov ch,4 |
jmp avx512_ptestnm_instruction |
avx512_ptestnmq_instruction: |
or [rex_prefix],8 |
mov ch,8 |
jmp avx512_ptestnm_instruction |
avx512_ptestnmw_instruction: |
or [rex_prefix],8 |
avx512_ptestnmb_instruction: |
xor ch,ch |
avx512_ptestnm_instruction: |
mov ah,0F3h |
jmp avx512_ptest_instruction |
avx512_ptestmd_instruction: |
mov ch,4 |
jmp avx512_ptestm_instruction |
avx512_ptestmq_instruction: |
or [rex_prefix],8 |
mov ch,8 |
jmp avx512_ptestm_instruction |
avx512_ptestmw_instruction: |
or [rex_prefix],8 |
avx512_ptestmb_instruction: |
xor ch,ch |
avx512_ptestm_instruction: |
mov ah,66h |
avx512_ptest_instruction: |
xor cl,cl |
mov [opcode_prefix],ah |
mov [supplemental_code],al |
mov al,38h |
or [vex_required],8 |
jmp avx_cmp_common |
mask_shift_instruction_q: |
or [rex_prefix],8 |
mask_shift_instruction_d: |
or [operand_flags],2 |
or [immediate_size],1 |
mov [opcode_prefix],66h |
avx_movmskps_instruction: |
mov [supplemental_code],al |
mov al,3Ah |
jmp mask_instruction |
mask_instruction_single_source_b: |
mov [opcode_prefix],66h |
jmp mask_instruction_single_source_w |
mask_instruction_single_source_d: |
mov [opcode_prefix],66h |
mask_instruction_single_source_q: |
or [rex_prefix],8 |
mask_instruction_single_source_w: |
or [operand_flags],2 |
jmp mask_instruction |
mask_instruction_b: |
mov [opcode_prefix],66h |
jmp mask_instruction_w |
mask_instruction_d: |
mov [opcode_prefix],66h |
mask_instruction_q: |
or [rex_prefix],8 |
mask_instruction_w: |
mov [operand_size],32 |
mask_instruction: |
or [vex_required],1 |
mov [base_code],0Fh |
mov [extended_code],50h |
or [vex_required],1 |
mov [extended_code],al |
call take_mask_register |
mov [postbyte_register],al |
test [operand_flags],2 |
jnz mask_instruction_nds_ok |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
cmp al,',' |
jne invalid_operand |
call take_mask_register |
mov [vex_register],al |
mask_instruction_nds_ok: |
lods byte [esi] |
call convert_register |
mov [postbyte_register],al |
cmp ah,4 |
je avx_movmskps_reg_ok |
cmp ah,8 |
jne invalid_operand_size |
cmp [code_type],64 |
jne invalid_operand |
avx_movmskps_reg_ok: |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
call take_mask_register |
mov bl,al |
cmp [immediate_size],0 |
jne mmx_nomem_imm8 |
jmp nomem_instruction_ready |
avx_movsd_instruction: |
mov [opcode_prefix],0F2h |
mov [mmx_size],8 |
jmp avx_movs_instruction |
avx_movss_instruction: |
mov [opcode_prefix],0F3h |
mov [mmx_size],4 |
avx_movs_instruction: |
take_mask_register: |
lods byte [esi] |
cmp al,14h |
jne invalid_operand |
lods byte [esi] |
convert_mask_register: |
mov ah,al |
shr ah,4 |
cmp ah,5 |
jne invalid_operand |
and al,1111b |
ret |
kmov_instruction: |
mov [mmx_size],al |
or [vex_required],1 |
mov [base_code],0Fh |
mov [extended_code],10h |
mov [extended_code],90h |
lods byte [esi] |
cmp al,14h |
je kmov_maskreg |
cmp al,10h |
je kmov_reg |
call get_size_operator |
cmp al,10h |
jne avx_movlps_mem |
inc [extended_code] |
cmp al,'[' |
jne invalid_argument |
call get_address |
lods byte [esi] |
call convert_xmm_register |
cmp al,',' |
jne invalid_operand |
call take_mask_register |
mov [postbyte_register],al |
xor cl,cl |
xchg cl,[operand_size] |
kmov_with_mem: |
mov ah,[mmx_size] |
mov al,[operand_size] |
or al,al |
jz kmov_mem_size_ok |
cmp al,ah |
jne invalid_operand_size |
kmov_mem_size_ok: |
call setup_kmov_prefix |
jmp instruction_ready |
setup_kmov_prefix: |
cmp ah,4 |
jb kmov_w_ok |
or [rex_prefix],8 |
kmov_w_ok: |
test ah,1 or 4 |
jz kmov_prefix_ok |
mov [opcode_prefix],66h |
kmov_prefix_ok: |
ret |
kmov_maskreg: |
lods byte [esi] |
call convert_mask_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
cmp al,14h |
je kmov_maskreg_maskreg |
cmp al,10h |
je kmov_maskreg_reg |
call get_size_operator |
cmp al,10h |
jne avx_movs_reg_mem |
mov [operand_size],cl |
cmp al,'[' |
jne invalid_argument |
call get_address |
jmp kmov_with_mem |
kmov_maskreg_maskreg: |
lods byte [esi] |
call convert_avx_register |
mov [vex_register],al |
call convert_mask_register |
mov bl,al |
mov ah,[mmx_size] |
call setup_kmov_prefix |
jmp nomem_instruction_ready |
kmov_maskreg_reg: |
add [extended_code],2 |
lods byte [esi] |
call convert_register |
kmov_with_reg: |
mov bl,al |
mov al,[mmx_size] |
mov ah,4 |
cmp al,ah |
jbe kmov_reg_size_check |
mov ah,al |
kmov_reg_size_check: |
cmp ah,[operand_size] |
jne invalid_operand_size |
cmp al,8 |
je kmov_f2_w1 |
cmp al,2 |
ja kmov_f2 |
je nomem_instruction_ready |
mov [opcode_prefix],66h |
jmp nomem_instruction_ready |
kmov_f2_w1: |
or [rex_prefix],8 |
kmov_f2: |
mov [opcode_prefix],0F2h |
jmp nomem_instruction_ready |
kmov_reg: |
add [extended_code],3 |
lods byte [esi] |
call convert_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_mask_register |
jmp kmov_with_reg |
avx512_pmov_m2_instruction_w1: |
or [rex_prefix],8 |
avx512_pmov_m2_instruction: |
or [vex_required],8 |
call setup_f3_0f_38 |
call take_avx_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_mask_register |
mov bl,al |
cmp bl,8 |
jb nomem_instruction_ready |
inc [extended_code] |
xchg bl,[postbyte_register] |
jmp nomem_instruction_ready |
avx_movs_reg_mem: |
cmp al,'[' |
avx512_pmov_2m_instruction_w1: |
or [rex_prefix],8 |
avx512_pmov_2m_instruction: |
or [vex_required],8 |
call setup_f3_0f_38 |
call take_mask_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call get_address |
mov al,[operand_size] |
or al,al |
jz avx_movs_reg_mem_ok |
cmp al,[mmx_size] |
jne invalid_operand_size |
avx_movs_reg_mem_ok: |
jmp instruction_ready |
call take_avx_register |
mov bl,al |
jmp nomem_instruction_ready |
setup_f3_0f_38: |
mov [extended_code],38h |
mov [supplemental_code],al |
mov [base_code],0Fh |
mov [opcode_prefix],0F3h |
ret |
avx_cvtdq2pd_instruction: |
mov [opcode_prefix],0F3h |
avx_cvtps2pd_instruction: |
vzeroall_instruction: |
mov [operand_size],32 |
vzeroupper_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
and [displacement_compression],0 |
call store_vex_instruction_code |
jmp instruction_assembled |
vldmxcsr_instruction: |
or [vex_required],2 |
jmp fxsave_instruction |
avx_perm2f128_instruction: |
or [vex_required],2 |
xor ch,ch |
avx_instruction_imm8_without_128bit: |
mov [immediate_size],1 |
mov ah,3Ah |
jmp avx_instruction_without_128bit |
avx512_shuf_q_instruction: |
or [rex_prefix],8 |
or [vex_required],8 |
mov ch,8 |
jmp avx_instruction_imm8_without_128bit |
avx512_shuf_d_instruction: |
or [vex_required],8 |
mov ch,4 |
jmp avx_instruction_imm8_without_128bit |
avx_permd_instruction: |
mov ah,38h |
mov ch,4 |
avx_instruction_without_128bit: |
xor cl,cl |
call setup_avx_66_supplemental |
call take_avx_register |
cmp ah,32 |
jb invalid_operand_size |
mov [postbyte_register],al |
call take_avx512_mask |
jmp avx_vex_reg |
setup_avx_66_supplemental: |
mov [opcode_prefix],66h |
mov [broadcast_size],ch |
mov [mmx_size],cl |
mov [base_code],0Fh |
mov [extended_code],ah |
mov [supplemental_code],al |
or [vex_required],1 |
ret |
avx_permq_instruction: |
or [rex_prefix],8 |
mov ch,8 |
jmp avx_permil_instruction |
avx_permilpd_instruction: |
or [rex_prefix],80h |
mov ch,8 |
jmp avx_permil_instruction |
avx_permilps_instruction: |
mov ch,4 |
avx_permil_instruction: |
or [operand_flags],2 |
xor cl,cl |
mov ah,3Ah |
call setup_avx_66_supplemental |
call take_avx_register |
cmp [supplemental_code],4 |
jae avx_permil_size_ok |
cmp ah,32 |
jb invalid_operand_size |
avx_permil_size_ok: |
mov [postbyte_register],al |
call take_avx512_mask |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_rm |
jnc mmx_imm8 |
mov bl,al |
cmp byte [esi],',' |
jne invalid_operand |
mov al,[esi+1] |
cmp al,11h |
jne avx_permil_rm_or_imm8 |
mov al,[esi+3] |
avx_permil_rm_or_imm8: |
cmp al,'(' |
je mmx_nomem_imm8 |
mov [vex_register],bl |
inc esi |
mov [extended_code],38h |
mov al,[supplemental_code] |
cmp al,4 |
jb avx_permq_rm |
add [supplemental_code],8 |
jmp avx_regs_rm |
avx_permq_rm: |
or [vex_required],8 |
shl al,5 |
neg al |
add al,36h |
mov [supplemental_code],al |
jmp avx_regs_rm |
vpermil_2pd_instruction: |
mov [immediate_size],-2 |
mov byte [value],al |
mov al,49h |
jmp vpermil2_instruction_setup |
vpermil_2ps_instruction: |
mov [immediate_size],-2 |
mov byte [value],al |
mov al,48h |
jmp vpermil2_instruction_setup |
vpermil2_instruction: |
mov [immediate_size],-3 |
mov byte [value],0 |
vpermil2_instruction_setup: |
or [vex_required],2 |
mov [base_code],0Fh |
mov [supplemental_code],al |
mov al,3Ah |
xor cl,cl |
jmp avx_instruction |
avx_shift_q_instruction_evex: |
or [vex_required],8 |
avx_shift_q_instruction: |
or [rex_prefix],80h |
mov cl,8 |
jmp avx_shift_instruction |
avx_shift_d_instruction: |
mov cl,4 |
jmp avx_shift_instruction |
avx_shift_bw_instruction: |
xor cl,cl |
avx_shift_instruction: |
mov [broadcast_size],cl |
mov [mmx_size],0 |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],al |
or [vex_required],1 |
call take_avx_register |
mov [postbyte_register],al |
call take_avx512_mask |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
xor cl,cl |
xchg cl,[operand_size] |
lods byte [esi] |
call get_size_operator |
cmp al,'[' |
je avx_shift_reg_mem |
mov [operand_size],cl |
cmp al,10h |
jne avx_cvtdq2pd_reg_mem |
jne invalid_operand |
lods byte [esi] |
call convert_avx_register |
mov [vex_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
push esi |
xor cl,cl |
xchg cl,[operand_size] |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je avx_shift_reg_reg_reg |
pop esi |
cmp al,'[' |
je avx_shift_reg_reg_mem |
xchg cl,[operand_size] |
test cl,not 1 |
jnz invalid_operand_size |
dec esi |
call convert_avx_shift_opcode |
mov bl,al |
jmp mmx_nomem_imm8 |
convert_avx_shift_opcode: |
mov al,[extended_code] |
mov ah,al |
and ah,1111b |
add ah,70h |
mov [extended_code],ah |
shr al,4 |
sub al,0Ch |
shl al,1 |
xchg al,[postbyte_register] |
xchg al,[vex_register] |
ret |
avx_shift_reg_reg_reg: |
pop eax |
lods byte [esi] |
call convert_xmm_register |
xchg cl,[operand_size] |
mov bl,al |
mov [operand_size],cl |
jmp nomem_instruction_ready |
avx_cvtdq2pd_reg_mem: |
cmp al,'[' |
jne invalid_operand |
mov [mmx_size],cl |
avx_shift_reg_reg_mem: |
mov [mmx_size],16 |
push ecx |
lods byte [esi] |
call get_size_operator |
call get_address |
mov al,[mmx_size] |
mov ah,al |
pop eax |
xchg al,[operand_size] |
or al,al |
test al,al |
jz instruction_ready |
shl al,1 |
cmp al,ah |
cmp al,16 |
jne invalid_operand_size |
jmp instruction_ready |
avx_cvtpd2dq_instruction: |
mov [opcode_prefix],0F2h |
jmp avx_cvtpd_instruction |
avx_cvtpd2ps_instruction: |
avx_shift_reg_mem: |
or [vex_required],8 |
call take_avx_mem |
call convert_avx_shift_opcode |
jmp mmx_imm8 |
avx_shift_dq_instruction: |
mov [postbyte_register],al |
mov [opcode_prefix],66h |
avx_cvtpd_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
mov [extended_code],73h |
or [vex_required],1 |
mov [mmx_size],0 |
call take_avx_register |
mov [postbyte_register],al |
cmp ah,16 |
mov [vex_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,'[' |
je avx_shift_dq_reg_mem |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_avx_register |
mov bl,al |
jmp mmx_nomem_imm8 |
avx_shift_dq_reg_mem: |
or [vex_required],8 |
call get_address |
jmp mmx_imm8 |
avx512_rotate_q_instruction: |
mov cl,8 |
or [rex_prefix],cl |
jmp avx512_rotate_instruction |
avx512_rotate_d_instruction: |
mov cl,4 |
avx512_rotate_instruction: |
mov [broadcast_size],cl |
mov [postbyte_register],al |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],72h |
or [vex_required],8 |
mov [mmx_size],0 |
mov [immediate_size],1 |
call take_avx_register |
mov [vex_register],al |
call take_avx512_mask |
jmp avx_vex_reg_ok |
avx_pmovsxbq_instruction: |
mov cl,2 |
jmp avx_pmovsx_instruction |
avx_pmovsxbd_instruction: |
mov cl,4 |
jmp avx_pmovsx_instruction |
avx_pmovsxbw_instruction: |
mov cl,8 |
avx_pmovsx_instruction: |
mov [mmx_size],cl |
or [vex_required],1 |
call setup_66_0f_38 |
call take_avx_register |
mov [postbyte_register],al |
call take_avx512_mask |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
mov [operand_size],0 |
xor al,al |
xchg al,[operand_size] |
bsf ecx,eax |
sub cl,4 |
shl [mmx_size],cl |
push eax |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne avx_cvtpd2dq_reg_mem |
je avx_pmovsx_reg_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
pop eax |
xchg al,[operand_size] |
or al,al |
jz instruction_ready |
cmp al,[mmx_size] |
jne invalid_operand_size |
jmp instruction_ready |
avx_pmovsx_reg_reg: |
lods byte [esi] |
call convert_avx_register |
mov bl,al |
cmp ah,[mmx_size] |
je avx_pmovsx_xmmreg_reg_size_ok |
jb invalid_operand_size |
cmp ah,16 |
jne invalid_operand_size |
avx_pmovsx_xmmreg_reg_size_ok: |
pop eax |
mov [operand_size],al |
jmp nomem_instruction_ready |
avx_cvtpd2dq_reg_mem: |
avx512_pmovqb_instruction: |
mov cl,2 |
jmp avx512_pmov_instruction |
avx512_pmovdb_instruction: |
mov cl,4 |
jmp avx512_pmov_instruction |
avx512_pmovwb_instruction: |
mov cl,8 |
avx512_pmov_instruction: |
mov [mmx_size],cl |
or [vex_required],8 |
mov [extended_code],38h |
mov [supplemental_code],al |
mov [base_code],0Fh |
mov [opcode_prefix],0F3h |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je avx512_pmov_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
mov al,[operand_size] |
or [operand_flags],20h |
call avx512_pmov_common |
or al,al |
jz operand_size_not_specified |
jz instruction_ready |
cmp al,[mmx_size] |
jne invalid_operand_size |
jmp instruction_ready |
avx512_pmov_common: |
call take_avx512_mask |
xor al,al |
xchg al,[operand_size] |
push eax |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
mov [postbyte_register],al |
mov al,ah |
mov ah,cl |
bsf ecx,eax |
sub cl,4 |
shl [mmx_size],cl |
mov cl,ah |
pop eax |
ret |
avx512_pmov_reg: |
lods byte [esi] |
call convert_avx_register |
mov bl,al |
call avx512_pmov_common |
cmp al,[mmx_size] |
je nomem_instruction_ready |
jb invalid_operand_size |
cmp al,16 |
je instruction_ready |
cmp al,32 |
jne invalid_operand_size |
jmp instruction_ready |
avx_cvttps2dq_instruction: |
jmp nomem_instruction_ready |
avx_broadcast_128_instruction_noevex: |
or [vex_required],2 |
mov [opcode_prefix],0F3h |
mov [mmx_size],0 |
jmp avx_instruction |
avx_cvtsd2si_instruction: |
or [vex_required],1 |
jmp cvtsd2si_instruction |
avx_cvtss2si_instruction: |
or [vex_required],1 |
jmp cvtss2si_instruction |
avx_cvtsi2ss_instruction: |
mov [opcode_prefix],0F3h |
jmp avx_cvtsi_instruction |
avx_cvtsi2sd_instruction: |
mov [opcode_prefix],0F2h |
avx_cvtsi_instruction: |
mov cl,10h |
jmp avx_broadcast_instruction |
avx512_broadcast_32x2_instruction: |
mov cl,08h |
jmp avx_broadcast_instruction_evex |
avx512_broadcast_32x4_instruction: |
mov cl,10h |
jmp avx_broadcast_instruction_evex |
avx512_broadcast_32x8_instruction: |
mov cl,20h |
jmp avx_broadcast_instruction_evex |
avx512_broadcast_64x2_instruction: |
mov cl,10h |
jmp avx_broadcast_instruction_w1_evex |
avx512_broadcast_64x4_instruction: |
mov cl,20h |
avx_broadcast_instruction_w1_evex: |
or [rex_prefix],8 |
avx_broadcast_instruction_evex: |
or [vex_required],8 |
jmp avx_broadcast_instruction |
avx_broadcastss_instruction: |
mov cl,4 |
jmp avx_broadcast_instruction |
avx_broadcastsd_instruction: |
or [rex_prefix],80h |
mov cl,8 |
jmp avx_broadcast_instruction |
avx_pbroadcastb_instruction: |
mov cl,1 |
jmp avx_broadcast_pi_instruction |
avx_pbroadcastw_instruction: |
mov cl,2 |
jmp avx_broadcast_pi_instruction |
avx_pbroadcastd_instruction: |
mov cl,4 |
jmp avx_broadcast_pi_instruction |
avx_pbroadcastq_instruction: |
mov cl,8 |
or [rex_prefix],80h |
avx_broadcast_pi_instruction: |
or [operand_flags],40h |
avx_broadcast_instruction: |
mov [opcode_prefix],66h |
mov [supplemental_code],al |
mov al,38h |
mov [mmx_size],cl |
mov [base_code],0Fh |
mov [extended_code],al |
or [vex_required],1 |
call take_avx_register |
cmp ah,[mmx_size] |
je invalid_operand_size |
test [operand_flags],40h |
jnz avx_broadcast_destination_size_ok |
cmp [mmx_size],4 |
je avx_broadcast_destination_size_ok |
cmp [supplemental_code],59h |
je avx_broadcast_destination_size_ok |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
je invalid_operand_size |
avx_broadcast_destination_size_ok: |
xor ah,ah |
xchg ah,[operand_size] |
push eax |
call take_avx512_mask |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
mov [vex_register],al |
jmp cvtsi_xmmreg |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je avx_broadcast_reg_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
pop eax |
xchg ah,[operand_size] |
mov [postbyte_register],al |
mov al,[broadcast_size] |
mov al,[mmx_size] |
cmp al,ah |
je instruction_ready |
or al,al |
jz instruction_ready |
or ah,ah |
jz instruction_ready |
jmp invalid_operand_size |
avx_broadcast_reg_reg: |
lods byte [esi] |
test [operand_flags],40h |
jz avx_broadcast_reg_avx_reg |
cmp al,60h |
jb avx_broadcast_reg_general_reg |
cmp al,80h |
jb avx_broadcast_reg_avx_reg |
cmp al,0C0h |
jb avx_broadcast_reg_general_reg |
avx_broadcast_reg_avx_reg: |
call convert_avx_register |
mov bl,al |
mov al,[mmx_size] |
or al,al |
jz avx_broadcast_reg_avx_reg_size_ok |
cmp ah,16 |
jne invalid_operand_size |
cmp al,ah |
jae invalid_operand |
avx_broadcast_reg_avx_reg_size_ok: |
pop eax |
xchg ah,[operand_size] |
mov [postbyte_register],al |
test [vex_required],2 |
jnz invalid_operand |
jmp nomem_instruction_ready |
avx_broadcast_reg_general_reg: |
call convert_register |
mov bl,al |
mov al,[mmx_size] |
or al,al |
jz avx_broadcast_reg_general_reg_size_ok |
cmp al,ah |
jne invalid_operand_size |
avx_broadcast_reg_general_reg_size_ok: |
cmp al,4 |
jb avx_broadcast_reg_general_reg_ready |
cmp al,8 |
mov al,3 |
jne avx_broadcast_reg_general_reg_ready |
or [rex_prefix],8 |
avx_broadcast_reg_general_reg_ready: |
add al,7Ah-1 |
mov [supplemental_code],al |
or [vex_required],8 |
pop eax |
xchg ah,[operand_size] |
mov [postbyte_register],al |
jmp nomem_instruction_ready |
avx512_extract_64x4_instruction: |
or [rex_prefix],8 |
avx512_extract_32x8_instruction: |
or [vex_required],8 |
mov cl,32 |
jmp avx_extractf_instruction |
avx512_extract_64x2_instruction: |
or [rex_prefix],8 |
avx512_extract_32x4_instruction: |
or [vex_required],8 |
mov cl,16 |
jmp avx_extractf_instruction |
avx_extractf128_instruction: |
or [vex_required],1 |
or [vex_required],2 |
mov cl,16 |
avx_extractf_instruction: |
mov [mmx_size],cl |
call setup_66_0f_3a |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je avx_extractf128_reg |
je avx_extractf_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
769,103 → 1936,183 |
xor al,al |
xchg al,[operand_size] |
or al,al |
jz avx_extractf128_mem_size_ok |
cmp al,16 |
jz avx_extractf_mem_size_ok |
cmp al,[mmx_size] |
jne invalid_operand_size |
avx_extractf128_mem_size_ok: |
avx_extractf_mem_size_ok: |
call take_avx512_mask |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
cmp ah,32 |
jne invalid_operand_size |
cmp ah,[mmx_size] |
jbe invalid_operand_size |
mov [postbyte_register],al |
jmp mmx_imm8 |
avx_extractf128_reg: |
avx_extractf_reg: |
lods byte [esi] |
call convert_xmm_register |
call convert_avx_register |
cmp ah,[mmx_size] |
jne invalid_operand_size |
push eax |
call take_avx512_mask |
mov [operand_size],0 |
push eax |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
cmp ah,32 |
jne invalid_operand_size |
cmp ah,[mmx_size] |
jbe invalid_operand_size |
mov [postbyte_register],al |
pop ebx |
jmp mmx_nomem_imm8 |
setup_66_0f_3a: |
mov [extended_code],3Ah |
mov [supplemental_code],al |
mov [base_code],0Fh |
mov [opcode_prefix],66h |
ret |
avx512_insert_64x4_instruction: |
or [rex_prefix],8 |
avx512_insert_32x8_instruction: |
or [vex_required],8 |
mov cl,32 |
jmp avx_insertf_instruction |
avx512_insert_64x2_instruction: |
or [rex_prefix],8 |
avx512_insert_32x4_instruction: |
or [vex_required],8 |
mov cl,16 |
jmp avx_insertf_instruction |
avx_insertf128_instruction: |
or [vex_required],1 |
or [vex_required],2 |
mov cl,16 |
avx_insertf_instruction: |
mov [mmx_size],cl |
mov [broadcast_size],0 |
call setup_66_0f_3a |
call take_avx_register |
cmp ah,32 |
jne invalid_operand |
cmp ah,[mmx_size] |
jbe invalid_operand |
mov [postbyte_register],al |
call take_avx512_mask |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
mov [vex_register],al |
mov [operand_size],0 |
mov [mmx_size],16 |
mov al,[mmx_size] |
xchg al,[operand_size] |
push eax |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_rm |
mov [operand_size],32 |
jnc mmx_imm8 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je avx_insertf_reg_reg_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
pop eax |
mov [operand_size],al |
jmp mmx_imm8 |
avx_insertf_reg_reg_reg: |
lods byte [esi] |
call convert_avx_register |
mov bl,al |
pop eax |
mov [operand_size],al |
jmp mmx_nomem_imm8 |
avx_extractps_instruction: |
avx_extract_b_instruction: |
mov cl,1 |
jmp avx_extract_instruction |
avx_extract_w_instruction: |
mov cl,2 |
jmp avx_extract_instruction |
avx_extract_q_instruction: |
or [rex_prefix],8 |
mov cl,8 |
jmp avx_extract_instruction |
avx_extract_d_instruction: |
mov cl,4 |
avx_extract_instruction: |
mov [mmx_size],cl |
call setup_66_0f_3a |
or [vex_required],1 |
jmp extractps_instruction |
avx_insertps_instruction: |
or [vex_required],1 |
call take_avx_register |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je avx_extractps_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
mov al,[mmx_size] |
not al |
and [operand_size],al |
jnz invalid_operand_size |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_avx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
jmp mmx_imm8 |
avx_extractps_reg: |
lods byte [esi] |
call convert_register |
mov bl,al |
mov al,[mmx_size] |
cmp ah,al |
jb invalid_operand_size |
cmp ah,4 |
je avx_extractps_reg_size_ok |
cmp ah,8 |
jne invalid_operand_size |
cmp [code_type],64 |
jne invalid_operand |
cmp al,4 |
jae avx_extractps_reg_size_ok |
or [rex_prefix],8 |
avx_extractps_reg_size_ok: |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
mov [vex_register],al |
jmp insertps_xmmreg |
avx_pextrb_instruction: |
or [vex_required],1 |
jmp pextrb_instruction |
avx_pextrw_instruction: |
or [vex_required],1 |
jmp pextrw_instruction |
avx_pextrd_instruction: |
or [vex_required],1 |
jmp pextrd_instruction |
avx_pextrq_instruction: |
or [vex_required],1 |
jmp pextrq_instruction |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_avx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
cmp [supplemental_code],15h |
jne mmx_nomem_imm8 |
mov [extended_code],0C5h |
xchg bl,[postbyte_register] |
jmp mmx_nomem_imm8 |
avx_insertps_instruction: |
mov [immediate_size],1 |
or [operand_flags],10h |
mov [opcode_prefix],66h |
mov [supplemental_code],al |
mov al,3Ah |
mov cl,4 |
jmp avx_instruction |
avx_pinsrb_instruction: |
mov [mmx_size],1 |
or [vex_required],1 |
mov cl,1 |
jmp avx_pinsr_instruction_3a |
avx_pinsrw_instruction: |
mov [mmx_size],2 |
or [vex_required],1 |
mov cl,2 |
jmp avx_pinsr_instruction |
avx_pinsrd_instruction: |
mov [mmx_size],4 |
or [vex_required],1 |
mov cl,4 |
jmp avx_pinsr_instruction_3a |
avx_pinsrq_instruction: |
mov [mmx_size],8 |
or [vex_required],1 |
call operand_64bit |
mov cl,8 |
or [rex_prefix],8 |
avx_pinsr_instruction_3a: |
mov [supplemental_code],al |
mov al,3Ah |
873,6 → 2120,8 |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],al |
mov [mmx_size],cl |
or [vex_required],1 |
call take_avx_register |
cmp ah,16 |
jne invalid_operand_size |
883,162 → 2132,331 |
call take_avx_register |
mov [vex_register],al |
jmp pinsr_xmmreg |
avx_maskmovdqu_instruction: |
or [vex_required],1 |
jmp maskmovdqu_instruction |
avx_pmovmskb_instruction: |
or [vex_required],1 |
avx_cvtudq2pd_instruction: |
or [vex_required],8 |
avx_cvtdq2pd_instruction: |
mov [opcode_prefix],0F3h |
mov cl,4 |
jmp avx_cvt_d_instruction |
avx_cvtps2qq_instruction: |
or [operand_flags],8 |
avx_cvttps2qq_instruction: |
or [operand_flags],4 |
or [vex_required],8 |
mov [opcode_prefix],66h |
mov cl,4 |
jmp avx_cvt_d_instruction |
avx_cvtps2pd_instruction: |
or [operand_flags],4 |
mov cl,4 |
avx_cvt_d_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
or [vex_required],1 |
mov [broadcast_size],cl |
call take_avx_register |
mov [postbyte_register],al |
call take_avx512_mask |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
xor ecx,ecx |
xchg cl,[operand_size] |
mov al,cl |
shr al,1 |
mov [mmx_size],al |
lods byte [esi] |
call get_size_operator |
cmp al,'[' |
je avx_cvt_d_reg_mem |
cmp al,10h |
jne invalid_operand |
mov [operand_size],0 |
lods byte [esi] |
call convert_register |
cmp ah,4 |
je avx_pmovmskb_reg_size_ok |
cmp [code_type],64 |
call convert_avx_register |
cmp ah,[mmx_size] |
je avx_cvt_d_reg_reg_size_ok |
jb invalid_operand_size |
cmp ah,16 |
jne invalid_operand_size |
cmp ah,8 |
jnz invalid_operand_size |
avx_pmovmskb_reg_size_ok: |
mov [postbyte_register],al |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
avx_cvt_d_reg_reg_size_ok: |
mov bl,al |
mov [operand_size],cl |
call take_avx512_rounding |
jmp nomem_instruction_ready |
avx_pshufd_instruction: |
avx_cvt_d_reg_mem: |
call take_avx_mem |
jmp instruction_ready |
avx_cvtpd2dq_instruction: |
or [operand_flags],4+8 |
mov [opcode_prefix],0F2h |
jmp avx_cvt_q_instruction |
avx_cvtuqq2ps_instruction: |
mov [opcode_prefix],0F2h |
avx_cvtpd2udq_instruction: |
or [operand_flags],8 |
avx_cvttpd2udq_instruction: |
or [operand_flags],4 |
or [vex_required],8 |
jmp avx_cvt_q_instruction |
avx_cvtpd2ps_instruction: |
or [operand_flags],8 |
avx_cvttpd2dq_instruction: |
or [operand_flags],4 |
mov [opcode_prefix],66h |
avx_cvt_q_instruction: |
mov [broadcast_size],8 |
mov [base_code],0Fh |
mov [extended_code],al |
or [vex_required],1 |
mov [mmx_size],0 |
mov [opcode_prefix],al |
mov [base_code],0Fh |
mov [extended_code],70h |
or [rex_prefix],80h |
call take_avx_register |
mov [postbyte_register],al |
push eax |
call take_avx512_mask |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
xor al,al |
mov [operand_size],al |
mov [mmx_size],al |
call take_avx_rm |
jnc mmx_imm8 |
jnc avx_cvt_q_reg_mem |
mov bl,al |
jmp mmx_nomem_imm8 |
avx_pmovsxbw_instruction: |
mov [mmx_size],8 |
jmp avx_pmovsx_instruction |
avx_pmovsxbd_instruction: |
mov [mmx_size],4 |
jmp avx_pmovsx_instruction |
avx_pmovsxbq_instruction: |
mov [mmx_size],2 |
jmp avx_pmovsx_instruction |
avx_pmovsxwd_instruction: |
mov [mmx_size],8 |
jmp avx_pmovsx_instruction |
avx_pmovsxwq_instruction: |
mov [mmx_size],4 |
jmp avx_pmovsx_instruction |
avx_pmovsxdq_instruction: |
mov [mmx_size],8 |
avx_pmovsx_instruction: |
pop eax |
call avx_cvt_q_check_size |
call take_avx512_rounding |
jmp nomem_instruction_ready |
avx_cvt_q_reg_mem: |
pop eax |
call avx_cvt_q_check_size |
jmp instruction_ready |
avx_cvt_q_check_size: |
mov al,[operand_size] |
or al,al |
jz avx_cvt_q_size_not_specified |
shr al,1 |
cmp al,ah |
je avx_cvt_q_size_ok |
ja invalid_operand_size |
cmp ah,16 |
jne invalid_operand_size |
avx_cvt_q_size_ok: |
ret |
avx_cvt_q_size_not_specified: |
cmp ah,64 shr 1 |
jne recoverable_unknown_size |
mov [operand_size],64 |
ret |
avx_cvttps2udq_instruction: |
or [vex_required],8 |
or [operand_flags],2+4 |
mov cx,0400h |
jmp avx_instruction_with_broadcast |
avx_cvttps2dq_instruction: |
mov [opcode_prefix],0F3h |
or [operand_flags],2+4 |
mov cx,0400h |
jmp avx_instruction_with_broadcast |
avx_cvtph2ps_instruction: |
mov [opcode_prefix],66h |
mov [supplemental_code],al |
or [operand_flags],4 |
mov al,38h |
xor cl,cl |
jmp avx_cvt_d_instruction |
avx_cvtps2ph_instruction: |
call setup_66_0f_3a |
or [vex_required],1 |
call setup_66_0f_38 |
or [operand_flags],4 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je vcvtps2ph_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
call take_avx512_mask |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
shl [operand_size],1 |
call take_avx_register |
mov [postbyte_register],al |
shr ah,1 |
mov [mmx_size],ah |
jmp mmx_imm8 |
vcvtps2ph_reg: |
lods byte [esi] |
call convert_avx_register |
mov bl,al |
call take_avx512_mask |
xor cl,cl |
xchg cl,[operand_size] |
shl cl,1 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
xor al,al |
xchg al,[operand_size] |
push eax |
call take_avx_register |
mov [postbyte_register],al |
or cl,cl |
jz vcvtps2ph_reg_size_ok |
cmp cl,ah |
je vcvtps2ph_reg_size_ok |
jb invalid_operand_size |
cmp ah,16 |
jne invalid_operand_size |
vcvtps2ph_reg_size_ok: |
call take_avx512_rounding |
jmp mmx_nomem_imm8 |
avx_cvtsd2usi_instruction: |
or [operand_flags],8 |
avx_cvttsd2usi_instruction: |
or [vex_required],8 |
jmp avx_cvttsd2si_instruction |
avx_cvtsd2si_instruction: |
or [operand_flags],8 |
avx_cvttsd2si_instruction: |
mov ah,0F2h |
mov cl,8 |
jmp avx_cvt_2si_instruction |
avx_cvtss2usi_instruction: |
or [operand_flags],8 |
avx_cvttss2usi_instruction: |
or [vex_required],8 |
jmp avx_cvttss2si_instruction |
avx_cvtss2si_instruction: |
or [operand_flags],8 |
avx_cvttss2si_instruction: |
mov ah,0F3h |
mov cl,4 |
avx_cvt_2si_instruction: |
or [operand_flags],2+4 |
mov [mmx_size],cl |
mov [broadcast_size],0 |
mov [opcode_prefix],ah |
mov [base_code],0Fh |
mov [extended_code],al |
or [vex_required],1 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je avx_pmovsx_xmmreg_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
pop eax |
cmp al,32 |
jb avx_pmovsx_size_check |
shl [mmx_size],1 |
avx_pmovsx_size_check: |
xchg al,[operand_size] |
test al,al |
jz instruction_ready |
cmp al,[mmx_size] |
lods byte [esi] |
call convert_register |
mov [postbyte_register],al |
mov [operand_size],0 |
cmp ah,4 |
je avx_cvt_2si_reg |
cmp ah,8 |
jne invalid_operand_size |
jmp instruction_ready |
avx_pmovsx_xmmreg_reg: |
call operand_64bit |
avx_cvt_2si_reg: |
lods byte [esi] |
call convert_xmm_register |
cmp al,',' |
jne invalid_operand |
call take_avx_rm |
jnc instruction_ready |
mov bl,al |
pop eax |
mov [operand_size],al |
call take_avx512_rounding |
jmp nomem_instruction_ready |
avx_permil_instruction: |
call setup_66_0f_3a |
avx_cvtusi2sd_instruction: |
or [vex_required],8 |
avx_cvtsi2sd_instruction: |
mov ah,0F2h |
mov cl,8 |
jmp avx_cvtsi_instruction |
avx_cvtusi2ss_instruction: |
or [vex_required],8 |
avx_cvtsi2ss_instruction: |
mov ah,0F3h |
mov cl,4 |
avx_cvtsi_instruction: |
or [operand_flags],2+4+8 |
mov [mmx_size],cl |
mov [opcode_prefix],ah |
mov [base_code],0Fh |
mov [extended_code],al |
or [vex_required],1 |
call take_avx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
mov [vex_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
mov [operand_size],0 |
lods byte [esi] |
call get_size_operator |
cmp al,'[' |
je avx_permil_reg_mem |
je avx_cvtsi_reg_reg_mem |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
mov bl,al |
cmp ah,4 |
je avx_cvtsi_reg_reg_reg32 |
cmp ah,8 |
jne invalid_operand_size |
call operand_64bit |
avx_cvtsi_rounding: |
call take_avx512_rounding |
jmp nomem_instruction_ready |
avx_cvtsi_reg_reg_reg32: |
cmp [mmx_size],8 |
jne avx_cvtsi_rounding |
jmp nomem_instruction_ready |
avx_cvtsi_reg_reg_mem: |
call get_address |
mov al,[operand_size] |
mov [mmx_size],al |
or al,al |
jz single_mem_nosize |
cmp al,4 |
je instruction_ready |
cmp al,8 |
jne invalid_operand_size |
call operand_64bit |
jmp instruction_ready |
avx_maskmov_w1_instruction: |
or [rex_prefix],8 |
avx_maskmov_instruction: |
call setup_66_0f_38 |
mov [mmx_size],0 |
or [vex_required],2 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne avx_maskmov_mem |
lods byte [esi] |
call convert_avx_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
mov [vex_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
push esi |
xor cl,cl |
xchg cl,[operand_size] |
lods byte [esi] |
call get_size_operator |
xchg cl,[operand_size] |
pop esi |
cmp al,'[' |
je avx_permil_reg_reg_mem |
cmp al,10h |
jne avx_permil_reg_reg_imm8 |
call take_avx_register |
mov bl,al |
mov [extended_code],38h |
add [supplemental_code],8 |
jmp nomem_instruction_ready |
avx_permil_reg_reg_mem: |
lods byte [esi] |
call get_size_operator |
jne invalid_operand |
call get_address |
mov [extended_code],38h |
add [supplemental_code],8 |
jmp instruction_ready |
avx_permil_reg_reg_imm8: |
dec esi |
xor bl,bl |
xchg bl,[vex_register] |
jmp mmx_nomem_imm8 |
avx_permil_reg_mem: |
avx_maskmov_mem: |
cmp al,'[' |
jne invalid_operand |
call get_address |
jmp mmx_imm8 |
avx_bit_shift_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],al |
or [vex_required],1 |
call take_avx_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
1047,107 → 2465,231 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
push esi |
xor cl,cl |
xchg cl,[operand_size] |
call take_avx_register |
mov [postbyte_register],al |
add [supplemental_code],2 |
jmp instruction_ready |
avx_movmskpd_instruction: |
mov [opcode_prefix],66h |
avx_movmskps_instruction: |
mov [base_code],0Fh |
mov [extended_code],50h |
or [vex_required],2 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je avx_bit_shift_regs_reg |
pop esi |
cmp al,'[' |
je avx_bit_shift_regs_mem |
xchg cl,[operand_size] |
dec esi |
mov bl,[extended_code] |
mov al,bl |
shr bl,4 |
and al,1111b |
add al,70h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
mov [postbyte_register],al |
cmp ah,4 |
je avx_movmskps_reg_ok |
cmp ah,8 |
jne invalid_operand_size |
cmp [code_type],64 |
jne invalid_operand |
avx_movmskps_reg_ok: |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
mov bl,al |
jmp nomem_instruction_ready |
avx_maskmovdqu_instruction: |
or [vex_required],2 |
jmp maskmovdqu_instruction |
avx_pmovmskb_instruction: |
or [vex_required],2 |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],al |
sub bl,0Ch |
shl bl,1 |
xchg bl,[postbyte_register] |
xchg bl,[vex_register] |
jmp mmx_nomem_imm8 |
avx_bit_shift_regs_reg: |
pop eax |
lods byte [esi] |
call convert_xmm_register |
xchg cl,[operand_size] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
cmp ah,4 |
je avx_pmovmskb_reg_size_ok |
cmp [code_type],64 |
jne invalid_operand_size |
cmp ah,8 |
jnz invalid_operand_size |
avx_pmovmskb_reg_size_ok: |
mov [postbyte_register],al |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
mov bl,al |
jmp nomem_instruction_ready |
avx_bit_shift_regs_mem: |
gather_pd_instruction: |
or [rex_prefix],8 |
gather_ps_instruction: |
call setup_66_0f_38 |
or [vex_required],4 |
or [operand_flags],20h |
call take_avx_register |
mov [postbyte_register],al |
call take_avx512_mask |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
xor cl,cl |
xchg cl,[operand_size] |
push ecx |
lods byte [esi] |
call get_size_operator |
cmp al,'[' |
jne invalid_argument |
call get_address |
pop eax |
xchg al,[operand_size] |
gather_mem_size_check: |
mov ah,4 |
test [rex_prefix],8 |
jz gather_elements_size_ok |
add ah,ah |
gather_elements_size_ok: |
mov [mmx_size],ah |
test al,al |
jz instruction_ready |
cmp al,16 |
jz gather_mem_size_ok |
cmp al,ah |
jne invalid_operand_size |
jmp instruction_ready |
avx_pslldq_instruction: |
mov [postbyte_register],al |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],73h |
or [vex_required],1 |
gather_mem_size_ok: |
cmp byte [esi],',' |
je gather_reg_mem_reg |
test [vex_required],20h |
jz invalid_operand |
mov ah,[operand_size] |
mov al,80h |
jmp gather_arguments_ok |
gather_reg_mem_reg: |
or [vex_required],2 |
inc esi |
call take_avx_register |
gather_arguments_ok: |
mov [vex_register],al |
cmp al,[postbyte_register] |
je disallowed_combination_of_registers |
mov al,bl |
and al,11111b |
cmp al,[postbyte_register] |
je disallowed_combination_of_registers |
cmp al,[vex_register] |
je disallowed_combination_of_registers |
mov al,bl |
shr al,5 |
cmp al,0Ch shr 1 |
je gather_vr128 |
mov ah,32 |
cmp al,6 shr 1 |
jne gather_regular |
add ah,ah |
gather_regular: |
mov al,[rex_prefix] |
shr al,3 |
xor al,[supplemental_code] |
test al,1 |
jz gather_uniform |
test [supplemental_code],1 |
jz gather_double |
mov al,ah |
xchg al,[operand_size] |
add al,al |
cmp al,ah |
jne invalid_operand_size |
jmp instruction_ready |
gather_double: |
add ah,ah |
gather_uniform: |
cmp ah,[operand_size] |
jne invalid_operand_size |
jmp instruction_ready |
gather_vr128: |
cmp ah,16 |
je instruction_ready |
cmp ah,32 |
jne invalid_operand_size |
test [supplemental_code],1 |
jnz invalid_operand_size |
test [rex_prefix],8 |
jz invalid_operand_size |
jmp instruction_ready |
scatter_pd_instruction: |
or [rex_prefix],8 |
scatter_ps_instruction: |
call setup_66_0f_38 |
or [vex_required],4+8 |
or [operand_flags],20h |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
mov bl,al |
jmp mmx_nomem_imm8 |
vzeroall_instruction: |
mov [operand_size],32 |
vzeroupper_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
or [vex_required],1 |
call store_instruction_code |
jmp instruction_assembled |
vldmxcsr_instruction: |
or [vex_required],1 |
jmp fxsave_instruction |
vcvtph2ps_instruction: |
mov [opcode_prefix],66h |
mov [supplemental_code],al |
mov al,38h |
jmp avx_cvtps2pd_instruction |
vcvtps2ph_instruction: |
call setup_66_0f_3a |
or [vex_required],1 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je vcvtps2ph_reg |
cmp al,'[' |
jne invalid_operand |
jne invalid_argument |
call get_address |
call take_avx512_mask |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
shl [operand_size],1 |
xor al,al |
xchg al,[operand_size] |
push eax |
call take_avx_register |
mov [postbyte_register],al |
jmp mmx_imm8 |
vcvtps2ph_reg: |
pop eax |
jmp gather_mem_size_check |
gatherpf_qpd_instruction: |
mov ah,0C7h |
jmp gatherpf_pd_instruction |
gatherpf_dpd_instruction: |
mov ah,0C6h |
gatherpf_pd_instruction: |
or [rex_prefix],8 |
mov cl,8 |
jmp gatherpf_instruction |
gatherpf_qps_instruction: |
mov ah,0C7h |
jmp gatherpf_ps_instruction |
gatherpf_dps_instruction: |
mov ah,0C6h |
gatherpf_ps_instruction: |
mov cl,4 |
gatherpf_instruction: |
mov [mmx_size],cl |
mov [postbyte_register],al |
mov al,ah |
call setup_66_0f_38 |
or [vex_required],4+8 |
or [operand_flags],20h |
lods byte [esi] |
call convert_xmm_register |
mov bl,al |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
call get_size_operator |
cmp al,'[' |
jne invalid_argument |
call get_address |
call take_avx512_mask |
mov ah,[mmx_size] |
mov al,[operand_size] |
or al,al |
jz gatherpf_mem_size_ok |
cmp al,ah |
jne invalid_operand_size |
gatherpf_mem_size_ok: |
mov [operand_size],64 |
mov al,6 shr 1 |
cmp ah,4 |
je gatherpf_check_vsib |
cmp [supplemental_code],0C6h |
jne gatherpf_check_vsib |
mov al,0Eh shr 1 |
gatherpf_check_vsib: |
mov ah,bl |
shr ah,5 |
cmp al,ah |
jne invalid_operand |
call take_avx_register |
mov [postbyte_register],al |
jmp mmx_nomem_imm8 |
jmp instruction_ready |
bmi_instruction: |
mov [base_code],0Fh |
1155,7 → 2697,7 |
mov [supplemental_code],0F3h |
mov [postbyte_register],al |
bmi_reg: |
or [vex_required],1 |
or [vex_required],2 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
1201,7 → 2743,7 |
mov [base_code],0Fh |
mov [extended_code],38h |
mov [supplemental_code],al |
or [vex_required],1 |
or [vex_required],2 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
1225,7 → 2767,7 |
mov [base_code],0Fh |
mov [extended_code],38h |
mov [supplemental_code],al |
or [vex_required],1 |
or [vex_required],2 |
call get_reg_mem |
jc bzhi_reg_reg |
call get_vex_source_register |
1257,7 → 2799,7 |
mov [base_code],0Fh |
mov [extended_code],38h |
mov [supplemental_code],al |
or [vex_required],1 |
or [vex_required],2 |
call get_reg_mem |
jc bextr_reg_reg |
call get_vex_source_register |
1300,7 → 2842,7 |
mov [base_code],0Fh |
mov [extended_code],3Ah |
mov [supplemental_code],al |
or [vex_required],1 |
or [vex_required],2 |
call get_reg_mem |
jc rorx_reg_reg |
call operand_32or64 |
1309,49 → 2851,101 |
call operand_32or64 |
jmp mmx_nomem_imm8 |
fma_instruction_pd: |
or [rex_prefix],8 |
fma_instruction_ps: |
mov [mmx_size],0 |
jmp avx_instruction_38_setup |
fma_instruction_sd: |
or [rex_prefix],8 |
mov [mmx_size],8 |
jmp avx_instruction_38_setup |
fma_instruction_ss: |
mov [mmx_size],4 |
jmp avx_instruction_38_setup |
tbm_instruction: |
mov [xop_opcode_map],9 |
mov ah,al |
shr ah,4 |
and al,111b |
mov [base_code],ah |
mov [postbyte_register],al |
jmp bmi_reg |
fma4_instruction_p: |
mov [mmx_size],0 |
jmp fma4_instruction_setup |
fma4_instruction_sd: |
mov [mmx_size],8 |
jmp fma4_instruction_setup |
fma4_instruction_ss: |
mov [mmx_size],4 |
fma4_instruction_setup: |
mov [immediate_size],-2 |
mov byte [value],0 |
jmp avx_instruction_3a_setup |
llwpcb_instruction: |
or [vex_required],2 |
mov [xop_opcode_map],9 |
mov [base_code],12h |
mov [postbyte_register],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
mov bl,al |
call operand_32or64 |
jmp nomem_instruction_ready |
lwpins_instruction: |
or [vex_required],2 |
mov [xop_opcode_map],0Ah |
mov [base_code],12h |
mov [vex_register],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
xor cl,cl |
xchg cl,[operand_size] |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je lwpins_reg_reg |
cmp al,'[' |
jne invalid_argument |
push ecx |
call get_address |
pop eax |
xchg al,[operand_size] |
test al,al |
jz lwpins_reg_mem_size_ok |
cmp al,4 |
jne invalid_operand_size |
lwpins_reg_mem_size_ok: |
call prepare_lwpins |
jmp store_instruction_with_imm32 |
lwpins_reg_reg: |
lods byte [esi] |
call convert_register |
cmp ah,4 |
jne invalid_operand_size |
mov [operand_size],cl |
mov bl,al |
call prepare_lwpins |
jmp store_nomem_instruction_with_imm32 |
prepare_lwpins: |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_imm32 |
call operand_32or64 |
mov al,[vex_register] |
xchg al,[postbyte_register] |
mov [vex_register],al |
ret |
xop_single_source_sd_instruction: |
or [vex_required],2 |
or [operand_flags],2 |
mov [mmx_size],8 |
jmp xop_instruction_9 |
xop_single_source_ss_instruction: |
or [vex_required],2 |
or [operand_flags],2 |
mov [mmx_size],4 |
jmp xop_instruction_9 |
xop_single_source_instruction: |
or [vex_required],2 |
or [operand_flags],2 |
mov [mmx_size],0 |
xop_instruction_9: |
mov [base_code],al |
mov [xop_opcode_map],9 |
jmp avx_common |
jmp avx_xop_common |
xop_single_source_128bit_instruction: |
or [vex_required],2 |
or [operand_flags],2 |
mov [mmx_size],16 |
jmp xop_instruction_9 |
xop_triple_source_128bit_instruction: |
1366,7 → 2960,7 |
xop_instruction_8: |
mov [base_code],al |
mov [xop_opcode_map],8 |
jmp avx_common |
jmp avx_xop_common |
xop_pcom_b_instruction: |
mov ah,0CCh |
jmp xop_pcom_instruction |
1392,21 → 2986,22 |
mov ah,0EDh |
xop_pcom_instruction: |
mov byte [value],al |
mov [immediate_size],-4 |
mov [mmx_size],16 |
mov [base_code],ah |
mov [xop_opcode_map],8 |
jmp avx_common |
jmp avx_xop_common |
vpcmov_instruction: |
or [vex_required],1 |
or [vex_required],2 |
mov [immediate_size],-2 |
mov byte [value],0 |
mov [mmx_size],0 |
mov [base_code],al |
mov [xop_opcode_map],8 |
jmp avx_common |
jmp avx_xop_common |
xop_shift_instruction: |
mov [base_code],al |
or [vex_required],1 |
or [vex_required],2 |
mov [xop_opcode_map],9 |
call take_avx_register |
cmp ah,16 |
1482,177 → 3077,10 |
dec esi |
jmp mmx_imm8 |
vpermil_2pd_instruction: |
mov [immediate_size],-2 |
mov byte [value],al |
mov al,49h |
jmp vpermil2_instruction_setup |
vpermil_2ps_instruction: |
mov [immediate_size],-2 |
mov byte [value],al |
mov al,48h |
jmp vpermil2_instruction_setup |
vpermil2_instruction: |
mov [immediate_size],-3 |
mov byte [value],0 |
vpermil2_instruction_setup: |
mov [base_code],0Fh |
mov [supplemental_code],al |
mov al,3Ah |
mov [mmx_size],0 |
jmp avx_instruction |
set_evex_mode: |
mov [evex_mode],al |
jmp instruction_assembled |
tbm_instruction: |
mov [xop_opcode_map],9 |
mov ah,al |
shr ah,4 |
and al,111b |
mov [base_code],ah |
mov [postbyte_register],al |
jmp bmi_reg |
llwpcb_instruction: |
or [vex_required],1 |
mov [xop_opcode_map],9 |
mov [base_code],12h |
mov [postbyte_register],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
mov bl,al |
call operand_32or64 |
jmp nomem_instruction_ready |
lwpins_instruction: |
or [vex_required],1 |
mov [xop_opcode_map],0Ah |
mov [base_code],12h |
mov [vex_register],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
xor cl,cl |
xchg cl,[operand_size] |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je lwpins_reg_reg |
cmp al,'[' |
jne invalid_argument |
push ecx |
call get_address |
pop eax |
xchg al,[operand_size] |
test al,al |
jz lwpins_reg_mem_size_ok |
cmp al,4 |
jne invalid_operand_size |
lwpins_reg_mem_size_ok: |
call prepare_lwpins |
jmp store_instruction_with_imm32 |
lwpins_reg_reg: |
lods byte [esi] |
call convert_register |
cmp ah,4 |
jne invalid_operand_size |
mov [operand_size],cl |
mov bl,al |
call prepare_lwpins |
jmp store_nomem_instruction_with_imm32 |
prepare_lwpins: |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_imm32 |
call operand_32or64 |
mov al,[vex_register] |
xchg al,[postbyte_register] |
mov [vex_register],al |
ret |
gather_instruction_pd: |
or [rex_prefix],8 |
gather_instruction_ps: |
call setup_66_0f_38 |
or [vex_required],4 |
call take_avx_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
xor cl,cl |
xchg cl,[operand_size] |
push ecx |
lods byte [esi] |
call get_size_operator |
cmp al,'[' |
jne invalid_argument |
call get_address |
pop eax |
xchg al,[operand_size] |
test al,al |
jz gather_elements_size_ok |
test [rex_prefix],8 |
jnz gather_elements_64bit |
cmp al,4 |
jne invalid_operand_size |
jmp gather_elements_size_ok |
gather_elements_64bit: |
cmp al,8 |
jne invalid_operand_size |
gather_elements_size_ok: |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_avx_register |
mov [vex_register],al |
cmp al,[postbyte_register] |
je disallowed_combination_of_registers |
mov al,bl |
and al,1111b |
cmp al,[postbyte_register] |
je disallowed_combination_of_registers |
cmp al,[vex_register] |
je disallowed_combination_of_registers |
mov al,bl |
shr al,4 |
cmp al,0Ch |
je gather_vr_128bit |
mov al,[rex_prefix] |
shr al,3 |
xor al,[supplemental_code] |
test al,1 |
jz gather_256bit |
test [supplemental_code],1 |
jz invalid_operand_size |
mov al,32 |
xchg al,[operand_size] |
cmp al,16 |
jne invalid_operand_size |
jmp instruction_ready |
gather_256bit: |
cmp ah,32 |
jne invalid_operand_size |
jmp instruction_ready |
gather_vr_128bit: |
cmp ah,16 |
je instruction_ready |
test [supplemental_code],1 |
jnz invalid_operand_size |
test [rex_prefix],8 |
jz invalid_operand_size |
jmp instruction_ready |
take_avx_register: |
lods byte [esi] |
call get_size_operator |
1661,12 → 3089,19 |
lods byte [esi] |
convert_avx_register: |
mov ah,al |
and al,0Fh |
and ah,0F0h |
sub ah,0B0h |
jbe invalid_operand |
cmp ah,32 |
ja invalid_operand |
and al,1Fh |
and ah,0E0h |
sub ah,60h |
jb invalid_operand |
jz avx512_register_size |
sub ah,60h |
jb invalid_operand |
jnz avx_register_size_ok |
mov ah,16 |
jmp avx_register_size_ok |
avx512_register_size: |
mov ah,64 |
avx_register_size_ok: |
cmp al,8 |
jb match_register_size |
cmp [code_type],64 |
1673,9 → 3108,39 |
jne invalid_operand |
jmp match_register_size |
store_vex_instruction_code: |
test [rex_prefix],10h |
jnz invalid_operand |
test [vex_required],0F8h |
jnz store_evex_instruction_code |
test [vex_register],10000b |
jnz store_evex_instruction_code |
cmp [operand_size],64 |
je store_evex_instruction_code |
mov al,[base_code] |
cmp al,0Fh |
jne store_xop_instruction_code |
test [vex_required],2 |
jnz prepare_vex |
cmp [evex_mode],0 |
je prepare_vex |
cmp [displacement_compression],1 |
jne prepare_vex |
cmp edx,80h |
jb prepare_vex |
cmp edx,-80h |
jae prepare_vex |
mov al,bl |
or al,bh |
shr al,4 |
cmp al,2 |
je prepare_vex |
call compress_displacement |
cmp [displacement_compression],2 |
ja prepare_evex |
jb prepare_vex |
dec [displacement_compression] |
mov edx,[uncompressed_displacement] |
prepare_vex: |
mov ah,[extended_code] |
cmp ah,38h |
je store_vex_0f38_instruction_code |
1699,9 → 3164,9 |
ret |
get_vex_lpp_bits: |
cmp [operand_size],32 |
jne vex_l_bit_ok |
jne get_vex_pp_bits |
or al,100b |
vex_l_bit_ok: |
get_vex_pp_bits: |
mov ah,[opcode_prefix] |
cmp ah,66h |
je vex_66 |
1785,3 → 3250,106 |
mov [edi+2],al |
add edi,4 |
ret |
store_evex_instruction_code: |
test [vex_required],2 |
jnz invalid_operand |
cmp [base_code],0Fh |
jne invalid_operand |
cmp [displacement_compression],1 |
jne prepare_evex |
call compress_displacement |
prepare_evex: |
mov ah,[extended_code] |
cmp ah,38h |
je store_evex_0f38_instruction_code |
cmp ah,3Ah |
je store_evex_0f3a_instruction_code |
mov al,11110001b |
make_evex: |
mov [edi+4],ah |
mov byte [edi],62h |
mov ah,[rex_prefix] |
shl ah,5 |
xor al,ah |
mov ah,[vex_required] |
and ah,10h |
xor al,ah |
mov [edi+1],al |
call check_vex |
mov al,[vex_register] |
not al |
and al,1111b |
shl al,3 |
mov ah,[rex_prefix] |
shl ah,4 |
or ah,[rex_prefix] |
and ah,80h |
or al,ah |
or al,100b |
call get_vex_pp_bits |
mov [edi+2],al |
mov al,[vex_register] |
not al |
shr al,1 |
and al,1000b |
test [vex_required],80h |
jne evex_rounding |
mov ah,[operand_size] |
cmp ah,16 |
jbe evex_l_ok |
or al,ah |
jmp evex_l_ok |
evex_rounding: |
mov ah,[rounding_mode] |
shl ah,5 |
or al,ah |
evex_l_ok: |
test [vex_required],20h |
jz evex_zaaa_ok |
or al,[mask_register] |
evex_zaaa_ok: |
test [vex_required],40h |
jz evex_b_ok |
or al,10h |
evex_b_ok: |
mov [edi+3],al |
add edi,5 |
ret |
store_evex_0f38_instruction_code: |
mov al,11110010b |
mov ah,[supplemental_code] |
jmp make_evex |
store_evex_0f3a_instruction_code: |
mov al,11110011b |
mov ah,[supplemental_code] |
jmp make_evex |
compress_displacement: |
mov ebp,ecx |
mov [uncompressed_displacement],edx |
or edx,edx |
jz displacement_compressed |
xor ecx,ecx |
mov cl,[mmx_size] |
test cl,cl |
jnz calculate_displacement_scale |
mov cl,[operand_size] |
calculate_displacement_scale: |
bsf ecx,ecx |
jz displacement_compression_ok |
xor eax,eax |
shrd eax,edx,cl |
jnz displacement_not_compressed |
sar edx,cl |
cmp edx,80h |
jb displacement_compressed |
cmp edx,-80h |
jnb displacement_compressed |
shl edx,cl |
displacement_not_compressed: |
inc [displacement_compression] |
jmp displacement_compression_ok |
displacement_compressed: |
add [displacement_compression],2 |
displacement_compression_ok: |
mov ecx,ebp |
ret |
/programs/develop/fasm/trunk/errors.inc |
---|
1,6 → 1,6 |
; flat assembler core |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
out_of_memory: |
24,6 → 24,9 |
jmp general_error |
format_limitations_exceeded: |
push _format_limitations_exceeded |
jmp general_error |
invalid_definition: |
push _invalid_definition |
general_error: |
cmp [symbols_file],0 |
je fatal_error |
/programs/develop/fasm/trunk/exprcalc.inc |
---|
1,7 → 1,6 |
; flat assembler core |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
calculate_expression: |
12,6 → 11,10 |
cmp byte [esi],'.' |
je convert_fp |
calculation_loop: |
mov eax,[tagged_blocks] |
sub eax,0Ch |
cmp eax,edi |
jbe out_of_memory |
lods byte [esi] |
cmp al,1 |
je get_byte_number |
36,12 → 39,16 |
sub edi,14h |
mov ebx,edi |
sub ebx,14h |
cmp al,0E0h |
cmp al,0F0h |
je calculate_rva |
cmp al,0E1h |
cmp al,0F1h |
je calculate_plt |
cmp al,0D0h |
je calculate_not |
cmp al,0E0h |
je calculate_bsf |
cmp al,0E1h |
je calculate_bsr |
cmp al,083h |
je calculate_neg |
mov dx,[ebx+8] |
197,14 → 204,8 |
mov al,[ebx+10] |
or al,al |
jz calculation_loop |
cmp [size_override],-1 |
je calculation_loop |
cmp [size_override],0 |
je check_size |
cmp [operand_size],0 |
jne calculation_loop |
mov [operand_size],al |
jmp calculation_loop |
test [operand_flags],1 |
jnz calculation_loop |
check_size: |
xchg [operand_size],al |
or al,al |
623,77 → 624,7 |
xor [ebx],eax |
xor [ebx+4],edx |
xor [ebx+13],cl |
jz calculation_loop |
or cl,cl |
jz xor_size_check |
xor eax,[ebx] |
xor edx,[ebx+4] |
xor_size_check: |
mov cl,[value_size] |
cmp cl,1 |
je xor_byte_result |
cmp cl,2 |
je xor_word_result |
cmp cl,4 |
je xor_dword_result |
cmp cl,6 |
je xor_pword_result |
cmp cl,8 |
jne calculation_loop |
xor edx,[ebx+4] |
js xor_result_truncated |
jmp calculation_loop |
xor_pword_result: |
test edx,0FFFF0000h |
jnz calculation_loop |
cmp word [ebx+6],-1 |
jne calculation_loop |
xor dx,[ebx+4] |
jns calculation_loop |
not word [ebx+6] |
jmp xor_result_truncated |
xor_dword_result: |
test edx,edx |
jnz calculation_loop |
cmp dword [ebx+4],-1 |
jne calculation_loop |
xor eax,[ebx] |
jns calculation_loop |
not dword [ebx+4] |
jmp xor_result_truncated |
xor_word_result: |
test edx,edx |
jnz calculation_loop |
test eax,0FFFF0000h |
jnz calculation_loop |
cmp dword [ebx+4],-1 |
jne calculation_loop |
cmp word [ebx+2],-1 |
jne calculation_loop |
xor ax,[ebx] |
jns calculation_loop |
not dword [ebx+4] |
not word [ebx+2] |
jmp xor_result_truncated |
xor_byte_result: |
test edx,edx |
jnz calculation_loop |
test eax,0FFFFFF00h |
jnz calculation_loop |
cmp dword [ebx+4],-1 |
jne calculation_loop |
cmp word [ebx+2],-1 |
jne calculation_loop |
cmp byte [ebx+1],-1 |
jne calculation_loop |
xor al,[ebx] |
jns calculation_loop |
not dword [ebx+4] |
not word [ebx+2] |
not byte [ebx+1] |
xor_result_truncated: |
mov byte [ebx+13],0 |
jmp calculation_loop |
shr_negative: |
mov byte [edi+13],0 |
not dword [edi] |
761,25 → 692,6 |
calculate_shr: |
cmp byte [edi+13],0 |
jne shr_negative |
cmp byte [ebx+13],0 |
je do_shr |
mov al,[value_size] |
cmp al,1 |
je shr_negative_byte |
cmp al,2 |
je shr_negative_word |
cmp al,4 |
je shr_negative_dword |
cmp al,6 |
je shr_negative_pword |
cmp al,8 |
jne do_shr |
shr_negative_qword: |
test byte [ebx+7],80h |
jz do_shr |
shr_truncated: |
mov byte [ebx+13],0 |
do_shr: |
mov edx,[ebx+4] |
mov eax,[ebx] |
cmp dword [edi+4],0 |
809,43 → 721,6 |
mov dword [ebx],eax |
mov dword [ebx+4],eax |
jmp calculation_loop |
shr_negative_byte: |
cmp dword [ebx+4],-1 |
jne do_shr |
cmp word [ebx+2],-1 |
jne do_shr |
cmp byte [ebx+1],-1 |
jne do_shr |
test byte [ebx],80h |
jz do_shr |
not dword [ebx+4] |
not word [ebx+2] |
not byte [ebx+1] |
jmp shr_truncated |
shr_negative_word: |
cmp dword [ebx+4],-1 |
jne do_shr |
cmp word [ebx+2],-1 |
jne do_shr |
test byte [ebx+1],80h |
jz do_shr |
not dword [ebx+4] |
not word [ebx+2] |
jmp shr_truncated |
shr_negative_dword: |
cmp dword [ebx+4],-1 |
jne do_shr |
test byte [ebx+3],80h |
jz do_shr |
not dword [ebx+4] |
jmp shr_truncated |
shr_negative_pword: |
cmp word [ebx+6],-1 |
jne do_shr |
test byte [ebx+5],80h |
jz do_shr |
not word [ebx+6] |
jmp shr_truncated |
calculate_not: |
cmp word [edi+8],0 |
jne invalid_expression |
853,56 → 728,53 |
je not_ok |
call recoverable_misuse |
not_ok: |
mov al,[value_size] |
cmp al,1 |
je not_byte |
cmp al,2 |
je not_word |
cmp al,4 |
je not_dword |
cmp al,6 |
je not_pword |
cmp al,8 |
je not_qword |
not dword [edi] |
not dword [edi+4] |
not byte [edi+13] |
add edi,14h |
jmp calculation_loop |
not_qword: |
not dword [edi] |
not dword [edi+4] |
finish_not: |
mov byte [edi+13],0 |
calculate_bsf: |
cmp word [edi+8],0 |
jne invalid_expression |
cmp byte [edi+12],0 |
je bsf_ok |
call recoverable_misuse |
bsf_ok: |
xor ecx,ecx |
bsf eax,[edi] |
jnz finish_bs |
mov ecx,32 |
bsf eax,[edi+4] |
jnz finish_bs |
cmp byte [edi+13],0 |
jne finish_bs |
bs_overflow: |
call recoverable_overflow |
add edi,14h |
jmp calculation_loop |
not_byte: |
cmp dword [edi+4],0 |
jne not_qword |
cmp word [edi+2],0 |
jne not_qword |
cmp byte [edi+1],0 |
jne not_qword |
not byte [edi] |
jmp finish_not |
not_word: |
cmp dword [edi+4],0 |
jne not_qword |
cmp word [edi+2],0 |
jne not_qword |
not word [edi] |
jmp finish_not |
not_dword: |
cmp dword [edi+4],0 |
jne not_qword |
not dword [edi] |
jmp finish_not |
not_pword: |
cmp word [edi+6],0 |
jne not_qword |
not word [edi+4] |
not dword [edi] |
jmp finish_not |
calculate_bsr: |
cmp word [edi+8],0 |
jne invalid_expression |
cmp byte [edi+12],0 |
je bsr_ok |
call recoverable_misuse |
bsr_ok: |
cmp byte [edi+13],0 |
jne bs_overflow |
mov ecx,32 |
bsr eax,[edi+4] |
jnz finish_bs |
xor ecx,ecx |
bsr eax,[edi] |
jz bs_overflow |
finish_bs: |
add eax,ecx |
xor edx,edx |
mov [edi],eax |
mov [edi+4],edx |
mov [edi+13],dl |
add edi,14h |
jmp calculation_loop |
calculate_neg: |
cmp byte [edi+8],0 |
je neg_first_register_ok |
1158,7 → 1030,8 |
cmp al,4 |
je convert_fp_dword |
test al,not 8 |
jnz invalid_value |
jz convert_fp_qword |
call recoverable_misuse |
convert_fp_qword: |
xor eax,eax |
xor edx,edx |
1194,7 → 1067,7 |
cmp cx,52 |
ja value_out_of_range |
cmp cx,32 |
jbe fp_qword_small_shift |
jb fp_qword_small_shift |
sub cx,32 |
mov eax,edx |
xor edx,edx |
1338,7 → 1211,7 |
get_byte_value: |
mov [value_size],1 |
mov [size_override],-1 |
or [operand_flags],1 |
call calculate_value |
or al,al |
jz check_byte_value |
1350,7 → 1223,7 |
je byte_positive |
cmp edx,-1 |
jne range_exceeded |
cmp eax,-80h |
cmp eax,-100h |
jb range_exceeded |
ret |
byte_positive: |
1382,7 → 1255,7 |
ret |
get_word_value: |
mov [value_size],2 |
mov [size_override],-1 |
or [operand_flags],1 |
call calculate_value |
cmp al,2 |
jb check_word_value |
1394,7 → 1267,7 |
je word_positive |
cmp edx,-1 |
jne range_exceeded |
cmp eax,-8000h |
cmp eax,-10000h |
jb range_exceeded |
ret |
word_positive: |
1405,7 → 1278,7 |
ret |
get_dword_value: |
mov [value_size],4 |
mov [size_override],-1 |
or [operand_flags],1 |
call calculate_value |
cmp al,4 |
jne check_dword_value |
1426,8 → 1299,6 |
je dword_positive |
cmp edx,-1 |
jne range_exceeded |
bt eax,31 |
jnc range_exceeded |
ret |
dword_positive: |
test edx,edx |
1435,7 → 1306,7 |
ret |
get_pword_value: |
mov [value_size],6 |
mov [size_override],-1 |
or [operand_flags],1 |
call calculate_value |
cmp al,4 |
jne check_pword_value |
1445,7 → 1316,7 |
mov edx,[edi+4] |
cmp byte [edi+13],0 |
je pword_positive |
cmp edx,-8000h |
cmp edx,-10000h |
jb range_exceeded |
ret |
pword_positive: |
1454,20 → 1325,15 |
ret |
get_qword_value: |
mov [value_size],8 |
mov [size_override],-1 |
or [operand_flags],1 |
call calculate_value |
check_qword_value: |
mov eax,[edi] |
mov edx,[edi+4] |
cmp byte [edi+13],0 |
je qword_positive |
cmp edx,-80000000h |
jb range_exceeded |
qword_positive: |
ret |
get_count_value: |
mov [value_size],8 |
mov [size_override],-1 |
or [operand_flags],1 |
call calculate_expression |
cmp word [edi+8],0 |
jne invalid_value |
1636,33 → 1502,31 |
mov ax,bx |
shr ah,4 |
shr al,4 |
cmp ah,0Ch |
je check_vsib_address |
cmp ah,0Dh |
je check_vsib_address |
cmp al,0Ch |
je check_vsib_address |
cmp al,0Dh |
je check_vsib_address |
or bh,bh |
jz check_address_registers |
or bl,bl |
jz check_address_registers |
cmp al,ah |
jne invalid_address |
jne check_vsib |
check_address_registers: |
or al,ah |
cmp al,0Ch |
jae check_vsib |
cmp al,6 |
je check_vsib |
cmp al,7 |
je check_vsib |
mov ah,[address_size] |
and ah,0Fh |
jz address_registers_sizes_ok |
cmp al,ah |
jne address_sizes_do_not_match |
jne invalid_address |
address_registers_sizes_ok: |
cmp al,4 |
je sib_allowed |
cmp al,8 |
je sib_allowed |
cmp al,0Fh |
cmp al,9 |
je check_ip_relative_address |
cmp cl,1 |
ja invalid_address |
1679,13 → 1543,15 |
check_ip_relative_address: |
or bl,bl |
jnz invalid_address |
cmp bh,0F8h |
cmp bh,98h |
je check_rip_relative_address |
cmp bh,0F4h |
cmp bh,94h |
jne invalid_address |
cmp [free_address_range],0 |
jne check_qword_value |
jmp check_dword_value |
je check_dword_value |
mov eax,[edi] |
mov edx,[edi+4] |
ret |
check_rip_relative_address: |
mov eax,[edi] |
cdq |
1792,35 → 1658,41 |
and al,cl |
jz check_immediate_address |
jmp invalid_address |
check_vsib_address: |
cmp ah,0Ch |
je swap_vsib_registers |
cmp ah,0Dh |
jne check_vsib_base |
swap_vsib_registers: |
cmp cl,1 |
ja invalid_address |
xchg bl,bh |
mov cl,1 |
check_vsib: |
xor ah,ah |
check_vsib_base: |
test bh,bh |
jz vsib_base_ok |
jz check_vsib_index |
mov al,bh |
shr al,4 |
cmp al,4 |
je vsib_base_ok |
je check_vsib_base_size |
cmp [code_type],64 |
jne invalid_address |
jne swap_vsib_registers |
cmp al,8 |
jne swap_vsib_registers |
check_vsib_base_size: |
mov ah,[address_size] |
and ah,0Fh |
jz check_vsib_index |
cmp al,ah |
jne invalid_address |
vsib_base_ok: |
check_vsib_index: |
mov al,bl |
shr al,4 |
cmp al,0Ch |
and al,0E0h |
cmp al,0C0h |
jae check_index_scale |
cmp al,60h |
je check_index_scale |
cmp al,0Dh |
je check_index_scale |
jmp invalid_address |
swap_vsib_registers: |
xor ah,-1 |
jz invalid_address |
cmp cl,1 |
ja invalid_address |
xchg bl,bh |
mov cl,1 |
jmp check_vsib_base |
calculate_relative_offset: |
cmp [value_undefined],0 |
1912,7 → 1784,7 |
jmp logical_loop |
get_value_for_comparison: |
mov [value_size],8 |
mov [size_override],-1 |
or [operand_flags],1 |
lods byte [esi] |
call calculate_expression |
cmp byte [edi+8],0 |
1943,7 → 1815,7 |
negation_ok: |
push eax |
mov al,[esi] |
cmp al,'{' |
cmp al,91h |
je logical_expression |
cmp al,0FFh |
je invalid_expression |
1965,7 → 1837,7 |
jz logical_number |
cmp al,0Fh |
je logical_number |
cmp al,'}' |
cmp al,92h |
je logical_number |
cmp al,'&' |
je logical_number |
2124,7 → 1996,7 |
inc esi |
jmp check_expression |
defined_fp_value: |
add esi,12 |
add esi,12+1 |
jmp expression_checked |
defined_string: |
lods dword [esi] |
2206,7 → 2078,7 |
mov [logical_value_wrapping],dl |
push eax |
lods byte [esi] |
cmp al,'}' |
cmp al,92h |
jne invalid_expression |
pop eax |
logical_value_ok: |
/programs/develop/fasm/trunk/exprpars.inc |
---|
1,6 → 1,6 |
; flat assembler core |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
convert_expression: |
77,7 → 77,7 |
ret |
convert_number: |
lea eax,[edi-10h] |
lea eax,[edi+20h] |
mov edx,[memory_end] |
cmp [source_start],0 |
je check_memory_for_number |
129,7 → 129,11 |
pop [current_offset] |
lods byte [esi] |
cmp al,')' |
jne invalid_expression |
je subexpression_closed |
dec esi |
mov al,'!' |
stosb |
subexpression_closed: |
ret |
symbol_value: |
cmp [source_start],0 |
147,16 → 151,13 |
shr ah,4 |
cmp ah,4 |
je register_value |
and ah,not 1 |
cmp ah,8 |
je register_value |
cmp ah,0Ch |
jae register_value |
cmp ah,6 |
je register_value |
cmp ah,0Dh |
je register_value |
cmp ah,0Fh |
je register_value |
cmp ah,2 |
jne no_address_register |
cmp al,23h |
je register_value |
cmp al,25h |
912,7 → 913,7 |
je preevaluate_or |
cmp dl,'&' |
je preevaluate_and |
cmp dl,'}' |
cmp dl,92h |
je preevaluation_done |
or dl,dl |
jnz invalid_logical_expression |
987,7 → 988,7 |
jmp skip_logical_value |
negation_skipped: |
mov al,[esi] |
cmp al,'{' |
cmp al,91h |
jne skip_simple_logical_value |
inc esi |
xchg al,[logical_value_wrapping] |
1003,7 → 1004,7 |
je skip_logical_expression |
cmp al,'&' |
je skip_logical_expression |
cmp al,'}' |
cmp al,92h |
jne wrongly_structured_logical_expression |
pop eax |
mov [logical_value_wrapping],al |
1026,13 → 1027,13 |
je logical_value_skipped |
cmp al,'&' |
je logical_value_skipped |
cmp al,'{' |
cmp al,91h |
je skip_logical_value_internal_parenthesis |
cmp al,'}' |
cmp al,92h |
jne skip_logical_value_symbol |
sub [logical_value_parentheses],1 |
jnc skip_logical_value_symbol |
cmp [logical_value_wrapping],'{' |
cmp [logical_value_wrapping],91h |
jne skip_logical_value_symbol |
jmp logical_value_skipped |
skip_logical_value_internal_parenthesis: |
1049,7 → 1050,7 |
jmp preevaluate_negation |
preevaluate_negation_ok: |
mov ebx,esi |
cmp byte [esi],'{' |
cmp byte [esi],91h |
jne preevaluate_simple_logical_value |
lods byte [esi] |
stos byte [edi] |
1062,7 → 1063,7 |
pop ebp |
cmp al,0FFh |
je invalid_logical_value |
cmp byte [esi],'}' |
cmp byte [esi],92h |
jne invalid_logical_value |
or al,al |
jnz preevaluated_expression_value |
1089,9 → 1090,9 |
mov al,[esi] |
or al,al |
jz logical_value_boundaries_found |
cmp al,'{' |
cmp al,91h |
je logical_value_internal_parentheses |
cmp al,'}' |
cmp al,92h |
je logical_value_boundaries_parenthesis_close |
cmp al,'|' |
je logical_value_boundaries_found |
1116,7 → 1117,7 |
logical_value_boundaries_parenthesis_close: |
sub [logical_value_parentheses],1 |
jnc next_symbol_in_logical_value |
cmp [logical_value_wrapping],'{' |
cmp [logical_value_wrapping],91h |
jne next_symbol_in_logical_value |
logical_value_boundaries_found: |
or edx,edx |
/programs/develop/fasm/trunk/formats.inc |
---|
1,6 → 1,6 |
; flat assembler core |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
formatter: |
454,7 → 454,8 |
jmp format_defined |
mark_mz_relocation: |
push eax ebx |
inc [number_of_relocations] |
inc word [number_of_relocations] |
jz format_limitations_exceeded |
mov ebx,[free_additional_memory] |
mov eax,edi |
sub eax,[code_start] |
1611,6 → 1612,7 |
sub esi,eax |
mov [free_additional_memory],esi |
mov edx,[last_fixup_base] |
mov ebx,[last_fixup_header] |
mov ebp,edi |
jecxz fixups_done |
make_fixup: |
1645,6 → 1647,7 |
loop make_fixup |
fixups_done: |
mov [last_fixup_base],edx |
mov [last_fixup_header],ebx |
pop esi |
mov eax,edi |
sub eax,ebp |
3491,8 → 3494,22 |
shr eax,8 |
stos dword [edi] |
xor eax,eax |
push edx |
mov edx,[esi+4] |
add edx,[image_base] |
xchg eax,[edx] |
stos dword [edi] |
cmp byte [esi],1 |
je addend_64bit |
pop edx |
sar eax,31 |
stos dword [edi] |
jmp relocation_entry_ok |
addend_64bit: |
xor eax,eax |
xchg eax,[edx+4] |
stos dword [edi] |
pop edx |
relocation_entry_ok: |
add esi,0Ch |
jmp convert_relocations |
/programs/develop/fasm/trunk/messages.inc |
---|
1,6 → 1,6 |
; flat assembler core |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
_out_of_memory db 'out of memory',0 |
/programs/develop/fasm/trunk/parser.inc |
---|
1,6 → 1,6 |
; flat assembler core |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
parser: |
34,6 → 34,7 |
add esi,16 |
parse_line: |
mov [formatter_symbols_allowed],0 |
mov [decorator_symbols_allowed],0 |
cmp byte [esi],1Ah |
jne empty_instruction |
push edi |
529,9 → 530,9 |
cmp al,']' |
je separator |
cmp al,'{' |
je unallowed_character |
je open_decorator |
cmp al,'}' |
je unallowed_character |
je close_decorator |
cmp al,'#' |
je unallowed_character |
cmp al,'`' |
538,6 → 539,11 |
je unallowed_character |
cmp al,3Bh |
je foreign_argument |
cmp [decorator_symbols_allowed],0 |
je not_a_separator |
cmp al,'-' |
je separator |
not_a_separator: |
dec esi |
cmp al,1Ah |
jne expression_argument |
825,7 → 831,7 |
jb stack_overflow |
push esi edi |
inc esi |
mov al,'{' |
mov al,91h |
stos byte [edi] |
inc [parenthesis_stack] |
jmp parse_argument |
879,10 → 885,16 |
lods byte [esi] |
cmp al,']' |
je address_parsed |
cmp al,',' |
je divided_address |
dec esi |
mov al,')' |
stos byte [edi] |
jmp argument_parsed |
divided_address: |
mov ax,'),' |
stos word [edi] |
jmp expression |
address_parsed: |
mov al,']' |
stos byte [edi] |
908,8 → 920,9 |
jne unknown_segment_prefix |
mov al,ah |
and ah,11110000b |
cmp ah,60h |
cmp ah,30h |
jne unknown_segment_prefix |
add al,30h |
stos byte [edi] |
jmp convert_address |
unknown_segment_prefix: |
928,13 → 941,19 |
cmp byte [esi],'(' |
jne argument_parsed |
inc esi |
mov al,'{' |
mov al,91h |
jmp separator |
unallowed_character: |
mov al,0FFh |
jmp separator |
open_decorator: |
inc [decorator_symbols_allowed] |
jmp separator |
close_decorator: |
dec [decorator_symbols_allowed] |
jmp separator |
close_parenthesis: |
mov al,'}' |
mov al,92h |
separator: |
stos byte [edi] |
argument_parsed: |
1049,7 → 1068,7 |
mov ecx,ebp |
cmp cl,11 |
ja no_symbol |
sub cl,2 |
sub cl,1 |
jc no_symbol |
movzx ebx,word [symbols+ecx*4] |
add ebx,symbols |
1070,6 → 1089,8 |
mov ax,[edi] |
cmp al,18h |
jb symbol_ok |
cmp al,1Fh |
je decorator_symbol |
cmp [formatter_symbols_allowed],0 |
je no_symbol |
symbol_ok: |
1077,6 → 1098,9 |
add esi,ebp |
clc |
ret |
decorator_symbol: |
cmp [decorator_symbols_allowed],0 |
jne symbol_ok |
no_symbol: |
pop esi |
mov ecx,ebp |
1258,7 → 1282,7 |
inc esi |
cmp byte [esi-1],'$' |
je get_org_origin_id |
sub esi,ecx |
sub esi,2 |
jmp find_label |
get_current_offset_id: |
xor eax,eax |
1363,12 → 1387,12 |
cmp al,30h |
jb name_first_char_ok |
cmp al,39h |
jbe invalid_name |
jbe numeric_name |
name_first_char_ok: |
cmp al,'$' |
jne check_for_reserved_word |
cmp ecx,1 |
jne invalid_name |
numeric_name: |
add esi,ecx |
reserved_word: |
mov eax,0Fh |
pop edi |
/programs/develop/fasm/trunk/preproce.inc |
---|
1,6 → 1,6 |
; flat assembler core |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
preprocessor: |
42,6 → 42,150 |
mov [hash_tree],eax |
mov [error],eax |
mov [macro_status],al |
mov [current_line],eax |
mov esi,[initial_definitions] |
test esi,esi |
jz predefinitions_ok |
process_predefinitions: |
movzx ecx,byte [esi] |
test ecx,ecx |
jz predefinitions_ok |
inc esi |
lea eax,[esi+ecx] |
push eax |
mov ch,10b |
call add_preprocessor_symbol |
pop esi |
mov edi,[memory_start] |
mov [edx+8],edi |
convert_predefinition: |
cmp edi,[memory_end] |
jae out_of_memory |
lods byte [esi] |
or al,al |
jz predefinition_converted |
cmp al,20h |
je convert_predefinition |
mov ah,al |
mov ebx,characters |
xlat byte [ebx] |
or al,al |
jz predefinition_separator |
cmp ah,27h |
je predefinition_string |
cmp ah,22h |
je predefinition_string |
mov byte [edi],1Ah |
scas word [edi] |
xchg al,ah |
stos byte [edi] |
mov ebx,characters |
xor ecx,ecx |
predefinition_symbol: |
lods byte [esi] |
stos byte [edi] |
xlat byte [ebx] |
or al,al |
loopnzd predefinition_symbol |
neg ecx |
cmp ecx,255 |
ja invalid_definition |
mov ebx,edi |
sub ebx,ecx |
mov byte [ebx-2],cl |
found_predefinition_separator: |
dec edi |
mov ah,[esi-1] |
predefinition_separator: |
xchg al,ah |
or al,al |
jz predefinition_converted |
cmp al,20h |
je convert_predefinition |
cmp al,3Bh |
je invalid_definition |
cmp al,5Ch |
je predefinition_backslash |
stos byte [edi] |
jmp convert_predefinition |
predefinition_string: |
mov al,22h |
stos byte [edi] |
scas dword [edi] |
mov ebx,edi |
copy_predefinition_string: |
lods byte [esi] |
stos byte [edi] |
or al,al |
jz invalid_definition |
cmp al,ah |
jne copy_predefinition_string |
lods byte [esi] |
cmp al,ah |
je copy_predefinition_string |
dec esi |
dec edi |
mov eax,edi |
sub eax,ebx |
mov [ebx-4],eax |
jmp convert_predefinition |
predefinition_backslash: |
mov byte [edi],0 |
lods byte [esi] |
or al,al |
jz invalid_definition |
cmp al,20h |
je invalid_definition |
cmp al,3Bh |
je invalid_definition |
mov al,1Ah |
stos byte [edi] |
mov ecx,edi |
mov ax,5C01h |
stos word [edi] |
dec esi |
group_predefinition_backslashes: |
lods byte [esi] |
cmp al,5Ch |
jne predefinition_backslashed_symbol |
stos byte [edi] |
inc byte [ecx] |
jmp group_predefinition_backslashes |
predefinition_backslashed_symbol: |
cmp al,20h |
je invalid_definition |
cmp al,22h |
je invalid_definition |
cmp al,27h |
je invalid_definition |
cmp al,3Bh |
je invalid_definition |
mov ah,al |
mov ebx,characters |
xlat byte [ebx] |
or al,al |
jz predefinition_backslashed_symbol_character |
mov al,ah |
convert_predefinition_backslashed_symbol: |
stos byte [edi] |
xlat byte [ebx] |
or al,al |
jz found_predefinition_separator |
inc byte [ecx] |
jz invalid_definition |
lods byte [esi] |
jmp convert_predefinition_backslashed_symbol |
predefinition_backslashed_symbol_character: |
mov al,ah |
stos byte [edi] |
inc byte [ecx] |
jmp convert_predefinition |
predefinition_converted: |
mov [memory_start],edi |
sub edi,[edx+8] |
mov [edx+12],edi |
jmp process_predefinitions |
predefinitions_ok: |
mov esi,[input_file] |
mov edx,esi |
call open |
78,7 → 222,11 |
mov [ebx],eax |
call use_postponed_macro |
pop edx |
jmp process_postponed_list |
cmp [macro_status],0 |
je process_postponed_list |
mov eax,[error_line] |
mov [current_line],eax |
jmp incomplete_macro |
preprocessing_finished: |
mov [source_start],edi |
ret |
275,6 → 423,7 |
jne backslashed_symbol |
stos byte [edi] |
inc byte [ecx] |
jz name_too_long |
jmp group_backslashes |
no_end_quote: |
mov byte [ebx-5],0 |
896,6 → 1045,8 |
inc esi |
add esi,eax |
lods byte [esi] |
cmp al,':' |
je macro_argument_with_default_value |
cmp al,'=' |
je macro_argument_with_default_value |
cmp al,'*' |
904,10 → 1055,13 |
macro_argument_end: |
cmp al,',' |
je skip_macro_arguments |
cmp al,'&' |
je macro_arguments_finisher |
cmp al,']' |
jne end_macro_arguments |
not ebp |
macro_arguments_finisher: |
lods byte [esi] |
not ebp |
end_macro_arguments: |
or ebp,ebp |
jnz invalid_macro_arguments |
917,7 → 1071,7 |
je found_macro_block |
jmp invalid_macro_arguments |
macro_argument_with_default_value: |
or [default_argument_value],-1 |
or [skip_default_argument_value],-1 |
call skip_macro_argument_value |
inc esi |
jmp macro_argument_end |
956,10 → 1110,12 |
jz argument_value_end |
cmp al,',' |
je argument_value_end |
cmp [default_argument_value],0 |
cmp [skip_default_argument_value],0 |
je invalid_macro_arguments |
cmp al,'{' |
je argument_value_end |
cmp al,'&' |
je argument_value_end |
or ebp,ebp |
jz invalid_macro_arguments |
cmp al,']' |
975,10 → 1131,12 |
je argument_string |
cmp al,1Ah |
je argument_symbol |
cmp [default_argument_value],0 |
cmp [skip_default_argument_value],0 |
je simple_argument |
cmp al,'{' |
je argument_value_end |
cmp al,'&' |
je argument_value_end |
or ebp,ebp |
jz simple_argument |
cmp al,']' |
1056,6 → 1214,7 |
xor ecx,ecx |
call add_preprocessor_symbol |
mov eax,[current_line] |
mov [error_line],eax |
mov [edx+12],eax |
pop esi |
mov [edx+8],esi |
1063,8 → 1222,6 |
and al,0F0h |
or al,1 |
mov [macro_status],al |
mov eax,[current_line] |
mov [error_line],eax |
lods byte [esi] |
or al,al |
jz line_preprocessed |
1080,6 → 1237,9 |
irps_directive: |
mov [base_code],2 |
jmp define_instant_macro |
irpv_directive: |
mov [base_code],3 |
jmp define_instant_macro |
match_directive: |
mov [base_code],10h |
define_instant_macro: |
1555,6 → 1715,8 |
je next_argument |
cmp al,']' |
je next_arguments_group |
cmp al,'&' |
je arguments_end |
dec esi |
jmp arguments_end |
next_argument: |
1575,19 → 1737,50 |
mov eax,[counter_limit] |
call add_macro_symbol |
add esi,ecx |
xor eax,eax |
mov [default_argument_value],eax |
cmp byte [esi],'*' |
je required_value |
cmp byte [esi],':' |
je get_default_value |
cmp byte [esi],'=' |
jne default_value_ok |
get_default_value: |
inc esi |
mov [default_argument_value],esi |
or [skip_default_argument_value],-1 |
call skip_macro_argument_value |
jmp default_value_ok |
required_value: |
inc esi |
or [default_argument_value],-1 |
default_value_ok: |
xchg esi,ebx |
mov [edx+12],esi |
mov [default_argument_value],0 |
mov [skip_default_argument_value],0 |
cmp byte [ebx],'&' |
je greedy_macro_argument |
call skip_macro_argument_value |
call finish_macro_argument |
jmp got_macro_argument |
greedy_macro_argument: |
call skip_foreign_line |
dec esi |
mov eax,[edx+12] |
mov ecx,esi |
sub ecx,eax |
mov [edx+8],ecx |
got_macro_argument: |
xchg esi,ebx |
cmp byte [esi],'=' |
je argument_with_default_value |
cmp byte [esi],'*' |
cmp dword [edx+8],0 |
jne macro_argument_ok |
cmp dword [edx+8],0 |
mov eax,[default_argument_value] |
or eax,eax |
jz macro_argument_ok |
cmp eax,-1 |
je invalid_macro_arguments |
inc esi |
mov [edx+12],eax |
call finish_macro_argument |
macro_argument_ok: |
ret |
finish_macro_argument: |
1602,17 → 1795,6 |
argument_value_length_ok: |
mov [edx+8],ecx |
ret |
argument_with_default_value: |
inc esi |
push esi |
or [default_argument_value],-1 |
call skip_macro_argument_value |
pop eax |
cmp dword [edx+8],0 |
jne macro_argument_ok |
mov [edx+12],eax |
call finish_macro_argument |
jmp macro_argument_ok |
arguments_end: |
cmp byte [ebx],0 |
jne invalid_macro_arguments |
1738,6 → 1920,8 |
lods byte [esi] |
cmp [base_code],1 |
ja irps_name_ok |
cmp al,':' |
je irp_with_default_value |
cmp al,'=' |
je irp_with_default_value |
cmp al,'*' |
1749,13 → 1933,17 |
jmp irp_parameters_start |
irp_with_default_value: |
xor ebp,ebp |
or [default_argument_value],-1 |
or [skip_default_argument_value],-1 |
call skip_macro_argument_value |
cmp byte [esi],',' |
jne invalid_macro_arguments |
inc esi |
jmp irp_parameters_start |
irps_name_ok: |
cmp al,',' |
jne invalid_macro_arguments |
cmp [base_code],3 |
je irp_parameters_start |
mov al,[esi] |
or al,al |
jz instant_macro_done |
1769,9 → 1957,11 |
push [counter_limit] |
mov [counter_limit],eax |
mov [struc_name],eax |
cmp [base_code],3 |
je get_irpv_parameter |
mov ebx,esi |
cmp [base_code],1 |
ja get_irps_parameter |
cmp [base_code],2 |
je get_irps_parameter |
mov edx,[parameters_end] |
mov al,[edx] |
push eax |
1822,6 → 2012,70 |
irps_parameters_end: |
mov esi,ebx |
jmp instant_macro_parameters_ok |
get_irpv_parameter: |
lods byte [esi] |
cmp al,1Ah |
jne invalid_macro_arguments |
lods byte [esi] |
mov ebp,esi |
mov cl,al |
mov ch,10b |
call get_preprocessor_symbol |
jc instant_macro_finish |
push edx |
mark_variable_value: |
inc [counter_limit] |
mov [edx+4],ebp |
next_variable_value: |
mov edx,[edx] |
or edx,edx |
jz variable_values_marked |
mov eax,[edx+4] |
cmp eax,1 |
jbe next_variable_value |
mov esi,ebp |
movzx ecx,byte [esi-1] |
xchg edi,eax |
repe cmps byte [esi],[edi] |
xchg edi,eax |
je mark_variable_value |
jmp next_variable_value |
variable_values_marked: |
pop edx |
push [counter_limit] |
add_irpv_value: |
push edx |
mov esi,[instant_macro_start] |
inc esi |
lods byte [esi] |
movzx ecx,al |
mov eax,[esp+4] |
call add_macro_symbol |
mov ebx,edx |
pop edx |
mov ecx,[edx+12] |
mov eax,[edx+8] |
mov [ebx+12],eax |
mov [ebx+8],ecx |
collect_next_variable_value: |
mov edx,[edx] |
or edx,edx |
jz variable_values_collected |
cmp ebp,[edx+4] |
jne collect_next_variable_value |
dec dword [esp] |
jnz add_irpv_value |
variable_values_collected: |
pop eax |
mov esi,ebp |
movzx ecx,byte [esi-1] |
add esi,ecx |
cmp byte [esi],0 |
je instant_macro_parameters_ok |
cmp byte [esi],'{' |
jne invalid_macro_arguments |
jmp instant_macro_parameters_ok |
do_match: |
mov ebx,esi |
call skip_pattern |
2451,6 → 2705,8 |
mov [macro_block_line_number],ecx |
jmp process_macro_line |
close_macro_block: |
cmp esi,[macro_block] |
je block_closed |
cmp [counter],0 |
je block_closed |
jl reverse_counter |
/programs/develop/fasm/trunk/symbdump.inc |
---|
1,6 → 1,6 |
; flat assembler core |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
dump_symbols: |
/programs/develop/fasm/trunk/tables.inc |
---|
1,6 → 1,6 |
; flat assembler core |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
include_variable db 'INCLUDE',0 |
17,6 → 17,8 |
dw irp_directive-directive_handler |
db 4,'irps' |
dw irps_directive-directive_handler |
db 4,'irpv' |
dw irpv_directive-directive_handler |
db 5,'macro' |
dw define_macro-directive_handler |
db 5,'match' |
62,9 → 64,11 |
single_operand_operators: |
db 1,'+',82h |
db 1,'-',83h |
db 3,'bsf',0E0h |
db 3,'bsr',0E1h |
db 3,'not',0D0h |
db 3,'plt',0E1h |
db 3,'rva',0E0h |
db 3,'plt',0F1h |
db 3,'rva',0F0h |
db 0 |
directive_operators: |
91,6 → 95,7 |
db 0 |
symbols: |
dw symbols_1-symbols,(symbols_2-symbols_1)/(1+2) |
dw symbols_2-symbols,(symbols_3-symbols_2)/(2+2) |
dw symbols_3-symbols,(symbols_4-symbols_3)/(3+2) |
dw symbols_4-symbols,(symbols_5-symbols_4)/(4+2) |
102,6 → 107,8 |
dw symbols_10-symbols,(symbols_11-symbols_10)/(10+2) |
dw symbols_11-symbols,(symbols_end-symbols_11)/(11+2) |
symbols_1: |
db 'z',1Fh,0 |
symbols_2: |
db 'ah',10h,04h |
db 'al',10h,10h |
112,16 → 119,24 |
db 'bx',10h,23h |
db 'ch',10h,05h |
db 'cl',10h,11h |
db 'cs',10h,62h |
db 'cs',10h,32h |
db 'cx',10h,21h |
db 'dh',10h,06h |
db 'di',10h,27h |
db 'dl',10h,12h |
db 'ds',10h,64h |
db 'ds',10h,34h |
db 'dx',10h,22h |
db 'es',10h,61h |
db 'fs',10h,65h |
db 'gs',10h,66h |
db 'es',10h,31h |
db 'fs',10h,35h |
db 'gs',10h,36h |
db 'k0',14h,50h |
db 'k1',14h,51h |
db 'k2',14h,52h |
db 'k3',14h,53h |
db 'k4',14h,54h |
db 'k5',14h,55h |
db 'k6',14h,56h |
db 'k7',14h,57h |
db 'ms',1Ch,41h |
db 'mz',18h,20h |
db 'nx',1Bh,83h |
128,34 → 143,38 |
db 'pe',18h,30h |
db 'r8',10h,88h |
db 'r9',10h,89h |
db 'rd',1Fh,21h |
db 'rn',1Fh,20h |
db 'ru',1Fh,22h |
db 'rz',1Fh,23h |
db 'si',10h,26h |
db 'sp',10h,24h |
db 'ss',10h,63h |
db 'ss',10h,33h |
db 'st',10h,0A0h |
symbols_3: |
db 'bpl',10h,15h |
db 'cr0',10h,50h |
db 'cr1',10h,51h |
db 'cr2',10h,52h |
db 'cr3',10h,53h |
db 'cr4',10h,54h |
db 'cr5',10h,55h |
db 'cr6',10h,56h |
db 'cr7',10h,57h |
db 'cr8',10h,58h |
db 'cr9',10h,59h |
db 'cr0',14h,00h |
db 'cr1',14h,01h |
db 'cr2',14h,02h |
db 'cr3',14h,03h |
db 'cr4',14h,04h |
db 'cr5',14h,05h |
db 'cr6',14h,06h |
db 'cr7',14h,07h |
db 'cr8',14h,08h |
db 'cr9',14h,09h |
db 'dil',10h,17h |
db 'dll',1Bh,80h |
db 'dr0',10h,70h |
db 'dr1',10h,71h |
db 'dr2',10h,72h |
db 'dr3',10h,73h |
db 'dr4',10h,74h |
db 'dr5',10h,75h |
db 'dr6',10h,76h |
db 'dr7',10h,77h |
db 'dr8',10h,78h |
db 'dr9',10h,79h |
db 'dr0',14h,10h |
db 'dr1',14h,11h |
db 'dr2',14h,12h |
db 'dr3',14h,13h |
db 'dr4',14h,14h |
db 'dr5',14h,15h |
db 'dr6',14h,16h |
db 'dr7',14h,17h |
db 'dr8',14h,18h |
db 'dr9',14h,19h |
db 'eax',10h,40h |
db 'ebp',10h,45h |
db 'ebx',10h,43h |
163,7 → 182,7 |
db 'edi',10h,47h |
db 'edx',10h,42h |
db 'efi',1Bh,10 |
db 'eip',10h,0F4h |
db 'eip',10h,94h |
db 'elf',18h,50h |
db 'esi',10h,46h |
db 'esp',10h,44h |
197,9 → 216,10 |
db 'rcx',10h,81h |
db 'rdi',10h,87h |
db 'rdx',10h,82h |
db 'rip',10h,0F8h |
db 'rip',10h,98h |
db 'rsi',10h,86h |
db 'rsp',10h,84h |
db 'sae',1Fh,30h |
db 'sil',10h,16h |
db 'spl',10h,14h |
db 'st0',10h,0A0h |
210,32 → 230,39 |
db 'st5',10h,0A5h |
db 'st6',10h,0A6h |
db 'st7',10h,0A7h |
db 'tr0',10h,90h |
db 'tr1',10h,91h |
db 'tr2',10h,92h |
db 'tr3',10h,93h |
db 'tr4',10h,94h |
db 'tr5',10h,95h |
db 'tr6',10h,96h |
db 'tr7',10h,97h |
db 'tr0',14h,40h |
db 'tr1',14h,41h |
db 'tr2',14h,42h |
db 'tr3',14h,43h |
db 'tr4',14h,44h |
db 'tr5',14h,45h |
db 'tr6',14h,46h |
db 'tr7',14h,47h |
db 'wdm',1Bh,81h |
symbols_4: |
db '1to2',1Fh,11h |
db '1to4',1Fh,12h |
db '1to8',1Fh,13h |
db 'bnd0',14h,60h |
db 'bnd1',14h,61h |
db 'bnd2',14h,62h |
db 'bnd3',14h,63h |
db 'byte',11h,1 |
db 'code',19h,5 |
db 'coff',18h,40h |
db 'cr10',10h,5Ah |
db 'cr11',10h,5Bh |
db 'cr12',10h,5Ch |
db 'cr13',10h,5Dh |
db 'cr14',10h,5Eh |
db 'cr15',10h,5Fh |
db 'cr10',14h,0Ah |
db 'cr11',14h,0Bh |
db 'cr12',14h,0Ch |
db 'cr13',14h,0Dh |
db 'cr14',14h,0Eh |
db 'cr15',14h,0Fh |
db 'data',19h,6 |
db 'dr10',10h,7Ah |
db 'dr11',10h,7Bh |
db 'dr12',10h,7Ch |
db 'dr13',10h,7Dh |
db 'dr14',10h,7Eh |
db 'dr15',10h,7Fh |
db 'dr10',14h,1Ah |
db 'dr11',14h,1Bh |
db 'dr12',14h,1Ch |
db 'dr13',14h,1Dh |
db 'dr14',14h,1Eh |
db 'dr15',14h,1Fh |
db 'ms64',1Ch,49h |
db 'near',12h,2 |
db 'note',1Eh,4 |
275,17 → 302,28 |
db 'xmm7',10h,0C7h |
db 'xmm8',10h,0C8h |
db 'xmm9',10h,0C9h |
db 'ymm0',10h,0D0h |
db 'ymm1',10h,0D1h |
db 'ymm2',10h,0D2h |
db 'ymm3',10h,0D3h |
db 'ymm4',10h,0D4h |
db 'ymm5',10h,0D5h |
db 'ymm6',10h,0D6h |
db 'ymm7',10h,0D7h |
db 'ymm8',10h,0D8h |
db 'ymm9',10h,0D9h |
db 'ymm0',10h,0E0h |
db 'ymm1',10h,0E1h |
db 'ymm2',10h,0E2h |
db 'ymm3',10h,0E3h |
db 'ymm4',10h,0E4h |
db 'ymm5',10h,0E5h |
db 'ymm6',10h,0E6h |
db 'ymm7',10h,0E7h |
db 'ymm8',10h,0E8h |
db 'ymm9',10h,0E9h |
db 'zmm0',10h,60h |
db 'zmm1',10h,61h |
db 'zmm2',10h,62h |
db 'zmm3',10h,63h |
db 'zmm4',10h,64h |
db 'zmm5',10h,65h |
db 'zmm6',10h,66h |
db 'zmm7',10h,67h |
db 'zmm8',10h,68h |
db 'zmm9',10h,69h |
symbols_5: |
db '1to16',1Fh,14h |
db 'dword',11h,4 |
db 'elf64',18h,58h |
db 'fword',11h,6 |
304,14 → 342,69 |
db 'xmm13',10h,0CDh |
db 'xmm14',10h,0CEh |
db 'xmm15',10h,0CFh |
db 'xmm16',10h,0D0h |
db 'xmm17',10h,0D1h |
db 'xmm18',10h,0D2h |
db 'xmm19',10h,0D3h |
db 'xmm20',10h,0D4h |
db 'xmm21',10h,0D5h |
db 'xmm22',10h,0D6h |
db 'xmm23',10h,0D7h |
db 'xmm24',10h,0D8h |
db 'xmm25',10h,0D9h |
db 'xmm26',10h,0DAh |
db 'xmm27',10h,0DBh |
db 'xmm28',10h,0DCh |
db 'xmm29',10h,0DDh |
db 'xmm30',10h,0DEh |
db 'xmm31',10h,0DFh |
db 'xword',11h,16 |
db 'ymm10',10h,0DAh |
db 'ymm11',10h,0DBh |
db 'ymm12',10h,0DCh |
db 'ymm13',10h,0DDh |
db 'ymm14',10h,0DEh |
db 'ymm15',10h,0DFh |
db 'ymm10',10h,0EAh |
db 'ymm11',10h,0EBh |
db 'ymm12',10h,0ECh |
db 'ymm13',10h,0EDh |
db 'ymm14',10h,0EEh |
db 'ymm15',10h,0EFh |
db 'ymm16',10h,0F0h |
db 'ymm17',10h,0F1h |
db 'ymm18',10h,0F2h |
db 'ymm19',10h,0F3h |
db 'ymm20',10h,0F4h |
db 'ymm21',10h,0F5h |
db 'ymm22',10h,0F6h |
db 'ymm23',10h,0F7h |
db 'ymm24',10h,0F8h |
db 'ymm25',10h,0F9h |
db 'ymm26',10h,0FAh |
db 'ymm27',10h,0FBh |
db 'ymm28',10h,0FCh |
db 'ymm29',10h,0FDh |
db 'ymm30',10h,0FEh |
db 'ymm31',10h,0FFh |
db 'yword',11h,32 |
db 'zmm10',10h,6Ah |
db 'zmm11',10h,6Bh |
db 'zmm12',10h,6Ch |
db 'zmm13',10h,6Dh |
db 'zmm14',10h,6Eh |
db 'zmm15',10h,6Fh |
db 'zmm16',10h,70h |
db 'zmm17',10h,71h |
db 'zmm18',10h,72h |
db 'zmm19',10h,73h |
db 'zmm20',10h,74h |
db 'zmm21',10h,75h |
db 'zmm22',10h,76h |
db 'zmm23',10h,77h |
db 'zmm24',10h,78h |
db 'zmm25',10h,79h |
db 'zmm26',10h,7Ah |
db 'zmm27',10h,7Bh |
db 'zmm28',10h,7Ch |
db 'zmm29',10h,7Dh |
db 'zmm30',10h,7Eh |
db 'zmm31',10h,7Fh |
db 'zword',11h,64 |
symbols_6: |
db 'binary',18h,10h |
db 'dqword',11h,16 |
323,6 → 416,7 |
db 'static',1Dh,1 |
symbols_7: |
db 'console',1Bh,3 |
db 'dqqword',11h,64 |
db 'dynamic',1Eh,2 |
db 'efiboot',1Bh,11 |
symbols_8: |
404,6 → 498,8 |
dw basic_instruction-instruction_handler |
db 'and',20h |
dw basic_instruction-instruction_handler |
db 'bnd',0F2h |
dw bnd_prefix_instruction-instruction_handler |
db 'bsf',0BCh |
dw bs_instruction-instruction_handler |
db 'bsr',0BDh |
588,11 → 684,13 |
db 'cdqe',98h |
dw simple_instruction_64bit-instruction_handler |
db 'clac',0CAh |
dw simple_vmx_instruction-instruction_handler |
dw simple_instruction_0f_01-instruction_handler |
db 'clgi',0DDh |
dw simple_vmx_instruction-instruction_handler |
dw simple_instruction_0f_01-instruction_handler |
db 'clts',6 |
dw simple_extended_instruction-instruction_handler |
db 'clwb',6 |
dw clflushopt_instruction-instruction_handler |
db 'cmps',0A6h |
dw cmps_instruction-instruction_handler |
db 'cwde',98h |
600,9 → 698,9 |
db 'data',0 |
dw data_directive-instruction_handler |
db 'dppd',41h |
dw sse4_instruction_3a_imm8-instruction_handler |
dw sse4_instruction_66_3a_imm8-instruction_handler |
db 'dpps',40h |
dw sse4_instruction_3a_imm8-instruction_handler |
dw sse4_instruction_66_3a_imm8-instruction_handler |
db 'else',0 |
dw else_directive-instruction_handler |
db 'emms',77h |
679,6 → 777,14 |
dw conditional_jump-instruction_handler |
db 'jnle',7Fh |
dw conditional_jump-instruction_handler |
db 'korb',45h |
dw mask_instruction_b-instruction_handler |
db 'kord',45h |
dw mask_instruction_d-instruction_handler |
db 'korq',45h |
dw mask_instruction_q-instruction_handler |
db 'korw',45h |
dw mask_instruction_w-instruction_handler |
db 'lahf',9Fh |
dw simple_instruction-instruction_handler |
db 'lgdt',2 |
792,9 → 898,9 |
db 'smsw',14h |
dw pm_store_word_instruction-instruction_handler |
db 'stac',0CBh |
dw simple_vmx_instruction-instruction_handler |
dw simple_instruction_0f_01-instruction_handler |
db 'stgi',0DCh |
dw simple_vmx_instruction-instruction_handler |
dw simple_instruction_0f_01-instruction_handler |
db 'stos',0AAh |
dw stos_instruction-instruction_handler |
db 'test',0 |
804,7 → 910,7 |
db 'verw',5 |
dw pm_word_instruction-instruction_handler |
db 'vpor',0EBh |
dw avx_pd_instruction-instruction_handler |
dw avx_pd_instruction_noevex-instruction_handler |
db 'wait',9Bh |
dw simple_instruction-instruction_handler |
db 'xadd',0C0h |
812,7 → 918,7 |
db 'xchg',0 |
dw xchg_instruction-instruction_handler |
db 'xend',0D5h |
dw simple_vmx_instruction-instruction_handler |
dw simple_instruction_0f_01-instruction_handler |
db 'xlat',0D7h |
dw xlat_instruction-instruction_handler |
instructions_5: |
836,6 → 942,14 |
dw tbm_instruction-instruction_handler |
db 'blsic',16h |
dw tbm_instruction-instruction_handler |
db 'bndcl',1Ah |
dw bndcl_instruction-instruction_handler |
db 'bndcn',1Bh |
dw bndcu_instruction-instruction_handler |
db 'bndcu',1Ah |
dw bndcu_instruction-instruction_handler |
db 'bndmk',1Bh |
dw bndmk_instruction-instruction_handler |
db 'bound',0 |
dw bound_instruction-instruction_handler |
db 'break',0 |
974,6 → 1088,46 |
dw loop_instruction_32bit-instruction_handler |
db 'jrcxz',0E3h |
dw loop_instruction_64bit-instruction_handler |
db 'kaddb',4Ah |
dw mask_instruction_b-instruction_handler |
db 'kaddd',4Ah |
dw mask_instruction_d-instruction_handler |
db 'kaddq',4Ah |
dw mask_instruction_q-instruction_handler |
db 'kaddw',4Ah |
dw mask_instruction_w-instruction_handler |
db 'kandb',41h |
dw mask_instruction_b-instruction_handler |
db 'kandd',41h |
dw mask_instruction_d-instruction_handler |
db 'kandq',41h |
dw mask_instruction_q-instruction_handler |
db 'kandw',41h |
dw mask_instruction_w-instruction_handler |
db 'kmovb',1 |
dw kmov_instruction-instruction_handler |
db 'kmovd',4 |
dw kmov_instruction-instruction_handler |
db 'kmovq',8 |
dw kmov_instruction-instruction_handler |
db 'kmovw',2 |
dw kmov_instruction-instruction_handler |
db 'knotb',44h |
dw mask_instruction_single_source_b-instruction_handler |
db 'knotd',44h |
dw mask_instruction_single_source_d-instruction_handler |
db 'knotq',44h |
dw mask_instruction_single_source_q-instruction_handler |
db 'knotw',44h |
dw mask_instruction_single_source_w-instruction_handler |
db 'kxorb',47h |
dw mask_instruction_b-instruction_handler |
db 'kxord',47h |
dw mask_instruction_d-instruction_handler |
db 'kxorq',47h |
dw mask_instruction_q-instruction_handler |
db 'kxorw',47h |
dw mask_instruction_w-instruction_handler |
db 'label',0 |
dw label_directive-instruction_handler |
db 'lddqu',0 |
1127,7 → 1281,7 |
db 'psubw',0F9h |
dw basic_mmx_instruction-instruction_handler |
db 'ptest',17h |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'pusha',60h |
dw simple_instruction_except64-instruction_handler |
db 'pushd',4 |
1153,11 → 1307,11 |
db 'repnz',0F2h |
dw prefix_instruction-instruction_handler |
db 'retfd',0CAh |
dw ret_instruction_32bit-instruction_handler |
dw retf_instruction_32bit-instruction_handler |
db 'retfq',0CAh |
dw ret_instruction_64bit-instruction_handler |
dw retf_instruction_64bit-instruction_handler |
db 'retfw',0CAh |
dw ret_instruction_16bit-instruction_handler |
dw retf_instruction_16bit-instruction_handler |
db 'retnd',0C2h |
dw ret_instruction_32bit_except64-instruction_handler |
db 'retnq',0C2h |
1231,9 → 1385,9 |
db 'tzmsk',14h |
dw tbm_instruction-instruction_handler |
db 'vdppd',41h |
dw avx_128bit_instruction_3a_imm8-instruction_handler |
dw avx_128bit_instruction_3a_imm8_noevex-instruction_handler |
db 'vdpps',40h |
dw avx_instruction_3a_imm8-instruction_handler |
dw avx_pi_instruction_3a_imm8_noevex-instruction_handler |
db 'vmovd',0 |
dw avx_movd_instruction-instruction_handler |
db 'vmovq',0 |
1247,9 → 1401,13 |
db 'vorps',56h |
dw avx_ps_instruction-instruction_handler |
db 'vpand',0DBh |
dw avx_pd_instruction-instruction_handler |
dw avx_pd_instruction_noevex-instruction_handler |
db 'vpord',0EBh |
dw avx_d_instruction_evex-instruction_handler |
db 'vporq',0EBh |
dw avx_q_instruction_evex-instruction_handler |
db 'vpxor',0EFh |
dw avx_pd_instruction-instruction_handler |
dw avx_pd_instruction_noevex-instruction_handler |
db 'while',0 |
dw while_directive-instruction_handler |
db 'wrmsr',30h |
1263,14 → 1421,14 |
db 'xsave',100b |
dw fxsave_instruction-instruction_handler |
db 'xtest',0D6h |
dw simple_vmx_instruction-instruction_handler |
dw simple_instruction_0f_01-instruction_handler |
instructions_6: |
db 'aesdec',0DEh |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'aesenc',0DCh |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'aesimc',0DBh |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'andnpd',55h |
dw sse_pd_instruction-instruction_handler |
db 'andnps',55h |
1281,6 → 1439,12 |
dw tbm_instruction-instruction_handler |
db 'blsmsk',2 |
dw bmi_instruction-instruction_handler |
db 'bndldx',1Ah |
dw bndldx_instruction-instruction_handler |
db 'bndmov',1Ah |
dw bndmov_instruction-instruction_handler |
db 'bndstx',1Bh |
dw bndstx_instruction-instruction_handler |
db 'cmovae',43h |
dw bs_instruction-instruction_handler |
db 'cmovbe',46h |
1403,6 → 1567,30 |
dw vmx_inv_instruction-instruction_handler |
db 'invlpg',0 |
dw invlpg_instruction-instruction_handler |
db 'kandnb',42h |
dw mask_instruction_b-instruction_handler |
db 'kandnd',42h |
dw mask_instruction_d-instruction_handler |
db 'kandnq',42h |
dw mask_instruction_q-instruction_handler |
db 'kandnw',42h |
dw mask_instruction_w-instruction_handler |
db 'ktestb',99h |
dw mask_instruction_single_source_b-instruction_handler |
db 'ktestd',99h |
dw mask_instruction_single_source_d-instruction_handler |
db 'ktestq',99h |
dw mask_instruction_single_source_q-instruction_handler |
db 'ktestw',99h |
dw mask_instruction_single_source_w-instruction_handler |
db 'kxnorb',46h |
dw mask_instruction_b-instruction_handler |
db 'kxnord',46h |
dw mask_instruction_d-instruction_handler |
db 'kxnorq',46h |
dw mask_instruction_q-instruction_handler |
db 'kxnorw',46h |
dw mask_instruction_w-instruction_handler |
db 'lfence',0E8h |
dw fence_instruction-instruction_handler |
db 'llwpcb',0 |
1488,35 → 1676,35 |
db 'pinsrw',0C4h |
dw pinsrw_instruction-instruction_handler |
db 'pmaxsb',3Ch |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'pmaxsd',3Dh |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'pmaxsw',0EEh |
dw basic_mmx_instruction-instruction_handler |
db 'pmaxub',0DEh |
dw basic_mmx_instruction-instruction_handler |
db 'pmaxud',3Fh |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'pmaxuw',3Eh |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'pminsb',38h |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'pminsd',39h |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'pminsw',0EAh |
dw basic_mmx_instruction-instruction_handler |
db 'pminub',0DAh |
dw basic_mmx_instruction-instruction_handler |
db 'pminud',3Bh |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'pminuw',3Ah |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'pmuldq',28h |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'pmulhw',0E5h |
dw basic_mmx_instruction-instruction_handler |
db 'pmulld',40h |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'pmullw',0D5h |
dw basic_mmx_instruction-instruction_handler |
db 'popcnt',0B8h |
1559,12 → 1747,14 |
dw simple_instruction_16bit-instruction_handler |
db 'rdmsrq',32h |
dw simple_extended_instruction_64bit-instruction_handler |
db 'rdpkru',0EEh |
dw simple_instruction_0f_01-instruction_handler |
db 'rdrand',110b |
dw rdrand_instruction-instruction_handler |
db 'rdseed',111b |
dw rdrand_instruction-instruction_handler |
db 'rdtscp',1 |
dw rdtscp_instruction-instruction_handler |
db 'rdtscp',0F9h |
dw simple_instruction_0f_01-instruction_handler |
db 'repeat',0 |
dw repeat_directive-instruction_handler |
db 'setalc',0D6h |
1595,7 → 1785,7 |
dw sse_sd_instruction-instruction_handler |
db 'sqrtss',51h |
dw sse_ss_instruction-instruction_handler |
db 'swapgs',0 |
db 'swapgs',0F8h |
dw swapgs_instruction-instruction_handler |
db 'sysret',07h |
dw simple_extended_instruction-instruction_handler |
1602,13 → 1792,13 |
db 't1mskc',17h |
dw tbm_instruction-instruction_handler |
db 'vaddpd',58h |
dw avx_pd_instruction-instruction_handler |
dw avx_pd_instruction_er-instruction_handler |
db 'vaddps',58h |
dw avx_ps_instruction-instruction_handler |
dw avx_ps_instruction_er-instruction_handler |
db 'vaddsd',58h |
dw avx_sd_instruction-instruction_handler |
dw avx_sd_instruction_er-instruction_handler |
db 'vaddss',58h |
dw avx_ss_instruction-instruction_handler |
dw avx_ss_instruction_er-instruction_handler |
db 'vandpd',54h |
dw avx_pd_instruction-instruction_handler |
db 'vandps',54h |
1622,33 → 1812,35 |
db 'vcmpss',-1 |
dw avx_cmp_ss_instruction-instruction_handler |
db 'vdivpd',5Eh |
dw avx_pd_instruction-instruction_handler |
dw avx_pd_instruction_er-instruction_handler |
db 'vdivps',5Eh |
dw avx_ps_instruction-instruction_handler |
dw avx_ps_instruction_er-instruction_handler |
db 'vdivsd',5Eh |
dw avx_sd_instruction-instruction_handler |
dw avx_sd_instruction_er-instruction_handler |
db 'vdivss',5Eh |
dw avx_ss_instruction-instruction_handler |
dw avx_ss_instruction_er-instruction_handler |
db 'vlddqu',0F0h |
dw avx_lddqu_instruction-instruction_handler |
db 'vmaxpd',5Fh |
dw avx_pd_instruction-instruction_handler |
dw avx_pd_instruction_sae-instruction_handler |
db 'vmaxps',5Fh |
dw avx_ps_instruction-instruction_handler |
dw avx_ps_instruction_sae-instruction_handler |
db 'vmaxsd',5Fh |
dw avx_sd_instruction-instruction_handler |
dw avx_sd_instruction_sae-instruction_handler |
db 'vmaxss',5Fh |
dw avx_ss_instruction-instruction_handler |
dw avx_ss_instruction_sae-instruction_handler |
db 'vmcall',0C1h |
dw simple_vmx_instruction-instruction_handler |
dw simple_instruction_0f_01-instruction_handler |
db 'vmfunc',0D4h |
dw simple_instruction_0f_01-instruction_handler |
db 'vminpd',5Dh |
dw avx_pd_instruction-instruction_handler |
dw avx_pd_instruction_sae-instruction_handler |
db 'vminps',5Dh |
dw avx_ps_instruction-instruction_handler |
dw avx_ps_instruction_sae-instruction_handler |
db 'vminsd',5Dh |
dw avx_sd_instruction-instruction_handler |
dw avx_sd_instruction_sae-instruction_handler |
db 'vminss',5Dh |
dw avx_ss_instruction-instruction_handler |
dw avx_ss_instruction_sae-instruction_handler |
db 'vmload',0DAh |
dw simple_svm_instruction-instruction_handler |
db 'vmovsd',0 |
1660,37 → 1852,51 |
db 'vmsave',0DBh |
dw simple_svm_instruction-instruction_handler |
db 'vmulpd',59h |
dw avx_pd_instruction-instruction_handler |
dw avx_pd_instruction_er-instruction_handler |
db 'vmulps',59h |
dw avx_ps_instruction-instruction_handler |
dw avx_ps_instruction_er-instruction_handler |
db 'vmulsd',59h |
dw avx_sd_instruction-instruction_handler |
dw avx_sd_instruction_er-instruction_handler |
db 'vmulss',59h |
dw avx_ss_instruction-instruction_handler |
dw avx_ss_instruction_er-instruction_handler |
db 'vmxoff',0C4h |
dw simple_vmx_instruction-instruction_handler |
dw simple_instruction_0f_01-instruction_handler |
db 'vpabsb',1Ch |
dw avx_single_source_instruction_38-instruction_handler |
dw avx_single_source_bw_instruction_38-instruction_handler |
db 'vpabsd',1Eh |
dw avx_single_source_instruction_38-instruction_handler |
dw avx_single_source_d_instruction_38-instruction_handler |
db 'vpabsq',1Fh |
dw avx_single_source_q_instruction_38_evex-instruction_handler |
db 'vpabsw',1Dh |
dw avx_single_source_instruction_38-instruction_handler |
dw avx_single_source_bw_instruction_38-instruction_handler |
db 'vpaddb',0FCh |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpaddd',0FEh |
dw avx_pd_instruction-instruction_handler |
dw avx_d_instruction-instruction_handler |
db 'vpaddq',0D4h |
dw avx_pd_instruction-instruction_handler |
dw avx_q_instruction-instruction_handler |
db 'vpaddw',0FDh |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpandd',0DBh |
dw avx_d_instruction_evex-instruction_handler |
db 'vpandn',0DFh |
dw avx_pd_instruction-instruction_handler |
dw avx_pd_instruction_noevex-instruction_handler |
db 'vpandq',0DBh |
dw avx_q_instruction_evex-instruction_handler |
db 'vpavgb',0E0h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpavgw',0E3h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpcmov',0A2h |
dw vpcmov_instruction-instruction_handler |
db 'vpcmpb',-1 |
dw avx512_cmp_b_instruction-instruction_handler |
db 'vpcmpd',-1 |
dw avx512_cmp_d_instruction-instruction_handler |
db 'vpcmpq',-1 |
dw avx512_cmp_q_instruction-instruction_handler |
db 'vpcmpw',-1 |
dw avx512_cmp_w_instruction-instruction_handler |
db 'vpcomb',-1 |
dw xop_pcom_b_instruction-instruction_handler |
db 'vpcomd',-1 |
1699,12 → 1905,24 |
dw xop_pcom_q_instruction-instruction_handler |
db 'vpcomw',-1 |
dw xop_pcom_w_instruction-instruction_handler |
db 'vpermb',8Dh |
dw avx_bw_instruction_38_evex-instruction_handler |
db 'vpermd',36h |
dw avx_permd_instruction-instruction_handler |
db 'vpermq',0 |
dw avx_permq_instruction-instruction_handler |
db 'vpermw',8Dh |
dw avx_bw_instruction_38_w1_evex-instruction_handler |
db 'vpperm',0A3h |
dw xop_128bit_instruction-instruction_handler |
db 'vprold',1 |
dw avx512_rotate_d_instruction-instruction_handler |
db 'vprolq',1 |
dw avx512_rotate_q_instruction-instruction_handler |
db 'vprord',0 |
dw avx512_rotate_d_instruction-instruction_handler |
db 'vprorq',0 |
dw avx512_rotate_q_instruction-instruction_handler |
db 'vprotb',90h |
dw xop_shift_instruction-instruction_handler |
db 'vprotd',92h |
1730,43 → 1948,49 |
db 'vpshlw',95h |
dw xop_shift_instruction-instruction_handler |
db 'vpslld',0F2h |
dw avx_bit_shift_instruction-instruction_handler |
dw avx_shift_d_instruction-instruction_handler |
db 'vpsllq',0F3h |
dw avx_bit_shift_instruction-instruction_handler |
dw avx_shift_q_instruction-instruction_handler |
db 'vpsllw',0F1h |
dw avx_bit_shift_instruction-instruction_handler |
dw avx_shift_bw_instruction-instruction_handler |
db 'vpsrad',0E2h |
dw avx_bit_shift_instruction-instruction_handler |
dw avx_shift_d_instruction-instruction_handler |
db 'vpsraq',0E2h |
dw avx_shift_q_instruction_evex-instruction_handler |
db 'vpsraw',0E1h |
dw avx_bit_shift_instruction-instruction_handler |
dw avx_shift_bw_instruction-instruction_handler |
db 'vpsrld',0D2h |
dw avx_bit_shift_instruction-instruction_handler |
dw avx_shift_d_instruction-instruction_handler |
db 'vpsrlq',0D3h |
dw avx_bit_shift_instruction-instruction_handler |
dw avx_shift_q_instruction-instruction_handler |
db 'vpsrlw',0D1h |
dw avx_bit_shift_instruction-instruction_handler |
dw avx_shift_bw_instruction-instruction_handler |
db 'vpsubb',0F8h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpsubd',0FAh |
dw avx_pd_instruction-instruction_handler |
dw avx_d_instruction-instruction_handler |
db 'vpsubq',0FBh |
dw avx_pd_instruction-instruction_handler |
dw avx_q_instruction-instruction_handler |
db 'vpsubw',0F9h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vptest',17h |
dw avx_single_source_instruction_38-instruction_handler |
dw avx_single_source_instruction_38_noevex-instruction_handler |
db 'vpxord',0EFh |
dw avx_d_instruction_evex-instruction_handler |
db 'vpxorq',0EFh |
dw avx_q_instruction_evex-instruction_handler |
db 'vrcpps',53h |
dw avx_single_source_ps_instruction-instruction_handler |
dw avx_single_source_ps_instruction_noevex-instruction_handler |
db 'vrcpss',53h |
dw avx_ss_instruction-instruction_handler |
dw avx_ss_instruction_noevex-instruction_handler |
db 'vsubpd',5Ch |
dw avx_pd_instruction-instruction_handler |
dw avx_pd_instruction_er-instruction_handler |
db 'vsubps',5Ch |
dw avx_ps_instruction-instruction_handler |
dw avx_ps_instruction_er-instruction_handler |
db 'vsubsd',5Ch |
dw avx_sd_instruction-instruction_handler |
dw avx_sd_instruction_er-instruction_handler |
db 'vsubss',5Ch |
dw avx_ss_instruction-instruction_handler |
dw avx_ss_instruction_er-instruction_handler |
db 'vxorpd',57h |
dw avx_pd_instruction-instruction_handler |
db 'vxorps',57h |
1775,23 → 1999,25 |
dw simple_extended_instruction-instruction_handler |
db 'wrmsrq',30h |
dw simple_extended_instruction_64bit-instruction_handler |
db 'wrpkru',0EFh |
dw simple_instruction_0f_01-instruction_handler |
db 'xabort',0 |
dw xabort_instruction-instruction_handler |
db 'xbegin',0 |
dw xbegin_instruction-instruction_handler |
db 'xgetbv',0D0h |
dw simple_vmx_instruction-instruction_handler |
dw simple_instruction_0f_01-instruction_handler |
db 'xrstor',101b |
dw fxsave_instruction-instruction_handler |
db 'xsetbv',0D1h |
dw simple_vmx_instruction-instruction_handler |
dw simple_instruction_0f_01-instruction_handler |
instructions_7: |
db 'blcfill',11h |
dw tbm_instruction-instruction_handler |
db 'blendpd',0Dh |
dw sse4_instruction_3a_imm8-instruction_handler |
dw sse4_instruction_66_3a_imm8-instruction_handler |
db 'blendps',0Ch |
dw sse4_instruction_3a_imm8-instruction_handler |
dw sse4_instruction_66_3a_imm8-instruction_handler |
db 'blsfill',12h |
dw tbm_instruction-instruction_handler |
db 'clflush',111b |
1921,7 → 2147,7 |
db 'movq2dq',0 |
dw movq2dq_instruction-instruction_handler |
db 'mpsadbw',42h |
dw sse4_instruction_3a_imm8-instruction_handler |
dw sse4_instruction_66_3a_imm8-instruction_handler |
db 'paddusb',0DCh |
dw basic_mmx_instruction-instruction_handler |
db 'paddusw',0DDh |
1931,13 → 2157,13 |
db 'pavgusb',0BFh |
dw amd3dnow_instruction-instruction_handler |
db 'pblendw',0Eh |
dw sse4_instruction_3a_imm8-instruction_handler |
dw sse4_instruction_66_3a_imm8-instruction_handler |
db 'pcmpeqb',74h |
dw basic_mmx_instruction-instruction_handler |
db 'pcmpeqd',76h |
dw basic_mmx_instruction-instruction_handler |
db 'pcmpeqq',29h |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'pcmpeqw',75h |
dw basic_mmx_instruction-instruction_handler |
db 'pcmpgtb',64h |
1945,9 → 2171,11 |
db 'pcmpgtd',66h |
dw basic_mmx_instruction-instruction_handler |
db 'pcmpgtq',37h |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'pcmpgtw',65h |
dw basic_mmx_instruction-instruction_handler |
db 'pcommit',0F8h |
dw pcommit_instruction-instruction_handler |
db 'pfcmpeq',0B0h |
dw amd3dnow_instruction-instruction_handler |
db 'pfcmpge',90h |
1979,13 → 2207,13 |
db 'psubusw',0D9h |
dw basic_mmx_instruction-instruction_handler |
db 'roundpd',9 |
dw sse4_instruction_3a_imm8-instruction_handler |
dw sse4_instruction_66_3a_imm8-instruction_handler |
db 'roundps',8 |
dw sse4_instruction_3a_imm8-instruction_handler |
dw sse4_instruction_66_3a_imm8-instruction_handler |
db 'roundsd',0Bh |
dw sse4_sd_instruction_3a_imm8-instruction_handler |
dw sse4_sd_instruction_66_3a_imm8-instruction_handler |
db 'roundss',0Ah |
dw sse4_ss_instruction_3a_imm8-instruction_handler |
dw sse4_ss_instruction_66_3a_imm8-instruction_handler |
db 'rsqrtps',52h |
dw sse_ps_instruction-instruction_handler |
db 'rsqrtss',52h |
2007,11 → 2235,15 |
db 'ucomiss',2Eh |
dw comiss_instruction-instruction_handler |
db 'vaesdec',0DEh |
dw avx_128bit_instruction_38-instruction_handler |
dw avx_128bit_instruction_38_noevex-instruction_handler |
db 'vaesenc',0DCh |
dw avx_128bit_instruction_38-instruction_handler |
dw avx_128bit_instruction_38_noevex-instruction_handler |
db 'vaesimc',0DBh |
dw avx_single_source_128bit_instruction_38-instruction_handler |
dw avx_single_source_128bit_instruction_38_noevex-instruction_handler |
db 'valignd',3 |
dw avx_d_instruction_3a_imm8_evex-instruction_handler |
db 'valignq',3 |
dw avx_q_instruction_3a_imm8_evex-instruction_handler |
db 'vandnpd',55h |
dw avx_pd_instruction-instruction_handler |
db 'vandnps',55h |
2020,6 → 2252,10 |
dw avx_comisd_instruction-instruction_handler |
db 'vcomiss',2Fh |
dw avx_comiss_instruction-instruction_handler |
db 'vexp2pd',0C8h |
dw avx512_exp2pd_instruction-instruction_handler |
db 'vexp2ps',0C8h |
dw avx512_exp2ps_instruction-instruction_handler |
db 'vfrczpd',81h |
dw xop_single_source_instruction-instruction_handler |
db 'vfrczps',80h |
2029,25 → 2265,25 |
db 'vfrczss',82h |
dw xop_single_source_ss_instruction-instruction_handler |
db 'vhaddpd',07Ch |
dw avx_pd_instruction-instruction_handler |
dw avx_pd_instruction_noevex-instruction_handler |
db 'vhaddps',07Ch |
dw avx_haddps_instruction-instruction_handler |
dw avx_ps_instruction_noevex-instruction_handler |
db 'vhsubpd',07Dh |
dw avx_pd_instruction-instruction_handler |
dw avx_pd_instruction_noevex-instruction_handler |
db 'vhsubps',07Dh |
dw avx_haddps_instruction-instruction_handler |
dw avx_ps_instruction_noevex-instruction_handler |
db 'virtual',0 |
dw virtual_directive-instruction_handler |
db 'vmclear',6 |
dw vmclear_instruction-instruction_handler |
db 'vmmcall',0D9h |
dw simple_vmx_instruction-instruction_handler |
dw simple_instruction_0f_01-instruction_handler |
db 'vmovapd',28h |
dw avx_movpd_instruction-instruction_handler |
db 'vmovaps',28h |
dw avx_movps_instruction-instruction_handler |
db 'vmovdqa',6Fh |
dw avx_movpd_instruction-instruction_handler |
dw avx_movdqa_instruction-instruction_handler |
db 'vmovdqu',6Fh |
dw avx_movdqu_instruction-instruction_handler |
db 'vmovhpd',16h |
2069,9 → 2305,21 |
db 'vmwrite',0 |
dw vmwrite_instruction-instruction_handler |
db 'vpaddsb',0ECh |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpaddsw',0EDh |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpandnd',0DFh |
dw avx_d_instruction_evex-instruction_handler |
db 'vpandnq',0DFh |
dw avx_q_instruction_evex-instruction_handler |
db 'vpcmpub',-1 |
dw avx512_cmp_ub_instruction-instruction_handler |
db 'vpcmpud',-1 |
dw avx512_cmp_ud_instruction-instruction_handler |
db 'vpcmpuq',-1 |
dw avx512_cmp_uq_instruction-instruction_handler |
db 'vpcmpuw',-1 |
dw avx512_cmp_uw_instruction-instruction_handler |
db 'vpcomub',-1 |
dw xop_pcom_ub_instruction-instruction_handler |
db 'vpcomud',-1 |
2085,21 → 2333,21 |
db 'vpermps',16h |
dw avx_permd_instruction-instruction_handler |
db 'vpextrb',14h |
dw avx_pextrb_instruction-instruction_handler |
dw avx_extract_b_instruction-instruction_handler |
db 'vpextrd',16h |
dw avx_pextrd_instruction-instruction_handler |
dw avx_extract_d_instruction-instruction_handler |
db 'vpextrq',16h |
dw avx_pextrq_instruction-instruction_handler |
dw avx_extract_q_instruction-instruction_handler |
db 'vpextrw',15h |
dw avx_pextrw_instruction-instruction_handler |
dw avx_extract_w_instruction-instruction_handler |
db 'vphaddd',2 |
dw avx_instruction_38-instruction_handler |
dw avx_pi_instruction_38_noevex-instruction_handler |
db 'vphaddw',1 |
dw avx_instruction_38-instruction_handler |
dw avx_pi_instruction_38_noevex-instruction_handler |
db 'vphsubd',6 |
dw avx_instruction_38-instruction_handler |
dw avx_pi_instruction_38_noevex-instruction_handler |
db 'vphsubw',5 |
dw avx_instruction_38-instruction_handler |
dw avx_pi_instruction_38_noevex-instruction_handler |
db 'vpinsrb',20h |
dw avx_pinsrb_instruction-instruction_handler |
db 'vpinsrd',22h |
2109,83 → 2357,121 |
db 'vpinsrw',0C4h |
dw avx_pinsrw_instruction-instruction_handler |
db 'vpmaxsb',3Ch |
dw avx_instruction_38-instruction_handler |
dw avx_bw_instruction_38-instruction_handler |
db 'vpmaxsd',3Dh |
dw avx_instruction_38-instruction_handler |
dw avx_d_instruction_38-instruction_handler |
db 'vpmaxsq',3Dh |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vpmaxsw',0EEh |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpmaxub',0DEh |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpmaxud',3Fh |
dw avx_instruction_38-instruction_handler |
dw avx_d_instruction_38-instruction_handler |
db 'vpmaxuq',3Fh |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vpmaxuw',3Eh |
dw avx_instruction_38-instruction_handler |
dw avx_bw_instruction_38-instruction_handler |
db 'vpminsb',38h |
dw avx_instruction_38-instruction_handler |
dw avx_bw_instruction_38-instruction_handler |
db 'vpminsd',39h |
dw avx_instruction_38-instruction_handler |
dw avx_d_instruction_38-instruction_handler |
db 'vpminsq',39h |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vpminsw',0EAh |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpminub',0DAh |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpminud',3Bh |
dw avx_instruction_38-instruction_handler |
dw avx_d_instruction_38-instruction_handler |
db 'vpminuq',3Bh |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vpminuw',3Ah |
dw avx_instruction_38-instruction_handler |
dw avx_bw_instruction_38-instruction_handler |
db 'vpmovdb',31h |
dw avx512_pmovdb_instruction-instruction_handler |
db 'vpmovdw',33h |
dw avx512_pmovwb_instruction-instruction_handler |
db 'vpmovqb',32h |
dw avx512_pmovqb_instruction-instruction_handler |
db 'vpmovqd',35h |
dw avx512_pmovwb_instruction-instruction_handler |
db 'vpmovqw',34h |
dw avx512_pmovdb_instruction-instruction_handler |
db 'vpmovwb',30h |
dw avx512_pmovwb_instruction-instruction_handler |
db 'vpmuldq',28h |
dw avx_instruction_38-instruction_handler |
dw avx_q_instruction_38-instruction_handler |
db 'vpmulhw',0E5h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpmulld',40h |
dw avx_instruction_38-instruction_handler |
dw avx_d_instruction_38-instruction_handler |
db 'vpmullq',40h |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vpmullw',0D5h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vprolvd',15h |
dw avx_d_instruction_38_evex-instruction_handler |
db 'vprolvq',15h |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vprorvd',14h |
dw avx_d_instruction_38_evex-instruction_handler |
db 'vprorvq',14h |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vpsadbw',0F6h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpshufb',0 |
dw avx_instruction_38-instruction_handler |
db 'vpshufd',66h |
dw avx_pshufd_instruction-instruction_handler |
dw avx_bw_instruction_38-instruction_handler |
db 'vpshufd',70h |
dw avx_single_source_d_instruction_imm8-instruction_handler |
db 'vpsignb',8 |
dw avx_instruction_38-instruction_handler |
dw avx_pi_instruction_38_noevex-instruction_handler |
db 'vpsignd',0Ah |
dw avx_instruction_38-instruction_handler |
dw avx_pi_instruction_38_noevex-instruction_handler |
db 'vpsignw',9 |
dw avx_instruction_38-instruction_handler |
dw avx_pi_instruction_38_noevex-instruction_handler |
db 'vpslldq',111b |
dw avx_pslldq_instruction-instruction_handler |
dw avx_shift_dq_instruction-instruction_handler |
db 'vpsllvd',47h |
dw avx_instruction_38-instruction_handler |
dw avx_d_instruction_38-instruction_handler |
db 'vpsllvq',47h |
dw avx_instruction_38_w1-instruction_handler |
dw avx_q_instruction_38_w1-instruction_handler |
db 'vpsllvw',12h |
dw avx_bw_instruction_38_w1_evex-instruction_handler |
db 'vpsravd',46h |
dw avx_instruction_38-instruction_handler |
dw avx_d_instruction_38-instruction_handler |
db 'vpsravq',46h |
dw avx_q_instruction_38_w1_evex-instruction_handler |
db 'vpsravw',11h |
dw avx_bw_instruction_38_w1_evex-instruction_handler |
db 'vpsrldq',011b |
dw avx_pslldq_instruction-instruction_handler |
dw avx_shift_dq_instruction-instruction_handler |
db 'vpsrlvd',45h |
dw avx_instruction_38-instruction_handler |
dw avx_d_instruction_38-instruction_handler |
db 'vpsrlvq',45h |
dw avx_instruction_38_w1-instruction_handler |
dw avx_q_instruction_38_w1-instruction_handler |
db 'vpsrlvw',10h |
dw avx_bw_instruction_38_w1_evex-instruction_handler |
db 'vpsubsb',0E8h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpsubsw',0E9h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vshufpd',0C6h |
dw avx_pd_instruction_imm8-instruction_handler |
db 'vshufps',0C6h |
dw avx_ps_instruction_imm8-instruction_handler |
db 'vsqrtpd',51h |
dw avx_single_source_pd_instruction-instruction_handler |
dw avx_single_source_pd_instruction_er-instruction_handler |
db 'vsqrtps',51h |
dw avx_single_source_ps_instruction-instruction_handler |
dw avx_single_source_ps_instruction_er-instruction_handler |
db 'vsqrtsd',51h |
dw avx_sd_instruction-instruction_handler |
dw avx_sd_instruction_er-instruction_handler |
db 'vsqrtss',51h |
dw avx_ss_instruction-instruction_handler |
dw avx_ss_instruction_er-instruction_handler |
db 'vtestpd',0Fh |
dw avx_single_source_instruction_38-instruction_handler |
dw avx_single_source_instruction_38_noevex-instruction_handler |
db 'vtestps',0Eh |
dw avx_single_source_instruction_38-instruction_handler |
dw avx_single_source_instruction_38_noevex-instruction_handler |
db 'xsave64',100b |
dw fxsave_instruction_64bit-instruction_handler |
instructions_8: |
2194,9 → 2480,9 |
db 'addsubps',0D0h |
dw cvtpd2dq_instruction-instruction_handler |
db 'blendvpd',15h |
dw sse4_instruction_38_xmm0-instruction_handler |
dw sse4_instruction_66_38_xmm0-instruction_handler |
db 'blendvps',14h |
dw sse4_instruction_38_xmm0-instruction_handler |
dw sse4_instruction_66_38_xmm0-instruction_handler |
db 'cmpneqpd',4 |
dw cmp_pd_instruction-instruction_handler |
db 'cmpneqps',4 |
2269,8 → 2555,38 |
dw fldenv_instruction_16bit-instruction_handler |
db 'fxsave64',0 |
dw fxsave_instruction_64bit-instruction_handler |
db 'insertps',0 |
db 'insertps',21h |
dw insertps_instruction-instruction_handler |
db 'kortestb',98h |
dw mask_instruction_single_source_b-instruction_handler |
db 'kortestd',98h |
dw mask_instruction_single_source_d-instruction_handler |
db 'kortestq',98h |
dw mask_instruction_single_source_q-instruction_handler |
db 'kortestw',98h |
dw mask_instruction_single_source_w-instruction_handler |
db 'kshiftlb',32h |
dw mask_shift_instruction_d-instruction_handler |
db 'kshiftld',33h |
dw mask_shift_instruction_d-instruction_handler |
db 'kshiftlq',33h |
dw mask_shift_instruction_q-instruction_handler |
db 'kshiftlw',32h |
dw mask_shift_instruction_q-instruction_handler |
db 'kshiftrb',30h |
dw mask_shift_instruction_d-instruction_handler |
db 'kshiftrd',31h |
dw mask_shift_instruction_d-instruction_handler |
db 'kshiftrq',31h |
dw mask_shift_instruction_q-instruction_handler |
db 'kshiftrw',30h |
dw mask_shift_instruction_q-instruction_handler |
db 'kunpckbw',4Bh |
dw mask_instruction_b-instruction_handler |
db 'kunpckdq',4Bh |
dw mask_instruction_q-instruction_handler |
db 'kunpckwd',4Bh |
dw mask_instruction_w-instruction_handler |
db 'maskmovq',0 |
dw maskmovq_instruction-instruction_handler |
db 'movmskpd',0 |
2288,11 → 2604,11 |
db 'packsswb',63h |
dw basic_mmx_instruction-instruction_handler |
db 'packusdw',2Bh |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'packuswb',67h |
dw basic_mmx_instruction-instruction_handler |
db 'pblendvb',10h |
dw sse4_instruction_38_xmm0-instruction_handler |
dw sse4_instruction_66_38_xmm0-instruction_handler |
db 'pfrcpit1',0A6h |
dw amd3dnow_instruction-instruction_handler |
db 'pfrcpit2',0B6h |
2333,6 → 2649,10 |
dw rdfsbase_instruction-instruction_handler |
db 'rdgsbase',1 |
dw rdfsbase_instruction-instruction_handler |
db 'sha1msg1',0C9h |
dw sse4_instruction_38-instruction_handler |
db 'sha1msg2',0CAh |
dw sse4_instruction_38-instruction_handler |
db 'sysenter',34h |
dw simple_extended_instruction-instruction_handler |
db 'sysexitq',35h |
2346,9 → 2666,9 |
db 'unpcklps',14h |
dw sse_ps_instruction-instruction_handler |
db 'vblendpd',0Dh |
dw avx_instruction_3a_imm8-instruction_handler |
dw avx_pi_instruction_3a_imm8_noevex-instruction_handler |
db 'vblendps',0Ch |
dw avx_instruction_3a_imm8-instruction_handler |
dw avx_pi_instruction_3a_imm8_noevex-instruction_handler |
db 'vcmpeqpd',0 |
dw avx_cmp_pd_instruction-instruction_handler |
db 'vcmpeqps',0 |
2408,49 → 2728,67 |
db 'vldmxcsr',10b |
dw vldmxcsr_instruction-instruction_handler |
db 'vmlaunch',0C2h |
dw simple_vmx_instruction-instruction_handler |
dw simple_instruction_0f_01-instruction_handler |
db 'vmovddup',12h |
dw avx_movddup_instruction-instruction_handler |
db 'vmovdqu8',6Fh |
dw avx512_movdqu8_instruction-instruction_handler |
db 'vmovhlps',12h |
dw avx_movhlps_instruction-instruction_handler |
db 'vmovlhps',16h |
dw avx_movhlps_instruction-instruction_handler |
db 'vmovntdq',0E7h |
dw avx_movntpd_instruction-instruction_handler |
dw avx_movntdq_instruction-instruction_handler |
db 'vmovntpd',2Bh |
dw avx_movntpd_instruction-instruction_handler |
db 'vmovntps',2Bh |
dw avx_movntps_instruction-instruction_handler |
db 'vmpsadbw',42h |
dw avx_instruction_3a_imm8-instruction_handler |
dw avx_pi_instruction_3a_imm8_noevex-instruction_handler |
db 'vmresume',0C3h |
dw simple_vmx_instruction-instruction_handler |
dw simple_instruction_0f_01-instruction_handler |
db 'vpaddusb',0DCh |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpaddusw',0DDh |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpalignr',0Fh |
dw avx_instruction_3a_imm8-instruction_handler |
dw avx_pi_instruction_3a_imm8-instruction_handler |
db 'vpblendd',2 |
dw avx_instruction_3a_imm8-instruction_handler |
dw avx_pi_instruction_3a_imm8_noevex-instruction_handler |
db 'vpblendw',0Eh |
dw avx_instruction_3a_imm8-instruction_handler |
dw avx_pi_instruction_3a_imm8_noevex-instruction_handler |
db 'vpcmpeqb',74h |
dw avx_pd_instruction-instruction_handler |
dw avx_cmpeqb_instruction-instruction_handler |
db 'vpcmpeqd',76h |
dw avx_pd_instruction-instruction_handler |
dw avx_cmpeqd_instruction-instruction_handler |
db 'vpcmpeqq',29h |
dw avx_instruction_38-instruction_handler |
dw avx_cmpeqq_instruction-instruction_handler |
db 'vpcmpeqw',75h |
dw avx_pd_instruction-instruction_handler |
dw avx_cmpeqb_instruction-instruction_handler |
db 'vpcmpgtb',64h |
dw avx_pd_instruction-instruction_handler |
dw avx_cmpeqb_instruction-instruction_handler |
db 'vpcmpgtd',66h |
dw avx_pd_instruction-instruction_handler |
dw avx_cmpeqd_instruction-instruction_handler |
db 'vpcmpgtq',37h |
dw avx_instruction_38-instruction_handler |
dw avx_cmpeqq_instruction-instruction_handler |
db 'vpcmpgtw',65h |
dw avx_pd_instruction-instruction_handler |
dw avx_cmpeqb_instruction-instruction_handler |
db 'vpcmpleb',2 |
dw avx512_cmp_b_instruction-instruction_handler |
db 'vpcmpled',2 |
dw avx512_cmp_d_instruction-instruction_handler |
db 'vpcmpleq',2 |
dw avx512_cmp_q_instruction-instruction_handler |
db 'vpcmplew',2 |
dw avx512_cmp_w_instruction-instruction_handler |
db 'vpcmpltb',1 |
dw avx512_cmp_b_instruction-instruction_handler |
db 'vpcmpltd',1 |
dw avx512_cmp_d_instruction-instruction_handler |
db 'vpcmpltq',1 |
dw avx512_cmp_q_instruction-instruction_handler |
db 'vpcmpltw',1 |
dw avx512_cmp_w_instruction-instruction_handler |
db 'vpcomeqb',4 |
dw xop_pcom_b_instruction-instruction_handler |
db 'vpcomeqd',4 |
2491,6 → 2829,22 |
dw xop_pcom_q_instruction-instruction_handler |
db 'vpcomltw',0 |
dw xop_pcom_w_instruction-instruction_handler |
db 'vpermi2b',75h |
dw avx_bw_instruction_38_evex-instruction_handler |
db 'vpermi2d',76h |
dw avx_d_instruction_38_evex-instruction_handler |
db 'vpermi2q',76h |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vpermi2w',75h |
dw avx_bw_instruction_38_w1_evex-instruction_handler |
db 'vpermt2b',7Dh |
dw avx_bw_instruction_38_evex-instruction_handler |
db 'vpermt2d',7Eh |
dw avx_d_instruction_38_evex-instruction_handler |
db 'vpermt2q',7Eh |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vpermt2w',7Dh |
dw avx_bw_instruction_38_w1_evex-instruction_handler |
db 'vphaddbd',0C2h |
dw xop_single_source_128bit_instruction-instruction_handler |
db 'vphaddbq',0C3h |
2500,7 → 2854,7 |
db 'vphadddq',0CBh |
dw xop_single_source_128bit_instruction-instruction_handler |
db 'vphaddsw',3 |
dw avx_instruction_38-instruction_handler |
dw avx_pi_instruction_38_noevex-instruction_handler |
db 'vphaddwd',0C6h |
dw xop_single_source_128bit_instruction-instruction_handler |
db 'vphaddwq',0C7h |
2510,9 → 2864,13 |
db 'vphsubdq',0E3h |
dw xop_single_source_128bit_instruction-instruction_handler |
db 'vphsubsw',7 |
dw avx_instruction_38-instruction_handler |
dw avx_pi_instruction_38_noevex-instruction_handler |
db 'vphsubwd',0E2h |
dw xop_single_source_128bit_instruction-instruction_handler |
db 'vplzcntd',44h |
dw avx_single_source_d_instruction_38_evex-instruction_handler |
db 'vplzcntq',44h |
dw avx_single_source_q_instruction_38_evex-instruction_handler |
db 'vpmacsdd',9Eh |
dw xop_triple_source_128bit_instruction-instruction_handler |
db 'vpmacswd',96h |
2520,31 → 2878,91 |
db 'vpmacsww',95h |
dw xop_triple_source_128bit_instruction-instruction_handler |
db 'vpmaddwd',0F5h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpmovb2m',29h |
dw avx512_pmov_2m_instruction-instruction_handler |
db 'vpmovd2m',39h |
dw avx512_pmov_2m_instruction-instruction_handler |
db 'vpmovm2b',28h |
dw avx512_pmov_m2_instruction-instruction_handler |
db 'vpmovm2d',38h |
dw avx512_pmov_m2_instruction-instruction_handler |
db 'vpmovm2q',38h |
dw avx512_pmov_m2_instruction_w1-instruction_handler |
db 'vpmovm2w',28h |
dw avx512_pmov_m2_instruction_w1-instruction_handler |
db 'vpmovq2m',39h |
dw avx512_pmov_2m_instruction_w1-instruction_handler |
db 'vpmovsdb',21h |
dw avx512_pmovdb_instruction-instruction_handler |
db 'vpmovsdw',23h |
dw avx512_pmovwb_instruction-instruction_handler |
db 'vpmovsqb',22h |
dw avx512_pmovqb_instruction-instruction_handler |
db 'vpmovsqd',25h |
dw avx512_pmovwb_instruction-instruction_handler |
db 'vpmovsqw',24h |
dw avx512_pmovdb_instruction-instruction_handler |
db 'vpmovswb',20h |
dw avx512_pmovwb_instruction-instruction_handler |
db 'vpmovw2m',29h |
dw avx512_pmov_2m_instruction_w1-instruction_handler |
db 'vpmulhuw',0E4h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpmuludq',0F4h |
dw avx_pd_instruction-instruction_handler |
dw avx_q_instruction-instruction_handler |
db 'vpshufhw',0F3h |
dw avx_pshufd_instruction-instruction_handler |
dw avx_pshuf_w_instruction-instruction_handler |
db 'vpshuflw',0F2h |
dw avx_pshufd_instruction-instruction_handler |
dw avx_pshuf_w_instruction-instruction_handler |
db 'vpsubusb',0D8h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpsubusw',0D9h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vptestmb',26h |
dw avx512_ptestmb_instruction-instruction_handler |
db 'vptestmd',27h |
dw avx512_ptestmd_instruction-instruction_handler |
db 'vptestmq',27h |
dw avx512_ptestmq_instruction-instruction_handler |
db 'vptestmw',26h |
dw avx512_ptestmw_instruction-instruction_handler |
db 'vrangepd',50h |
dw avx512_pd_instruction_sae_imm8-instruction_handler |
db 'vrangeps',50h |
dw avx512_ps_instruction_sae_imm8-instruction_handler |
db 'vrangesd',51h |
dw avx512_sd_instruction_sae_imm8-instruction_handler |
db 'vrangess',51h |
dw avx512_ss_instruction_sae_imm8-instruction_handler |
db 'vrcp14pd',4Ch |
dw avx512_single_source_pd_instruction-instruction_handler |
db 'vrcp14ps',4Ch |
dw avx512_single_source_ps_instruction-instruction_handler |
db 'vrcp14sd',4Dh |
dw avx512_sd_instruction-instruction_handler |
db 'vrcp14ss',4Dh |
dw avx512_ss_instruction-instruction_handler |
db 'vrcp28pd',0CAh |
dw avx512_exp2pd_instruction-instruction_handler |
db 'vrcp28ps',0CAh |
dw avx512_exp2ps_instruction-instruction_handler |
db 'vrcp28sd',0CBh |
dw avx512_sd_instruction_sae-instruction_handler |
db 'vrcp28ss',0CBh |
dw avx512_ss_instruction_sae-instruction_handler |
db 'vroundpd',9 |
dw avx_single_source_instruction_3a_imm8-instruction_handler |
dw avx_single_source_instruction_3a_imm8_noevex-instruction_handler |
db 'vroundps',8 |
dw avx_single_source_instruction_3a_imm8-instruction_handler |
dw avx_single_source_instruction_3a_imm8_noevex-instruction_handler |
db 'vroundsd',0Bh |
dw avx_sd_instruction_3a_imm8-instruction_handler |
dw avx_sd_instruction_3a_imm8_noevex-instruction_handler |
db 'vroundss',0Ah |
dw avx_ss_instruction_3a_imm8-instruction_handler |
dw avx_ss_instruction_3a_imm8_noevex-instruction_handler |
db 'vrsqrtps',52h |
dw avx_single_source_ps_instruction-instruction_handler |
dw avx_single_source_ps_instruction_noevex-instruction_handler |
db 'vrsqrtss',52h |
dw avx_ss_instruction-instruction_handler |
dw avx_ss_instruction_noevex-instruction_handler |
db 'vstmxcsr',11b |
dw vldmxcsr_instruction-instruction_handler |
db 'vucomisd',2Eh |
2580,7 → 2998,7 |
dw cvtsd2si_instruction-instruction_handler |
db 'cvttss2si',2Ch |
dw cvtss2si_instruction-instruction_handler |
db 'extractps',0 |
db 'extractps',17h |
dw extractps_instruction-instruction_handler |
db 'fxrstor64',1 |
dw fxsave_instruction_64bit-instruction_handler |
2587,13 → 3005,13 |
db 'pclmulqdq',-1 |
dw pclmulqdq_instruction-instruction_handler |
db 'pcmpestri',61h |
dw sse4_instruction_3a_imm8-instruction_handler |
dw sse4_instruction_66_3a_imm8-instruction_handler |
db 'pcmpestrm',60h |
dw sse4_instruction_3a_imm8-instruction_handler |
dw sse4_instruction_66_3a_imm8-instruction_handler |
db 'pcmpistri',63h |
dw sse4_instruction_3a_imm8-instruction_handler |
dw sse4_instruction_66_3a_imm8-instruction_handler |
db 'pcmpistrm',62h |
dw sse4_instruction_3a_imm8-instruction_handler |
dw sse4_instruction_66_3a_imm8-instruction_handler |
db 'pmaddubsw',4 |
dw ssse3_instruction-instruction_handler |
db 'prefetchw',1 |
2610,14 → 3028,26 |
dw basic_mmx_instruction-instruction_handler |
db 'punpcklwd',61h |
dw basic_mmx_instruction-instruction_handler |
db 'sha1nexte',0C8h |
dw sse4_instruction_38-instruction_handler |
db 'sha1rnds4',0CCh |
dw sse4_instruction_3a_imm8-instruction_handler |
db 'useavx256',0 |
dw set_evex_mode-instruction_handler |
db 'useavx512',1 |
dw set_evex_mode-instruction_handler |
db 'vaddsubpd',0D0h |
dw avx_pd_instruction-instruction_handler |
dw avx_pd_instruction_noevex-instruction_handler |
db 'vaddsubps',0D0h |
dw avx_haddps_instruction-instruction_handler |
dw avx_ps_instruction_noevex-instruction_handler |
db 'vblendmpd',65h |
dw avx_pd_instruction_38_evex-instruction_handler |
db 'vblendmps',65h |
dw avx_ps_instruction_66_38_evex-instruction_handler |
db 'vblendvpd',4Bh |
dw avx_triple_source_instruction_3a-instruction_handler |
dw avx_triple_source_instruction_3a_noevex-instruction_handler |
db 'vblendvps',4Ah |
dw avx_triple_source_instruction_3a-instruction_handler |
dw avx_triple_source_instruction_3a_noevex-instruction_handler |
db 'vcmpneqpd',4 |
dw avx_cmp_pd_instruction-instruction_handler |
db 'vcmpneqps',4 |
2669,31 → 3099,45 |
db 'vcvtdq2pd',0E6h |
dw avx_cvtdq2pd_instruction-instruction_handler |
db 'vcvtdq2ps',5Bh |
dw avx_single_source_ps_instruction-instruction_handler |
dw avx_single_source_ps_instruction_er-instruction_handler |
db 'vcvtpd2dq',0E6h |
dw avx_cvtpd2dq_instruction-instruction_handler |
db 'vcvtpd2ps',5Ah |
dw avx_cvtpd2ps_instruction-instruction_handler |
db 'vcvtpd2qq',7Bh |
dw avx_single_source_pd_instruction_er_evex-instruction_handler |
db 'vcvtph2ps',13h |
dw vcvtph2ps_instruction-instruction_handler |
dw avx_cvtph2ps_instruction-instruction_handler |
db 'vcvtps2dq',5Bh |
dw avx_single_source_pd_instruction-instruction_handler |
dw avx_cvtps2dq_instruction-instruction_handler |
db 'vcvtps2pd',5Ah |
dw avx_cvtps2pd_instruction-instruction_handler |
db 'vcvtps2ph',1Dh |
dw vcvtps2ph_instruction-instruction_handler |
dw avx_cvtps2ph_instruction-instruction_handler |
db 'vcvtps2qq',7Bh |
dw avx_cvtps2qq_instruction-instruction_handler |
db 'vcvtqq2pd',0E6h |
dw avx_cvtqq2pd_instruction-instruction_handler |
db 'vcvtqq2ps',5Bh |
dw avx_cvtpd2udq_instruction-instruction_handler |
db 'vcvtsd2si',2Dh |
dw avx_cvtsd2si_instruction-instruction_handler |
db 'vcvtsd2ss',5Ah |
dw avx_sd_instruction-instruction_handler |
dw avx_sd_instruction_er-instruction_handler |
db 'vcvtsi2sd',2Ah |
dw avx_cvtsi2sd_instruction-instruction_handler |
db 'vcvtsi2ss',2Ah |
dw avx_cvtsi2ss_instruction-instruction_handler |
db 'vcvtss2sd',5Ah |
dw avx_ss_instruction-instruction_handler |
dw avx_ss_instruction_sae-instruction_handler |
db 'vcvtss2si',2Dh |
dw avx_cvtss2si_instruction-instruction_handler |
db 'vdbpsadbw',42h |
dw avx_d_instruction_3a_imm8_evex-instruction_handler |
db 'vexpandpd',88h |
dw avx_single_source_q_instruction_38_evex-instruction_handler |
db 'vexpandps',88h |
dw avx_single_source_d_instruction_38_evex-instruction_handler |
db 'vfnmaddpd',79h |
dw fma4_instruction_p-instruction_handler |
db 'vfnmaddps',78h |
2710,8 → 3154,26 |
dw fma4_instruction_sd-instruction_handler |
db 'vfnmsubss',7Eh |
dw fma4_instruction_ss-instruction_handler |
db 'vinsertps',0 |
db 'vgetexppd',42h |
dw avx512_single_source_pd_instruction_sae-instruction_handler |
db 'vgetexpps',42h |
dw avx512_single_source_ps_instruction_sae-instruction_handler |
db 'vgetexpsd',43h |
dw avx512_sd_instruction_sae-instruction_handler |
db 'vgetexpss',43h |
dw avx512_ss_instruction_sae-instruction_handler |
db 'vinsertps',21h |
dw avx_insertps_instruction-instruction_handler |
db 'vmovdqa32',6Fh |
dw avx512_movdqa32_instruction-instruction_handler |
db 'vmovdqa64',6Fh |
dw avx512_movdqa64_instruction-instruction_handler |
db 'vmovdqu16',6Fh |
dw avx512_movdqu16_instruction-instruction_handler |
db 'vmovdqu32',6Fh |
dw avx512_movdqu32_instruction-instruction_handler |
db 'vmovdqu64',6Fh |
dw avx512_movdqu64_instruction-instruction_handler |
db 'vmovmskpd',0 |
dw avx_movmskpd_instruction-instruction_handler |
db 'vmovmskps',0 |
2723,15 → 3185,63 |
db 'vmovsldup',12h |
dw avx_movshdup_instruction-instruction_handler |
db 'vpackssdw',6Bh |
dw avx_pd_instruction-instruction_handler |
dw avx_d_instruction-instruction_handler |
db 'vpacksswb',63h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpackusdw',2Bh |
dw avx_instruction_38-instruction_handler |
dw avx_d_instruction_38-instruction_handler |
db 'vpackuswb',67h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpblendmb',66h |
dw avx_bw_instruction_38_evex-instruction_handler |
db 'vpblendmd',64h |
dw avx_d_instruction_38_evex-instruction_handler |
db 'vpblendmq',64h |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vpblendmw',66h |
dw avx_bw_instruction_38_w1_evex-instruction_handler |
db 'vpblendvb',4Ch |
dw avx_triple_source_instruction_3a-instruction_handler |
dw avx_triple_source_instruction_3a_noevex-instruction_handler |
db 'vpcmpleub',2 |
dw avx512_cmp_ub_instruction-instruction_handler |
db 'vpcmpleud',2 |
dw avx512_cmp_ud_instruction-instruction_handler |
db 'vpcmpleuq',2 |
dw avx512_cmp_uq_instruction-instruction_handler |
db 'vpcmpleuw',2 |
dw avx512_cmp_uw_instruction-instruction_handler |
db 'vpcmpltub',1 |
dw avx512_cmp_ub_instruction-instruction_handler |
db 'vpcmpltud',1 |
dw avx512_cmp_ud_instruction-instruction_handler |
db 'vpcmpltuq',1 |
dw avx512_cmp_uq_instruction-instruction_handler |
db 'vpcmpltuw',1 |
dw avx512_cmp_uw_instruction-instruction_handler |
db 'vpcmpneqb',4 |
dw avx512_cmp_b_instruction-instruction_handler |
db 'vpcmpneqd',4 |
dw avx512_cmp_d_instruction-instruction_handler |
db 'vpcmpneqq',4 |
dw avx512_cmp_q_instruction-instruction_handler |
db 'vpcmpneqw',4 |
dw avx512_cmp_b_instruction-instruction_handler |
db 'vpcmpnleb',6 |
dw avx512_cmp_b_instruction-instruction_handler |
db 'vpcmpnled',6 |
dw avx512_cmp_d_instruction-instruction_handler |
db 'vpcmpnleq',6 |
dw avx512_cmp_q_instruction-instruction_handler |
db 'vpcmpnlew',6 |
dw avx512_cmp_b_instruction-instruction_handler |
db 'vpcmpnltb',5 |
dw avx512_cmp_b_instruction-instruction_handler |
db 'vpcmpnltd',5 |
dw avx512_cmp_d_instruction-instruction_handler |
db 'vpcmpnltq',5 |
dw avx512_cmp_q_instruction-instruction_handler |
db 'vpcmpnltw',5 |
dw avx512_cmp_b_instruction-instruction_handler |
db 'vpcomequb',4 |
dw xop_pcom_ub_instruction-instruction_handler |
db 'vpcomequd',4 |
2780,10 → 3290,22 |
dw xop_pcom_q_instruction-instruction_handler |
db 'vpcomneqw',5 |
dw xop_pcom_w_instruction-instruction_handler |
db 'vpermi2pd',77h |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vpermi2ps',77h |
dw avx_d_instruction_38_evex-instruction_handler |
db 'vpermilpd',5 |
dw avx_permil_instruction-instruction_handler |
dw avx_permilpd_instruction-instruction_handler |
db 'vpermilps',4 |
dw avx_permil_instruction-instruction_handler |
dw avx_permilps_instruction-instruction_handler |
db 'vpermt2pd',7Fh |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vpermt2ps',7Fh |
dw avx_d_instruction_38_evex-instruction_handler |
db 'vpexpandd',89h |
dw avx_single_source_d_instruction_38_evex-instruction_handler |
db 'vpexpandq',89h |
dw avx_single_source_q_instruction_38_evex-instruction_handler |
db 'vphaddubd',0D2h |
dw xop_single_source_128bit_instruction-instruction_handler |
db 'vphaddubq',0D3h |
2817,11 → 3339,23 |
db 'vpmovsxbw',20h |
dw avx_pmovsxbw_instruction-instruction_handler |
db 'vpmovsxdq',25h |
dw avx_pmovsxdq_instruction-instruction_handler |
dw avx_pmovsxbw_instruction-instruction_handler |
db 'vpmovsxwd',23h |
dw avx_pmovsxwd_instruction-instruction_handler |
dw avx_pmovsxbw_instruction-instruction_handler |
db 'vpmovsxwq',24h |
dw avx_pmovsxwq_instruction-instruction_handler |
dw avx_pmovsxbd_instruction-instruction_handler |
db 'vpmovusdb',11h |
dw avx512_pmovdb_instruction-instruction_handler |
db 'vpmovusdw',13h |
dw avx512_pmovwb_instruction-instruction_handler |
db 'vpmovusqb',12h |
dw avx512_pmovqb_instruction-instruction_handler |
db 'vpmovusqd',15h |
dw avx512_pmovwb_instruction-instruction_handler |
db 'vpmovusqw',14h |
dw avx512_pmovdb_instruction-instruction_handler |
db 'vpmovuswb',10h |
dw avx512_pmovwb_instruction-instruction_handler |
db 'vpmovzxbd',31h |
dw avx_pmovsxbd_instruction-instruction_handler |
db 'vpmovzxbq',32h |
2829,13 → 3363,37 |
db 'vpmovzxbw',30h |
dw avx_pmovsxbw_instruction-instruction_handler |
db 'vpmovzxdq',35h |
dw avx_pmovsxdq_instruction-instruction_handler |
dw avx_pmovsxbw_instruction-instruction_handler |
db 'vpmovzxwd',33h |
dw avx_pmovsxwd_instruction-instruction_handler |
dw avx_pmovsxbw_instruction-instruction_handler |
db 'vpmovzxwq',34h |
dw avx_pmovsxwq_instruction-instruction_handler |
dw avx_pmovsxbd_instruction-instruction_handler |
db 'vpmulhrsw',0Bh |
dw avx_instruction_38-instruction_handler |
dw avx_bw_instruction_38-instruction_handler |
db 'vptestnmb',26h |
dw avx512_ptestnmb_instruction-instruction_handler |
db 'vptestnmd',27h |
dw avx512_ptestnmd_instruction-instruction_handler |
db 'vptestnmq',27h |
dw avx512_ptestnmq_instruction-instruction_handler |
db 'vptestnmw',26h |
dw avx512_ptestnmw_instruction-instruction_handler |
db 'vreducepd',56h |
dw avx512_single_source_pd_instruction_sae_imm8-instruction_handler |
db 'vreduceps',56h |
dw avx512_single_source_ps_instruction_sae_imm8-instruction_handler |
db 'vreducesd',57h |
dw avx512_sd_instruction_sae_imm8-instruction_handler |
db 'vreducess',57h |
dw avx512_ss_instruction_sae_imm8-instruction_handler |
db 'vscalefpd',2Ch |
dw avx512_pd_instruction_er-instruction_handler |
db 'vscalefps',2Ch |
dw avx512_ps_instruction_er-instruction_handler |
db 'vscalefsd',2Dh |
dw avx512_sd_instruction_er-instruction_handler |
db 'vscalefss',2Dh |
dw avx512_ss_instruction_er-instruction_handler |
db 'vunpckhpd',15h |
dw avx_pd_instruction-instruction_handler |
db 'vunpckhps',15h |
2846,9 → 3404,11 |
dw avx_ps_instruction-instruction_handler |
instructions_10: |
db 'aesdeclast',0DFh |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'aesenclast',0DDh |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'clflushopt',7 |
dw clflushopt_instruction-instruction_handler |
db 'cmpunordpd',3 |
dw cmp_pd_instruction-instruction_handler |
db 'cmpunordps',3 |
2866,7 → 3426,7 |
db 'maskmovdqu',0 |
dw maskmovdqu_instruction-instruction_handler |
db 'phminposuw',41h |
dw sse4_instruction_38-instruction_handler |
dw sse4_instruction_66_38-instruction_handler |
db 'prefetcht0',1 |
dw prefetch_instruction-instruction_handler |
db 'prefetcht1',2 |
2877,6 → 3437,10 |
dw sse_pd_instruction-instruction_handler |
db 'punpcklqdq',6Ch |
dw sse_pd_instruction-instruction_handler |
db 'sha256msg1',0CCh |
dw sse4_instruction_38-instruction_handler |
db 'sha256msg2',0CDh |
dw sse4_instruction_38-instruction_handler |
db 'vcmptruepd',0Fh |
dw avx_cmp_pd_instruction-instruction_handler |
db 'vcmptrueps',0Fh |
2885,24 → 3449,68 |
dw avx_cmp_sd_instruction-instruction_handler |
db 'vcmptruess',0Fh |
dw avx_cmp_ss_instruction-instruction_handler |
db 'vcvtpd2udq',79h |
dw avx_cvtpd2udq_instruction-instruction_handler |
db 'vcvtpd2uqq',79h |
dw avx_single_source_pd_instruction_er_evex-instruction_handler |
db 'vcvtps2udq',79h |
dw avx_single_source_ps_instruction_er_evex-instruction_handler |
db 'vcvtps2uqq',79h |
dw avx_cvtps2qq_instruction-instruction_handler |
db 'vcvtsd2usi',79h |
dw avx_cvtsd2usi_instruction-instruction_handler |
db 'vcvtss2usi',79h |
dw avx_cvtss2usi_instruction-instruction_handler |
db 'vcvttpd2dq',0E6h |
dw avx_cvtpd2ps_instruction-instruction_handler |
dw avx_cvttpd2dq_instruction-instruction_handler |
db 'vcvttpd2qq',7Ah |
dw avx_single_source_pd_instruction_sae_evex-instruction_handler |
db 'vcvttps2dq',5Bh |
dw avx_cvttps2dq_instruction-instruction_handler |
db 'vcvttps2qq',7Ah |
dw avx_cvttps2qq_instruction-instruction_handler |
db 'vcvttsd2si',2Ch |
dw avx_cvtsd2si_instruction-instruction_handler |
dw avx_cvttsd2si_instruction-instruction_handler |
db 'vcvttss2si',2Ch |
dw avx_cvtss2si_instruction-instruction_handler |
db 'vextractps',0 |
dw avx_extractps_instruction-instruction_handler |
dw avx_cvttss2si_instruction-instruction_handler |
db 'vcvtudq2pd',7Ah |
dw avx_cvtudq2pd_instruction-instruction_handler |
db 'vcvtudq2ps',7Ah |
dw avx_cvtudq2ps_instruction-instruction_handler |
db 'vcvtuqq2pd',7Ah |
dw avx_cvtqq2pd_instruction-instruction_handler |
db 'vcvtuqq2ps',7Ah |
dw avx_cvtuqq2ps_instruction-instruction_handler |
db 'vcvtusi2sd',7Bh |
dw avx_cvtusi2sd_instruction-instruction_handler |
db 'vcvtusi2ss',7Bh |
dw avx_cvtusi2ss_instruction-instruction_handler |
db 'vextractps',17h |
dw avx_extract_d_instruction-instruction_handler |
db 'vfpclasspd',66h |
dw avx512_fpclasspd_instruction-instruction_handler |
db 'vfpclassps',66h |
dw avx512_fpclassps_instruction-instruction_handler |
db 'vfpclasssd',67h |
dw avx512_fpclasssd_instruction-instruction_handler |
db 'vfpclassss',67h |
dw avx512_fpclassss_instruction-instruction_handler |
db 'vgatherdpd',92h |
dw gather_instruction_pd-instruction_handler |
dw gather_pd_instruction-instruction_handler |
db 'vgatherdps',92h |
dw gather_instruction_ps-instruction_handler |
dw gather_ps_instruction-instruction_handler |
db 'vgatherqpd',93h |
dw gather_instruction_pd-instruction_handler |
dw gather_pd_instruction-instruction_handler |
db 'vgatherqps',93h |
dw gather_instruction_ps-instruction_handler |
dw gather_ps_instruction-instruction_handler |
db 'vgetmantpd',26h |
dw avx512_single_source_pd_instruction_sae_imm8-instruction_handler |
db 'vgetmantps',26h |
dw avx512_single_source_ps_instruction_sae_imm8-instruction_handler |
db 'vgetmantsd',27h |
dw avx512_sd_instruction_sae_imm8-instruction_handler |
db 'vgetmantss',27h |
dw avx512_ss_instruction_sae_imm8-instruction_handler |
db 'vmaskmovpd',2Dh |
dw avx_maskmov_instruction-instruction_handler |
db 'vmaskmovps',2Ch |
2910,13 → 3518,37 |
db 'vpclmulqdq',-1 |
dw avx_pclmulqdq_instruction-instruction_handler |
db 'vpcmpestri',61h |
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler |
dw avx_single_source_128bit_instruction_3a_imm8_noevex-instruction_handler |
db 'vpcmpestrm',60h |
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler |
dw avx_single_source_128bit_instruction_3a_imm8_noevex-instruction_handler |
db 'vpcmpistri',63h |
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler |
dw avx_single_source_128bit_instruction_3a_imm8_noevex-instruction_handler |
db 'vpcmpistrm',62h |
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler |
dw avx_single_source_128bit_instruction_3a_imm8_noevex-instruction_handler |
db 'vpcmpnequb',4 |
dw avx512_cmp_ub_instruction-instruction_handler |
db 'vpcmpnequd',4 |
dw avx512_cmp_ud_instruction-instruction_handler |
db 'vpcmpnequq',4 |
dw avx512_cmp_uq_instruction-instruction_handler |
db 'vpcmpnequw',4 |
dw avx512_cmp_uw_instruction-instruction_handler |
db 'vpcmpnleub',6 |
dw avx512_cmp_ub_instruction-instruction_handler |
db 'vpcmpnleud',6 |
dw avx512_cmp_ud_instruction-instruction_handler |
db 'vpcmpnleuq',6 |
dw avx512_cmp_uq_instruction-instruction_handler |
db 'vpcmpnleuw',6 |
dw avx512_cmp_uw_instruction-instruction_handler |
db 'vpcmpnltub',5 |
dw avx512_cmp_ub_instruction-instruction_handler |
db 'vpcmpnltud',5 |
dw avx512_cmp_ud_instruction-instruction_handler |
db 'vpcmpnltuq',5 |
dw avx512_cmp_uq_instruction-instruction_handler |
db 'vpcmpnltuw',5 |
dw avx512_cmp_uw_instruction-instruction_handler |
db 'vpcomnequb',5 |
dw xop_pcom_ub_instruction-instruction_handler |
db 'vpcomnequd',5 |
2942,13 → 3574,13 |
db 'vpermil2ps',48h |
dw vpermil2_instruction-instruction_handler |
db 'vpgatherdd',90h |
dw gather_instruction_ps-instruction_handler |
dw gather_ps_instruction-instruction_handler |
db 'vpgatherdq',90h |
dw gather_instruction_pd-instruction_handler |
dw gather_pd_instruction-instruction_handler |
db 'vpgatherqd',91h |
dw gather_instruction_ps-instruction_handler |
dw gather_ps_instruction-instruction_handler |
db 'vpgatherqq',91h |
dw gather_instruction_pd-instruction_handler |
dw gather_pd_instruction-instruction_handler |
db 'vpmacssdqh',8Fh |
dw xop_triple_source_128bit_instruction-instruction_handler |
db 'vpmacssdql',87h |
2956,23 → 3588,51 |
db 'vpmadcsswd',0A6h |
dw xop_triple_source_128bit_instruction-instruction_handler |
db 'vpmaddubsw',4 |
dw avx_instruction_38-instruction_handler |
dw avx_bw_instruction_38-instruction_handler |
db 'vpmaskmovd',8Ch |
dw avx_maskmov_instruction-instruction_handler |
db 'vpmaskmovq',8Ch |
dw avx_maskmov_w1_instruction-instruction_handler |
db 'vpternlogd',25h |
dw avx_d_instruction_3a_imm8_evex-instruction_handler |
db 'vpternlogq',25h |
dw avx_q_instruction_3a_imm8_evex-instruction_handler |
db 'vpunpckhbw',68h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpunpckhdq',6Ah |
dw avx_pd_instruction-instruction_handler |
dw avx_d_instruction-instruction_handler |
db 'vpunpckhwd',69h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpunpcklbw',60h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vpunpckldq',62h |
dw avx_pd_instruction-instruction_handler |
dw avx_d_instruction-instruction_handler |
db 'vpunpcklwd',61h |
dw avx_pd_instruction-instruction_handler |
dw avx_bw_instruction-instruction_handler |
db 'vrsqrt14pd',4Eh |
dw avx512_single_source_pd_instruction-instruction_handler |
db 'vrsqrt14ps',4Eh |
dw avx512_single_source_ps_instruction-instruction_handler |
db 'vrsqrt14sd',4Fh |
dw avx512_sd_instruction-instruction_handler |
db 'vrsqrt14ss',4Fh |
dw avx512_ss_instruction-instruction_handler |
db 'vrsqrt28pd',0CCh |
dw avx512_exp2pd_instruction-instruction_handler |
db 'vrsqrt28ps',0CCh |
dw avx512_exp2ps_instruction-instruction_handler |
db 'vrsqrt28sd',0CDh |
dw avx512_sd_instruction_sae-instruction_handler |
db 'vrsqrt28ss',0CDh |
dw avx512_ss_instruction_sae-instruction_handler |
db 'vshuff32x4',23h |
dw avx512_shuf_d_instruction-instruction_handler |
db 'vshuff64x2',23h |
dw avx512_shuf_q_instruction-instruction_handler |
db 'vshufi32x4',43h |
dw avx512_shuf_d_instruction-instruction_handler |
db 'vshufi64x2',43h |
dw avx512_shuf_q_instruction-instruction_handler |
db 'vzeroupper',77h |
dw vzeroupper_instruction-instruction_handler |
db 'xsaveopt64',110b |
2984,10 → 3644,14 |
dw pclmulqdq_instruction-instruction_handler |
db 'prefetchnta',0 |
dw prefetch_instruction-instruction_handler |
db 'prefetchwt1',2 |
dw amd_prefetch_instruction-instruction_handler |
db 'sha256rnds2',0CBh |
dw sse4_instruction_38_xmm0-instruction_handler |
db 'vaesdeclast',0DFh |
dw avx_128bit_instruction_38-instruction_handler |
dw avx_128bit_instruction_38_noevex-instruction_handler |
db 'vaesenclast',0DDh |
dw avx_128bit_instruction_38-instruction_handler |
dw avx_128bit_instruction_38_noevex-instruction_handler |
db 'vcmpeq_ospd',10h |
dw avx_cmp_pd_instruction-instruction_handler |
db 'vcmpeq_osps',10h |
3068,6 → 3732,30 |
dw avx_cmp_sd_instruction-instruction_handler |
db 'vcmpunordss',3 |
dw avx_cmp_ss_instruction-instruction_handler |
db 'vcompresspd',8Ah |
dw avx_compress_q_instruction-instruction_handler |
db 'vcompressps',8Ah |
dw avx_compress_d_instruction-instruction_handler |
db 'vcvttpd2udq',78h |
dw avx_cvttpd2udq_instruction-instruction_handler |
db 'vcvttpd2uqq',78h |
dw avx_single_source_pd_instruction_sae_evex-instruction_handler |
db 'vcvttps2udq',78h |
dw avx_cvttps2udq_instruction-instruction_handler |
db 'vcvttps2uqq',78h |
dw avx_cvttps2qq_instruction-instruction_handler |
db 'vcvttsd2usi',78h |
dw avx_cvttsd2usi_instruction-instruction_handler |
db 'vcvttss2usi',78h |
dw avx_cvttss2usi_instruction-instruction_handler |
db 'vfixupimmpd',54h |
dw avx512_pd_instruction_sae_imm8-instruction_handler |
db 'vfixupimmps',54h |
dw avx512_ps_instruction_sae_imm8-instruction_handler |
db 'vfixupimmsd',55h |
dw avx512_sd_instruction_sae_imm8-instruction_handler |
db 'vfixupimmss',55h |
dw avx512_ss_instruction_sae_imm8-instruction_handler |
db 'vfmadd132pd',98h |
dw fma_instruction_pd-instruction_handler |
db 'vfmadd132ps',98h |
3138,6 → 3826,10 |
dw xop_pcom_q_instruction-instruction_handler |
db 'vpcomfalsew',6 |
dw xop_pcom_w_instruction-instruction_handler |
db 'vpcompressd',8Bh |
dw avx_compress_d_instruction-instruction_handler |
db 'vpcompressq',8Bh |
dw avx_compress_q_instruction-instruction_handler |
db 'vpcomtrueub',7 |
dw xop_pcom_ub_instruction-instruction_handler |
db 'vpcomtrueud',7 |
3146,12 → 3838,44 |
dw xop_pcom_uq_instruction-instruction_handler |
db 'vpcomtrueuw',7 |
dw xop_pcom_uw_instruction-instruction_handler |
db 'vpconflictd',0C4h |
dw avx_single_source_d_instruction_38_evex-instruction_handler |
db 'vpconflictq',0C4h |
dw avx_single_source_q_instruction_38_evex-instruction_handler |
db 'vphminposuw',41h |
dw avx_single_source_instruction_38-instruction_handler |
dw avx_single_source_instruction_38_noevex-instruction_handler |
db 'vpmadd52huq',0B5h |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vpmadd52luq',0B4h |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vpscatterdd',0A0h |
dw scatter_ps_instruction-instruction_handler |
db 'vpscatterdq',0A0h |
dw scatter_pd_instruction-instruction_handler |
db 'vpscatterqd',0A1h |
dw scatter_ps_instruction-instruction_handler |
db 'vpscatterqq',0A1h |
dw scatter_pd_instruction-instruction_handler |
db 'vpunpckhqdq',6Dh |
dw avx_pd_instruction-instruction_handler |
dw avx_q_instruction-instruction_handler |
db 'vpunpcklqdq',6Ch |
dw avx_pd_instruction-instruction_handler |
dw avx_q_instruction-instruction_handler |
db 'vrndscalepd',9 |
dw avx512_single_source_pd_instruction_sae_imm8-instruction_handler |
db 'vrndscaleps',8 |
dw avx512_single_source_ps_instruction_sae_imm8-instruction_handler |
db 'vrndscalesd',0Bh |
dw avx512_sd_instruction_sae_imm8-instruction_handler |
db 'vrndscaless',0Ah |
dw avx512_ss_instruction_sae_imm8-instruction_handler |
db 'vscatterdpd',0A2h |
dw scatter_pd_instruction-instruction_handler |
db 'vscatterdps',0A2h |
dw scatter_ps_instruction-instruction_handler |
db 'vscatterqpd',0A3h |
dw scatter_pd_instruction-instruction_handler |
db 'vscatterqps',0A3h |
dw scatter_ps_instruction-instruction_handler |
instructions_12: |
db 'pclmulhqhqdq',10001b |
dw pclmulqdq_instruction-instruction_handler |
3273,6 → 3997,22 |
dw fma_instruction_sd-instruction_handler |
db 'vfnmsub231ss',0BFh |
dw fma_instruction_ss-instruction_handler |
db 'vinsertf32x4',18h |
dw avx512_insert_32x4_instruction-instruction_handler |
db 'vinsertf32x8',1Ah |
dw avx512_insert_32x8_instruction-instruction_handler |
db 'vinsertf64x2',18h |
dw avx512_insert_64x2_instruction-instruction_handler |
db 'vinsertf64x4',1Ah |
dw avx512_insert_64x4_instruction-instruction_handler |
db 'vinserti32x4',38h |
dw avx512_insert_32x4_instruction-instruction_handler |
db 'vinserti32x8',3Ah |
dw avx512_insert_32x8_instruction-instruction_handler |
db 'vinserti64x2',38h |
dw avx512_insert_64x2_instruction-instruction_handler |
db 'vinserti64x4',3Ah |
dw avx512_insert_64x4_instruction-instruction_handler |
db 'vpbroadcastb',78h |
dw avx_pbroadcastb_instruction-instruction_handler |
db 'vpbroadcastd',58h |
3322,6 → 4062,38 |
dw avx_cmp_sd_instruction-instruction_handler |
db 'vcmpunord_sss',13h |
dw avx_cmp_ss_instruction-instruction_handler |
db 'vextractf32x4',19h |
dw avx512_extract_32x4_instruction-instruction_handler |
db 'vextractf32x8',1Bh |
dw avx512_extract_32x8_instruction-instruction_handler |
db 'vextractf64x2',19h |
dw avx512_extract_64x2_instruction-instruction_handler |
db 'vextractf64x4',1Bh |
dw avx512_extract_64x4_instruction-instruction_handler |
db 'vextracti32x4',39h |
dw avx512_extract_32x4_instruction-instruction_handler |
db 'vextracti32x8',3Bh |
dw avx512_extract_32x8_instruction-instruction_handler |
db 'vextracti64x2',39h |
dw avx512_extract_64x2_instruction-instruction_handler |
db 'vextracti64x4',3Bh |
dw avx512_extract_64x4_instruction-instruction_handler |
db 'vgatherpf0dpd',1 |
dw gatherpf_dpd_instruction-instruction_handler |
db 'vgatherpf0dps',1 |
dw gatherpf_dps_instruction-instruction_handler |
db 'vgatherpf0qpd',1 |
dw gatherpf_qpd_instruction-instruction_handler |
db 'vgatherpf0qps',1 |
dw gatherpf_qps_instruction-instruction_handler |
db 'vgatherpf1dpd',2 |
dw gatherpf_dpd_instruction-instruction_handler |
db 'vgatherpf1dps',2 |
dw gatherpf_dps_instruction-instruction_handler |
db 'vgatherpf1qpd',2 |
dw gatherpf_qpd_instruction-instruction_handler |
db 'vgatherpf1qps',2 |
dw gatherpf_qps_instruction-instruction_handler |
db 'vpclmulhqlqdq',1 |
dw avx_pclmulqdq_instruction-instruction_handler |
db 'vpclmullqlqdq',0 |
3328,9 → 4100,9 |
dw avx_pclmulqdq_instruction-instruction_handler |
instructions_14: |
db 'vbroadcastf128',1Ah |
dw avx_broadcastf128_instruction-instruction_handler |
dw avx_broadcast_128_instruction_noevex-instruction_handler |
db 'vbroadcasti128',5Ah |
dw avx_broadcastf128_instruction-instruction_handler |
dw avx_broadcast_128_instruction_noevex-instruction_handler |
db 'vcmpfalse_ospd',1Bh |
dw avx_cmp_pd_instruction-instruction_handler |
db 'vcmpfalse_osps',1Bh |
3363,12 → 4135,54 |
dw fma_instruction_pd-instruction_handler |
db 'vfmsubadd231ps',0B7h |
dw fma_instruction_ps-instruction_handler |
db 'vpmultishiftqb',83h |
dw avx_q_instruction_38_evex-instruction_handler |
db 'vscatterpf0dpd',5 |
dw gatherpf_dpd_instruction-instruction_handler |
db 'vscatterpf0dps',5 |
dw gatherpf_dps_instruction-instruction_handler |
db 'vscatterpf0qpd',5 |
dw gatherpf_qpd_instruction-instruction_handler |
db 'vscatterpf0qps',5 |
dw gatherpf_qps_instruction-instruction_handler |
db 'vscatterpf1dpd',6 |
dw gatherpf_dpd_instruction-instruction_handler |
db 'vscatterpf1dps',6 |
dw gatherpf_dps_instruction-instruction_handler |
db 'vscatterpf1qpd',6 |
dw gatherpf_qpd_instruction-instruction_handler |
db 'vscatterpf1qps',6 |
dw gatherpf_qps_instruction-instruction_handler |
instructions_15: |
db 'aeskeygenassist',0DFh |
dw sse4_instruction_3a_imm8-instruction_handler |
dw sse4_instruction_66_3a_imm8-instruction_handler |
db 'vbroadcastf32x2',19h |
dw avx512_broadcast_32x2_instruction-instruction_handler |
db 'vbroadcastf32x4',1Ah |
dw avx512_broadcast_32x4_instruction-instruction_handler |
db 'vbroadcastf32x8',1Bh |
dw avx512_broadcast_32x8_instruction-instruction_handler |
db 'vbroadcastf64x2',1Ah |
dw avx512_broadcast_64x2_instruction-instruction_handler |
db 'vbroadcastf64x4',1Bh |
dw avx512_broadcast_64x4_instruction-instruction_handler |
db 'vbroadcasti32x2',59h |
dw avx512_broadcast_32x2_instruction-instruction_handler |
db 'vbroadcasti32x4',5Ah |
dw avx512_broadcast_32x4_instruction-instruction_handler |
db 'vbroadcasti32x8',5Bh |
dw avx512_broadcast_32x8_instruction-instruction_handler |
db 'vbroadcasti64x2',5Ah |
dw avx512_broadcast_64x2_instruction-instruction_handler |
db 'vbroadcasti64x4',5Bh |
dw avx512_broadcast_64x4_instruction-instruction_handler |
db 'vpbroadcastmb2q',2Ah |
dw avx512_pmov_m2_instruction_w1-instruction_handler |
db 'vpbroadcastmw2d',3Ah |
dw avx512_pmov_m2_instruction-instruction_handler |
instructions_16: |
db 'vaeskeygenassist',0DFh |
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler |
dw avx_single_source_128bit_instruction_3a_imm8_noevex-instruction_handler |
instructions_end: |
data_directives: |
/programs/develop/fasm/trunk/variable.inc |
---|
1,6 → 1,6 |
; flat assembler core variables |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
; Variables which have to be set up by interface: |
13,6 → 13,7 |
stack_limit dd ? |
initial_definitions dd ? |
input_file dd ? |
output_file dd ? |
symbols_file dd ? |
42,6 → 43,7 |
struc_label dd ? |
instant_macro_start dd ? |
parameters_end dd ? |
default_argument_value dd ? |
locals_counter rb 8 |
current_locals_prefix dd ? |
anonymous_reverse dd ? |
68,6 → 70,7 |
symbol_identifier dd ? |
address_symbol dd ? |
address_high dd ? |
uncompressed_displacement dd ? |
format_flags dd ? |
resolver_flags dd ? |
symbols_stream dd ? |
87,6 → 90,7 |
reserved_fixups dd ? |
reserved_fixups_size dd ? |
last_fixup_base dd ? |
last_fixup_header dd ? |
parenthesis_stack dd ? |
blocks_stack dd ? |
parsed_lines dd ? |
94,13 → 98,16 |
file_extension dd ? |
operand_size db ? |
size_override db ? |
operand_flags db ? |
operand_prefix db ? |
rex_prefix db ? |
opcode_prefix db ? |
rex_prefix db ? |
vex_required db ? |
vex_register db ? |
immediate_size db ? |
mask_register db ? |
broadcast_size db ? |
rounding_mode db ? |
base_code db ? |
extended_code db ? |
116,6 → 123,8 |
address_size db ? |
label_size db ? |
size_declared db ? |
address_size_declared db ? |
displacement_compression db ? |
value_undefined db ? |
value_constant db ? |
124,6 → 133,7 |
fp_sign db ? |
fp_format db ? |
address_sign db ? |
address_register db ? |
compare_type db ? |
logical_value_wrapping db ? |
next_pass_needed db ? |
130,11 → 140,13 |
output_format db ? |
code_type db ? |
adjustment_sign db ? |
evex_mode db ? |
macro_status db ? |
default_argument_value db ? |
prefixed_instruction db ? |
skip_default_argument_value db ? |
prefix_flags db ? |
formatter_symbols_allowed db ? |
decorator_symbols_allowed db ? |
free_address_range db ? |
/programs/develop/fasm/trunk/version.inc |
---|
1,6 → 1,6 |
; flat assembler version 1.71 |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
; |
; This programs is free for commercial and non-commercial use as long as |
33,7 → 33,7 |
; cannot simply be copied and put under another distribution licence |
; (including the GNU Public Licence). |
VERSION_STRING equ "1.71.16" |
VERSION_STRING equ "1.71.54" |
VERSION_MAJOR = 1 |
VERSION_MINOR = 71 |
/programs/develop/fasm/trunk/x86_64.inc |
---|
1,6 → 1,6 |
; flat assembler core |
; Copyright (c) 1999-2013, Tomasz Grysztar. |
; Copyright (c) 1999-2016, Tomasz Grysztar. |
; All rights reserved. |
simple_instruction_except64: |
56,18 → 56,22 |
jmp instruction_assembled |
prefix_instruction: |
stos byte [edi] |
or [prefixed_instruction],-1 |
or [prefix_flags],1 |
jmp continue_line |
segment_prefix: |
mov ah,al |
shr ah,4 |
cmp ah,6 |
cmp ah,3 |
jne illegal_instruction |
and al,1111b |
mov [segment_register],al |
call store_segment_prefix |
or [prefixed_instruction],-1 |
or [prefix_flags],1 |
jmp continue_line |
bnd_prefix_instruction: |
stos byte [edi] |
or [prefix_flags],1 + 10h |
jmp continue_line |
int_instruction: |
lods byte [esi] |
call get_size_operator |
336,7 → 340,7 |
jmp instruction_assembled |
basic_ax_imm: |
add [base_code],5 |
call store_instruction_code |
call store_classic_instruction_code |
jmp basic_store_imm_16bit |
basic_reg_imm_32bit: |
call operand_32bit |
366,7 → 370,7 |
jmp instruction_assembled |
basic_eax_imm: |
add [base_code],5 |
call store_instruction_code |
call store_classic_instruction_code |
jmp basic_store_imm_32bit |
recoverable_unknown_size: |
cmp [error_line],0 |
415,6 → 419,8 |
call get_size_operator |
cmp al,10h |
je mov_reg |
cmp al,14h |
je mov_creg |
cmp al,'[' |
jne invalid_operand |
mov_mem: |
431,9 → 437,9 |
jne invalid_operand |
mov_mem_reg: |
lods byte [esi] |
cmp al,60h |
cmp al,30h |
jb mov_mem_general_reg |
cmp al,70h |
cmp al,40h |
jb mov_mem_sreg |
mov_mem_general_reg: |
call convert_register |
473,7 → 479,7 |
call address_32bit_prefix |
mov [base_code],0A2h |
store_mov_address32: |
call store_instruction_code |
call store_classic_instruction_code |
call store_address_32bit_value |
jmp instruction_assembled |
mov_mem_address16_al: |
483,7 → 489,7 |
store_mov_address16: |
cmp [code_type],64 |
je invalid_address |
call store_instruction_code |
call store_classic_instruction_code |
mov eax,edx |
stos word [edi] |
cmp edx,10000h |
493,7 → 499,7 |
call store_segment_prefix_if_necessary |
mov [base_code],0A2h |
store_mov_address64: |
call store_instruction_code |
call store_classic_instruction_code |
call store_address_64bit_value |
jmp instruction_assembled |
mov_mem_ax: |
526,7 → 532,7 |
mov [base_code],0A3h |
jmp store_mov_address64 |
mov_mem_sreg: |
sub al,61h |
sub al,31h |
mov [postbyte_register],al |
pop ecx ebx edx |
mov ah,[operand_size] |
556,6 → 562,8 |
cmp [value_type],4 |
jae long_immediate_not_encodable |
jmp mov_mem_imm_32bit_store |
mov_mem_imm_nosize: |
call recoverable_unknown_size |
mov_mem_imm_8bit: |
call get_byte_value |
mov byte [value],al |
573,8 → 581,6 |
pop ecx ebx edx |
call store_instruction_with_imm16 |
jmp instruction_assembled |
mov_mem_imm_nosize: |
call recoverable_unknown_size |
mov_mem_imm_32bit: |
call operand_32bit |
call get_dword_value |
603,6 → 609,8 |
je mov_reg_mem |
cmp al,'(' |
je mov_reg_imm |
cmp al,14h |
je mov_reg_creg |
cmp al,10h |
jne invalid_operand |
mov_reg_reg: |
628,11 → 636,8 |
and al,1111b |
mov [postbyte_register],al |
shr ah,4 |
cmp ah,5 |
je mov_reg_creg |
cmp ah,7 |
je mov_reg_dreg |
ja mov_reg_treg |
cmp ah,3 |
jne invalid_operand |
dec [postbyte_register] |
cmp [operand_size],8 |
je mov_reg_sreg64 |
650,32 → 655,31 |
mov_reg_sreg_store: |
mov [base_code],8Ch |
jmp nomem_instruction_ready |
mov_reg_treg: |
cmp ah,9 |
jne invalid_operand |
mov [extended_code],24h |
jmp mov_reg_xrx |
mov_reg_dreg: |
mov [extended_code],21h |
jmp mov_reg_xrx |
mov_reg_creg: |
mov [extended_code],20h |
mov_reg_xrx: |
lods byte [esi] |
mov bl,al |
shr al,4 |
cmp al,4 |
ja invalid_operand |
add al,20h |
mov [extended_code],al |
and bl,1111b |
xchg bl,[postbyte_register] |
mov [base_code],0Fh |
cmp [code_type],64 |
je mov_reg_xrx_64bit |
je mov_reg_creg_64bit |
cmp [operand_size],4 |
jne invalid_operand_size |
cmp [postbyte_register],8 |
jne mov_reg_xrx_store |
jb mov_reg_creg_store |
cmp [extended_code],20h |
jne mov_reg_xrx_store |
jne mov_reg_creg_store |
mov al,0F0h |
stos byte [edi] |
mov [postbyte_register],0 |
mov_reg_xrx_store: |
mov_reg_creg_store: |
jmp nomem_instruction_ready |
mov_reg_xrx_64bit: |
mov_reg_creg_64bit: |
cmp [operand_size],8 |
jne invalid_operand_size |
jmp nomem_instruction_ready |
825,7 → 829,7 |
and ah,111b |
add al,ah |
mov [base_code],al |
call store_instruction_code |
call store_classic_instruction_code |
ret |
mov_reg_64bit_imm_32bit: |
mov edx,eax |
839,11 → 843,8 |
and al,1111b |
mov [postbyte_register],al |
shr ah,4 |
cmp ah,5 |
je mov_creg |
cmp ah,7 |
je mov_dreg |
ja mov_treg |
cmp ah,3 |
jne invalid_operand |
cmp al,2 |
je illegal_instruction |
dec [postbyte_register] |
877,43 → 878,38 |
mov_sreg_mem_size_ok: |
mov [base_code],8Eh |
jmp instruction_ready |
mov_treg: |
cmp ah,9 |
jne invalid_operand |
mov [extended_code],26h |
jmp mov_xrx |
mov_dreg: |
mov [extended_code],23h |
jmp mov_xrx |
mov_creg: |
mov [extended_code],22h |
mov_xrx: |
lods byte [esi] |
mov ah,al |
shr ah,4 |
cmp ah,4 |
ja invalid_operand |
add ah,22h |
mov [extended_code],ah |
and al,1111b |
mov [postbyte_register],al |
mov [base_code],0Fh |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov bl,al |
cmp [code_type],64 |
je mov_xrx_64bit |
je mov_creg_64bit |
cmp ah,4 |
jne invalid_operand_size |
cmp [postbyte_register],8 |
jne mov_xrx_store |
jb mov_creg_store |
cmp [extended_code],22h |
jne mov_xrx_store |
jne mov_creg_store |
mov al,0F0h |
stos byte [edi] |
mov [postbyte_register],0 |
mov_xrx_store: |
mov_creg_store: |
jmp nomem_instruction_ready |
mov_xrx_64bit: |
mov_creg_64bit: |
cmp ah,8 |
je mov_xrx_store |
je mov_creg_store |
jmp invalid_operand_size |
test_instruction: |
mov [base_code],84h |
966,6 → 962,8 |
cmp [value_type],4 |
jae long_immediate_not_encodable |
jmp test_mem_imm_32bit_store |
test_mem_imm_nosize: |
call recoverable_unknown_size |
test_mem_imm_8bit: |
call get_byte_value |
mov byte [value],al |
983,8 → 981,6 |
pop ecx ebx edx |
call store_instruction_with_imm16 |
jmp instruction_assembled |
test_mem_imm_nosize: |
call recoverable_unknown_size |
test_mem_imm_32bit: |
call operand_32bit |
call get_dword_value |
1054,7 → 1050,7 |
jmp instruction_assembled |
test_al_imm: |
mov [base_code],0A8h |
call store_instruction_code |
call store_classic_instruction_code |
mov al,dl |
stos byte [edi] |
jmp instruction_assembled |
1074,7 → 1070,7 |
jmp instruction_assembled |
test_ax_imm: |
mov [base_code],0A9h |
call store_instruction_code |
call store_classic_instruction_code |
mov ax,dx |
stos word [edi] |
jmp instruction_assembled |
1095,7 → 1091,7 |
jmp instruction_assembled |
test_eax_imm: |
mov [base_code],0A9h |
call store_instruction_code |
call store_classic_instruction_code |
mov eax,edx |
stos dword [edi] |
jmp instruction_assembled |
1168,7 → 1164,7 |
xchg_ax_reg_store: |
add bl,90h |
mov [base_code],bl |
call store_instruction_code |
call store_classic_instruction_code |
jmp instruction_assembled |
xchg_reg_reg_store: |
inc [base_code] |
1268,7 → 1264,7 |
jnz invalid_operand_size |
call operand_16bit |
push_reg_store: |
call store_instruction_code |
call store_classic_instruction_code |
jmp push_done |
push_sreg: |
mov bl,al |
1308,9 → 1304,9 |
jne illegal_instruction |
push_sreg_store: |
mov al,bl |
cmp al,70h |
cmp al,40h |
jae invalid_operand |
sub al,61h |
sub al,31h |
jc invalid_operand |
cmp al,4 |
jae push_sreg_386 |
1393,7 → 1389,7 |
push_imm_8bit: |
mov ah,al |
mov [base_code],6Ah |
call store_instruction_code |
call store_classic_instruction_code |
mov al,ah |
stos byte [edi] |
jmp push_done |
1403,7 → 1399,7 |
call operand_16bit |
push_imm_16bit_store: |
mov [base_code],68h |
call store_instruction_code |
call store_classic_instruction_code |
mov ax,dx |
call mark_relocation |
stos word [edi] |
1422,7 → 1418,7 |
call operand_32bit |
push_imm_32bit_store: |
mov [base_code],68h |
call store_instruction_code |
call store_classic_instruction_code |
mov eax,edx |
call mark_relocation |
stos dword [edi] |
1433,10 → 1429,11 |
je instruction_assembled |
or al,al |
jz instruction_assembled |
mov [operand_size],0 |
mov [size_override],0 |
mov [operand_prefix],0 |
mov [rex_prefix],0 |
; mov [operand_size],0 |
; mov [operand_flags],0 |
; mov [operand_prefix],0 |
; mov [rex_prefix],0 |
and dword [operand_size],0 |
jmp push_next |
pop_instruction: |
mov [push_size],al |
1531,7 → 1528,7 |
jnz invalid_operand_size |
call operand_16bit |
pop_reg_store: |
call store_instruction_code |
call store_classic_instruction_code |
pop_done: |
lods byte [esi] |
dec esi |
1539,15 → 1536,16 |
je instruction_assembled |
or al,al |
jz instruction_assembled |
mov [operand_size],0 |
mov [size_override],0 |
mov [operand_prefix],0 |
mov [rex_prefix],0 |
; mov [operand_size],0 |
; mov [operand_flags],0 |
; mov [operand_prefix],0 |
; mov [rex_prefix],0 |
and dword [operand_size],0 |
jmp pop_next |
pop_sreg: |
mov dl,[operand_size] |
mov dh,[push_size] |
cmp al,62h |
cmp al,32h |
je pop_cs |
mov bl,al |
cmp dl,2 |
1584,9 → 1582,9 |
jne illegal_instruction |
pop_sreg_store: |
mov al,bl |
cmp al,70h |
cmp al,40h |
jae invalid_operand |
sub al,61h |
sub al,31h |
jc invalid_operand |
cmp al,4 |
jae pop_sreg_386 |
1665,7 → 1663,7 |
add al,bl |
add al,40h |
mov [base_code],al |
call store_instruction_code |
call store_classic_instruction_code |
jmp instruction_assembled |
inc_reg_long_form: |
inc [base_code] |
1708,11 → 1706,7 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
cmp ah,2 |
jne invalid_operand_size |
1726,22 → 1720,13 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
jmp nomem_instruction_ready |
bound_instruction: |
cmp [code_type],64 |
je illegal_instruction |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
1820,12 → 1805,11 |
ret_instruction_16bit: |
call operand_16bit |
jmp ret_instruction |
retf_instruction: |
cmp [code_type],64 |
jne ret_instruction |
ret_instruction_64bit: |
call operand_64bit |
ret_instruction: |
and [prefix_flags],not 10h |
ret_common: |
mov [base_code],al |
lods byte [esi] |
dec esi |
1857,22 → 1841,29 |
jz simple_ret |
ret_imm_store: |
mov dx,ax |
call store_instruction_code |
call store_classic_instruction_code |
mov ax,dx |
stos word [edi] |
jmp instruction_assembled |
simple_ret: |
inc [base_code] |
call store_instruction_code |
call store_classic_instruction_code |
jmp instruction_assembled |
retf_instruction: |
cmp [code_type],64 |
jne ret_common |
retf_instruction_64bit: |
call operand_64bit |
jmp ret_common |
retf_instruction_32bit: |
call operand_32bit |
jmp ret_common |
retf_instruction_16bit: |
call operand_16bit |
jmp ret_common |
lea_instruction: |
mov [base_code],8Dh |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
1884,7 → 1875,7 |
call get_size_operator |
cmp al,'[' |
jne invalid_operand |
mov [size_override],-1 |
or [operand_flags],1 |
call get_address |
pop eax |
mov [operand_size],al |
1908,12 → 1899,7 |
cmp [code_type],64 |
je illegal_instruction |
ls_code_ok: |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
2091,12 → 2077,7 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
2137,12 → 2118,7 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov bl,[postbyte_register] |
mov [postbyte_register],al |
mov al,ah |
2182,12 → 2158,7 |
movx_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
mov al,ah |
push eax |
2240,12 → 2211,7 |
jmp nomem_instruction_ready |
movsxd_instruction: |
mov [base_code],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
cmp ah,8 |
jne invalid_operand_size |
2299,12 → 2265,7 |
cmp byte [esi+2],'(' |
je bt_mem_imm |
bt_mem_reg: |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
pop ecx ebx edx |
mov al,ah |
2352,12 → 2313,7 |
cmp byte [esi+2],'(' |
je bt_reg_imm |
bt_reg_reg: |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
mov al,ah |
call operand_autodetect |
2399,12 → 2355,7 |
call operand_autodetect |
jmp nomem_instruction_ready |
get_reg_mem: |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
2635,12 → 2586,7 |
stos byte [edi] |
jmp instruction_assembled |
in_instruction: |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
or al,al |
jnz invalid_operand |
lods byte [esi] |
2670,7 → 2616,7 |
in_ax_dx: |
call operand_autodetect |
mov [base_code],0EDh |
call store_instruction_code |
call store_classic_instruction_code |
jmp instruction_assembled |
in_al_dx: |
mov al,0ECh |
2695,7 → 2641,7 |
in_ax_imm: |
call operand_autodetect |
mov [base_code],0E5h |
call store_instruction_code |
call store_classic_instruction_code |
mov al,dl |
stos byte [edi] |
jmp instruction_assembled |
2719,12 → 2665,7 |
cmp al,',' |
jne invalid_operand |
mov [operand_size],0 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
or al,al |
jnz invalid_operand |
mov al,ah |
2737,7 → 2678,7 |
out_dx_ax: |
call operand_autodetect |
mov [base_code],0EFh |
call store_instruction_code |
call store_classic_instruction_code |
jmp instruction_assembled |
out_dx_al: |
mov al,0EEh |
2756,12 → 2697,7 |
cmp al,',' |
jne invalid_operand |
mov [operand_size],0 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
or al,al |
jnz invalid_operand |
mov al,ah |
2774,7 → 2710,7 |
out_imm_ax: |
call operand_autodetect |
mov [base_code],0E7h |
call store_instruction_code |
call store_classic_instruction_code |
mov al,dl |
stos byte [edi] |
jmp instruction_assembled |
2797,6 → 2733,13 |
process_jmp: |
lods byte [esi] |
call get_jump_operator |
test [prefix_flags],10h |
jz jmp_type_ok |
test [jump_type],not 2 |
jnz illegal_instruction |
mov [jump_type],2 |
and [prefix_flags],not 10h |
jmp_type_ok: |
call get_size_operator |
cmp al,'(' |
je jmp_imm |
2942,7 → 2885,7 |
sub edx,3 |
jno jmp_imm_32bit_ok |
cmp [code_type],64 |
je relative_jump_out_of_range |
je jump_out_of_range |
jmp_imm_32bit_ok: |
mov al,[base_code] |
stos byte [edi] |
2958,7 → 2901,7 |
mov ecx,edx |
cdq |
cmp edx,ecx |
jne relative_jump_out_of_range |
jne jump_out_of_range |
call check_for_short_jump |
jnc jmp_imm_32bit_store |
jmp_short: |
3060,7 → 3003,7 |
call get_word_value |
mov ebx,eax |
call operand_16bit |
call store_instruction_code |
call store_classic_instruction_code |
mov ax,bx |
call mark_relocation |
stos word [edi] |
3075,7 → 3018,7 |
call get_dword_value |
mov ebx,eax |
call operand_32bit |
call store_instruction_code |
call store_classic_instruction_code |
mov eax,ebx |
call mark_relocation |
stos dword [edi] |
3082,6 → 3025,7 |
jmp jmp_far_segment |
conditional_jump: |
mov [base_code],al |
and [prefix_flags],not 10h |
lods byte [esi] |
call get_jump_operator |
cmp [jump_type],3 |
3122,7 → 3066,7 |
sub edx,4 |
jno conditional_jump_32bit_range_ok |
cmp [code_type],64 |
je relative_jump_out_of_range |
je jump_out_of_range |
conditional_jump_32bit_range_ok: |
mov ah,[base_code] |
add ah,10h |
3140,7 → 3084,7 |
mov ecx,edx |
cdq |
cmp edx,ecx |
jne relative_jump_out_of_range |
jne jump_out_of_range |
call check_for_short_jump |
jnc conditional_jump_32bit_store |
conditional_jump_short: |
3245,7 → 3189,7 |
mov ecx,edx |
cdq |
cmp edx,ecx |
jne relative_jump_out_of_range |
jne jump_out_of_range |
jmp make_loop_jump |
loop_jump_16bit: |
call get_address_word_value |
3647,12 → 3591,7 |
lar_instruction: |
mov [extended_code],al |
mov [base_code],0Fh |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
3694,12 → 3633,13 |
swapgs_instruction: |
cmp [code_type],64 |
jne illegal_instruction |
rdtscp_instruction: |
mov [base_code],0Fh |
mov [extended_code],1 |
mov [postbyte_register],7 |
mov bl,al |
jmp nomem_instruction_ready |
simple_instruction_0f_01: |
mov ah,al |
mov al,0Fh |
stos byte [edi] |
mov al,1 |
stos word [edi] |
jmp instruction_assembled |
basic_486_instruction: |
mov [base_code],0Fh |
3715,12 → 3655,7 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
pop ecx ebx edx |
mov al,ah |
3737,12 → 3672,7 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov bl,[postbyte_register] |
mov [postbyte_register],al |
mov al,ah |
3753,12 → 3683,7 |
basic_486_reg_reg_8bit: |
jmp nomem_instruction_ready |
bswap_instruction: |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
test al,1000b |
jz bswap_reg_code_ok |
or [rex_prefix],41h |
3772,11 → 3697,11 |
cmp ah,4 |
jne invalid_operand_size |
call operand_32bit |
call store_instruction_code |
call store_classic_instruction_code |
jmp instruction_assembled |
bswap_reg64: |
call operand_64bit |
call store_instruction_code |
call store_classic_instruction_code |
jmp instruction_assembled |
cmpxchgx_instruction: |
mov [base_code],0Fh |
4321,12 → 4246,7 |
pmovmskb_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
cmp ah,4 |
je pmovmskb_reg_size_ok |
cmp [code_type],64 |
4468,18 → 4388,7 |
call get_address |
test [operand_size],not 4 |
jnz invalid_operand_size |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
call make_mmx_prefix |
mov [postbyte_register],al |
call get_mmx_source_register |
jmp instruction_ready |
movd_reg: |
lods byte [esi] |
4488,25 → 4397,14 |
call convert_register |
cmp ah,4 |
jne invalid_operand_size |
mov [operand_size],0 |
mov bl,al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
mov [postbyte_register],al |
call make_mmx_prefix |
call get_mmx_source_register |
jmp nomem_instruction_ready |
movd_mmreg: |
mov [extended_code],6Eh |
call convert_mmx_register |
mov [postbyte_register],al |
call make_mmx_prefix |
mov [postbyte_register],al |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
4528,19 → 4426,24 |
jne invalid_operand_size |
mov bl,al |
jmp nomem_instruction_ready |
get_mmx_source_register: |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
mov [postbyte_register],al |
make_mmx_prefix: |
cmp [vex_required],0 |
jne mmx_prefix_for_vex |
cmp [operand_size],16 |
jne no_mmx_prefix |
mov [operand_prefix],66h |
no_mmx_prefix: |
ret |
mmx_prefix_for_vex: |
cmp [operand_size],16 |
jne invalid_operand |
mov [opcode_prefix],66h |
ret |
movq_instruction: |
mov [base_code],0Fh |
lods byte [esi] |
4552,24 → 4455,14 |
call get_address |
test [operand_size],not 8 |
jnz invalid_operand_size |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
mov [postbyte_register],al |
cmp ah,16 |
je movq_mem_xmmreg |
mov [extended_code],7Fh |
call get_mmx_source_register |
mov al,7Fh |
cmp ah,8 |
je movq_mem_ready |
mov al,0D6h |
movq_mem_ready: |
mov [extended_code],al |
jmp instruction_ready |
movq_mem_xmmreg: |
mov [extended_code],0D6h |
mov [opcode_prefix],66h |
jmp instruction_ready |
movq_reg: |
lods byte [esi] |
cmp al,0B0h |
4578,20 → 4471,9 |
cmp ah,8 |
jne invalid_operand_size |
mov bl,al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
mov [operand_size],0 |
lods byte [esi] |
call convert_mmx_register |
mov [postbyte_register],al |
call make_mmx_prefix |
mov [extended_code],7Eh |
call operand_64bit |
call get_mmx_source_register |
jmp nomem_instruction_ready |
movq_mmreg: |
call convert_mmx_register |
4611,6 → 4493,8 |
call get_size_operator |
cmp al,10h |
je movq_mmreg_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
test [operand_size],not 8 |
jnz invalid_operand_size |
5036,12 → 4920,7 |
movmskps_instruction: |
mov [base_code],0Fh |
mov [extended_code],50h |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
cmp ah,4 |
je movmskps_reg_ok |
5172,12 → 5051,7 |
cvt2si_instruction: |
mov [extended_code],al |
mov [base_code],0Fh |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [operand_size],0 |
cmp ah,4 |
je sse_reg |
5257,38 → 5131,45 |
sse4_instruction_38_xmm0: |
mov [immediate_size],-1 |
jmp sse4_instruction_38 |
sse4_instruction_66_38_xmm0: |
mov [immediate_size],-1 |
sse4_instruction_66_38: |
mov [opcode_prefix],66h |
sse4_instruction_38: |
mov [mmx_size],16 |
mov [opcode_prefix],66h |
mov [supplemental_code],al |
mov al,38h |
jmp sse_instruction |
sse4_ss_instruction_3a_imm8: |
sse4_ss_instruction_66_3a_imm8: |
mov [immediate_size],1 |
mov [mmx_size],4 |
jmp sse4_instruction_3a_setup |
sse4_sd_instruction_3a_imm8: |
mov cl,4 |
jmp sse4_instruction_66_3a_setup |
sse4_sd_instruction_66_3a_imm8: |
mov [immediate_size],1 |
mov [mmx_size],8 |
jmp sse4_instruction_3a_setup |
sse4_instruction_3a_imm8: |
mov cl,8 |
jmp sse4_instruction_66_3a_setup |
sse4_instruction_66_3a_imm8: |
mov [immediate_size],1 |
mov [mmx_size],16 |
mov cl,16 |
sse4_instruction_66_3a_setup: |
mov [opcode_prefix],66h |
sse4_instruction_3a_setup: |
mov [opcode_prefix],66h |
mov [supplemental_code],al |
mov al,3Ah |
mov [mmx_size],cl |
jmp sse_instruction |
sse4_instruction_3a_imm8: |
mov [immediate_size],1 |
mov cl,16 |
jmp sse4_instruction_3a_setup |
pclmulqdq_instruction: |
mov byte [value],al |
mov [mmx_size],16 |
mov al,44h |
jmp sse4_instruction_3a_setup |
mov cl,16 |
jmp sse4_instruction_66_3a_setup |
extractps_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],3Ah |
mov [supplemental_code],17h |
call setup_66_0f_3a |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
5336,9 → 5217,17 |
je mmx_nomem_imm8 |
cmp al,8 |
jne invalid_operand_size |
call operand_64bit |
cmp [code_type],64 |
jne illegal_instruction |
jmp mmx_nomem_imm8 |
setup_66_0f_3a: |
mov [extended_code],3Ah |
mov [supplemental_code],al |
mov [base_code],0Fh |
mov [opcode_prefix],66h |
ret |
insertps_instruction: |
call setup_66_0f_3a |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
5346,11 → 5235,6 |
lods byte [esi] |
call convert_xmm_register |
mov [postbyte_register],al |
insertps_xmmreg: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],3Ah |
mov [supplemental_code],21h |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
5385,10 → 5269,7 |
pextrb_instruction: |
mov [mmx_size],1 |
pextr_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],3Ah |
mov [supplemental_code],al |
call setup_66_0f_3a |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
5463,7 → 5344,6 |
cmp bh,16 |
jne invalid_operand_size |
xchg bl,[postbyte_register] |
call operand_autodetect |
jmp mmx_nomem_imm8 |
pinsrb_instruction: |
mov [mmx_size],1 |
5475,10 → 5355,7 |
mov [mmx_size],8 |
call operand_64bit |
pinsr_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],3Ah |
mov [supplemental_code],al |
call setup_66_0f_3a |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
5535,10 → 5412,7 |
pmovsxdq_instruction: |
mov [mmx_size],8 |
pmovsx_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],38h |
mov [supplemental_code],al |
call setup_66_0f_38 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
5568,6 → 5442,12 |
call convert_xmm_register |
mov bl,al |
jmp nomem_instruction_ready |
setup_66_0f_38: |
mov [extended_code],38h |
mov [supplemental_code],al |
mov [base_code],0Fh |
mov [opcode_prefix],66h |
ret |
fxsave_instruction_64bit: |
call operand_64bit |
5617,6 → 5497,13 |
amd_prefetch_instruction: |
mov [extended_code],0Dh |
jmp prefetch_mem_8bit |
clflushopt_instruction: |
mov [extended_code],0AEh |
mov [opcode_prefix],66h |
jmp prefetch_mem_8bit |
pcommit_instruction: |
mov byte [edi],66h |
inc edi |
fence_instruction: |
mov bl,al |
mov ax,0AE0Fh |
5702,12 → 5589,7 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
cmp ah,4 |
je movnti_store |
cmp ah,8 |
5722,23 → 5604,13 |
je monitor_instruction_store |
cmp byte [esi],0Fh |
je monitor_instruction_store |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
cmp ax,0400h |
jne invalid_operand |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
cmp ax,0401h |
jne invalid_operand |
cmp [postbyte_register],0C8h |
5746,12 → 5618,7 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
cmp ax,0402h |
jne invalid_operand |
monitor_instruction_store: |
5761,10 → 5628,7 |
stos byte [edi] |
jmp instruction_assembled |
movntdqa_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],38h |
mov [supplemental_code],al |
call setup_66_0f_38 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
5855,17 → 5719,15 |
mov [base_code],0Fh |
mov [extended_code],38h |
mov [supplemental_code],0F0h |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
cmp ah,4 |
je crc32_reg_size_ok |
cmp ah,8 |
je crc32_reg64 |
cmp ah,4 |
jne invalid_operand |
cmp [code_type],64 |
jne illegal_instruction |
crc32_reg_size_ok: |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
5873,7 → 5735,7 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je crc32_reg32_reg |
je crc32_reg_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
5881,63 → 5743,25 |
test al,al |
jz crc32_unknown_size |
cmp al,1 |
je crc32_reg32_mem_store |
cmp al,4 |
ja invalid_operand_size |
je crc32_reg_mem_store |
inc [supplemental_code] |
call operand_autodetect |
crc32_reg32_mem_store: |
crc32_reg_mem_store: |
jmp instruction_ready |
crc32_unknown_size: |
call recoverable_unknown_size |
jmp crc32_reg32_mem_store |
crc32_reg32_reg: |
jmp crc32_reg_mem_store |
crc32_reg_reg: |
lods byte [esi] |
call convert_register |
mov bl,al |
mov al,ah |
cmp al,1 |
je crc32_reg32_reg_store |
cmp al,4 |
ja invalid_operand_size |
je crc32_reg_reg_store |
inc [supplemental_code] |
call operand_autodetect |
crc32_reg32_reg_store: |
crc32_reg_reg_store: |
jmp nomem_instruction_ready |
crc32_reg64: |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
mov [operand_size],0 |
call operand_64bit |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je crc32_reg64_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
mov ah,[operand_size] |
mov al,8 |
test ah,ah |
jz crc32_unknown_size |
cmp ah,1 |
je crc32_reg32_mem_store |
cmp ah,al |
jne invalid_operand_size |
inc [supplemental_code] |
jmp crc32_reg32_mem_store |
crc32_reg64_reg: |
lods byte [esi] |
call convert_register |
mov bl,al |
mov al,8 |
cmp ah,1 |
je crc32_reg32_reg_store |
cmp ah,al |
jne invalid_operand_size |
inc [supplemental_code] |
jmp crc32_reg32_reg_store |
popcnt_instruction: |
mov [opcode_prefix],0F3h |
jmp bs_instruction |
5972,12 → 5796,7 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
pop ecx ebx edx |
mov al,[operand_size] |
6005,13 → 5824,6 |
call operand_64bit |
jmp nomem_instruction_ready |
simple_vmx_instruction: |
mov ah,al |
mov al,0Fh |
stos byte [edi] |
mov al,1 |
stos word [edi] |
jmp instruction_assembled |
vmclear_instruction: |
mov [opcode_prefix],66h |
jmp vmx_instruction |
6045,12 → 5857,7 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
call vmread_check_size |
jmp vmx_size_ok |
6062,12 → 5869,7 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
call vmread_check_size |
pop ebx |
6085,12 → 5887,7 |
ret |
vmwrite_instruction: |
mov [extended_code],79h |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
6111,15 → 5908,8 |
mov [base_code],0Fh |
jmp nomem_instruction_ready |
vmx_inv_instruction: |
mov [opcode_prefix],66h |
mov [extended_code],38h |
mov [supplemental_code],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call setup_66_0f_38 |
call take_register |
mov [postbyte_register],al |
call vmread_check_size |
mov [operand_size],0 |
6141,12 → 5931,7 |
push eax |
mov [base_code],0Fh |
mov [extended_code],1 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
or al,al |
jnz invalid_operand |
simple_svm_detect_size: |
6170,31 → 5955,21 |
mov al,67h |
stos byte [edi] |
simple_svm_store: |
call store_instruction_code |
call store_classic_instruction_code |
pop eax |
stos byte [edi] |
jmp instruction_assembled |
skinit_instruction: |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
cmp ax,0400h |
jne invalid_operand |
mov al,0DEh |
jmp simple_vmx_instruction |
jmp simple_instruction_0f_01 |
invlpga_instruction: |
push eax |
mov [base_code],0Fh |
mov [extended_code],1 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
or al,al |
jnz invalid_operand |
mov bl,ah |
6202,12 → 5977,7 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
cmp ax,0401h |
jne invalid_operand |
mov ah,bl |
6217,12 → 5987,7 |
mov [base_code],0Fh |
mov [extended_code],0C7h |
mov [postbyte_register],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov bl,al |
mov al,ah |
call operand_autodetect |
6234,12 → 5999,7 |
mov [base_code],0Fh |
mov [extended_code],0AEh |
mov [postbyte_register],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
call take_register |
mov bl,al |
mov al,ah |
cmp ah,2 |
6305,7 → 6065,7 |
sub edx,1 |
jno xbegin_rel32_ok |
cmp [code_type],64 |
je relative_jump_out_of_range |
je jump_out_of_range |
xbegin_rel32_ok: |
mov ax,0F8C7h |
stos word [edi] |
6313,6 → 6073,231 |
stos dword [edi] |
jmp instruction_assembled |
bndcl_instruction: |
mov ah,0F3h |
jmp bndc_instruction |
bndcu_instruction: |
mov ah,0F2h |
bndc_instruction: |
mov [opcode_prefix],ah |
mov [base_code],0Fh |
mov [extended_code],al |
call take_bnd_register |
mov [postbyte_register],al |
call get_bnd_size |
mov [operand_size],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,'[' |
je bndc_mem |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
mov bl,al |
jmp nomem_instruction_ready |
bndc_mem: |
call get_address_of_required_size |
jmp instruction_ready |
bndmov_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],al |
call get_bnd_size |
shl al,1 |
mov [operand_size],al |
lods byte [esi] |
cmp al,14h |
je bndmov_reg |
call get_size_operator |
cmp al,'[' |
jne invalid_operand |
inc [extended_code] |
call get_address_of_required_size |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_bnd_register |
mov [postbyte_register],al |
jmp instruction_ready |
bndmov_reg: |
lods byte [esi] |
call convert_bnd_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
cmp al,14h |
je bndmov_reg_reg |
call get_size_operator |
cmp al,'[' |
jne invalid_operand |
call get_address_of_required_size |
jmp instruction_ready |
bndmov_reg_reg: |
lods byte [esi] |
call convert_bnd_register |
mov bl,al |
jmp nomem_instruction_ready |
take_bnd_register: |
lods byte [esi] |
cmp al,14h |
jne invalid_operand |
lods byte [esi] |
convert_bnd_register: |
mov ah,al |
shr ah,4 |
cmp ah,6 |
jne invalid_operand |
and al,1111b |
ret |
bndmk_instruction: |
mov [opcode_prefix],0F3h |
mov [base_code],0Fh |
mov [extended_code],al |
call take_bnd_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,'[' |
jne invalid_operand |
call get_bnd_size |
call get_address_prefixes |
call get_address_component |
cmp byte [esi-1],']' |
je bndmk_ready |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
cmp al,'(' |
jne invalid_operand |
or dl,bl |
or dl,[address_sign] |
or edx,[address_high] |
jnz invalid_address |
mov [address_register],bh |
call get_address_component |
lods byte [esi] |
cmp al,']' |
jne invalid_operand |
or bh,bh |
jz bndmk_selected_base |
cmp bl,bh |
je bndmk_to_index |
or bl,bl |
jnz invalid_address |
mov bl,bh |
bndmk_to_index: |
inc cl |
bndmk_selected_base: |
mov bh,[address_register] |
bndmk_ready: |
or bx,bx |
jz instruction_ready |
cmp [address_size_declared],0 |
jne instruction_ready |
and ch,not 0Fh |
jmp instruction_ready |
get_bnd_size: |
mov al,4 |
cmp [code_type],64 |
jne bnd_size_ok |
add al,4 |
bnd_size_ok: |
mov [address_size],al |
ret |
get_address_component: |
mov [free_address_range],0 |
call calculate_address |
mov [address_high],edx |
mov edx,eax |
or bx,bx |
jz address_component_ok |
mov al,bl |
or al,bh |
shr al,4 |
cmp al,[address_size] |
jne invalid_address |
address_component_ok: |
ret |
bndldx_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
call take_bnd_register |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_bnd_mib |
jmp bndmk_ready |
bndstx_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
call take_bnd_mib |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
call take_bnd_register |
mov [postbyte_register],al |
jmp bndmk_ready |
take_bnd_mib: |
lods byte [esi] |
cmp al,'[' |
jne invalid_operand |
call get_bnd_size |
call get_address_prefixes |
call get_address_component |
cmp byte [esi-1],']' |
je bnd_mib_ok |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
cmp al,'(' |
jne invalid_operand |
mov al,[address_sign] |
push eax ebx ecx edx [address_symbol] |
call get_address_component |
lods byte [esi] |
cmp al,']' |
jne invalid_operand |
or dl,bl |
or dl,[address_sign] |
or edx,[address_high] |
jnz invalid_address |
mov [address_register],bh |
pop [address_symbol] edx ecx ebx eax |
mov [address_sign],al |
or bl,bl |
jz mib_place_index |
or bh,bh |
jnz invalid_address |
cmp cl,1 |
jne invalid_address |
mov bh,bl |
mib_place_index: |
mov bl,[address_register] |
xor cl,cl |
or al,al |
jz bnd_mib_ok |
inc cl |
bnd_mib_ok: |
ret |
take_register: |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
convert_register: |
mov ah,al |
shr ah,4 |
6338,7 → 6323,7 |
ret |
high_byte_register: |
mov ah,1 |
or [rex_prefix],80h |
or [rex_prefix],10h |
jmp match_register_size |
convert_fpu_register: |
mov ah,al |
6357,8 → 6342,6 |
cmp ah,0Bh |
jne invalid_operand |
mov ah,8 |
cmp [vex_required],0 |
jne invalid_operand |
jmp match_register_size |
xmm_register: |
and al,0Fh |
6381,7 → 6364,7 |
mov [size_declared],1 |
lods word [esi] |
xchg al,ah |
mov [size_override],1 |
or [operand_flags],1 |
cmp ah,[operand_size] |
je size_operator_ok |
cmp [operand_size],0 |
6393,7 → 6376,7 |
mov [size_declared],0 |
cmp al,'[' |
jne size_operator_ok |
mov [size_override],0 |
and [operand_flags],not 1 |
ret |
get_jump_operator: |
mov [jump_type],0 |
6405,44 → 6388,21 |
jump_operator_ok: |
ret |
get_address: |
mov [segment_register],0 |
mov [address_size],0 |
mov [free_address_range],0 |
mov al,[code_type] |
shr al,3 |
mov [value_size],al |
mov al,[esi] |
and al,11110000b |
cmp al,60h |
jne get_size_prefix |
lods byte [esi] |
sub al,60h |
mov [segment_register],al |
mov al,[esi] |
and al,11110000b |
get_size_prefix: |
cmp al,70h |
jne address_size_prefix_ok |
lods byte [esi] |
sub al,70h |
cmp al,2 |
jb invalid_address_size |
cmp al,8 |
ja invalid_address_size |
mov [address_size],al |
mov [value_size],al |
address_size_prefix_ok: |
and [address_size],0 |
get_address_of_required_size: |
call get_address_prefixes |
and [free_address_range],0 |
call calculate_address |
cmp byte [esi-1],']' |
jne invalid_address |
mov [address_high],edx |
mov edx,eax |
cmp [address_size_declared],0 |
jne address_ok |
or bx,bx |
jnz clear_address_size |
cmp [code_type],64 |
jne address_ok |
or bx,bx |
jnz address_ok |
test ch,0Fh |
jnz address_ok |
calculate_relative_address: |
mov edx,[address_symbol] |
mov [symbol_identifier],edx |
6459,9 → 6419,42 |
ror ecx,16 |
mov cl,[value_type] |
rol ecx,16 |
mov bx,0FF00h |
mov bx,9900h |
clear_address_size: |
and ch,not 0Fh |
address_ok: |
ret |
get_address_prefixes: |
and [segment_register],0 |
and [address_size_declared],0 |
mov al,[code_type] |
shr al,3 |
mov [value_size],al |
mov al,[esi] |
and al,11110000b |
cmp al,60h |
jne get_address_size_prefix |
lods byte [esi] |
sub al,60h |
mov [segment_register],al |
mov al,[esi] |
and al,11110000b |
get_address_size_prefix: |
cmp al,70h |
jne address_size_prefix_ok |
lods byte [esi] |
sub al,70h |
cmp al,2 |
jb invalid_address_size |
cmp al,8 |
ja invalid_address_size |
mov [value_size],al |
or [address_size_declared],1 |
or [address_size],al |
cmp al,[address_size] |
jne invalid_address_size |
address_size_prefix_ok: |
ret |
operand_16bit: |
cmp [code_type],16 |
je size_prefix_ok |
6536,6 → 6529,7 |
store_instruction_code: |
cmp [vex_required],0 |
jne store_vex_instruction_code |
store_classic_instruction_code: |
mov al,[operand_prefix] |
or al,al |
jz operand_prefix_ok |
6573,16 → 6567,28 |
stos byte [edi] |
ret |
store_nomem_instruction: |
test [postbyte_register],10000b |
jz nomem_reg_high_code_ok |
or [vex_required],10h |
and [postbyte_register],1111b |
nomem_reg_high_code_ok: |
test [postbyte_register],1000b |
jz nomem_reg_code_ok |
or [rex_prefix],44h |
and [postbyte_register],111b |
nomem_reg_code_ok: |
test bl,10000b |
jz nomem_rm_high_code_ok |
or [rex_prefix],42h |
or [vex_required],8 |
and bl,1111b |
nomem_rm_high_code_ok: |
test bl,1000b |
jz nomem_rm_code_ok |
or [rex_prefix],41h |
and bl,111b |
nomem_rm_code_ok: |
and [displacement_compression],0 |
call store_instruction_code |
mov al,[postbyte_register] |
shl al,3 |
6592,6 → 6598,12 |
ret |
store_instruction: |
mov [current_offset],edi |
and [displacement_compression],0 |
test [postbyte_register],10000b |
jz reg_high_code_ok |
or [vex_required],10h |
and [postbyte_register],1111b |
reg_high_code_ok: |
test [postbyte_register],1000b |
jz reg_code_ok |
or [rex_prefix],44h |
6617,11 → 6629,11 |
jnz address_vsib |
or bx,bx |
jz address_immediate |
cmp bx,0F800h |
cmp bx,9800h |
je address_rip_based |
cmp bx,0F400h |
cmp bx,9400h |
je address_eip_based |
cmp bx,0FF00h |
cmp bx,9900h |
je address_relative |
mov al,bl |
or al,bh |
6635,6 → 6647,8 |
cmp [code_type],64 |
je invalid_address_size |
call address_16bit_prefix |
test ch,22h |
setz [displacement_compression] |
call store_instruction_code |
cmp bl,bh |
jbe determine_16bit_address |
6690,6 → 6704,9 |
jl value_out_of_range |
or dx,dx |
jz address |
cmp [displacement_compression],2 |
ja address_8bit_value |
je address_16bit_value |
cmp dx,80h |
jb address_8bit_value |
cmp dx,-80h |
6711,10 → 6728,6 |
stos byte [edi] |
mov al,dl |
stos byte [edi] |
cmp dx,80h |
jge value_out_of_range |
cmp dx,-80h |
jl value_out_of_range |
ret |
address: |
cmp al,110b |
6727,11 → 6740,17 |
address_vsib: |
mov al,bl |
shr al,4 |
test al,1 |
jz vsib_high_code_ok |
or [vex_register],10000b |
or [vex_required],8 |
xor al,1 |
vsib_high_code_ok: |
cmp al,6 |
je vsib_index_ok |
cmp al,0Ch |
je vector_index_ok |
cmp al,0Dh |
jne invalid_address |
vector_index_ok: |
jb invalid_address |
vsib_index_ok: |
mov al,bh |
shr al,4 |
cmp al,4 |
6759,6 → 6778,8 |
jz index_code_ok |
or [rex_prefix],42h |
index_code_ok: |
test ch,44h or 88h |
setz [displacement_compression] |
call store_instruction_code |
or cl,cl |
jz only_base_register |
6787,10 → 6808,8 |
and bh,111b |
or ah,bh |
sib_ready: |
test ch,44h |
test ch,44h or 88h |
jnz sib_address_32bit_value |
test ch,88h |
jnz sib_address_32bit_value |
or ch,ch |
jnz address_sizes_do_not_agree |
cmp bh,5 |
6798,10 → 6817,13 |
or edx,edx |
jz sib_address |
address_value: |
cmp [displacement_compression],2 |
ja sib_address_8bit_value |
je sib_address_32bit_value |
cmp edx,80h |
jb sib_address_8bit_value |
cmp edx,-80h |
jae sib_address_8bit_value |
jnb sib_address_8bit_value |
sib_address_32bit_value: |
or al,10000000b |
mov cl,[postbyte_register] |
6817,10 → 6839,6 |
stos word [edi] |
mov al,dl |
stos byte [edi] |
cmp edx,80h |
jge value_out_of_range |
cmp edx,-80h |
jl value_out_of_range |
ret |
sib_address: |
mov cl,[postbyte_register] |
6837,12 → 6855,13 |
shl cl,3 |
or al,cl |
stos word [edi] |
test ch,44h |
test ch,44h or 88h |
jnz store_address_32bit_value |
test ch,88h |
jnz store_address_32bit_value |
or ch,ch |
jnz invalid_address_size |
cmp [displacement_compression],2 |
jbe store_address_32bit_value |
mov edx,[uncompressed_displacement] |
jmp store_address_32bit_value |
zero_index_register: |
mov bl,4 |
6853,18 → 6872,19 |
and al,111b |
cmp al,4 |
je zero_index_register |
test ch,44h |
test ch,44h or 88h |
jnz simple_address_32bit_value |
test ch,88h |
jnz simple_address_32bit_value |
or ch,ch |
jnz address_sizes_do_not_agree |
or edx,edx |
jz simple_address |
cmp [displacement_compression],2 |
ja simple_address_8bit_value |
je simple_address_32bit_value |
cmp edx,80h |
jb simple_address_8bit_value |
cmp edx,-80h |
jae simple_address_8bit_value |
jnb simple_address_8bit_value |
simple_address_32bit_value: |
or al,10000000b |
mov cl,[postbyte_register] |
6880,10 → 6900,6 |
stos byte [edi] |
mov al,dl |
stos byte [edi] |
cmp edx,80h |
jge value_out_of_range |
cmp edx,-80h |
jl value_out_of_range |
ret |
simple_address: |
cmp al,5 |
6896,10 → 6912,8 |
address_immediate: |
cmp [code_type],64 |
je address_immediate_sib |
test ch,44h |
test ch,44h or 88h |
jnz address_immediate_32bit |
test ch,88h |
jnz address_immediate_32bit |
test ch,22h |
jnz address_immediate_16bit |
or ch,ch |
6988,7 → 7002,9 |
sub eax,[current_offset] |
add eax,5 |
sub edx,eax |
jo value_out_of_range |
jno @f |
call recoverable_overflow |
@@: |
mov al,101b |
mov cl,[postbyte_register] |
shl cl,3 |