Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5098 → Rev 6467

/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