Subversion Repositories Kolibri OS

Compare Revisions

Ignore whitespace Rev 4000 → Rev 4039

/programs/develop/fasm/trunk/assemble.inc
1,6 → 1,6
 
; flat assembler core
; Copyright (c) 1999-2012, Tomasz Grysztar.
; Copyright (c) 1999-2013, Tomasz Grysztar.
; All rights reserved.
 
assembler:
12,7 → 12,7
mov [actual_fixups_size],eax
assembler_loop:
mov eax,[labels_list]
mov [display_buffer],eax
mov [tagged_blocks],eax
mov eax,[additional_memory]
mov [free_additional_memory],eax
mov eax,[additional_memory_end]
22,11 → 22,7
xor eax,eax
mov dword [adjustment],eax
mov dword [adjustment+4],eax
mov dword [org_origin],edi
mov dword [org_origin+4],eax
mov [org_start],edi
mov [org_registers],eax
mov [org_symbol],eax
mov [addressing_space],eax
mov [error_line],eax
mov [counter],eax
mov [format_flags],eax
35,11 → 31,9
mov [file_extension],eax
mov [next_pass_needed],al
mov [output_format],al
mov [org_origin_sign],al
mov [adjustment_sign],al
mov [labels_type],al
mov [virtual_data],al
mov [code_type],16
call init_addressing_space
pass_loop:
call assemble_line
jnc pass_loop
46,7 → 40,7
mov eax,[additional_memory_end]
cmp eax,[structures_buffer]
je pass_done
sub eax,20h
sub eax,18h
mov eax,[eax+4]
mov [current_line],eax
jmp missing_end_directive
141,8 → 135,36
assemble_ok:
ret
 
create_addressing_space:
mov ebx,[addressing_space]
test ebx,ebx
jz init_addressing_space
test byte [ebx+0Ah],1
jnz illegal_instruction
mov eax,edi
sub eax,[ebx+18h]
mov [ebx+1Ch],eax
init_addressing_space:
mov ebx,[tagged_blocks]
mov dword [ebx-4],10h
mov dword [ebx-8],20h
sub ebx,8+20h
cmp ebx,edi
jbe out_of_memory
mov [tagged_blocks],ebx
mov [addressing_space],ebx
xor eax,eax
mov [ebx],edi
mov [ebx+4],eax
mov [ebx+8],eax
mov [ebx+10h],eax
mov [ebx+14h],eax
mov [ebx+18h],edi
mov [ebx+1Ch],eax
ret
 
assemble_line:
mov eax,[display_buffer]
mov eax,[tagged_blocks]
sub eax,100h
cmp edi,eax
ja out_of_memory
153,6 → 175,8
cmp al,3
jb define_label
je define_constant
cmp al,4
je label_addressing_space
cmp al,0Fh
je new_line
cmp al,13h
164,7 → 188,7
code_type_setting:
lods byte [esi]
mov [code_type],al
jmp line_assembled
jmp instruction_assembled
new_line:
lods dword [esi]
mov [current_line],eax
173,30 → 197,19
je continue_line
cmp [next_pass_needed],0
jne continue_line
mov ebx,[display_buffer]
mov ebx,[tagged_blocks]
mov dword [ebx-4],1
mov dword [ebx-8],1Ch
sub ebx,8+1Ch
mov dword [ebx-8],14h
sub ebx,8+14h
cmp ebx,edi
jbe out_of_memory
mov [display_buffer],ebx
mov [tagged_blocks],ebx
mov [ebx],eax
mov [ebx+4],edi
mov eax,dword [org_origin]
mov edx,dword [org_origin+4]
mov ecx,[org_registers]
mov eax,[addressing_space]
mov [ebx+8],eax
mov [ebx+8+4],edx
mov [ebx+10h],ecx
mov edx,[org_symbol]
; mov al,[virtual_data]
; mov ah,[org_origin_sign]
; shl eax,16
; mov al,[labels_type]
; mov ah,[code_type]
mov eax,dword [labels_type]
mov [ebx+14h],edx
mov [ebx+18h],eax
mov al,[code_type]
mov [ebx+10h],al
continue_line:
cmp byte [esi],0Fh
je line_assembled
215,15 → 228,16
mov eax,edi
xor edx,edx
xor cl,cl
sub eax,dword [org_origin]
sbb edx,dword [org_origin+4]
sbb cl,[org_origin_sign]
mov ebp,[addressing_space]
sub eax,[ds:ebp]
sbb edx,[ds:ebp+4]
sbb cl,[ds:ebp+8]
jp label_value_ok
call recoverable_overflow
label_value_ok:
mov [address_sign],cl
cmp [virtual_data],0
jne make_virtual_label
test byte [ds:ebp+0Ah],1
jnz make_virtual_label
or byte [ebx+9],1
xchg eax,[ebx]
xchg edx,[ebx+4]
251,10 → 265,11
setne al
or ah,al
finish_label:
mov ch,[labels_type]
mov ebp,[addressing_space]
mov ch,[ds:ebp+9]
mov cl,[label_size]
mov ebp,[org_registers]
mov edx,[org_symbol]
mov edx,[ds:ebp+14h]
mov ebp,[ds:ebp+10h]
finish_label_symbol:
mov al,[address_sign]
xor al,[ebx+9]
289,6 → 304,8
jz new_label
cmp cx,[ebx+16]
je symbol_already_defined
btr dword [ebx+8],10
jc requalified_label
inc cx
sub cx,[ebx+16]
setnz al
299,6 → 316,7
mov cx,[current_pass]
cmp cx,[ebx+18]
jne label_made
requalified_label:
or [next_pass_needed],-1
label_made:
ret
320,7 → 338,7
mov cx,[current_pass]
cmp cx,[eax+16]
je get_constant_value
and dl,not 1
or dl,4
mov [eax+8],dl
get_constant_value:
push eax
331,10 → 349,11
pop ebx
mov ch,bl
pop ebx
pop dword [ebx+8]
cmp ebx,0Fh
jb invalid_use_of_symbol
je reserved_word_used_as_symbol
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
385,8 → 404,11
test byte [ebx+8],2
jz symbol_already_defined
or byte [ebx+8],4
and byte [ebx+9],not 4
jmp instruction_assembled
redeclare_constant:
btr dword [ebx+8],10
jc requalified_constant
inc cx
sub cx,[ebx+16]
setnz al
399,11 → 421,37
mov cx,[current_pass]
cmp cx,[ebx+18]
jne instruction_assembled
requalified_constant:
or [next_pass_needed],-1
jmp instruction_assembled
new_constant:
or byte [ebx+8],1+2
jmp instruction_assembled
label_addressing_space:
lods dword [esi]
cmp eax,0Fh
jb invalid_use_of_symbol
je reserved_word_used_as_symbol
mov cx,[current_pass]
test byte [eax+8],1
jz make_addressing_space_label
cmp cx,[eax+16]
je symbol_already_defined
test byte [eax+9],4
jnz make_addressing_space_label
or [next_pass_needed],-1
make_addressing_space_label:
mov dx,[eax+8]
and dx,not (2 or 100h)
or dx,1 or 4 or 400h
mov [eax+8],dx
mov [eax+16],cx
mov edx,[current_line]
mov [eax+28],edx
mov ebx,[addressing_space]
mov [eax],ebx
or byte [ebx+0Ah],2
jmp continue_line
assemble_instruction:
; mov [operand_size],0
; mov [size_override],0
446,22 → 494,31
mov cl,[value_type]
test cl,1
jnz invalid_use_of_symbol
mov [labels_type],cl
mov dword [org_origin],edi
xor ecx,ecx
mov dword [org_origin+4],ecx
mov [org_origin_sign],cl
mov [org_registers],ecx
push eax
mov ebx,[addressing_space]
mov eax,edi
sub eax,[ebx+18h]
mov [ebx+1Ch],eax
test byte [ebx+0Ah],1
jnz in_virtual
call init_addressing_space
jmp org_space_ok
in_virtual:
call close_virtual_addressing_space
call init_addressing_space
or byte [ebx+0Ah],1
org_space_ok:
pop eax
mov [ebx+9],cl
mov cl,[value_sign]
sub dword [org_origin],eax
sbb dword [org_origin+4],edx
sbb [org_origin_sign],cl
sub [ebx],eax
sbb [ebx+4],edx
sbb byte [ebx+8],cl
jp org_value_ok
call recoverable_overflow
org_value_ok:
mov [org_start],edi
mov edx,[symbol_identifier]
mov [org_symbol],edx
mov [ebx+14h],edx
cmp [output_format],1
ja instruction_assembled
cmp edi,[code_start]
502,9 → 559,8
lods byte [esi]
cmp al,'('
jne invalid_argument
push dword [ebx+8]
push ebx ecx
and byte [ebx+8],not 1
or byte [ebx+8],4
cmp byte [esi],'.'
je invalid_value
call get_address_value
516,14 → 572,10
xchg bl,bh
mov bp,bx
pop ecx ebx
pop dword [ebx+8]
and byte [ebx+8],not 4
mov ch,[value_type]
or ch,ch
jz make_free_label
cmp ch,4
je make_free_label
cmp ch,2
jne invalid_use_of_symbol
test ch,1
jnz invalid_use_of_symbol
make_free_label:
and byte [ebx+9],not 1
cmp eax,[ebx]
558,39 → 610,17
mov [operand_size],al
and dword [value],0
and dword [value+4],0
lods word [esi]
cmp ax,82h+'(' shl 8
lods byte [esi]
cmp al,82h
jne invalid_argument
load_from_code:
cmp byte [esi],'.'
je invalid_value
or [size_override],-1
call get_address_value
call calculate_relative_offset
call get_data_point
jc value_loaded
push esi edi
cmp [next_pass_needed],0
jne load_address_type_ok
cmp [value_type],0
jne invalid_use_of_symbol
load_address_type_ok:
cmp edx,-1
jne bad_load_address
neg eax
mov esi,edi
sub esi,eax
jc bad_load_address
cmp esi,[org_start]
jb bad_load_address
mov esi,ebx
mov edi,value
movzx ecx,[operand_size]
cmp ecx,eax
ja bad_load_address
rep movs byte [edi],[esi]
jmp value_loaded
bad_load_address:
call recoverable_overflow
pop edi esi
value_loaded:
pop edi esi
mov [value_sign],0
mov eax,dword [value]
mov edx,dword [value+4]
597,6 → 627,85
pop ebx
xor cx,cx
jmp make_constant
get_data_point:
mov ebx,[addressing_space]
mov ecx,edi
sub ecx,[ebx+18h]
mov [ebx+1Ch],ecx
lods byte [esi]
cmp al,'('
jne invalid_argument
cmp byte [esi],11h
jne get_data_address
cmp word [esi+1+4],'):'
jne get_data_address
inc esi
lods dword [esi]
add esi,2
cmp byte [esi],'('
jne invalid_argument
inc esi
cmp eax,0Fh
jbe reserved_word_used_as_symbol
mov edx,undefined_symbol
test byte [eax+8],1
jz addressing_space_unavailable
mov edx,symbol_out_of_scope
mov cx,[eax+16]
cmp cx,[current_pass]
jne addressing_space_unavailable
test byte [eax+9],4
jz invalid_use_of_symbol
mov ebx,eax
mov ax,[current_pass]
mov [ebx+18],ax
or byte [ebx+8],8
cmp [symbols_file],0
je get_addressing_space
cmp [next_pass_needed],0
jne get_addressing_space
call store_label_reference
get_addressing_space:
mov ebx,[ebx]
get_data_address:
push ebx
cmp byte [esi],'.'
je invalid_value
or [size_override],-1
call get_address_value
pop ebp
call calculate_relative_offset
cmp [next_pass_needed],0
jne data_address_type_ok
cmp [value_type],0
jne invalid_use_of_symbol
data_address_type_ok:
mov ebx,edi
xor ecx,ecx
add ebx,eax
adc edx,ecx
mov eax,ebx
sub eax,[ds:ebp+18h]
sbb edx,ecx
jnz bad_data_address
mov cl,[operand_size]
add eax,ecx
cmp eax,[ds:ebp+1Ch]
ja bad_data_address
clc
ret
addressing_space_unavailable:
cmp [error_line],0
jne get_data_address
push [current_line]
pop [error_line]
mov [error],edx
mov [error_info],eax
jmp get_data_address
bad_data_address:
call recoverable_overflow
stc
ret
store_directive:
cmp byte [esi],11h
je sized_store
616,44 → 725,23
jne invalid_use_of_symbol
mov dword [value],eax
mov dword [value+4],edx
lods word [esi]
cmp ax,80h+'(' shl 8
lods byte [esi]
cmp al,80h
jne invalid_argument
cmp byte [esi],'.'
je invalid_value
or [size_override],-1
call get_address_value
call calculate_relative_offset
call get_data_point
jc instruction_assembled
push esi edi
cmp [next_pass_needed],0
jne store_address_type_ok
cmp [value_type],0
jne invalid_use_of_symbol
store_address_type_ok:
cmp edx,-1
jne bad_store_address
neg eax
sub edi,eax
jc bad_store_address
cmp edi,[org_start]
jb bad_store_address
mov esi,value
movzx ecx,[operand_size]
cmp ecx,eax
ja bad_store_address
mov edi,ebx
rep movs byte [edi],[esi]
mov eax,edi
pop edi esi
cmp edi,[undefined_data_end]
jne instruction_assembled
cmp ebx,[undefined_data_end]
jae instruction_assembled
cmp eax,[undefined_data_start]
jbe instruction_assembled
mov [undefined_data_start],eax
jmp instruction_assembled
bad_store_address:
pop edi esi
call recoverable_overflow
jmp instruction_assembled
 
display_directive:
lods byte [esi]
665,12 → 753,12
lods dword [esi]
mov ecx,eax
push edi
mov edi,[display_buffer]
mov edi,[tagged_blocks]
sub edi,8
sub edi,eax
cmp edi,[esp]
jbe out_of_memory
mov [display_buffer],edi
mov [tagged_blocks],edi
rep movs byte [edi],[esi]
stos dword [edi]
xor eax,eax
681,9 → 769,9
display_byte:
call get_byte_value
push edi
mov edi,[display_buffer]
mov edi,[tagged_blocks]
sub edi,8+1
mov [display_buffer],edi
mov [tagged_blocks],edi
stos byte [edi]
mov eax,1
stos dword [edi]
691,7 → 779,7
stos dword [edi]
pop edi
display_next:
cmp edi,[display_buffer]
cmp edi,[tagged_blocks]
ja out_of_memory
lods byte [esi]
cmp al,','
699,7 → 787,7
dec esi
jmp instruction_assembled
show_display_buffer:
mov eax,[display_buffer]
mov eax,[tagged_blocks]
or eax,eax
jz display_done
mov esi,[labels_list]
711,12 → 799,12
mov ecx,[esi]
sub esi,ecx
test eax,eax
jnz skip_internal_message
jnz skip_block
push esi
call display_block
pop esi
skip_internal_message:
cmp esi,[display_buffer]
skip_block:
cmp esi,[tagged_blocks]
jne display_messages
display_done:
ret
779,28 → 867,41
jmp set_virtual
virtual_at_current:
dec esi
mov al,[labels_type]
mov ebp,[addressing_space]
mov al,[ds:ebp+9]
mov [value_type],al
mov ebp,[org_symbol]
mov eax,edi
xor edx,edx
xor cl,cl
sub eax,dword [org_origin]
sbb edx,dword [org_origin+4]
sbb cl,[org_origin_sign]
sub eax,[ds:ebp]
sbb edx,[ds:ebp+4]
sbb cl,[ds:ebp+8]
mov [address_sign],cl
mov bx,word [org_registers]
mov cx,word [org_registers+2]
mov bx,[ds:ebp+10h]
mov cx,[ds:ebp+10h+2]
xchg bh,bl
xchg ch,cl
mov ebp,[ds:ebp+14h]
set_virtual:
push [org_registers]
mov byte [org_registers],bh
mov byte [org_registers+1],bl
mov byte [org_registers+2],ch
mov byte [org_registers+3],cl
xchg bl,bh
xchg cl,ch
shl ecx,16
mov cx,bx
push ecx eax
call allocate_structure_data
mov word [ebx],virtual_directive-instruction_handler
mov ecx,[addressing_space]
mov [ebx+12],ecx
mov [ebx+8],edi
mov ecx,[current_line]
mov [ebx+4],ecx
mov ebx,[addressing_space]
mov eax,edi
sub eax,[ebx+18h]
mov [ebx+1Ch],eax
call init_addressing_space
or byte [ebx+0Ah],1
pop eax
mov cl,[address_sign]
not eax
not edx
811,37 → 912,19
add eax,edi
adc edx,0
adc cl,0
xchg dword [org_origin],eax
xchg dword [org_origin+4],edx
xchg [org_origin_sign],cl
mov [ebx+10h],eax
mov [ebx+14h],edx
pop eax
mov [ebx+18h],eax
mov al,[virtual_data]
and al,0Fh
shl cl,4
or al,cl
mov [ebx+2],al
mov al,[labels_type]
mov [ebx+3],al
mov eax,edi
xchg eax,[org_start]
mov [ebx+0Ch],eax
xchg ebp,[org_symbol]
mov [ebx+1Ch],ebp
mov [ebx+8],edi
mov eax,[current_line]
mov [ebx+4],eax
or [virtual_data],-1
mov [ebx],eax
mov [ebx+4],edx
mov [ebx+8],cl
pop dword [ebx+10h]
mov [ebx+14h],ebp
mov al,[value_type]
test al,1
jnz invalid_use_of_symbol
mov [labels_type],al
mov [ebx+9],al
jmp instruction_assembled
allocate_structure_data:
mov ebx,[structures_buffer]
sub ebx,20h
sub ebx,18h
cmp ebx,[free_additional_memory]
jb out_of_memory
mov [structures_buffer],ebx
853,7 → 936,7
je no_such_structure
cmp ax,[ebx]
je structure_data_found
add ebx,20h
add ebx,18h
jmp scan_structures
structure_data_found:
ret
863,27 → 946,11
end_virtual:
call find_structure_data
jc unexpected_instruction
mov al,[ebx+2]
mov ah,al
shr ah,4
and al,1
neg al
and ah,1
neg ah
mov [virtual_data],al
mov [org_origin_sign],ah
mov al,[ebx+3]
mov [labels_type],al
mov eax,[ebx+10h]
mov dword [org_origin],eax
mov eax,[ebx+14h]
mov dword [org_origin+4],eax
mov eax,[ebx+18h]
mov [org_registers],eax
mov eax,[ebx+0Ch]
mov [org_start],eax
mov eax,[ebx+1Ch]
mov [org_symbol],eax
push ebx
call close_virtual_addressing_space
pop ebx
mov eax,[ebx+12]
mov [addressing_space],eax
mov edi,[ebx+8]
remove_structure_data:
push esi edi
891,13 → 958,55
sub ecx,[structures_buffer]
shr ecx,2
lea esi,[ebx-4]
lea edi,[esi+20h]
lea edi,[esi+18h]
std
rep movs dword [edi],[esi]
cld
add [structures_buffer],20h
add [structures_buffer],18h
pop edi esi
ret
close_virtual_addressing_space:
mov ebx,[addressing_space]
mov eax,edi
sub eax,[ebx+18h]
mov [ebx+1Ch],eax
test byte [ebx+0Ah],2
jz addressing_space_closed
push esi edi ecx edx
mov ecx,eax
mov eax,[tagged_blocks]
mov dword [eax-4],11h
mov dword [eax-8],ecx
sub eax,8
sub eax,ecx
mov [tagged_blocks],eax
lea edi,[eax+ecx-1]
xchg eax,[ebx+18h]
lea esi,[eax+ecx-1]
mov eax,edi
sub eax,esi
std
shr ecx,1
jnc virtual_byte_ok
movs byte [edi],[esi]
virtual_byte_ok:
dec esi
dec edi
shr ecx,1
jnc virtual_word_ok
movs word [edi],[esi]
virtual_word_ok:
sub esi,2
sub edi,2
rep movs dword [edi],[esi]
cld
xor edx,edx
add [ebx],eax
adc dword [ebx+4],edx
adc byte [ebx+8],dl
pop edx ecx edi esi
addressing_space_closed:
ret
repeat_directive:
cmp [prefixed_instruction],0
jne unexpected_instruction
1193,7 → 1302,7
je break_while
cmp ax,if_directive-instruction_handler
je break_if
add ebx,20h
add ebx,18h
jmp find_breakable_structure
break_if:
push [current_line]
1235,14 → 1344,15
lods dword [esi]
mov ecx,eax
lea eax,[edi+ecx]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
ja out_of_memory
rep movs byte [edi],[esi]
inc esi
ret
undefined_data:
cmp [virtual_data],0
je mark_undefined_data
mov ebp,[addressing_space]
test byte [ds:ebp+0Ah],1
jz mark_undefined_data
ret
mark_undefined_data:
cmp eax,[undefined_data_end]
1252,7 → 1362,7
mov [undefined_data_end],edi
ret
define_data:
cmp edi,[display_buffer]
cmp edi,[tagged_blocks]
jae out_of_memory
cmp byte [esi],'('
jne simple_data_value
1273,7 → 1383,7
duplicate_data:
push eax esi
duplicated_values:
cmp edi,[display_buffer]
cmp edi,[tagged_blocks]
jae out_of_memory
call near dword [esp+8]
lods byte [esi]
1287,7 → 1397,7
mov esi,ebx
jmp duplicate_data
duplicate_single_data_value:
cmp edi,[display_buffer]
cmp edi,[tagged_blocks]
jae out_of_memory
push eax esi
call near dword [esp+8]
1311,7 → 1421,7
call skip_symbol
jmp data_defined
simple_data_value:
cmp edi,[display_buffer]
cmp edi,[tagged_blocks]
jae out_of_memory
call near dword [esp]
data_defined:
1354,7 → 1464,7
mov ecx,eax
jecxz word_string_ok
lea eax,[edi+ecx*2]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
ja out_of_memory
xor ah,ah
copy_word_string:
1624,7 → 1734,7
mov edx,edi
add edi,ecx
jc out_of_memory
cmp edi,[display_buffer]
cmp edi,[tagged_blocks]
ja out_of_memory
call read
jc error_reading_file
1704,7 → 1814,7
mov edx,ecx
add edx,edi
jc out_of_memory
cmp edx,[display_buffer]
cmp edx,[tagged_blocks]
ja out_of_memory
push edi
cmp [next_pass_needed],0
1739,7 → 1849,7
jc out_of_memory
add edx,edi
jc out_of_memory
cmp edx,[display_buffer]
cmp edx,[tagged_blocks]
ja out_of_memory
push edi
cmp [next_pass_needed],0
1769,7 → 1879,7
jc out_of_memory
add edx,edi
jc out_of_memory
cmp edx,[display_buffer]
cmp edx,[tagged_blocks]
ja out_of_memory
push edi
cmp [next_pass_needed],0
1796,7 → 1906,7
jc out_of_memory
add edx,edi
jc out_of_memory
cmp edx,[display_buffer]
cmp edx,[tagged_blocks]
ja out_of_memory
push edi
cmp [next_pass_needed],0
1820,7 → 1930,7
jc out_of_memory
add edx,edi
jc out_of_memory
cmp edx,[display_buffer]
cmp edx,[tagged_blocks]
ja out_of_memory
push edi
cmp [next_pass_needed],0
1843,7 → 1953,7
jc out_of_memory
add edx,edi
jc out_of_memory
cmp edx,[display_buffer]
cmp edx,[tagged_blocks]
ja out_of_memory
push edi
cmp [next_pass_needed],0
1866,14 → 1976,15
cmp eax,1
je instruction_assembled
mov ecx,edi
sub ecx,dword [org_origin]
cmp [org_registers],0
mov ebp,[addressing_space]
sub ecx,[ds:ebp]
cmp dword [ds:ebp+10h],0
jne section_not_aligned_enough
cmp [labels_type],0
cmp byte [ds:ebp+9],0
je make_alignment
cmp [output_format],3
je pe_alignment
mov ebx,[org_symbol]
mov ebx,[ds:ebp+14h]
cmp byte [ebx],0
jne section_not_aligned_enough
cmp eax,[ebx+10h]
1892,7 → 2003,7
mov edx,ecx
add edx,edi
jc out_of_memory
cmp edx,[display_buffer]
cmp edx,[tagged_blocks]
ja out_of_memory
push edi
cmp [next_pass_needed],0
/programs/develop/fasm/trunk/avx.inc
1,1787 → 1,1787
 
; flat assembler core
; Copyright (c) 1999-2012, Tomasz Grysztar.
; All rights reserved.
 
avx_single_source_pd_instruction:
or [vex_required],2
jmp avx_pd_instruction
avx_pd_instruction_imm8:
mov [immediate_size],1
avx_pd_instruction:
mov [opcode_prefix],66h
mov [mmx_size],0
jmp avx_instruction
avx_single_source_ps_instruction:
or [vex_required],2
jmp avx_ps_instruction
avx_ps_instruction_imm8:
mov [immediate_size],1
avx_ps_instruction:
mov [mmx_size],0
jmp avx_instruction
avx_sd_instruction_imm8:
mov [immediate_size],1
avx_sd_instruction:
mov [opcode_prefix],0F2h
mov [mmx_size],8
jmp avx_instruction
avx_ss_instruction_imm8:
mov [immediate_size],1
avx_ss_instruction:
mov [opcode_prefix],0F3h
mov [mmx_size],4
jmp avx_instruction
avx_cmp_pd_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:
or [vex_required],2
mov [mmx_size],4
jmp avx_instruction
avx_comisd_instruction:
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
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:
mov [base_code],0Fh
mov [extended_code],al
avx_common:
or [vex_required],1
lods byte [esi]
call get_size_operator
cmp al,10h
jne invalid_operand
avx_reg:
lods byte [esi]
call convert_avx_register
mov [postbyte_register],al
avx_vex_reg:
test [vex_required],2
jnz avx_vex_reg_ok
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_register
mov [vex_register],al
avx_vex_reg_ok:
cmp [mmx_size],0
je avx_regs_size_ok
cmp ah,16
jne invalid_operand
avx_regs_size_ok:
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_rm
jc avx_regs_reg
mov al,[extended_code]
mov ah,[supplemental_code]
cmp al,0C2h
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
or byte [value],al
test al,80h
jz avx_regs_mem_reg_store
cmp [code_type],64
jne invalid_operand
avx_regs_mem_reg_store:
call take_imm4_if_needed
call store_instruction_with_imm8
jmp instruction_assembled
avx_regs_reg:
mov bl,al
mov al,[extended_code]
mov ah,[supplemental_code]
cmp al,0C2h
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
or byte [value],al
test al,80h
jz avx_regs_reg_
cmp [code_type],64
jne invalid_operand
avx_regs_reg_:
call take_avx_rm
jc avx_regs_reg_reg
cmp [immediate_size],-2
jg invalid_operand
or [rex_prefix],8
call take_imm4_if_needed
call store_instruction_with_imm8
jmp instruction_assembled
avx_regs_reg_reg:
shl al,4
and byte [value],1111b
or byte [value],al
call take_imm4_if_needed
call store_nomem_instruction
mov al,byte [value]
stos byte [edi]
jmp instruction_assembled
take_avx_rm:
xor cl,cl
xchg cl,[operand_size]
lods byte [esi]
call get_size_operator
cmp al,'['
je take_avx_mem
mov [operand_size],cl
cmp al,10h
jne invalid_operand
lods byte [esi]
call convert_avx_register
cmp [mmx_size],0
je avx_reg_ok
cmp ah,16
jne invalid_operand
avx_reg_ok:
stc
ret
take_avx_mem:
push ecx
call get_address
pop eax
cmp [mmx_size],0
jne avx_smem
xchg al,[operand_size]
or al,al
jz avx_mem_ok
cmp al,[operand_size]
jne operand_sizes_do_not_match
avx_mem_ok:
clc
ret
avx_smem:
xchg al,[operand_size]
or al,al
jz avx_smem_ok
cmp al,[mmx_size]
jne invalid_operand_size
avx_smem_ok:
clc
ret
take_imm4_if_needed:
cmp [immediate_size],-3
jne imm4_ok
push ebx ecx edx
lods byte [esi]
cmp al,','
jne invalid_operand
lods byte [esi]
cmp al,'('
jne invalid_operand
call get_byte_value
test al,11110000b
jnz value_out_of_range
or byte [value],al
pop edx ecx ebx
imm4_ok:
ret
 
avx_single_source_128bit_instruction_38:
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:
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
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
jmp avx_movps_instruction
avx_movpd_instruction:
mov [opcode_prefix],66h
avx_movps_instruction:
mov [mmx_size],0
or [vex_required],2
mov [base_code],0Fh
mov [extended_code],al
lods byte [esi]
call get_size_operator
cmp al,10h
je avx_reg
inc [extended_code]
test [extended_code],1
jnz avx_mem
add [extended_code],-1+10h
avx_mem:
cmp al,'['
jne invalid_operand
call get_address
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_register
mov [postbyte_register],al
jmp instruction_ready
avx_movntpd_instruction:
mov [opcode_prefix],66h
avx_movntps_instruction:
or [vex_required],1
mov [base_code],0Fh
mov [extended_code],al
lods byte [esi]
call get_size_operator
jmp avx_mem
avx_lddqu_instruction:
mov [opcode_prefix],0F2h
mov [mmx_size],0
xor cx,cx
avx_load_instruction:
mov [base_code],0Fh
mov [extended_code],al
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
lods byte [esi]
cmp al,','
jne invalid_operand
lods byte [esi]
call get_size_operator
cmp al,10h
je avx_load_reg_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
jne invalid_operand_size
jmp instruction_ready
avx_load_reg_reg:
lods byte [esi]
call convert_avx_register
cmp ch,ah
jne invalid_operand
mov bl,al
pop eax
xchg ah,[operand_size]
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:
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_movlpd_instruction:
mov [opcode_prefix],66h
avx_movlps_instruction:
mov [base_code],0Fh
mov [extended_code],al
mov [mmx_size],8
or [vex_required],1
lods byte [esi]
call get_size_operator
cmp al,10h
jne avx_movlps_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
cmp [operand_size],16
jne invalid_operand
mov [operand_size],0
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_rm
jc invalid_operand
jmp instruction_ready
avx_movlps_mem:
cmp al,'['
jne invalid_operand
call get_address
mov al,[operand_size]
or al,al
jz avx_movlps_mem_size_ok
cmp al,[mmx_size]
jne invalid_operand_size
mov [operand_size],0
avx_movlps_mem_size_ok:
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_register
cmp ah,16
jne invalid_operand
mov [postbyte_register],al
inc [extended_code]
jmp instruction_ready
avx_movhlps_instruction:
mov [base_code],0Fh
mov [extended_code],al
or [vex_required],1
call take_avx_register
cmp ah,16
jne invalid_operand
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
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
or [vex_required],1
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
call take_avx_rm
jc invalid_operand
jmp instruction_ready
avx_maskmov_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
mov [supplemental_code],al
mov [base_code],0Fh
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 [opcode_prefix],0F2h
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_avx_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:
mov [opcode_prefix],66h
avx_movmskps_instruction:
mov [base_code],0Fh
mov [extended_code],50h
or [vex_required],1
lods byte [esi]
call get_size_operator
cmp al,10h
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_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:
or [vex_required],1
mov [base_code],0Fh
mov [extended_code],10h
lods byte [esi]
call get_size_operator
cmp al,10h
jne avx_movlps_mem
lods byte [esi]
call convert_xmm_register
mov [postbyte_register],al
xor cl,cl
xchg cl,[operand_size]
lods byte [esi]
cmp al,','
jne invalid_operand
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_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_cvtdq2pd_instruction:
mov [opcode_prefix],0F3h
avx_cvtps2pd_instruction:
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
xor cl,cl
xchg cl,[operand_size]
lods byte [esi]
call get_size_operator
cmp al,10h
jne avx_cvtdq2pd_reg_mem
lods byte [esi]
call convert_xmm_register
mov bl,al
mov [operand_size],cl
jmp nomem_instruction_ready
avx_cvtdq2pd_reg_mem:
cmp al,'['
jne invalid_operand
mov [mmx_size],cl
call get_address
mov al,[mmx_size]
mov ah,al
xchg al,[operand_size]
or al,al
jz instruction_ready
shl al,1
cmp al,ah
jne invalid_operand_size
jmp instruction_ready
avx_cvtpd2dq_instruction:
mov [opcode_prefix],0F2h
jmp avx_cvtpd_instruction
avx_cvtpd2ps_instruction:
mov [opcode_prefix],66h
avx_cvtpd_instruction:
mov [base_code],0Fh
mov [extended_code],al
or [vex_required],1
call take_avx_register
mov [postbyte_register],al
cmp ah,16
jne invalid_operand
lods byte [esi]
cmp al,','
jne invalid_operand
mov [operand_size],0
lods byte [esi]
call get_size_operator
cmp al,10h
jne avx_cvtpd2dq_reg_mem
lods byte [esi]
call convert_avx_register
mov bl,al
jmp nomem_instruction_ready
avx_cvtpd2dq_reg_mem:
cmp al,'['
jne invalid_operand
call get_address
mov al,[operand_size]
or al,al
jz operand_size_not_specified
cmp al,16
je instruction_ready
cmp al,32
jne invalid_operand_size
jmp instruction_ready
avx_cvttps2dq_instruction:
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 [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
jmp cvtsi_xmmreg
 
avx_extractf128_instruction:
or [vex_required],1
call setup_66_0f_3a
lods byte [esi]
call get_size_operator
cmp al,10h
je avx_extractf128_reg
cmp al,'['
jne invalid_operand
call get_address
xor al,al
xchg al,[operand_size]
or al,al
jz avx_extractf128_mem_size_ok
cmp al,16
jne invalid_operand_size
avx_extractf128_mem_size_ok:
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_register
cmp ah,32
jne invalid_operand_size
mov [postbyte_register],al
jmp mmx_imm8
avx_extractf128_reg:
lods byte [esi]
call convert_xmm_register
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
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
avx_insertf128_instruction:
or [vex_required],1
call setup_66_0f_3a
call take_avx_register
cmp ah,32
jne invalid_operand
mov [postbyte_register],al
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_register
mov [vex_register],al
mov [operand_size],0
mov [mmx_size],16
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_rm
mov [operand_size],32
jnc mmx_imm8
mov bl,al
jmp mmx_nomem_imm8
avx_extractps_instruction:
or [vex_required],1
jmp extractps_instruction
avx_insertps_instruction:
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
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
avx_pinsrb_instruction:
mov [mmx_size],1
or [vex_required],1
jmp avx_pinsr_instruction_3a
avx_pinsrw_instruction:
mov [mmx_size],2
or [vex_required],1
jmp avx_pinsr_instruction
avx_pinsrd_instruction:
mov [mmx_size],4
or [vex_required],1
jmp avx_pinsr_instruction_3a
avx_pinsrq_instruction:
mov [mmx_size],8
or [vex_required],1
call operand_64bit
avx_pinsr_instruction_3a:
mov [supplemental_code],al
mov al,3Ah
avx_pinsr_instruction:
mov [opcode_prefix],66h
mov [base_code],0Fh
mov [extended_code],al
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
jmp pinsr_xmmreg
avx_maskmovdqu_instruction:
or [vex_required],1
jmp maskmovdqu_instruction
avx_pmovmskb_instruction:
or [vex_required],1
mov [opcode_prefix],66h
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
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_pshufd_instruction:
or [vex_required],1
mov [mmx_size],0
mov [opcode_prefix],al
mov [base_code],0Fh
mov [extended_code],70h
call take_avx_register
mov [postbyte_register],al
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_rm
jnc mmx_imm8
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:
or [vex_required],1
call setup_66_0f_38
call take_avx_register
mov [postbyte_register],al
lods byte [esi]
cmp al,','
jne invalid_operand
xor al,al
xchg al,[operand_size]
push eax
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]
jne invalid_operand_size
jmp instruction_ready
avx_pmovsx_xmmreg_reg:
lods byte [esi]
call convert_xmm_register
mov bl,al
pop eax
mov [operand_size],al
jmp nomem_instruction_ready
avx_permil_instruction:
call setup_66_0f_3a
or [vex_required],1
call take_avx_register
mov [postbyte_register],al
lods byte [esi]
cmp al,','
jne invalid_operand
lods byte [esi]
call get_size_operator
cmp al,'['
je avx_permil_reg_mem
cmp al,10h
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
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
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:
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
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
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
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]
mov bl,al
jmp nomem_instruction_ready
avx_bit_shift_regs_mem:
push ecx
lods byte [esi]
call get_size_operator
call get_address
pop eax
xchg al,[operand_size]
test al,al
jz instruction_ready
cmp al,16
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
call take_avx_register
mov [vex_register],al
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
call get_address
lods byte [esi]
cmp al,','
jne invalid_operand
shl [operand_size],1
call take_avx_register
mov [postbyte_register],al
jmp mmx_imm8
vcvtps2ph_reg:
lods byte [esi]
call convert_xmm_register
mov bl,al
mov [operand_size],0
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_register
mov [postbyte_register],al
jmp mmx_nomem_imm8
 
bmi_instruction:
mov [base_code],0Fh
mov [extended_code],38h
mov [supplemental_code],0F3h
mov [postbyte_register],al
bmi_reg:
or [vex_required],1
lods byte [esi]
call get_size_operator
cmp al,10h
jne invalid_operand
lods byte [esi]
call convert_register
mov [vex_register],al
lods byte [esi]
cmp al,','
jne invalid_operand
lods byte [esi]
call get_size_operator
cmp al,10h
je bmi_reg_reg
cmp al,'['
jne invalid_argument
call get_address
call operand_32or64
jmp instruction_ready
bmi_reg_reg:
lods byte [esi]
call convert_register
mov bl,al
call operand_32or64
jmp nomem_instruction_ready
operand_32or64:
mov al,[operand_size]
cmp al,4
je operand_32or64_ok
cmp al,8
jne invalid_operand_size
cmp [code_type],64
jne invalid_operand
or [rex_prefix],8
operand_32or64_ok:
ret
pdep_instruction:
mov [opcode_prefix],0F2h
jmp andn_instruction
pext_instruction:
mov [opcode_prefix],0F3h
andn_instruction:
mov [base_code],0Fh
mov [extended_code],38h
mov [supplemental_code],al
or [vex_required],1
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
jmp bmi_reg
sarx_instruction:
mov [opcode_prefix],0F3h
jmp bzhi_instruction
shrx_instruction:
mov [opcode_prefix],0F2h
jmp bzhi_instruction
shlx_instruction:
mov [opcode_prefix],66h
bzhi_instruction:
mov [base_code],0Fh
mov [extended_code],38h
mov [supplemental_code],al
or [vex_required],1
call get_reg_mem
jc bzhi_reg_reg
call get_vex_source_register
jc invalid_operand
call operand_32or64
jmp instruction_ready
bzhi_reg_reg:
call get_vex_source_register
jc invalid_operand
call operand_32or64
jmp nomem_instruction_ready
get_vex_source_register:
lods byte [esi]
cmp al,','
jne invalid_operand
lods byte [esi]
call get_size_operator
cmp al,10h
jne no_vex_source_register
lods byte [esi]
call convert_register
mov [vex_register],al
clc
ret
no_vex_source_register:
stc
ret
bextr_instruction:
mov [base_code],0Fh
mov [extended_code],38h
mov [supplemental_code],al
or [vex_required],1
call get_reg_mem
jc bextr_reg_reg
call get_vex_source_register
jc bextr_reg_mem_imm32
call operand_32or64
jmp instruction_ready
bextr_reg_reg:
call get_vex_source_register
jc bextr_reg_reg_imm32
call operand_32or64
jmp nomem_instruction_ready
setup_bextr_imm_opcode:
mov [xop_opcode_map],0Ah
mov [base_code],10h
call operand_32or64
ret
bextr_reg_mem_imm32:
call get_imm32
call setup_bextr_imm_opcode
jmp store_instruction_with_imm32
bextr_reg_reg_imm32:
call get_imm32
call setup_bextr_imm_opcode
store_nomem_instruction_with_imm32:
call store_nomem_instruction
mov eax,dword [value]
call mark_relocation
stos dword [edi]
jmp instruction_assembled
get_imm32:
cmp al,'('
jne invalid_operand
push edx ebx ecx
call get_dword_value
mov dword [value],eax
pop ecx ebx edx
ret
rorx_instruction:
mov [opcode_prefix],0F2h
mov [base_code],0Fh
mov [extended_code],3Ah
mov [supplemental_code],al
or [vex_required],1
call get_reg_mem
jc rorx_reg_reg
call operand_32or64
jmp mmx_imm8
rorx_reg_reg:
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
 
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
 
xop_single_source_sd_instruction:
or [vex_required],2
mov [mmx_size],8
jmp xop_instruction_9
xop_single_source_ss_instruction:
or [vex_required],2
mov [mmx_size],4
jmp xop_instruction_9
xop_single_source_instruction:
or [vex_required],2
mov [mmx_size],0
xop_instruction_9:
mov [base_code],al
mov [xop_opcode_map],9
jmp avx_common
xop_single_source_128bit_instruction:
or [vex_required],2
mov [mmx_size],16
jmp xop_instruction_9
xop_triple_source_128bit_instruction:
mov [immediate_size],-1
mov byte [value],0
mov [mmx_size],16
jmp xop_instruction_8
xop_128bit_instruction:
mov [immediate_size],-2
mov byte [value],0
mov [mmx_size],16
xop_instruction_8:
mov [base_code],al
mov [xop_opcode_map],8
jmp avx_common
xop_pcom_b_instruction:
mov ah,0CCh
jmp xop_pcom_instruction
xop_pcom_d_instruction:
mov ah,0CEh
jmp xop_pcom_instruction
xop_pcom_q_instruction:
mov ah,0CFh
jmp xop_pcom_instruction
xop_pcom_w_instruction:
mov ah,0CDh
jmp xop_pcom_instruction
xop_pcom_ub_instruction:
mov ah,0ECh
jmp xop_pcom_instruction
xop_pcom_ud_instruction:
mov ah,0EEh
jmp xop_pcom_instruction
xop_pcom_uq_instruction:
mov ah,0EFh
jmp xop_pcom_instruction
xop_pcom_uw_instruction:
mov ah,0EDh
xop_pcom_instruction:
mov byte [value],al
mov [mmx_size],16
mov [base_code],ah
mov [xop_opcode_map],8
jmp avx_common
vpcmov_instruction:
or [vex_required],1
mov [immediate_size],-2
mov byte [value],0
mov [mmx_size],0
mov [base_code],al
mov [xop_opcode_map],8
jmp avx_common
xop_shift_instruction:
mov [base_code],al
or [vex_required],1
mov [xop_opcode_map],9
call take_avx_register
cmp ah,16
jne invalid_operand
mov [postbyte_register],al
lods byte [esi]
cmp al,','
jne invalid_operand
lods byte [esi]
call get_size_operator
cmp al,'['
je xop_shift_reg_mem
cmp al,10h
jne invalid_operand
lods byte [esi]
call convert_xmm_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
pop esi
xchg cl,[operand_size]
cmp al,'['
je xop_shift_reg_reg_mem
cmp al,10h
jne xop_shift_reg_reg_imm
call take_avx_register
mov bl,al
xchg bl,[vex_register]
jmp nomem_instruction_ready
xop_shift_reg_reg_mem:
or [rex_prefix],8
lods byte [esi]
call get_size_operator
call get_address
jmp instruction_ready
xop_shift_reg_reg_imm:
xor bl,bl
xchg bl,[vex_register]
cmp [base_code],94h
jae invalid_operand
add [base_code],30h
mov [xop_opcode_map],8
dec esi
jmp mmx_nomem_imm8
xop_shift_reg_mem:
call get_address
lods byte [esi]
cmp al,','
jne invalid_operand
push esi
xor cl,cl
xchg cl,[operand_size]
lods byte [esi]
call get_size_operator
pop esi
xchg cl,[operand_size]
cmp al,10h
jne xop_shift_reg_mem_imm
call take_avx_register
mov [vex_register],al
jmp instruction_ready
xop_shift_reg_mem_imm:
cmp [base_code],94h
jae invalid_operand
add [base_code],30h
mov [xop_opcode_map],8
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
 
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
cmp al,10h
jne invalid_operand
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
cmp al,8
jb match_register_size
cmp [code_type],64
jne invalid_operand
jmp match_register_size
store_vex_instruction_code:
mov al,[base_code]
cmp al,0Fh
jne store_xop_instruction_code
mov ah,[extended_code]
cmp ah,38h
je store_vex_0f38_instruction_code
cmp ah,3Ah
je store_vex_0f3a_instruction_code
test [rex_prefix],1011b
jnz store_vex_0f_instruction_code
mov [edi+2],ah
mov byte [edi],0C5h
mov al,[vex_register]
not al
shl al,3
mov ah,[rex_prefix]
shl ah,5
and ah,80h
xor al,ah
call get_vex_lpp_bits
mov [edi+1],al
call check_vex
add edi,3
ret
get_vex_lpp_bits:
cmp [operand_size],32
jne vex_l_bit_ok
or al,100b
vex_l_bit_ok:
mov ah,[opcode_prefix]
cmp ah,66h
je vex_66
cmp ah,0F3h
je vex_f3
cmp ah,0F2h
je vex_f2
test ah,ah
jnz disallowed_combination_of_registers
ret
vex_f2:
or al,11b
ret
vex_f3:
or al,10b
ret
vex_66:
or al,1
ret
store_vex_0f38_instruction_code:
mov al,11100010b
mov ah,[supplemental_code]
jmp make_c4_vex
store_vex_0f3a_instruction_code:
mov al,11100011b
mov ah,[supplemental_code]
jmp make_c4_vex
store_vex_0f_instruction_code:
mov al,11100001b
make_c4_vex:
mov [edi+3],ah
mov byte [edi],0C4h
mov ah,[rex_prefix]
shl ah,5
xor al,ah
mov [edi+1],al
call check_vex
mov al,[vex_register]
xor al,1111b
shl al,3
mov ah,[rex_prefix]
shl ah,4
and ah,80h
or al,ah
call get_vex_lpp_bits
mov [edi+2],al
add edi,4
ret
check_vex:
cmp [code_type],64
je vex_ok
not al
test al,11000000b
jnz invalid_operand
test [rex_prefix],40h
jnz invalid_operand
vex_ok:
ret
store_xop_instruction_code:
mov [edi+3],al
mov byte [edi],8Fh
mov al,[xop_opcode_map]
mov ah,[rex_prefix]
test ah,40h
jz xop_ok
cmp [code_type],64
jne invalid_operand
xop_ok:
not ah
shl ah,5
xor al,ah
mov [edi+1],al
mov al,[vex_register]
xor al,1111b
shl al,3
mov ah,[rex_prefix]
shl ah,4
and ah,80h
or al,ah
call get_vex_lpp_bits
mov [edi+2],al
add edi,4
ret
 
; flat assembler core
; Copyright (c) 1999-2013, Tomasz Grysztar.
; All rights reserved.
 
avx_single_source_pd_instruction:
or [vex_required],2
jmp avx_pd_instruction
avx_pd_instruction_imm8:
mov [immediate_size],1
avx_pd_instruction:
mov [opcode_prefix],66h
mov [mmx_size],0
jmp avx_instruction
avx_single_source_ps_instruction:
or [vex_required],2
jmp avx_ps_instruction
avx_ps_instruction_imm8:
mov [immediate_size],1
avx_ps_instruction:
mov [mmx_size],0
jmp avx_instruction
avx_sd_instruction_imm8:
mov [immediate_size],1
avx_sd_instruction:
mov [opcode_prefix],0F2h
mov [mmx_size],8
jmp avx_instruction
avx_ss_instruction_imm8:
mov [immediate_size],1
avx_ss_instruction:
mov [opcode_prefix],0F3h
mov [mmx_size],4
jmp avx_instruction
avx_cmp_pd_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:
or [vex_required],2
mov [mmx_size],4
jmp avx_instruction
avx_comisd_instruction:
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
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:
mov [base_code],0Fh
mov [extended_code],al
avx_common:
or [vex_required],1
lods byte [esi]
call get_size_operator
cmp al,10h
jne invalid_operand
avx_reg:
lods byte [esi]
call convert_avx_register
mov [postbyte_register],al
avx_vex_reg:
test [vex_required],2
jnz avx_vex_reg_ok
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_register
mov [vex_register],al
avx_vex_reg_ok:
cmp [mmx_size],0
je avx_regs_size_ok
cmp ah,16
jne invalid_operand
avx_regs_size_ok:
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_rm
jc avx_regs_reg
mov al,[extended_code]
mov ah,[supplemental_code]
cmp al,0C2h
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
or byte [value],al
test al,80h
jz avx_regs_mem_reg_store
cmp [code_type],64
jne invalid_operand
avx_regs_mem_reg_store:
call take_imm4_if_needed
call store_instruction_with_imm8
jmp instruction_assembled
avx_regs_reg:
mov bl,al
mov al,[extended_code]
mov ah,[supplemental_code]
cmp al,0C2h
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
or byte [value],al
test al,80h
jz avx_regs_reg_
cmp [code_type],64
jne invalid_operand
avx_regs_reg_:
call take_avx_rm
jc avx_regs_reg_reg
cmp [immediate_size],-2
jg invalid_operand
or [rex_prefix],8
call take_imm4_if_needed
call store_instruction_with_imm8
jmp instruction_assembled
avx_regs_reg_reg:
shl al,4
and byte [value],1111b
or byte [value],al
call take_imm4_if_needed
call store_nomem_instruction
mov al,byte [value]
stos byte [edi]
jmp instruction_assembled
take_avx_rm:
xor cl,cl
xchg cl,[operand_size]
lods byte [esi]
call get_size_operator
cmp al,'['
je take_avx_mem
mov [operand_size],cl
cmp al,10h
jne invalid_operand
lods byte [esi]
call convert_avx_register
cmp [mmx_size],0
je avx_reg_ok
cmp ah,16
jne invalid_operand
avx_reg_ok:
stc
ret
take_avx_mem:
push ecx
call get_address
pop eax
cmp [mmx_size],0
jne avx_smem
xchg al,[operand_size]
or al,al
jz avx_mem_ok
cmp al,[operand_size]
jne operand_sizes_do_not_match
avx_mem_ok:
clc
ret
avx_smem:
xchg al,[operand_size]
or al,al
jz avx_smem_ok
cmp al,[mmx_size]
jne invalid_operand_size
avx_smem_ok:
clc
ret
take_imm4_if_needed:
cmp [immediate_size],-3
jne imm4_ok
push ebx ecx edx
lods byte [esi]
cmp al,','
jne invalid_operand
lods byte [esi]
cmp al,'('
jne invalid_operand
call get_byte_value
test al,11110000b
jnz value_out_of_range
or byte [value],al
pop edx ecx ebx
imm4_ok:
ret
 
avx_single_source_128bit_instruction_38:
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:
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
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
jmp avx_movps_instruction
avx_movpd_instruction:
mov [opcode_prefix],66h
avx_movps_instruction:
mov [mmx_size],0
or [vex_required],2
mov [base_code],0Fh
mov [extended_code],al
lods byte [esi]
call get_size_operator
cmp al,10h
je avx_reg
inc [extended_code]
test [extended_code],1
jnz avx_mem
add [extended_code],-1+10h
avx_mem:
cmp al,'['
jne invalid_operand
call get_address
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_register
mov [postbyte_register],al
jmp instruction_ready
avx_movntpd_instruction:
mov [opcode_prefix],66h
avx_movntps_instruction:
or [vex_required],1
mov [base_code],0Fh
mov [extended_code],al
lods byte [esi]
call get_size_operator
jmp avx_mem
avx_lddqu_instruction:
mov [opcode_prefix],0F2h
mov [mmx_size],0
xor cx,cx
avx_load_instruction:
mov [base_code],0Fh
mov [extended_code],al
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
lods byte [esi]
cmp al,','
jne invalid_operand
lods byte [esi]
call get_size_operator
cmp al,10h
je avx_load_reg_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
jne invalid_operand_size
jmp instruction_ready
avx_load_reg_reg:
lods byte [esi]
call convert_avx_register
cmp ch,ah
jne invalid_operand
mov bl,al
pop eax
xchg ah,[operand_size]
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:
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_movlpd_instruction:
mov [opcode_prefix],66h
avx_movlps_instruction:
mov [base_code],0Fh
mov [extended_code],al
mov [mmx_size],8
or [vex_required],1
lods byte [esi]
call get_size_operator
cmp al,10h
jne avx_movlps_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
cmp [operand_size],16
jne invalid_operand
mov [operand_size],0
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_rm
jc invalid_operand
jmp instruction_ready
avx_movlps_mem:
cmp al,'['
jne invalid_operand
call get_address
mov al,[operand_size]
or al,al
jz avx_movlps_mem_size_ok
cmp al,[mmx_size]
jne invalid_operand_size
mov [operand_size],0
avx_movlps_mem_size_ok:
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_register
cmp ah,16
jne invalid_operand
mov [postbyte_register],al
inc [extended_code]
jmp instruction_ready
avx_movhlps_instruction:
mov [base_code],0Fh
mov [extended_code],al
or [vex_required],1
call take_avx_register
cmp ah,16
jne invalid_operand
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
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
or [vex_required],1
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
call take_avx_rm
jc invalid_operand
jmp instruction_ready
avx_maskmov_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
mov [supplemental_code],al
mov [base_code],0Fh
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 [opcode_prefix],0F2h
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_avx_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:
mov [opcode_prefix],66h
avx_movmskps_instruction:
mov [base_code],0Fh
mov [extended_code],50h
or [vex_required],1
lods byte [esi]
call get_size_operator
cmp al,10h
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_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:
or [vex_required],1
mov [base_code],0Fh
mov [extended_code],10h
lods byte [esi]
call get_size_operator
cmp al,10h
jne avx_movlps_mem
lods byte [esi]
call convert_xmm_register
mov [postbyte_register],al
xor cl,cl
xchg cl,[operand_size]
lods byte [esi]
cmp al,','
jne invalid_operand
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_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_cvtdq2pd_instruction:
mov [opcode_prefix],0F3h
avx_cvtps2pd_instruction:
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
xor cl,cl
xchg cl,[operand_size]
lods byte [esi]
call get_size_operator
cmp al,10h
jne avx_cvtdq2pd_reg_mem
lods byte [esi]
call convert_xmm_register
mov bl,al
mov [operand_size],cl
jmp nomem_instruction_ready
avx_cvtdq2pd_reg_mem:
cmp al,'['
jne invalid_operand
mov [mmx_size],cl
call get_address
mov al,[mmx_size]
mov ah,al
xchg al,[operand_size]
or al,al
jz instruction_ready
shl al,1
cmp al,ah
jne invalid_operand_size
jmp instruction_ready
avx_cvtpd2dq_instruction:
mov [opcode_prefix],0F2h
jmp avx_cvtpd_instruction
avx_cvtpd2ps_instruction:
mov [opcode_prefix],66h
avx_cvtpd_instruction:
mov [base_code],0Fh
mov [extended_code],al
or [vex_required],1
call take_avx_register
mov [postbyte_register],al
cmp ah,16
jne invalid_operand
lods byte [esi]
cmp al,','
jne invalid_operand
mov [operand_size],0
lods byte [esi]
call get_size_operator
cmp al,10h
jne avx_cvtpd2dq_reg_mem
lods byte [esi]
call convert_avx_register
mov bl,al
jmp nomem_instruction_ready
avx_cvtpd2dq_reg_mem:
cmp al,'['
jne invalid_operand
call get_address
mov al,[operand_size]
or al,al
jz operand_size_not_specified
cmp al,16
je instruction_ready
cmp al,32
jne invalid_operand_size
jmp instruction_ready
avx_cvttps2dq_instruction:
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 [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
jmp cvtsi_xmmreg
 
avx_extractf128_instruction:
or [vex_required],1
call setup_66_0f_3a
lods byte [esi]
call get_size_operator
cmp al,10h
je avx_extractf128_reg
cmp al,'['
jne invalid_operand
call get_address
xor al,al
xchg al,[operand_size]
or al,al
jz avx_extractf128_mem_size_ok
cmp al,16
jne invalid_operand_size
avx_extractf128_mem_size_ok:
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_register
cmp ah,32
jne invalid_operand_size
mov [postbyte_register],al
jmp mmx_imm8
avx_extractf128_reg:
lods byte [esi]
call convert_xmm_register
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
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
avx_insertf128_instruction:
or [vex_required],1
call setup_66_0f_3a
call take_avx_register
cmp ah,32
jne invalid_operand
mov [postbyte_register],al
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_register
mov [vex_register],al
mov [operand_size],0
mov [mmx_size],16
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_rm
mov [operand_size],32
jnc mmx_imm8
mov bl,al
jmp mmx_nomem_imm8
avx_extractps_instruction:
or [vex_required],1
jmp extractps_instruction
avx_insertps_instruction:
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
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
avx_pinsrb_instruction:
mov [mmx_size],1
or [vex_required],1
jmp avx_pinsr_instruction_3a
avx_pinsrw_instruction:
mov [mmx_size],2
or [vex_required],1
jmp avx_pinsr_instruction
avx_pinsrd_instruction:
mov [mmx_size],4
or [vex_required],1
jmp avx_pinsr_instruction_3a
avx_pinsrq_instruction:
mov [mmx_size],8
or [vex_required],1
call operand_64bit
avx_pinsr_instruction_3a:
mov [supplemental_code],al
mov al,3Ah
avx_pinsr_instruction:
mov [opcode_prefix],66h
mov [base_code],0Fh
mov [extended_code],al
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
jmp pinsr_xmmreg
avx_maskmovdqu_instruction:
or [vex_required],1
jmp maskmovdqu_instruction
avx_pmovmskb_instruction:
or [vex_required],1
mov [opcode_prefix],66h
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
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_pshufd_instruction:
or [vex_required],1
mov [mmx_size],0
mov [opcode_prefix],al
mov [base_code],0Fh
mov [extended_code],70h
call take_avx_register
mov [postbyte_register],al
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_rm
jnc mmx_imm8
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:
or [vex_required],1
call setup_66_0f_38
call take_avx_register
mov [postbyte_register],al
lods byte [esi]
cmp al,','
jne invalid_operand
xor al,al
xchg al,[operand_size]
push eax
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]
jne invalid_operand_size
jmp instruction_ready
avx_pmovsx_xmmreg_reg:
lods byte [esi]
call convert_xmm_register
mov bl,al
pop eax
mov [operand_size],al
jmp nomem_instruction_ready
avx_permil_instruction:
call setup_66_0f_3a
or [vex_required],1
call take_avx_register
mov [postbyte_register],al
lods byte [esi]
cmp al,','
jne invalid_operand
lods byte [esi]
call get_size_operator
cmp al,'['
je avx_permil_reg_mem
cmp al,10h
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
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
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:
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
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
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
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]
mov bl,al
jmp nomem_instruction_ready
avx_bit_shift_regs_mem:
push ecx
lods byte [esi]
call get_size_operator
call get_address
pop eax
xchg al,[operand_size]
test al,al
jz instruction_ready
cmp al,16
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
call take_avx_register
mov [vex_register],al
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
call get_address
lods byte [esi]
cmp al,','
jne invalid_operand
shl [operand_size],1
call take_avx_register
mov [postbyte_register],al
jmp mmx_imm8
vcvtps2ph_reg:
lods byte [esi]
call convert_xmm_register
mov bl,al
mov [operand_size],0
lods byte [esi]
cmp al,','
jne invalid_operand
call take_avx_register
mov [postbyte_register],al
jmp mmx_nomem_imm8
 
bmi_instruction:
mov [base_code],0Fh
mov [extended_code],38h
mov [supplemental_code],0F3h
mov [postbyte_register],al
bmi_reg:
or [vex_required],1
lods byte [esi]
call get_size_operator
cmp al,10h
jne invalid_operand
lods byte [esi]
call convert_register
mov [vex_register],al
lods byte [esi]
cmp al,','
jne invalid_operand
lods byte [esi]
call get_size_operator
cmp al,10h
je bmi_reg_reg
cmp al,'['
jne invalid_argument
call get_address
call operand_32or64
jmp instruction_ready
bmi_reg_reg:
lods byte [esi]
call convert_register
mov bl,al
call operand_32or64
jmp nomem_instruction_ready
operand_32or64:
mov al,[operand_size]
cmp al,4
je operand_32or64_ok
cmp al,8
jne invalid_operand_size
cmp [code_type],64
jne invalid_operand
or [rex_prefix],8
operand_32or64_ok:
ret
pdep_instruction:
mov [opcode_prefix],0F2h
jmp andn_instruction
pext_instruction:
mov [opcode_prefix],0F3h
andn_instruction:
mov [base_code],0Fh
mov [extended_code],38h
mov [supplemental_code],al
or [vex_required],1
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
jmp bmi_reg
sarx_instruction:
mov [opcode_prefix],0F3h
jmp bzhi_instruction
shrx_instruction:
mov [opcode_prefix],0F2h
jmp bzhi_instruction
shlx_instruction:
mov [opcode_prefix],66h
bzhi_instruction:
mov [base_code],0Fh
mov [extended_code],38h
mov [supplemental_code],al
or [vex_required],1
call get_reg_mem
jc bzhi_reg_reg
call get_vex_source_register
jc invalid_operand
call operand_32or64
jmp instruction_ready
bzhi_reg_reg:
call get_vex_source_register
jc invalid_operand
call operand_32or64
jmp nomem_instruction_ready
get_vex_source_register:
lods byte [esi]
cmp al,','
jne invalid_operand
lods byte [esi]
call get_size_operator
cmp al,10h
jne no_vex_source_register
lods byte [esi]
call convert_register
mov [vex_register],al
clc
ret
no_vex_source_register:
stc
ret
bextr_instruction:
mov [base_code],0Fh
mov [extended_code],38h
mov [supplemental_code],al
or [vex_required],1
call get_reg_mem
jc bextr_reg_reg
call get_vex_source_register
jc bextr_reg_mem_imm32
call operand_32or64
jmp instruction_ready
bextr_reg_reg:
call get_vex_source_register
jc bextr_reg_reg_imm32
call operand_32or64
jmp nomem_instruction_ready
setup_bextr_imm_opcode:
mov [xop_opcode_map],0Ah
mov [base_code],10h
call operand_32or64
ret
bextr_reg_mem_imm32:
call get_imm32
call setup_bextr_imm_opcode
jmp store_instruction_with_imm32
bextr_reg_reg_imm32:
call get_imm32
call setup_bextr_imm_opcode
store_nomem_instruction_with_imm32:
call store_nomem_instruction
mov eax,dword [value]
call mark_relocation
stos dword [edi]
jmp instruction_assembled
get_imm32:
cmp al,'('
jne invalid_operand
push edx ebx ecx
call get_dword_value
mov dword [value],eax
pop ecx ebx edx
ret
rorx_instruction:
mov [opcode_prefix],0F2h
mov [base_code],0Fh
mov [extended_code],3Ah
mov [supplemental_code],al
or [vex_required],1
call get_reg_mem
jc rorx_reg_reg
call operand_32or64
jmp mmx_imm8
rorx_reg_reg:
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
 
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
 
xop_single_source_sd_instruction:
or [vex_required],2
mov [mmx_size],8
jmp xop_instruction_9
xop_single_source_ss_instruction:
or [vex_required],2
mov [mmx_size],4
jmp xop_instruction_9
xop_single_source_instruction:
or [vex_required],2
mov [mmx_size],0
xop_instruction_9:
mov [base_code],al
mov [xop_opcode_map],9
jmp avx_common
xop_single_source_128bit_instruction:
or [vex_required],2
mov [mmx_size],16
jmp xop_instruction_9
xop_triple_source_128bit_instruction:
mov [immediate_size],-1
mov byte [value],0
mov [mmx_size],16
jmp xop_instruction_8
xop_128bit_instruction:
mov [immediate_size],-2
mov byte [value],0
mov [mmx_size],16
xop_instruction_8:
mov [base_code],al
mov [xop_opcode_map],8
jmp avx_common
xop_pcom_b_instruction:
mov ah,0CCh
jmp xop_pcom_instruction
xop_pcom_d_instruction:
mov ah,0CEh
jmp xop_pcom_instruction
xop_pcom_q_instruction:
mov ah,0CFh
jmp xop_pcom_instruction
xop_pcom_w_instruction:
mov ah,0CDh
jmp xop_pcom_instruction
xop_pcom_ub_instruction:
mov ah,0ECh
jmp xop_pcom_instruction
xop_pcom_ud_instruction:
mov ah,0EEh
jmp xop_pcom_instruction
xop_pcom_uq_instruction:
mov ah,0EFh
jmp xop_pcom_instruction
xop_pcom_uw_instruction:
mov ah,0EDh
xop_pcom_instruction:
mov byte [value],al
mov [mmx_size],16
mov [base_code],ah
mov [xop_opcode_map],8
jmp avx_common
vpcmov_instruction:
or [vex_required],1
mov [immediate_size],-2
mov byte [value],0
mov [mmx_size],0
mov [base_code],al
mov [xop_opcode_map],8
jmp avx_common
xop_shift_instruction:
mov [base_code],al
or [vex_required],1
mov [xop_opcode_map],9
call take_avx_register
cmp ah,16
jne invalid_operand
mov [postbyte_register],al
lods byte [esi]
cmp al,','
jne invalid_operand
lods byte [esi]
call get_size_operator
cmp al,'['
je xop_shift_reg_mem
cmp al,10h
jne invalid_operand
lods byte [esi]
call convert_xmm_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
pop esi
xchg cl,[operand_size]
cmp al,'['
je xop_shift_reg_reg_mem
cmp al,10h
jne xop_shift_reg_reg_imm
call take_avx_register
mov bl,al
xchg bl,[vex_register]
jmp nomem_instruction_ready
xop_shift_reg_reg_mem:
or [rex_prefix],8
lods byte [esi]
call get_size_operator
call get_address
jmp instruction_ready
xop_shift_reg_reg_imm:
xor bl,bl
xchg bl,[vex_register]
cmp [base_code],94h
jae invalid_operand
add [base_code],30h
mov [xop_opcode_map],8
dec esi
jmp mmx_nomem_imm8
xop_shift_reg_mem:
call get_address
lods byte [esi]
cmp al,','
jne invalid_operand
push esi
xor cl,cl
xchg cl,[operand_size]
lods byte [esi]
call get_size_operator
pop esi
xchg cl,[operand_size]
cmp al,10h
jne xop_shift_reg_mem_imm
call take_avx_register
mov [vex_register],al
jmp instruction_ready
xop_shift_reg_mem_imm:
cmp [base_code],94h
jae invalid_operand
add [base_code],30h
mov [xop_opcode_map],8
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
 
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
cmp al,10h
jne invalid_operand
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
cmp al,8
jb match_register_size
cmp [code_type],64
jne invalid_operand
jmp match_register_size
store_vex_instruction_code:
mov al,[base_code]
cmp al,0Fh
jne store_xop_instruction_code
mov ah,[extended_code]
cmp ah,38h
je store_vex_0f38_instruction_code
cmp ah,3Ah
je store_vex_0f3a_instruction_code
test [rex_prefix],1011b
jnz store_vex_0f_instruction_code
mov [edi+2],ah
mov byte [edi],0C5h
mov al,[vex_register]
not al
shl al,3
mov ah,[rex_prefix]
shl ah,5
and ah,80h
xor al,ah
call get_vex_lpp_bits
mov [edi+1],al
call check_vex
add edi,3
ret
get_vex_lpp_bits:
cmp [operand_size],32
jne vex_l_bit_ok
or al,100b
vex_l_bit_ok:
mov ah,[opcode_prefix]
cmp ah,66h
je vex_66
cmp ah,0F3h
je vex_f3
cmp ah,0F2h
je vex_f2
test ah,ah
jnz disallowed_combination_of_registers
ret
vex_f2:
or al,11b
ret
vex_f3:
or al,10b
ret
vex_66:
or al,1
ret
store_vex_0f38_instruction_code:
mov al,11100010b
mov ah,[supplemental_code]
jmp make_c4_vex
store_vex_0f3a_instruction_code:
mov al,11100011b
mov ah,[supplemental_code]
jmp make_c4_vex
store_vex_0f_instruction_code:
mov al,11100001b
make_c4_vex:
mov [edi+3],ah
mov byte [edi],0C4h
mov ah,[rex_prefix]
shl ah,5
xor al,ah
mov [edi+1],al
call check_vex
mov al,[vex_register]
xor al,1111b
shl al,3
mov ah,[rex_prefix]
shl ah,4
and ah,80h
or al,ah
call get_vex_lpp_bits
mov [edi+2],al
add edi,4
ret
check_vex:
cmp [code_type],64
je vex_ok
not al
test al,11000000b
jnz invalid_operand
test [rex_prefix],40h
jnz invalid_operand
vex_ok:
ret
store_xop_instruction_code:
mov [edi+3],al
mov byte [edi],8Fh
mov al,[xop_opcode_map]
mov ah,[rex_prefix]
test ah,40h
jz xop_ok
cmp [code_type],64
jne invalid_operand
xop_ok:
not ah
shl ah,5
xor al,ah
mov [edi+1],al
mov al,[vex_register]
xor al,1111b
shl al,3
mov ah,[rex_prefix]
shl ah,4
and ah,80h
or al,ah
call get_vex_lpp_bits
mov [edi+2],al
add edi,4
ret
/programs/develop/fasm/trunk/errors.inc
1,6 → 1,6
 
; flat assembler core
; Copyright (c) 1999-2012, Tomasz Grysztar.
; Copyright (c) 1999-2013, Tomasz Grysztar.
; All rights reserved.
 
out_of_memory:
/programs/develop/fasm/trunk/exprcalc.inc
1,2289 → 1,2347
 
; flat assembler core
; Copyright (c) 1999-2012, Tomasz Grysztar.
; All rights reserved.
 
calculate_expression:
mov [current_offset],edi
mov [value_undefined],0
cmp byte [esi],0
je get_string_value
cmp byte [esi],'.'
je convert_fp
calculation_loop:
lods byte [esi]
cmp al,1
je get_byte_number
cmp al,2
je get_word_number
cmp al,4
je get_dword_number
cmp al,8
je get_qword_number
cmp al,0Fh
je value_out_of_range
cmp al,10h
je get_register
cmp al,11h
je get_label
cmp al,')'
je expression_calculated
cmp al,']'
je expression_calculated
cmp al,'!'
je invalid_expression
sub edi,14h
mov ebx,edi
sub ebx,14h
cmp al,0E0h
je calculate_rva
cmp al,0E1h
je calculate_plt
cmp al,0D0h
je calculate_not
cmp al,083h
je calculate_neg
mov dx,[ebx+8]
or dx,[edi+8]
cmp al,80h
je calculate_add
cmp al,81h
je calculate_sub
mov ah,[ebx+12]
or ah,[edi+12]
jz absolute_values_calculation
call recoverable_misuse
absolute_values_calculation:
cmp al,90h
je calculate_mul
cmp al,91h
je calculate_div
or dx,dx
jnz invalid_expression
cmp al,0A0h
je calculate_mod
cmp al,0B0h
je calculate_and
cmp al,0B1h
je calculate_or
cmp al,0B2h
je calculate_xor
cmp al,0C0h
je calculate_shl
cmp al,0C1h
je calculate_shr
jmp invalid_expression
expression_calculated:
sub edi,14h
cmp [value_undefined],0
je expression_value_ok
xor eax,eax
mov [edi],eax
mov [edi+4],eax
mov [edi+12],eax
expression_value_ok:
ret
get_byte_number:
xor eax,eax
lods byte [esi]
stos dword [edi]
xor al,al
stos dword [edi]
got_number:
and word [edi-8+8],0
and word [edi-8+12],0
and dword [edi-8+16],0
add edi,0Ch
jmp calculation_loop
get_word_number:
xor eax,eax
lods word [esi]
stos dword [edi]
xor ax,ax
stos dword [edi]
jmp got_number
get_dword_number:
movs dword [edi],[esi]
xor eax,eax
stos dword [edi]
jmp got_number
get_qword_number:
movs dword [edi],[esi]
movs dword [edi],[esi]
jmp got_number
get_register:
mov byte [edi+9],0
and word [edi+12],0
lods byte [esi]
mov [edi+8],al
mov byte [edi+10],1
xor eax,eax
mov [edi+16],eax
stos dword [edi]
stos dword [edi]
add edi,0Ch
jmp calculation_loop
get_label:
xor eax,eax
mov [edi+8],eax
mov [edi+12],eax
mov [edi+20],eax
lods dword [esi]
cmp eax,0Fh
jb predefined_label
je reserved_word_used_as_symbol
mov ebx,eax
mov ax,[current_pass]
mov [ebx+18],ax
mov cl,[ebx+9]
shr cl,1
and cl,1
neg cl
or byte [ebx+8],8
test byte [ebx+8],1
jz label_undefined
cmp ax,[ebx+16]
je unadjusted_label
test byte [ebx+8],4
jnz label_out_of_scope
test byte [ebx+9],1
jz unadjusted_label
mov eax,[ebx]
sub eax,dword [adjustment]
stos dword [edi]
mov eax,[ebx+4]
sbb eax,dword [adjustment+4]
stos dword [edi]
sbb cl,[adjustment_sign]
mov [edi-8+13],cl
mov eax,dword [adjustment]
or al,[adjustment_sign]
or eax,dword [adjustment+4]
jz got_label
or [next_pass_needed],-1
jmp got_label
unadjusted_label:
mov eax,[ebx]
stos dword [edi]
mov eax,[ebx+4]
stos dword [edi]
mov [edi-8+13],cl
got_label:
cmp [symbols_file],0
je label_reference_ok
cmp [next_pass_needed],0
jne label_reference_ok
call store_label_reference
label_reference_ok:
mov al,[ebx+11]
mov [edi-8+12],al
mov eax,[ebx+12]
mov [edi-8+8],eax
cmp al,ah
jne labeled_registers_ok
shr eax,16
add al,ah
jo labeled_registers_ok
xor ah,ah
mov [edi-8+10],ax
mov [edi-8+9],ah
labeled_registers_ok:
mov eax,[ebx+20]
mov [edi-8+16],eax
add edi,0Ch
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
check_size:
xchg [operand_size],al
or al,al
jz calculation_loop
cmp al,[operand_size]
jne operand_sizes_do_not_match
jmp calculation_loop
current_offset_label:
mov eax,[current_offset]
make_current_offset_label:
xor edx,edx
xor ch,ch
sub eax,dword [org_origin]
sbb edx,dword [org_origin+4]
sbb ch,[org_origin_sign]
jp current_offset_label_ok
call recoverable_overflow
current_offset_label_ok:
stos dword [edi]
mov eax,edx
stos dword [edi]
mov eax,[org_registers]
stos dword [edi]
mov cl,[labels_type]
mov [edi-12+12],cx
mov eax,[org_symbol]
mov [edi-12+16],eax
add edi,8
jmp calculation_loop
org_origin_label:
mov eax,[org_start]
jmp make_current_offset_label
counter_label:
mov eax,[counter]
make_dword_label_value:
stos dword [edi]
xor eax,eax
stos dword [edi]
add edi,0Ch
jmp calculation_loop
timestamp_label:
call make_timestamp
make_qword_label_value:
stos dword [edi]
mov eax,edx
stos dword [edi]
add edi,0Ch
jmp calculation_loop
predefined_label:
or eax,eax
jz current_offset_label
cmp eax,1
je counter_label
cmp eax,2
je timestamp_label
cmp eax,3
je org_origin_label
mov edx,invalid_value
jmp error_undefined
label_out_of_scope:
mov edx,symbol_out_of_scope
jmp error_undefined
label_undefined:
mov edx,undefined_symbol
error_undefined:
cmp [current_pass],1
ja undefined_value
force_next_pass:
or [next_pass_needed],-1
undefined_value:
or [value_undefined],-1
and word [edi+12],0
xor eax,eax
stos dword [edi]
stos dword [edi]
add edi,0Ch
cmp [error_line],0
jne calculation_loop
mov eax,[current_line]
mov [error_line],eax
mov [error],edx
mov [error_info],ebx
jmp calculation_loop
calculate_add:
mov ecx,[ebx+16]
cmp byte [edi+12],0
je add_values
mov ecx,[edi+16]
cmp byte [ebx+12],0
je add_values
call recoverable_misuse
add_values:
mov al,[edi+12]
or [ebx+12],al
mov [ebx+16],ecx
mov eax,[edi]
add [ebx],eax
mov eax,[edi+4]
adc [ebx+4],eax
mov al,[edi+13]
adc [ebx+13],al
jp add_sign_ok
call recoverable_overflow
add_sign_ok:
or dx,dx
jz calculation_loop
push esi
mov esi,ebx
lea ebx,[edi+10]
mov cl,[edi+8]
call add_register
lea ebx,[edi+11]
mov cl,[edi+9]
call add_register
pop esi
jmp calculation_loop
add_register:
or cl,cl
jz add_register_done
add_register_start:
cmp [esi+8],cl
jne add_in_second_slot
mov al,[ebx]
add [esi+10],al
jo value_out_of_range
jnz add_register_done
mov byte [esi+8],0
ret
add_in_second_slot:
cmp [esi+9],cl
jne create_in_first_slot
mov al,[ebx]
add [esi+11],al
jo value_out_of_range
jnz add_register_done
mov byte [esi+9],0
ret
create_in_first_slot:
cmp byte [esi+8],0
jne create_in_second_slot
mov [esi+8],cl
mov al,[ebx]
mov [esi+10],al
ret
create_in_second_slot:
cmp byte [esi+9],0
jne invalid_expression
mov [esi+9],cl
mov al,[ebx]
mov [esi+11],al
add_register_done:
ret
out_of_range:
jmp calculation_loop
calculate_sub:
xor ah,ah
mov ah,[ebx+12]
mov al,[edi+12]
or al,al
jz sub_values
cmp al,ah
jne invalid_sub
xor ah,ah
mov ecx,[edi+16]
cmp ecx,[ebx+16]
je sub_values
invalid_sub:
call recoverable_misuse
sub_values:
mov [ebx+12],ah
mov eax,[edi]
sub [ebx],eax
mov eax,[edi+4]
sbb [ebx+4],eax
mov al,[edi+13]
sbb [ebx+13],al
jp sub_sign_ok
cmp [error_line],0
jne sub_sign_ok
call recoverable_overflow
sub_sign_ok:
or dx,dx
jz calculation_loop
push esi
mov esi,ebx
lea ebx,[edi+10]
mov cl,[edi+8]
call sub_register
lea ebx,[edi+11]
mov cl,[edi+9]
call sub_register
pop esi
jmp calculation_loop
sub_register:
or cl,cl
jz add_register_done
neg byte [ebx]
jo value_out_of_range
jmp add_register_start
calculate_mul:
or dx,dx
jz mul_start
cmp word [ebx+8],0
jne mul_start
xor ecx,ecx
swap_values:
mov eax,[ebx+ecx]
xchg eax,[edi+ecx]
mov [ebx+ecx],eax
add ecx,4
cmp ecx,16
jb swap_values
mul_start:
push esi edx
mov esi,ebx
xor bl,bl
cmp byte [esi+13],0
je mul_first_sign_ok
mov eax,[esi]
mov edx,[esi+4]
not eax
not edx
add eax,1
adc edx,0
mov [esi],eax
mov [esi+4],edx
or eax,edx
jz mul_overflow
xor bl,-1
mul_first_sign_ok:
cmp byte [edi+13],0
je mul_second_sign_ok
mov eax,[edi]
mov edx,[edi+4]
not eax
not edx
add eax,1
adc edx,0
mov [edi],eax
mov [edi+4],edx
or eax,edx
jz mul_overflow
xor bl,-1
mul_second_sign_ok:
cmp dword [esi+4],0
jz mul_numbers
cmp dword [edi+4],0
jz mul_numbers
jnz mul_overflow
mul_numbers:
mov eax,[esi+4]
mul dword [edi]
or edx,edx
jnz mul_overflow
mov ecx,eax
mov eax,[esi]
mul dword [edi+4]
or edx,edx
jnz mul_overflow
add ecx,eax
jc mul_overflow
mov eax,[esi]
mul dword [edi]
add edx,ecx
jc mul_overflow
mov [esi],eax
mov [esi+4],edx
or bl,bl
jz mul_ok
not eax
not edx
add eax,1
adc edx,0
mov [esi],eax
mov [esi+4],edx
or eax,edx
jnz mul_ok
not bl
mul_ok:
mov [esi+13],bl
pop edx
or dx,dx
jz mul_calculated
cmp word [edi+8],0
jne invalid_value
cmp byte [esi+8],0
je mul_first_register_ok
call get_byte_scale
imul byte [esi+10]
mov dl,ah
cbw
cmp ah,dl
jne value_out_of_range
mov [esi+10],al
or al,al
jnz mul_first_register_ok
mov [esi+8],al
mul_first_register_ok:
cmp byte [esi+9],0
je mul_calculated
call get_byte_scale
imul byte [esi+11]
mov dl,ah
cbw
cmp ah,dl
jne value_out_of_range
mov [esi+11],al
or al,al
jnz mul_calculated
mov [esi+9],al
mul_calculated:
pop esi
jmp calculation_loop
mul_overflow:
pop edx esi
call recoverable_overflow
jmp calculation_loop
get_byte_scale:
mov al,[edi]
cbw
cwde
cdq
cmp edx,[edi+4]
jne value_out_of_range
cmp eax,[edi]
jne value_out_of_range
ret
calculate_div:
push esi edx
mov esi,ebx
call div_64
pop edx
or dx,dx
jz div_calculated
cmp byte [esi+8],0
je div_first_register_ok
call get_byte_scale
or al,al
jz value_out_of_range
mov al,[esi+10]
cbw
idiv byte [edi]
or ah,ah
jnz invalid_use_of_symbol
mov [esi+10],al
div_first_register_ok:
cmp byte [esi+9],0
je div_calculated
call get_byte_scale
or al,al
jz value_out_of_range
mov al,[esi+11]
cbw
idiv byte [edi]
or ah,ah
jnz invalid_use_of_symbol
mov [esi+11],al
div_calculated:
pop esi
jmp calculation_loop
calculate_mod:
push esi
mov esi,ebx
call div_64
mov [esi],eax
mov [esi+4],edx
mov [esi+13],bh
pop esi
jmp calculation_loop
calculate_and:
mov eax,[edi]
mov edx,[edi+4]
mov cl,[edi+13]
and [ebx],eax
and [ebx+4],edx
and [ebx+13],cl
jmp calculation_loop
calculate_or:
mov eax,[edi]
mov edx,[edi+4]
mov cl,[edi+13]
or [ebx],eax
or [ebx+4],edx
or [ebx+13],cl
jmp calculation_loop
calculate_xor:
mov eax,[edi]
mov edx,[edi+4]
mov cl,[edi+13]
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]
not dword [edi+4]
add dword [edi],1
adc dword [edi+4],0
jc shl_over
calculate_shl:
cmp byte [edi+13],0
jne shl_negative
mov edx,[ebx+4]
mov eax,[ebx]
cmp dword [edi+4],0
jne shl_over
movsx ecx,byte [ebx+13]
xchg ecx,[edi]
cmp ecx,64
je shl_max
ja shl_over
cmp ecx,32
jae shl_high
shld [edi],edx,cl
shld edx,eax,cl
shl eax,cl
mov [ebx],eax
mov [ebx+4],edx
jmp shl_done
shl_over:
cmp byte [ebx+13],0
jne shl_overflow
shl_max:
movsx ecx,byte [ebx+13]
cmp eax,ecx
jne shl_overflow
cmp edx,ecx
jne shl_overflow
xor eax,eax
mov [ebx],eax
mov [ebx+4],eax
jmp calculation_loop
shl_high:
sub cl,32
shld [edi],edx,cl
shld edx,eax,cl
shl eax,cl
mov [ebx+4],eax
and dword [ebx],0
cmp edx,[edi]
jne shl_overflow
shl_done:
movsx eax,byte [ebx+13]
cmp eax,[edi]
je calculation_loop
shl_overflow:
call recoverable_overflow
jmp calculation_loop
shl_negative:
mov byte [edi+13],0
not dword [edi]
not dword [edi+4]
add dword [edi],1
adc dword [edi+4],0
jnc calculate_shr
dec dword [edi+4]
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
jne shr_over
mov ecx,[edi]
cmp ecx,64
jae shr_over
push esi
movsx esi,byte [ebx+13]
cmp ecx,32
jae shr_high
shrd eax,edx,cl
shrd edx,esi,cl
mov [ebx],eax
mov [ebx+4],edx
pop esi
jmp calculation_loop
shr_high:
sub cl,32
shrd edx,esi,cl
mov [ebx],edx
mov [ebx+4],esi
pop esi
jmp calculation_loop
shr_over:
movsx eax,byte [ebx+13]
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
cmp byte [edi+12],0
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
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_neg:
cmp word [edi+8],0
jne invalid_expression
cmp byte [edi+12],0
je neg_ok
call recoverable_misuse
neg_ok:
xor eax,eax
xor edx,edx
xor cl,cl
xchg eax,[edi]
xchg edx,[edi+4]
xchg cl,[edi+13]
sub [edi],eax
sbb [edi+4],edx
sbb [edi+13],cl
jp neg_sign_ok
call recoverable_overflow
neg_sign_ok:
add edi,14h
jmp calculation_loop
calculate_rva:
cmp word [edi+8],0
jne invalid_expression
mov al,[output_format]
cmp al,5
je calculate_gotoff
cmp al,4
je calculate_coff_rva
cmp al,3
jne invalid_expression
test [format_flags],8
jnz pe64_rva
mov al,2
bt [resolver_flags],0
jc rva_type_ok
xor al,al
rva_type_ok:
cmp byte [edi+12],al
je rva_ok
call recoverable_misuse
rva_ok:
mov byte [edi+12],0
mov eax,[code_start]
mov eax,[eax+34h]
xor edx,edx
finish_rva:
sub [edi],eax
sbb [edi+4],edx
sbb byte [edi+13],0
jp rva_finished
call recoverable_overflow
rva_finished:
add edi,14h
jmp calculation_loop
pe64_rva:
mov al,4
bt [resolver_flags],0
jc pe64_rva_type_ok
xor al,al
pe64_rva_type_ok:
cmp byte [edi+12],al
je pe64_rva_ok
call recoverable_misuse
pe64_rva_ok:
mov byte [edi+12],0
mov eax,[code_start]
mov edx,[eax+34h]
mov eax,[eax+30h]
jmp finish_rva
calculate_gotoff:
test [format_flags],8+1
jnz invalid_expression
calculate_coff_rva:
mov dl,5
cmp byte [edi+12],2
je change_value_type
incorrect_change_of_value_type:
call recoverable_misuse
change_value_type:
mov byte [edi+12],dl
add edi,14h
jmp calculation_loop
calculate_plt:
cmp word [edi+8],0
jne invalid_expression
cmp [output_format],5
jne invalid_expression
test [format_flags],1
jnz invalid_expression
mov dl,6
mov dh,2
test [format_flags],8
jz check_value_for_plt
mov dh,4
check_value_for_plt:
mov eax,[edi]
or eax,[edi+4]
jnz incorrect_change_of_value_type
cmp byte [edi+12],dh
jne incorrect_change_of_value_type
mov eax,[edi+16]
cmp byte [eax],80h
jne incorrect_change_of_value_type
jmp change_value_type
div_64:
xor ebx,ebx
cmp dword [edi],0
jne divider_ok
cmp dword [edi+4],0
jne divider_ok
cmp [next_pass_needed],0
je value_out_of_range
jmp div_done
divider_ok:
cmp byte [esi+13],0
je div_first_sign_ok
mov eax,[esi]
mov edx,[esi+4]
not eax
not edx
add eax,1
adc edx,0
mov [esi],eax
mov [esi+4],edx
or eax,edx
jz value_out_of_range
xor bx,-1
div_first_sign_ok:
cmp byte [edi+13],0
je div_second_sign_ok
mov eax,[edi]
mov edx,[edi+4]
not eax
not edx
add eax,1
adc edx,0
mov [edi],eax
mov [edi+4],edx
or eax,edx
jz value_out_of_range
xor bl,-1
div_second_sign_ok:
cmp dword [edi+4],0
jne div_high
mov ecx,[edi]
mov eax,[esi+4]
xor edx,edx
div ecx
mov [esi+4],eax
mov eax,[esi]
div ecx
mov [esi],eax
mov eax,edx
xor edx,edx
jmp div_done
div_high:
push ebx
mov eax,[esi+4]
xor edx,edx
div dword [edi+4]
mov ebx,[esi]
mov [esi],eax
and dword [esi+4],0
mov ecx,edx
mul dword [edi]
div_high_loop:
cmp ecx,edx
ja div_high_done
jb div_high_large_correction
cmp ebx,eax
jae div_high_done
div_high_correction:
dec dword [esi]
sub eax,[edi]
sbb edx,[edi+4]
jnc div_high_loop
div_high_done:
sub ebx,eax
sbb ecx,edx
mov edx,ecx
mov eax,ebx
pop ebx
jmp div_done
div_high_large_correction:
push eax edx
mov eax,edx
sub eax,ecx
xor edx,edx
div dword [edi+4]
shr eax,1
jz div_high_small_correction
sub [esi],eax
push eax
mul dword [edi+4]
sub dword [esp+4],eax
pop eax
mul dword [edi]
sub dword [esp+4],eax
sbb dword [esp],edx
pop edx eax
jmp div_high_loop
div_high_small_correction:
pop edx eax
jmp div_high_correction
div_done:
or bh,bh
jz remainder_ok
not eax
not edx
add eax,1
adc edx,0
mov ecx,eax
or ecx,edx
jnz remainder_ok
not bh
remainder_ok:
or bl,bl
jz div_ok
not dword [esi]
not dword [esi+4]
add dword [esi],1
adc dword [esi+4],0
mov ecx,[esi]
or ecx,[esi+4]
jnz div_ok
not bl
div_ok:
mov [esi+13],bl
ret
store_label_reference:
mov eax,[display_buffer]
mov dword [eax-4],2
mov dword [eax-8],4
sub eax,8+4
cmp eax,edi
jbe out_of_memory
mov [display_buffer],eax
mov [eax],ebx
ret
convert_fp:
inc esi
and word [edi+8],0
and word [edi+12],0
mov al,[value_size]
cmp al,2
je convert_fp_word
cmp al,4
je convert_fp_dword
test al,not 8
jnz invalid_value
convert_fp_qword:
xor eax,eax
xor edx,edx
cmp word [esi+8],8000h
je fp_qword_store
mov bx,[esi+8]
mov eax,[esi]
mov edx,[esi+4]
add eax,eax
adc edx,edx
mov ecx,edx
shr edx,12
shrd eax,ecx,12
jnc fp_qword_ok
add eax,1
adc edx,0
bt edx,20
jnc fp_qword_ok
and edx,1 shl 20 - 1
inc bx
shr edx,1
rcr eax,1
fp_qword_ok:
add bx,3FFh
cmp bx,7FFh
jge value_out_of_range
cmp bx,0
jg fp_qword_exp_ok
or edx,1 shl 20
mov cx,bx
neg cx
inc cx
cmp cx,52
ja value_out_of_range
cmp cx,32
jbe fp_qword_small_shift
sub cx,32
mov eax,edx
xor edx,edx
shr eax,cl
jmp fp_qword_shift_done
fp_qword_small_shift:
mov ebx,edx
shr edx,cl
shrd eax,ebx,cl
fp_qword_shift_done:
mov bx,0
jnc fp_qword_exp_ok
add eax,1
adc edx,0
test edx,1 shl 20
jz fp_qword_exp_ok
and edx,1 shl 20 - 1
inc bx
fp_qword_exp_ok:
shl ebx,20
or edx,ebx
fp_qword_store:
mov bl,[esi+11]
shl ebx,31
or edx,ebx
mov [edi],eax
mov [edi+4],edx
add esi,13
ret
convert_fp_word:
xor eax,eax
cmp word [esi+8],8000h
je fp_word_store
mov bx,[esi+8]
mov ax,[esi+6]
shl ax,1
shr ax,6
jnc fp_word_ok
inc ax
bt ax,10
jnc fp_word_ok
and ax,1 shl 10 - 1
inc bx
shr ax,1
fp_word_ok:
add bx,0Fh
cmp bx,01Fh
jge value_out_of_range
cmp bx,0
jg fp_word_exp_ok
or ax,1 shl 10
mov cx,bx
neg cx
inc cx
cmp cx,10
ja value_out_of_range
xor bx,bx
shr ax,cl
jnc fp_word_exp_ok
inc ax
test ax,1 shl 10
jz fp_word_exp_ok
and ax,1 shl 10 - 1
inc bx
fp_word_exp_ok:
shl bx,10
or ax,bx
fp_word_store:
mov bl,[esi+11]
shl bx,15
or ax,bx
mov [edi],eax
xor eax,eax
mov [edi+4],eax
add esi,13
ret
convert_fp_dword:
xor eax,eax
cmp word [esi+8],8000h
je fp_dword_store
mov bx,[esi+8]
mov eax,[esi+4]
shl eax,1
shr eax,9
jnc fp_dword_ok
inc eax
bt eax,23
jnc fp_dword_ok
and eax,1 shl 23 - 1
inc bx
shr eax,1
fp_dword_ok:
add bx,7Fh
cmp bx,0FFh
jge value_out_of_range
cmp bx,0
jg fp_dword_exp_ok
or eax,1 shl 23
mov cx,bx
neg cx
inc cx
cmp cx,23
ja value_out_of_range
xor bx,bx
shr eax,cl
jnc fp_dword_exp_ok
inc eax
test eax,1 shl 23
jz fp_dword_exp_ok
and eax,1 shl 23 - 1
inc bx
fp_dword_exp_ok:
shl ebx,23
or eax,ebx
fp_dword_store:
mov bl,[esi+11]
shl ebx,31
or eax,ebx
mov [edi],eax
xor eax,eax
mov [edi+4],eax
add esi,13
ret
get_string_value:
inc esi
lods dword [esi]
mov ecx,eax
cmp ecx,8
ja value_out_of_range
mov edx,edi
xor eax,eax
stos dword [edi]
stos dword [edi]
mov edi,edx
rep movs byte [edi],[esi]
mov edi,edx
inc esi
and word [edi+8],0
and word [edi+12],0
ret
 
get_byte_value:
mov [value_size],1
mov [size_override],-1
call calculate_value
or al,al
jz check_byte_value
call recoverable_misuse
check_byte_value:
mov eax,[edi]
mov edx,[edi+4]
cmp byte [edi+13],0
je byte_positive
cmp edx,-1
jne range_exceeded
cmp eax,-80h
jb range_exceeded
ret
byte_positive:
test edx,edx
jnz range_exceeded
cmp eax,100h
jae range_exceeded
return_byte_value:
ret
range_exceeded:
xor eax,eax
xor edx,edx
recoverable_overflow:
cmp [error_line],0
jne ignore_overflow
push [current_line]
pop [error_line]
mov [error],value_out_of_range
or [value_undefined],-1
ignore_overflow:
ret
recoverable_misuse:
cmp [error_line],0
jne ignore_misuse
push [current_line]
pop [error_line]
mov [error],invalid_use_of_symbol
ignore_misuse:
ret
get_word_value:
mov [value_size],2
mov [size_override],-1
call calculate_value
cmp al,2
jb check_word_value
call recoverable_misuse
check_word_value:
mov eax,[edi]
mov edx,[edi+4]
cmp byte [edi+13],0
je word_positive
cmp edx,-1
jne range_exceeded
cmp eax,-8000h
jb range_exceeded
ret
word_positive:
test edx,edx
jnz range_exceeded
cmp eax,10000h
jae range_exceeded
ret
get_dword_value:
mov [value_size],4
mov [size_override],-1
call calculate_value
cmp al,4
jne check_dword_value
mov [value_type],2
mov eax,[edi]
cdq
cmp edx,[edi+4]
jne range_exceeded
mov ecx,edx
shr ecx,31
cmp cl,[value_sign]
jne range_exceeded
ret
check_dword_value:
mov eax,[edi]
mov edx,[edi+4]
cmp byte [edi+13],0
je dword_positive
cmp edx,-1
jne range_exceeded
bt eax,31
jnc range_exceeded
ret
dword_positive:
test edx,edx
jne range_exceeded
ret
get_pword_value:
mov [value_size],6
mov [size_override],-1
call calculate_value
cmp al,4
jne check_pword_value
call recoverable_misuse
check_pword_value:
mov eax,[edi]
mov edx,[edi+4]
cmp byte [edi+13],0
je pword_positive
cmp edx,-8000h
jb range_exceeded
ret
pword_positive:
cmp edx,10000h
jae range_exceeded
ret
get_qword_value:
mov [value_size],8
mov [size_override],-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
call calculate_expression
cmp word [edi+8],0
jne invalid_value
mov [value_sign],0
mov al,[edi+12]
or al,al
jz check_count_value
call recoverable_misuse
check_count_value:
cmp byte [edi+13],0
jne invalid_count_value
mov eax,[edi]
mov edx,[edi+4]
or edx,edx
jnz invalid_count_value
ret
invalid_count_value:
cmp [error_line],0
jne zero_count
mov eax,[current_line]
mov [error_line],eax
mov [error],invalid_value
zero_count:
xor eax,eax
ret
get_value:
mov [operand_size],0
lods byte [esi]
call get_size_operator
cmp al,'('
jne invalid_value
mov al,[operand_size]
cmp al,1
je value_byte
cmp al,2
je value_word
cmp al,4
je value_dword
cmp al,6
je value_pword
cmp al,8
je value_qword
or al,al
jnz invalid_value
mov [value_size],al
call calculate_value
mov eax,[edi]
mov edx,[edi+4]
ret
calculate_value:
call calculate_expression
cmp word [edi+8],0
jne invalid_value
mov eax,[edi+16]
mov [symbol_identifier],eax
mov al,[edi+13]
mov [value_sign],al
mov al,[edi+12]
mov [value_type],al
ret
value_qword:
call get_qword_value
truncated_value:
mov [value_sign],0
ret
value_pword:
call get_pword_value
movzx edx,dx
jmp truncated_value
value_dword:
call get_dword_value
xor edx,edx
jmp truncated_value
value_word:
call get_word_value
xor edx,edx
movzx eax,ax
jmp truncated_value
value_byte:
call get_byte_value
xor edx,edx
movzx eax,al
jmp truncated_value
get_address_word_value:
mov [address_size],2
mov [value_size],2
jmp calculate_address
get_address_dword_value:
mov [address_size],4
mov [value_size],4
jmp calculate_address
get_address_qword_value:
mov [address_size],8
mov [value_size],8
jmp calculate_address
get_address_value:
mov [address_size],0
mov [value_size],8
calculate_address:
cmp byte [esi],'.'
je invalid_address
call calculate_expression
mov eax,[edi+16]
mov [address_symbol],eax
mov al,[edi+13]
mov [address_sign],al
mov al,[edi+12]
mov [value_type],al
cmp al,6
je special_address_type_32bit
cmp al,5
je special_address_type_32bit
ja invalid_use_of_symbol
test al,1
jnz invalid_use_of_symbol
or al,al
jz address_size_ok
shl al,5
jmp address_symbol_ok
special_address_type_32bit:
mov al,40h
address_symbol_ok:
mov ah,[address_size]
or [address_size],al
shr al,4
or ah,ah
jz address_size_ok
cmp al,ah
je address_size_ok
cmp ax,0408h
je address_sizes_mixed
cmp ax,0804h
jne address_sizes_do_not_agree
address_sizes_mixed:
mov [value_type],2
mov eax,[edi]
cdq
cmp edx,[edi+4]
je address_size_ok
cmp [error_line],0
jne address_size_ok
call recoverable_overflow
address_size_ok:
xor ebx,ebx
xor ecx,ecx
mov cl,[value_type]
shl ecx,16
mov ch,[address_size]
cmp word [edi+8],0
je check_immediate_address
mov al,[edi+8]
mov dl,[edi+10]
call get_address_register
mov al,[edi+9]
mov dl,[edi+11]
call get_address_register
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
check_address_registers:
or al,ah
mov ah,[address_size]
and ah,0Fh
jz address_registers_sizes_ok
cmp al,ah
jne address_sizes_do_not_match
address_registers_sizes_ok:
cmp al,4
je sib_allowed
cmp al,8
je sib_allowed
cmp al,0Fh
je check_ip_relative_address
or cl,cl
jz check_word_value
cmp cl,1
je check_word_value
jmp invalid_address
address_sizes_do_not_match:
cmp al,0Fh
jne invalid_address
mov al,bh
and al,0Fh
cmp al,ah
jne invalid_address
check_ip_relative_address:
or bl,bl
jnz invalid_address
cmp bh,0F4h
je check_dword_value
cmp bh,0F8h
jne invalid_address
mov eax,[edi]
cdq
cmp edx,[edi+4]
jne range_exceeded
cmp dl,[edi+13]
jne range_exceeded
ret
get_address_register:
or al,al
jz address_register_ok
cmp dl,1
jne scaled_register
or bh,bh
jnz scaled_register
mov bh,al
address_register_ok:
ret
scaled_register:
or bl,bl
jnz invalid_address
mov bl,al
mov cl,dl
jmp address_register_ok
sib_allowed:
or bh,bh
jnz check_index_with_base
cmp cl,3
je special_index_scale
cmp cl,5
je special_index_scale
cmp cl,9
je special_index_scale
cmp cl,2
jne check_index_scale
cmp bl,45h
jne special_index_scale
cmp [code_type],64
je special_index_scale
cmp [segment_register],4
jne special_index_scale
cmp [value_type],0
jne check_index_scale
mov al,[edi]
cbw
cwde
cmp eax,[edi]
jne check_index_scale
cdq
cmp edx,[edi+4]
jne check_immediate_address
special_index_scale:
mov bh,bl
dec cl
check_immediate_address:
mov al,[address_size]
and al,0Fh
cmp al,2
je check_word_value
cmp al,4
je check_dword_value
cmp al,8
je check_qword_value
or al,al
jnz invalid_value
cmp [code_type],64
jne check_dword_value
jmp check_qword_value
check_index_with_base:
cmp cl,1
jne check_index_scale
cmp bl,44h
je swap_base_with_index
cmp bl,84h
je swap_base_with_index
cmp [code_type],64
je check_for_rbp_base
cmp bl,45h
jne check_for_ebp_base
cmp [segment_register],3
je swap_base_with_index
jmp check_immediate_address
check_for_ebp_base:
cmp bh,45h
jne check_immediate_address
cmp [segment_register],4
jne check_immediate_address
swap_base_with_index:
xchg bl,bh
jmp check_immediate_address
check_for_rbp_base:
cmp bh,45h
je swap_base_with_index
cmp bh,85h
je swap_base_with_index
jmp check_immediate_address
check_index_scale:
test cl,not 1111b
jnz invalid_address
mov al,cl
dec al
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_base:
test bh,bh
jz vsib_base_ok
mov al,bh
shr al,4
cmp al,4
je vsib_base_ok
cmp [code_type],64
jne invalid_address
cmp al,8
jne invalid_address
vsib_base_ok:
mov al,bl
shr al,4
cmp al,0Ch
je check_index_scale
cmp al,0Dh
je check_index_scale
jmp invalid_address
 
calculate_relative_offset:
cmp [value_undefined],0
jne relative_offset_ok
test bh,bh
setne ch
cmp bx,word [org_registers]
je origin_registers_ok
xchg bh,bl
xchg ch,cl
cmp bx,word [org_registers]
jne invalid_value
origin_registers_ok:
cmp cx,word [org_registers+2]
jne invalid_value
mov bl,[address_sign]
add eax,dword [org_origin]
adc edx,dword [org_origin+4]
adc bl,[org_origin_sign]
sub eax,edi
sbb edx,0
sbb bl,0
mov [value_sign],bl
mov bl,[value_type]
mov ecx,[address_symbol]
mov [symbol_identifier],ecx
test bl,1
jnz relative_offset_unallowed
cmp bl,6
je plt_relative_offset
mov bh,[labels_type]
cmp bl,bh
je set_relative_offset_type
cmp bx,0402h
je set_relative_offset_type
relative_offset_unallowed:
call recoverable_misuse
set_relative_offset_type:
cmp [value_type],0
je relative_offset_ok
mov [value_type],0
cmp ecx,[org_symbol]
je relative_offset_ok
mov [value_type],3
relative_offset_ok:
ret
plt_relative_offset:
mov [value_type],7
cmp [labels_type],2
je relative_offset_ok
cmp [labels_type],4
jne recoverable_misuse
ret
 
calculate_logical_expression:
xor al,al
calculate_embedded_logical_expression:
mov [logical_value_wrapping],al
call get_logical_value
logical_loop:
cmp byte [esi],'|'
je logical_or
cmp byte [esi],'&'
je logical_and
ret
logical_or:
inc esi
or al,al
jnz logical_value_already_determined
push eax
call get_logical_value
pop ebx
or al,bl
jmp logical_loop
logical_and:
inc esi
or al,al
jz logical_value_already_determined
push eax
call get_logical_value
pop ebx
and al,bl
jmp logical_loop
logical_value_already_determined:
push eax
call skip_logical_value
jc invalid_expression
pop eax
jmp logical_loop
get_value_for_comparison:
mov [value_size],8
mov [size_override],-1
lods byte [esi]
call calculate_expression
cmp byte [edi+8],0
jne first_register_size_ok
mov byte [edi+10],0
first_register_size_ok:
cmp byte [edi+9],0
jne second_register_size_ok
mov byte [edi+11],0
second_register_size_ok:
mov eax,[edi+16]
mov [symbol_identifier],eax
mov al,[edi+13]
mov [value_sign],al
mov bl,[edi+12]
mov eax,[edi]
mov edx,[edi+4]
mov ecx,[edi+8]
ret
get_logical_value:
xor al,al
check_for_negation:
cmp byte [esi],'~'
jne negation_ok
inc esi
xor al,-1
jmp check_for_negation
negation_ok:
push eax
mov al,[esi]
cmp al,'{'
je logical_expression
cmp al,0FFh
je invalid_expression
cmp al,88h
je check_for_defined
cmp al,89h
je check_for_used
cmp al,'0'
je given_false
cmp al,'1'
je given_true
call get_value_for_comparison
mov bh,[value_sign]
push eax edx [symbol_identifier] ebx ecx
mov al,[esi]
or al,al
jz logical_number
cmp al,0Fh
je logical_number
cmp al,'}'
je logical_number
cmp al,'&'
je logical_number
cmp al,'|'
je logical_number
inc esi
mov [compare_type],al
call get_value_for_comparison
cmp bl,[esp+4]
jne values_not_relative
or bl,bl
jz check_values_registers
mov ebx,[symbol_identifier]
cmp ebx,[esp+8]
jne values_not_relative
check_values_registers:
cmp ecx,[esp]
je values_relative
ror ecx,16
xchg ch,cl
ror ecx,16
xchg ch,cl
cmp ecx,[esp]
je values_relative
values_not_relative:
cmp [compare_type],0F8h
jne invalid_comparison
add esp,12+8
jmp return_false
invalid_comparison:
call recoverable_misuse
values_relative:
pop ebx
shl ebx,16
mov bx,[esp]
add esp,8
pop ecx ebp
cmp [compare_type],'='
je check_equal
cmp [compare_type],0F1h
je check_not_equal
cmp [compare_type],0F8h
je return_true
test ebx,0FFFF0000h
jz check_less_or_greater
call recoverable_misuse
check_less_or_greater:
cmp [compare_type],'>'
je check_greater
cmp [compare_type],'<'
je check_less
cmp [compare_type],0F2h
je check_not_less
cmp [compare_type],0F3h
je check_not_greater
jmp invalid_expression
check_equal:
cmp bh,[value_sign]
jne return_false
cmp eax,ebp
jne return_false
cmp edx,ecx
jne return_false
jmp return_true
check_greater:
cmp bh,[value_sign]
jg return_true
jl return_false
cmp edx,ecx
jb return_true
ja return_false
cmp eax,ebp
jb return_true
jae return_false
check_less:
cmp bh,[value_sign]
jg return_false
jl return_true
cmp edx,ecx
jb return_false
ja return_true
cmp eax,ebp
jbe return_false
ja return_true
check_not_less:
cmp bh,[value_sign]
jg return_true
jl return_false
cmp edx,ecx
jb return_true
ja return_false
cmp eax,ebp
jbe return_true
ja return_false
check_not_greater:
cmp bh,[value_sign]
jg return_false
jl return_true
cmp edx,ecx
jb return_false
ja return_true
cmp eax,ebp
jb return_false
jae return_true
check_not_equal:
cmp bh,[value_sign]
jne return_true
cmp eax,ebp
jne return_true
cmp edx,ecx
jne return_true
jmp return_false
logical_number:
pop ecx ebx eax edx eax
or bl,bl
jnz invalid_logical_number
or cx,cx
jz logical_number_ok
invalid_logical_number:
call recoverable_misuse
logical_number_ok:
test bh,bh
jnz return_true
or eax,edx
jnz return_true
jmp return_false
check_for_defined:
or bl,-1
lods word [esi]
cmp ah,'('
jne invalid_expression
check_expression:
lods byte [esi]
or al,al
jz defined_string
cmp al,'.'
je defined_fp_value
cmp al,')'
je expression_checked
cmp al,'!'
je invalid_expression
cmp al,0Fh
je check_expression
cmp al,10h
je defined_register
cmp al,11h
je check_if_symbol_defined
cmp al,80h
jae check_expression
movzx eax,al
add esi,eax
jmp check_expression
defined_register:
inc esi
jmp check_expression
defined_fp_value:
add esi,12
jmp expression_checked
defined_string:
lods dword [esi]
add esi,eax
inc esi
jmp expression_checked
check_if_symbol_defined:
lods dword [esi]
cmp eax,-1
je invalid_expression
cmp eax,0Fh
jb check_expression
je reserved_word_used_as_symbol
test byte [eax+8],4
jnz no_prediction
test byte [eax+8],1
jz symbol_predicted_undefined
mov cx,[current_pass]
sub cx,[eax+16]
jz check_expression
cmp cx,1
ja symbol_predicted_undefined
or byte [eax+8],40h+80h
jmp check_expression
no_prediction:
test byte [eax+8],1
jz symbol_undefined
mov cx,[current_pass]
sub cx,[eax+16]
jz check_expression
jmp symbol_undefined
symbol_predicted_undefined:
or byte [eax+8],40h
and byte [eax+8],not 80h
symbol_undefined:
xor bl,bl
jmp check_expression
expression_checked:
mov al,bl
jmp logical_value_ok
check_for_used:
lods word [esi]
cmp ah,2
jne invalid_expression
lods dword [esi]
cmp eax,0Fh
jb invalid_use_of_symbol
je reserved_word_used_as_symbol
inc esi
test byte [eax+8],8
jz not_used
mov cx,[current_pass]
sub cx,[eax+18]
jz return_true
cmp cx,1
ja not_used
or byte [eax+8],10h+20h
jmp return_true
not_used:
or byte [eax+8],10h
and byte [eax+8],not 20h
jmp return_false
given_false:
inc esi
return_false:
xor al,al
jmp logical_value_ok
given_true:
inc esi
return_true:
or al,-1
jmp logical_value_ok
logical_expression:
lods byte [esi]
mov dl,[logical_value_wrapping]
push edx
call calculate_embedded_logical_expression
pop edx
mov [logical_value_wrapping],dl
push eax
lods byte [esi]
cmp al,'}'
jne invalid_expression
pop eax
logical_value_ok:
pop ebx
xor al,bl
ret
 
skip_symbol:
lods byte [esi]
or al,al
jz nothing_to_skip
cmp al,0Fh
je nothing_to_skip
cmp al,1
je skip_instruction
cmp al,2
je skip_label
cmp al,3
je skip_label
cmp al,20h
jb skip_assembler_symbol
cmp al,'('
je skip_expression
cmp al,'['
je skip_address
skip_done:
clc
ret
skip_label:
add esi,2
skip_instruction:
add esi,2
skip_assembler_symbol:
inc esi
jmp skip_done
skip_address:
mov al,[esi]
and al,11110000b
cmp al,60h
jb skip_expression
cmp al,70h
ja skip_expression
inc esi
jmp skip_address
skip_expression:
lods byte [esi]
or al,al
jz skip_string
cmp al,'.'
je skip_fp_value
cmp al,')'
je skip_done
cmp al,']'
je skip_done
cmp al,'!'
je skip_expression
cmp al,0Fh
je skip_expression
cmp al,10h
je skip_register
cmp al,11h
je skip_label_value
cmp al,80h
jae skip_expression
movzx eax,al
add esi,eax
jmp skip_expression
skip_label_value:
add esi,3
skip_register:
inc esi
jmp skip_expression
skip_fp_value:
add esi,12
jmp skip_done
skip_string:
lods dword [esi]
add esi,eax
inc esi
jmp skip_done
nothing_to_skip:
dec esi
stc
ret
 
expand_path:
lods byte [esi]
cmp al,'%'
je environment_variable
stos byte [edi]
or al,al
jnz expand_path
cmp edi,[memory_end]
ja out_of_memory
ret
environment_variable:
mov ebx,esi
find_variable_end:
lods byte [esi]
or al,al
jz not_environment_variable
cmp al,'%'
jne find_variable_end
mov byte [esi-1],0
push esi
mov esi,ebx
call get_environment_variable
pop esi
mov byte [esi-1],'%'
jmp expand_path
not_environment_variable:
mov al,'%'
stos byte [edi]
mov esi,ebx
jmp expand_path
get_include_directory:
lods byte [esi]
cmp al,';'
je include_directory_ok
stos byte [edi]
or al,al
jnz get_include_directory
dec esi
dec edi
include_directory_ok:
cmp byte [edi-1],'/'
je path_separator_ok
cmp byte [edi-1],'\'
je path_separator_ok
mov al,'/'
stos byte [edi]
path_separator_ok:
ret
 
 
; flat assembler core
; Copyright (c) 1999-2013, Tomasz Grysztar.
; All rights reserved.
 
calculate_expression:
mov [current_offset],edi
mov [value_undefined],0
cmp byte [esi],0
je get_string_value
cmp byte [esi],'.'
je convert_fp
calculation_loop:
lods byte [esi]
cmp al,1
je get_byte_number
cmp al,2
je get_word_number
cmp al,4
je get_dword_number
cmp al,8
je get_qword_number
cmp al,0Fh
je value_out_of_range
cmp al,10h
je get_register
cmp al,11h
je get_label
cmp al,')'
je expression_calculated
cmp al,']'
je expression_calculated
cmp al,'!'
je invalid_expression
sub edi,14h
mov ebx,edi
sub ebx,14h
cmp al,0E0h
je calculate_rva
cmp al,0E1h
je calculate_plt
cmp al,0D0h
je calculate_not
cmp al,083h
je calculate_neg
mov dx,[ebx+8]
or dx,[edi+8]
cmp al,80h
je calculate_add
cmp al,81h
je calculate_sub
mov ah,[ebx+12]
or ah,[edi+12]
jz absolute_values_calculation
call recoverable_misuse
absolute_values_calculation:
cmp al,90h
je calculate_mul
cmp al,91h
je calculate_div
or dx,dx
jnz invalid_expression
cmp al,0A0h
je calculate_mod
cmp al,0B0h
je calculate_and
cmp al,0B1h
je calculate_or
cmp al,0B2h
je calculate_xor
cmp al,0C0h
je calculate_shl
cmp al,0C1h
je calculate_shr
jmp invalid_expression
expression_calculated:
sub edi,14h
cmp [value_undefined],0
je expression_value_ok
xor eax,eax
mov [edi],eax
mov [edi+4],eax
mov [edi+12],eax
expression_value_ok:
ret
get_byte_number:
xor eax,eax
lods byte [esi]
stos dword [edi]
xor al,al
stos dword [edi]
got_number:
and word [edi-8+8],0
and word [edi-8+12],0
and dword [edi-8+16],0
add edi,0Ch
jmp calculation_loop
get_word_number:
xor eax,eax
lods word [esi]
stos dword [edi]
xor ax,ax
stos dword [edi]
jmp got_number
get_dword_number:
movs dword [edi],[esi]
xor eax,eax
stos dword [edi]
jmp got_number
get_qword_number:
movs dword [edi],[esi]
movs dword [edi],[esi]
jmp got_number
get_register:
mov byte [edi+9],0
and word [edi+12],0
lods byte [esi]
mov [edi+8],al
mov byte [edi+10],1
xor eax,eax
mov [edi+16],eax
stos dword [edi]
stos dword [edi]
add edi,0Ch
jmp calculation_loop
get_label:
xor eax,eax
mov [edi+8],eax
mov [edi+12],eax
mov [edi+20],eax
lods dword [esi]
cmp eax,0Fh
jb predefined_label
je reserved_word_used_as_symbol
mov ebx,eax
mov ax,[current_pass]
mov [ebx+18],ax
mov cl,[ebx+9]
shr cl,1
and cl,1
neg cl
or byte [ebx+8],8
test byte [ebx+8],1
jz label_undefined
cmp ax,[ebx+16]
je unadjusted_label
test byte [ebx+8],4
jnz label_out_of_scope
test byte [ebx+9],1
jz unadjusted_label
mov eax,[ebx]
sub eax,dword [adjustment]
stos dword [edi]
mov eax,[ebx+4]
sbb eax,dword [adjustment+4]
stos dword [edi]
sbb cl,[adjustment_sign]
mov [edi-8+13],cl
mov eax,dword [adjustment]
or al,[adjustment_sign]
or eax,dword [adjustment+4]
jz got_label
or [next_pass_needed],-1
jmp got_label
unadjusted_label:
mov eax,[ebx]
stos dword [edi]
mov eax,[ebx+4]
stos dword [edi]
mov [edi-8+13],cl
got_label:
test byte [ebx+9],4
jnz invalid_use_of_symbol
cmp [symbols_file],0
je label_reference_ok
cmp [next_pass_needed],0
jne label_reference_ok
call store_label_reference
label_reference_ok:
mov al,[ebx+11]
mov [edi-8+12],al
mov eax,[ebx+12]
mov [edi-8+8],eax
cmp al,ah
jne labeled_registers_ok
shr eax,16
add al,ah
jo labeled_registers_ok
xor ah,ah
mov [edi-8+10],ax
mov [edi-8+9],ah
labeled_registers_ok:
mov eax,[ebx+20]
mov [edi-8+16],eax
add edi,0Ch
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
check_size:
xchg [operand_size],al
or al,al
jz calculation_loop
cmp al,[operand_size]
jne operand_sizes_do_not_match
jmp calculation_loop
current_offset_label:
mov eax,[current_offset]
make_current_offset_label:
xor edx,edx
xor ch,ch
mov ebp,[addressing_space]
sub eax,[ds:ebp]
sbb edx,[ds:ebp+4]
sbb ch,[ds:ebp+8]
jp current_offset_label_ok
call recoverable_overflow
current_offset_label_ok:
stos dword [edi]
mov eax,edx
stos dword [edi]
mov eax,[ds:ebp+10h]
stos dword [edi]
mov cl,[ds:ebp+9]
mov [edi-12+12],cx
mov eax,[ds:ebp+14h]
mov [edi-12+16],eax
add edi,8
jmp calculation_loop
org_origin_label:
mov eax,[addressing_space]
mov eax,[eax+18h]
jmp make_current_offset_label
counter_label:
mov eax,[counter]
make_dword_label_value:
stos dword [edi]
xor eax,eax
stos dword [edi]
add edi,0Ch
jmp calculation_loop
timestamp_label:
call make_timestamp
make_qword_label_value:
stos dword [edi]
mov eax,edx
stos dword [edi]
add edi,0Ch
jmp calculation_loop
predefined_label:
or eax,eax
jz current_offset_label
cmp eax,1
je counter_label
cmp eax,2
je timestamp_label
cmp eax,3
je org_origin_label
mov edx,invalid_value
jmp error_undefined
label_out_of_scope:
mov edx,symbol_out_of_scope
jmp error_undefined
label_undefined:
mov edx,undefined_symbol
error_undefined:
cmp [current_pass],1
ja undefined_value
force_next_pass:
or [next_pass_needed],-1
undefined_value:
or [value_undefined],-1
and word [edi+12],0
xor eax,eax
stos dword [edi]
stos dword [edi]
add edi,0Ch
cmp [error_line],0
jne calculation_loop
mov eax,[current_line]
mov [error_line],eax
mov [error],edx
mov [error_info],ebx
jmp calculation_loop
calculate_add:
xor ah,ah
mov ah,[ebx+12]
mov al,[edi+12]
or al,al
jz add_values
or ah,ah
jz add_relocatable
add ah,al
jnz invalid_add
mov ecx,[edi+16]
cmp ecx,[ebx+16]
je add_values
invalid_add:
call recoverable_misuse
jmp add_values
add_relocatable:
mov ah,al
mov ecx,[edi+16]
mov [ebx+16],ecx
add_values:
mov [ebx+12],ah
mov eax,[edi]
add [ebx],eax
mov eax,[edi+4]
adc [ebx+4],eax
mov al,[edi+13]
adc [ebx+13],al
jp add_sign_ok
call recoverable_overflow
add_sign_ok:
or dx,dx
jz calculation_loop
push esi
mov esi,ebx
mov cl,[edi+10]
mov al,[edi+8]
call add_register
mov cl,[edi+11]
mov al,[edi+9]
call add_register
pop esi
jmp calculation_loop
add_register:
or al,al
jz add_register_done
add_register_start:
cmp [esi+8],al
jne add_in_second_slot
add [esi+10],cl
jo value_out_of_range
jnz add_register_done
mov byte [esi+8],0
ret
add_in_second_slot:
cmp [esi+9],al
jne create_in_first_slot
add [esi+11],cl
jo value_out_of_range
jnz add_register_done
mov byte [esi+9],0
ret
create_in_first_slot:
cmp byte [esi+8],0
jne create_in_second_slot
mov [esi+8],al
mov [esi+10],cl
ret
create_in_second_slot:
cmp byte [esi+9],0
jne invalid_expression
mov [esi+9],al
mov [esi+11],cl
add_register_done:
ret
out_of_range:
jmp calculation_loop
calculate_sub:
xor ah,ah
mov ah,[ebx+12]
mov al,[edi+12]
or al,al
jz sub_values
or ah,ah
jz negate_relocatable
cmp al,ah
jne invalid_sub
xor ah,ah
mov ecx,[edi+16]
cmp ecx,[ebx+16]
je sub_values
invalid_sub:
call recoverable_misuse
jmp sub_values
negate_relocatable:
neg al
mov ah,al
mov ecx,[edi+16]
mov [ebx+16],ecx
sub_values:
mov [ebx+12],ah
mov eax,[edi]
sub [ebx],eax
mov eax,[edi+4]
sbb [ebx+4],eax
mov al,[edi+13]
sbb [ebx+13],al
jp sub_sign_ok
cmp [error_line],0
jne sub_sign_ok
call recoverable_overflow
sub_sign_ok:
or dx,dx
jz calculation_loop
push esi
mov esi,ebx
mov cl,[edi+10]
mov al,[edi+8]
call sub_register
mov cl,[edi+11]
mov al,[edi+9]
call sub_register
pop esi
jmp calculation_loop
sub_register:
or al,al
jz add_register_done
neg cl
jo value_out_of_range
jmp add_register_start
calculate_mul:
or dx,dx
jz mul_start
cmp word [ebx+8],0
jne mul_start
xor ecx,ecx
swap_values:
mov eax,[ebx+ecx]
xchg eax,[edi+ecx]
mov [ebx+ecx],eax
add ecx,4
cmp ecx,16
jb swap_values
mul_start:
push esi edx
mov esi,ebx
xor bl,bl
cmp byte [esi+13],0
je mul_first_sign_ok
xor bl,-1
mov eax,[esi]
mov edx,[esi+4]
not eax
not edx
add eax,1
adc edx,0
mov [esi],eax
mov [esi+4],edx
or eax,edx
jz mul_overflow
mul_first_sign_ok:
cmp byte [edi+13],0
je mul_second_sign_ok
xor bl,-1
cmp byte [esi+8],0
je mul_first_register_sign_ok
neg byte [esi+10]
jo invalid_expression
mul_first_register_sign_ok:
cmp byte [esi+9],0
je mul_second_register_sign_ok
neg byte [esi+11]
jo invalid_expression
mul_second_register_sign_ok:
mov eax,[edi]
mov edx,[edi+4]
not eax
not edx
add eax,1
adc edx,0
mov [edi],eax
mov [edi+4],edx
or eax,edx
jz mul_overflow
mul_second_sign_ok:
cmp dword [esi+4],0
jz mul_numbers
cmp dword [edi+4],0
jz mul_numbers
jnz mul_overflow
mul_numbers:
mov eax,[esi+4]
mul dword [edi]
or edx,edx
jnz mul_overflow
mov ecx,eax
mov eax,[esi]
mul dword [edi+4]
or edx,edx
jnz mul_overflow
add ecx,eax
jc mul_overflow
mov eax,[esi]
mul dword [edi]
add edx,ecx
jc mul_overflow
mov [esi],eax
mov [esi+4],edx
or bl,bl
jz mul_ok
not eax
not edx
add eax,1
adc edx,0
mov [esi],eax
mov [esi+4],edx
or eax,edx
jnz mul_ok
not bl
mul_ok:
mov [esi+13],bl
pop edx
or dx,dx
jz mul_calculated
cmp word [edi+8],0
jne invalid_value
cmp byte [esi+8],0
je mul_first_register_ok
call get_byte_scale
imul byte [esi+10]
mov dl,ah
cbw
cmp ah,dl
jne value_out_of_range
mov [esi+10],al
or al,al
jnz mul_first_register_ok
mov [esi+8],al
mul_first_register_ok:
cmp byte [esi+9],0
je mul_calculated
call get_byte_scale
imul byte [esi+11]
mov dl,ah
cbw
cmp ah,dl
jne value_out_of_range
mov [esi+11],al
or al,al
jnz mul_calculated
mov [esi+9],al
mul_calculated:
pop esi
jmp calculation_loop
mul_overflow:
pop edx esi
call recoverable_overflow
jmp calculation_loop
get_byte_scale:
mov al,[edi]
cbw
cwde
cdq
cmp edx,[edi+4]
jne value_out_of_range
cmp eax,[edi]
jne value_out_of_range
ret
calculate_div:
push esi edx
mov esi,ebx
call div_64
pop edx
or dx,dx
jz div_calculated
cmp byte [esi+8],0
je div_first_register_ok
call get_byte_scale
or al,al
jz value_out_of_range
mov al,[esi+10]
cbw
idiv byte [edi]
or ah,ah
jnz invalid_use_of_symbol
mov [esi+10],al
div_first_register_ok:
cmp byte [esi+9],0
je div_calculated
call get_byte_scale
or al,al
jz value_out_of_range
mov al,[esi+11]
cbw
idiv byte [edi]
or ah,ah
jnz invalid_use_of_symbol
mov [esi+11],al
div_calculated:
pop esi
jmp calculation_loop
calculate_mod:
push esi
mov esi,ebx
call div_64
mov [esi],eax
mov [esi+4],edx
mov [esi+13],bh
pop esi
jmp calculation_loop
calculate_and:
mov eax,[edi]
mov edx,[edi+4]
mov cl,[edi+13]
and [ebx],eax
and [ebx+4],edx
and [ebx+13],cl
jmp calculation_loop
calculate_or:
mov eax,[edi]
mov edx,[edi+4]
mov cl,[edi+13]
or [ebx],eax
or [ebx+4],edx
or [ebx+13],cl
jmp calculation_loop
calculate_xor:
mov eax,[edi]
mov edx,[edi+4]
mov cl,[edi+13]
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]
not dword [edi+4]
add dword [edi],1
adc dword [edi+4],0
jc shl_over
calculate_shl:
cmp byte [edi+13],0
jne shl_negative
mov edx,[ebx+4]
mov eax,[ebx]
cmp dword [edi+4],0
jne shl_over
movsx ecx,byte [ebx+13]
xchg ecx,[edi]
cmp ecx,64
je shl_max
ja shl_over
cmp ecx,32
jae shl_high
shld [edi],edx,cl
shld edx,eax,cl
shl eax,cl
mov [ebx],eax
mov [ebx+4],edx
jmp shl_done
shl_over:
cmp byte [ebx+13],0
jne shl_overflow
shl_max:
movsx ecx,byte [ebx+13]
cmp eax,ecx
jne shl_overflow
cmp edx,ecx
jne shl_overflow
xor eax,eax
mov [ebx],eax
mov [ebx+4],eax
jmp calculation_loop
shl_high:
sub cl,32
shld [edi],edx,cl
shld edx,eax,cl
shl eax,cl
mov [ebx+4],eax
and dword [ebx],0
cmp edx,[edi]
jne shl_overflow
shl_done:
movsx eax,byte [ebx+13]
cmp eax,[edi]
je calculation_loop
shl_overflow:
call recoverable_overflow
jmp calculation_loop
shl_negative:
mov byte [edi+13],0
not dword [edi]
not dword [edi+4]
add dword [edi],1
adc dword [edi+4],0
jnc calculate_shr
dec dword [edi+4]
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
jne shr_over
mov ecx,[edi]
cmp ecx,64
jae shr_over
push esi
movsx esi,byte [ebx+13]
cmp ecx,32
jae shr_high
shrd eax,edx,cl
shrd edx,esi,cl
mov [ebx],eax
mov [ebx+4],edx
pop esi
jmp calculation_loop
shr_high:
sub cl,32
shrd edx,esi,cl
mov [ebx],edx
mov [ebx+4],esi
pop esi
jmp calculation_loop
shr_over:
movsx eax,byte [ebx+13]
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
cmp byte [edi+12],0
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
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_neg:
cmp byte [edi+8],0
je neg_first_register_ok
neg byte [edi+10]
jo invalid_expression
neg_first_register_ok:
cmp byte [edi+9],0
je neg_second_register_ok
neg byte [edi+11]
jo invalid_expression
neg_second_register_ok:
neg byte [edi+12]
xor eax,eax
xor edx,edx
xor cl,cl
xchg eax,[edi]
xchg edx,[edi+4]
xchg cl,[edi+13]
sub [edi],eax
sbb [edi+4],edx
sbb [edi+13],cl
jp neg_sign_ok
call recoverable_overflow
neg_sign_ok:
add edi,14h
jmp calculation_loop
calculate_rva:
cmp word [edi+8],0
jne invalid_expression
mov al,[output_format]
cmp al,5
je calculate_gotoff
cmp al,4
je calculate_coff_rva
cmp al,3
jne invalid_expression
test [format_flags],8
jnz pe64_rva
mov al,2
bt [resolver_flags],0
jc rva_type_ok
xor al,al
rva_type_ok:
cmp byte [edi+12],al
je rva_ok
call recoverable_misuse
rva_ok:
mov byte [edi+12],0
mov eax,[code_start]
mov eax,[eax+34h]
xor edx,edx
finish_rva:
sub [edi],eax
sbb [edi+4],edx
sbb byte [edi+13],0
jp rva_finished
call recoverable_overflow
rva_finished:
add edi,14h
jmp calculation_loop
pe64_rva:
mov al,4
bt [resolver_flags],0
jc pe64_rva_type_ok
xor al,al
pe64_rva_type_ok:
cmp byte [edi+12],al
je pe64_rva_ok
call recoverable_misuse
pe64_rva_ok:
mov byte [edi+12],0
mov eax,[code_start]
mov edx,[eax+34h]
mov eax,[eax+30h]
jmp finish_rva
calculate_gotoff:
test [format_flags],8+1
jnz invalid_expression
calculate_coff_rva:
mov dl,5
cmp byte [edi+12],2
je change_value_type
incorrect_change_of_value_type:
call recoverable_misuse
change_value_type:
mov byte [edi+12],dl
add edi,14h
jmp calculation_loop
calculate_plt:
cmp word [edi+8],0
jne invalid_expression
cmp [output_format],5
jne invalid_expression
test [format_flags],1
jnz invalid_expression
mov dl,6
mov dh,2
test [format_flags],8
jz check_value_for_plt
mov dh,4
check_value_for_plt:
mov eax,[edi]
or eax,[edi+4]
jnz incorrect_change_of_value_type
cmp byte [edi+12],dh
jne incorrect_change_of_value_type
mov eax,[edi+16]
cmp byte [eax],80h
jne incorrect_change_of_value_type
jmp change_value_type
div_64:
xor ebx,ebx
cmp dword [edi],0
jne divider_ok
cmp dword [edi+4],0
jne divider_ok
cmp [next_pass_needed],0
je value_out_of_range
jmp div_done
divider_ok:
cmp byte [esi+13],0
je div_first_sign_ok
mov eax,[esi]
mov edx,[esi+4]
not eax
not edx
add eax,1
adc edx,0
mov [esi],eax
mov [esi+4],edx
or eax,edx
jz value_out_of_range
xor bx,-1
div_first_sign_ok:
cmp byte [edi+13],0
je div_second_sign_ok
mov eax,[edi]
mov edx,[edi+4]
not eax
not edx
add eax,1
adc edx,0
mov [edi],eax
mov [edi+4],edx
or eax,edx
jz value_out_of_range
xor bl,-1
div_second_sign_ok:
cmp dword [edi+4],0
jne div_high
mov ecx,[edi]
mov eax,[esi+4]
xor edx,edx
div ecx
mov [esi+4],eax
mov eax,[esi]
div ecx
mov [esi],eax
mov eax,edx
xor edx,edx
jmp div_done
div_high:
push ebx
mov eax,[esi+4]
xor edx,edx
div dword [edi+4]
mov ebx,[esi]
mov [esi],eax
and dword [esi+4],0
mov ecx,edx
mul dword [edi]
div_high_loop:
cmp ecx,edx
ja div_high_done
jb div_high_large_correction
cmp ebx,eax
jae div_high_done
div_high_correction:
dec dword [esi]
sub eax,[edi]
sbb edx,[edi+4]
jnc div_high_loop
div_high_done:
sub ebx,eax
sbb ecx,edx
mov edx,ecx
mov eax,ebx
pop ebx
jmp div_done
div_high_large_correction:
push eax edx
mov eax,edx
sub eax,ecx
xor edx,edx
div dword [edi+4]
shr eax,1
jz div_high_small_correction
sub [esi],eax
push eax
mul dword [edi+4]
sub dword [esp+4],eax
pop eax
mul dword [edi]
sub dword [esp+4],eax
sbb dword [esp],edx
pop edx eax
jmp div_high_loop
div_high_small_correction:
pop edx eax
jmp div_high_correction
div_done:
or bh,bh
jz remainder_ok
not eax
not edx
add eax,1
adc edx,0
mov ecx,eax
or ecx,edx
jnz remainder_ok
not bh
remainder_ok:
or bl,bl
jz div_ok
not dword [esi]
not dword [esi+4]
add dword [esi],1
adc dword [esi+4],0
mov ecx,[esi]
or ecx,[esi+4]
jnz div_ok
not bl
div_ok:
mov [esi+13],bl
ret
store_label_reference:
mov eax,[tagged_blocks]
mov dword [eax-4],2
mov dword [eax-8],4
sub eax,8+4
cmp eax,edi
jbe out_of_memory
mov [tagged_blocks],eax
mov [eax],ebx
ret
convert_fp:
inc esi
and word [edi+8],0
and word [edi+12],0
mov al,[value_size]
cmp al,2
je convert_fp_word
cmp al,4
je convert_fp_dword
test al,not 8
jnz invalid_value
convert_fp_qword:
xor eax,eax
xor edx,edx
cmp word [esi+8],8000h
je fp_qword_store
mov bx,[esi+8]
mov eax,[esi]
mov edx,[esi+4]
add eax,eax
adc edx,edx
mov ecx,edx
shr edx,12
shrd eax,ecx,12
jnc fp_qword_ok
add eax,1
adc edx,0
bt edx,20
jnc fp_qword_ok
and edx,1 shl 20 - 1
inc bx
shr edx,1
rcr eax,1
fp_qword_ok:
add bx,3FFh
cmp bx,7FFh
jge value_out_of_range
cmp bx,0
jg fp_qword_exp_ok
or edx,1 shl 20
mov cx,bx
neg cx
inc cx
cmp cx,52
ja value_out_of_range
cmp cx,32
jbe fp_qword_small_shift
sub cx,32
mov eax,edx
xor edx,edx
shr eax,cl
jmp fp_qword_shift_done
fp_qword_small_shift:
mov ebx,edx
shr edx,cl
shrd eax,ebx,cl
fp_qword_shift_done:
mov bx,0
jnc fp_qword_exp_ok
add eax,1
adc edx,0
test edx,1 shl 20
jz fp_qword_exp_ok
and edx,1 shl 20 - 1
inc bx
fp_qword_exp_ok:
shl ebx,20
or edx,ebx
fp_qword_store:
mov bl,[esi+11]
shl ebx,31
or edx,ebx
mov [edi],eax
mov [edi+4],edx
add esi,13
ret
convert_fp_word:
xor eax,eax
cmp word [esi+8],8000h
je fp_word_store
mov bx,[esi+8]
mov ax,[esi+6]
shl ax,1
shr ax,6
jnc fp_word_ok
inc ax
bt ax,10
jnc fp_word_ok
and ax,1 shl 10 - 1
inc bx
shr ax,1
fp_word_ok:
add bx,0Fh
cmp bx,01Fh
jge value_out_of_range
cmp bx,0
jg fp_word_exp_ok
or ax,1 shl 10
mov cx,bx
neg cx
inc cx
cmp cx,10
ja value_out_of_range
xor bx,bx
shr ax,cl
jnc fp_word_exp_ok
inc ax
test ax,1 shl 10
jz fp_word_exp_ok
and ax,1 shl 10 - 1
inc bx
fp_word_exp_ok:
shl bx,10
or ax,bx
fp_word_store:
mov bl,[esi+11]
shl bx,15
or ax,bx
mov [edi],eax
xor eax,eax
mov [edi+4],eax
add esi,13
ret
convert_fp_dword:
xor eax,eax
cmp word [esi+8],8000h
je fp_dword_store
mov bx,[esi+8]
mov eax,[esi+4]
shl eax,1
shr eax,9
jnc fp_dword_ok
inc eax
bt eax,23
jnc fp_dword_ok
and eax,1 shl 23 - 1
inc bx
shr eax,1
fp_dword_ok:
add bx,7Fh
cmp bx,0FFh
jge value_out_of_range
cmp bx,0
jg fp_dword_exp_ok
or eax,1 shl 23
mov cx,bx
neg cx
inc cx
cmp cx,23
ja value_out_of_range
xor bx,bx
shr eax,cl
jnc fp_dword_exp_ok
inc eax
test eax,1 shl 23
jz fp_dword_exp_ok
and eax,1 shl 23 - 1
inc bx
fp_dword_exp_ok:
shl ebx,23
or eax,ebx
fp_dword_store:
mov bl,[esi+11]
shl ebx,31
or eax,ebx
mov [edi],eax
xor eax,eax
mov [edi+4],eax
add esi,13
ret
get_string_value:
inc esi
lods dword [esi]
mov ecx,eax
cmp ecx,8
ja value_out_of_range
mov edx,edi
xor eax,eax
stos dword [edi]
stos dword [edi]
mov edi,edx
rep movs byte [edi],[esi]
mov edi,edx
inc esi
and word [edi+8],0
and word [edi+12],0
ret
 
get_byte_value:
mov [value_size],1
mov [size_override],-1
call calculate_value
or al,al
jz check_byte_value
call recoverable_misuse
check_byte_value:
mov eax,[edi]
mov edx,[edi+4]
cmp byte [edi+13],0
je byte_positive
cmp edx,-1
jne range_exceeded
cmp eax,-80h
jb range_exceeded
ret
byte_positive:
test edx,edx
jnz range_exceeded
cmp eax,100h
jae range_exceeded
return_byte_value:
ret
range_exceeded:
xor eax,eax
xor edx,edx
recoverable_overflow:
cmp [error_line],0
jne ignore_overflow
push [current_line]
pop [error_line]
mov [error],value_out_of_range
or [value_undefined],-1
ignore_overflow:
ret
recoverable_misuse:
cmp [error_line],0
jne ignore_misuse
push [current_line]
pop [error_line]
mov [error],invalid_use_of_symbol
ignore_misuse:
ret
get_word_value:
mov [value_size],2
mov [size_override],-1
call calculate_value
cmp al,2
jb check_word_value
call recoverable_misuse
check_word_value:
mov eax,[edi]
mov edx,[edi+4]
cmp byte [edi+13],0
je word_positive
cmp edx,-1
jne range_exceeded
cmp eax,-8000h
jb range_exceeded
ret
word_positive:
test edx,edx
jnz range_exceeded
cmp eax,10000h
jae range_exceeded
ret
get_dword_value:
mov [value_size],4
mov [size_override],-1
call calculate_value
cmp al,4
jne check_dword_value
mov [value_type],2
mov eax,[edi]
cdq
cmp edx,[edi+4]
jne range_exceeded
mov ecx,edx
shr ecx,31
cmp cl,[value_sign]
jne range_exceeded
ret
check_dword_value:
mov eax,[edi]
mov edx,[edi+4]
cmp byte [edi+13],0
je dword_positive
cmp edx,-1
jne range_exceeded
bt eax,31
jnc range_exceeded
ret
dword_positive:
test edx,edx
jne range_exceeded
ret
get_pword_value:
mov [value_size],6
mov [size_override],-1
call calculate_value
cmp al,4
jne check_pword_value
call recoverable_misuse
check_pword_value:
mov eax,[edi]
mov edx,[edi+4]
cmp byte [edi+13],0
je pword_positive
cmp edx,-8000h
jb range_exceeded
ret
pword_positive:
cmp edx,10000h
jae range_exceeded
ret
get_qword_value:
mov [value_size],8
mov [size_override],-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
call calculate_expression
cmp word [edi+8],0
jne invalid_value
mov [value_sign],0
mov al,[edi+12]
or al,al
jz check_count_value
call recoverable_misuse
check_count_value:
cmp byte [edi+13],0
jne invalid_count_value
mov eax,[edi]
mov edx,[edi+4]
or edx,edx
jnz invalid_count_value
ret
invalid_count_value:
cmp [error_line],0
jne zero_count
mov eax,[current_line]
mov [error_line],eax
mov [error],invalid_value
zero_count:
xor eax,eax
ret
get_value:
mov [operand_size],0
lods byte [esi]
call get_size_operator
cmp al,'('
jne invalid_value
mov al,[operand_size]
cmp al,1
je value_byte
cmp al,2
je value_word
cmp al,4
je value_dword
cmp al,6
je value_pword
cmp al,8
je value_qword
or al,al
jnz invalid_value
mov [value_size],al
call calculate_value
mov eax,[edi]
mov edx,[edi+4]
ret
calculate_value:
call calculate_expression
cmp word [edi+8],0
jne invalid_value
mov eax,[edi+16]
mov [symbol_identifier],eax
mov al,[edi+13]
mov [value_sign],al
mov al,[edi+12]
mov [value_type],al
ret
value_qword:
call get_qword_value
truncated_value:
mov [value_sign],0
ret
value_pword:
call get_pword_value
movzx edx,dx
jmp truncated_value
value_dword:
call get_dword_value
xor edx,edx
jmp truncated_value
value_word:
call get_word_value
xor edx,edx
movzx eax,ax
jmp truncated_value
value_byte:
call get_byte_value
xor edx,edx
movzx eax,al
jmp truncated_value
get_address_word_value:
mov [address_size],2
mov [value_size],2
mov [free_address_range],0
jmp calculate_address
get_address_dword_value:
mov [address_size],4
mov [value_size],4
mov [free_address_range],0
jmp calculate_address
get_address_qword_value:
mov [address_size],8
mov [value_size],8
mov [free_address_range],0
jmp calculate_address
get_address_value:
mov [address_size],0
mov [value_size],8
or [free_address_range],-1
calculate_address:
cmp byte [esi],'.'
je invalid_address
call calculate_expression
mov eax,[edi+16]
mov [address_symbol],eax
mov al,[edi+13]
mov [address_sign],al
mov al,[edi+12]
mov [value_type],al
cmp al,0
je address_size_ok
jg get_address_symbol_size
neg al
get_address_symbol_size:
cmp al,6
je special_address_type_32bit
cmp al,5
je special_address_type_32bit
ja invalid_address_type
test al,1
jnz invalid_address_type
shl al,5
jmp address_symbol_ok
invalid_address_type:
call recoverable_misuse
special_address_type_32bit:
mov al,40h
address_symbol_ok:
mov ah,[address_size]
or [address_size],al
shr al,4
or ah,ah
jz address_size_ok
cmp al,ah
je address_size_ok
cmp ax,0408h
je address_sizes_mixed
cmp ax,0804h
jne address_sizes_do_not_agree
address_sizes_mixed:
mov [value_type],2
mov eax,[edi]
cdq
cmp edx,[edi+4]
je address_size_ok
cmp [error_line],0
jne address_size_ok
call recoverable_overflow
address_size_ok:
xor ebx,ebx
xor ecx,ecx
mov cl,[value_type]
shl ecx,16
mov ch,[address_size]
cmp word [edi+8],0
je check_immediate_address
mov al,[edi+8]
mov dl,[edi+10]
call get_address_register
mov al,[edi+9]
mov dl,[edi+11]
call get_address_register
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
check_address_registers:
or al,ah
mov ah,[address_size]
and ah,0Fh
jz address_registers_sizes_ok
cmp al,ah
jne address_sizes_do_not_match
address_registers_sizes_ok:
cmp al,4
je sib_allowed
cmp al,8
je sib_allowed
cmp al,0Fh
je check_ip_relative_address
cmp cl,1
ja invalid_address
cmp [free_address_range],0
jne check_qword_value
jmp check_word_value
address_sizes_do_not_match:
cmp al,0Fh
jne invalid_address
mov al,bh
and al,0Fh
cmp al,ah
jne invalid_address
check_ip_relative_address:
or bl,bl
jnz invalid_address
cmp bh,0F8h
je check_rip_relative_address
cmp bh,0F4h
jne invalid_address
cmp [free_address_range],0
jne check_qword_value
jmp check_dword_value
check_rip_relative_address:
mov eax,[edi]
cdq
cmp edx,[edi+4]
jne range_exceeded
cmp dl,[edi+13]
jne range_exceeded
ret
get_address_register:
or al,al
jz address_register_ok
cmp dl,1
jne scaled_register
or bh,bh
jnz scaled_register
mov bh,al
address_register_ok:
ret
scaled_register:
or bl,bl
jnz invalid_address
mov bl,al
mov cl,dl
jmp address_register_ok
sib_allowed:
or bh,bh
jnz check_index_with_base
cmp cl,3
je special_index_scale
cmp cl,5
je special_index_scale
cmp cl,9
je special_index_scale
cmp cl,2
jne check_index_scale
cmp bl,45h
jne special_index_scale
cmp [code_type],64
je special_index_scale
cmp [segment_register],4
jne special_index_scale
cmp [value_type],0
jne check_index_scale
mov al,[edi]
cbw
cwde
cmp eax,[edi]
jne check_index_scale
cdq
cmp edx,[edi+4]
jne check_immediate_address
special_index_scale:
mov bh,bl
dec cl
check_immediate_address:
cmp [free_address_range],0
jne check_qword_value
mov al,[address_size]
and al,0Fh
cmp al,2
je check_word_value
cmp al,4
je check_dword_value
cmp al,8
je check_qword_value
or al,al
jnz invalid_value
cmp [code_type],64
jne check_dword_value
jmp check_qword_value
check_index_with_base:
cmp cl,1
jne check_index_scale
cmp bl,44h
je swap_base_with_index
cmp bl,84h
je swap_base_with_index
cmp [code_type],64
je check_for_rbp_base
cmp bl,45h
jne check_for_ebp_base
cmp [segment_register],3
je swap_base_with_index
jmp check_immediate_address
check_for_ebp_base:
cmp bh,45h
jne check_immediate_address
cmp [segment_register],4
jne check_immediate_address
swap_base_with_index:
xchg bl,bh
jmp check_immediate_address
check_for_rbp_base:
cmp bh,45h
je swap_base_with_index
cmp bh,85h
je swap_base_with_index
jmp check_immediate_address
check_index_scale:
test cl,not 1111b
jnz invalid_address
mov al,cl
dec al
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_base:
test bh,bh
jz vsib_base_ok
mov al,bh
shr al,4
cmp al,4
je vsib_base_ok
cmp [code_type],64
jne invalid_address
cmp al,8
jne invalid_address
vsib_base_ok:
mov al,bl
shr al,4
cmp al,0Ch
je check_index_scale
cmp al,0Dh
je check_index_scale
jmp invalid_address
 
calculate_relative_offset:
cmp [value_undefined],0
jne relative_offset_ok
test bh,bh
setne ch
cmp bx,[ds:ebp+10h]
je origin_registers_ok
xchg bh,bl
xchg ch,cl
cmp bx,[ds:ebp+10h]
jne invalid_value
origin_registers_ok:
cmp cx,[ds:ebp+10h+2]
jne invalid_value
mov bl,[address_sign]
add eax,[ds:ebp]
adc edx,[ds:ebp+4]
adc bl,[ds:ebp+8]
sub eax,edi
sbb edx,0
sbb bl,0
mov [value_sign],bl
mov bl,[value_type]
mov ecx,[address_symbol]
mov [symbol_identifier],ecx
test bl,1
jnz relative_offset_unallowed
cmp bl,6
je plt_relative_offset
mov bh,[ds:ebp+9]
cmp bl,bh
je set_relative_offset_type
cmp bx,0402h
je set_relative_offset_type
relative_offset_unallowed:
call recoverable_misuse
set_relative_offset_type:
cmp [value_type],0
je relative_offset_ok
mov [value_type],0
cmp ecx,[ds:ebp+14h]
je relative_offset_ok
mov [value_type],3
relative_offset_ok:
ret
plt_relative_offset:
mov [value_type],7
cmp byte [ds:ebp+9],2
je relative_offset_ok
cmp byte [ds:ebp+9],4
jne recoverable_misuse
ret
 
calculate_logical_expression:
xor al,al
calculate_embedded_logical_expression:
mov [logical_value_wrapping],al
call get_logical_value
logical_loop:
cmp byte [esi],'|'
je logical_or
cmp byte [esi],'&'
je logical_and
ret
logical_or:
inc esi
or al,al
jnz logical_value_already_determined
push eax
call get_logical_value
pop ebx
or al,bl
jmp logical_loop
logical_and:
inc esi
or al,al
jz logical_value_already_determined
push eax
call get_logical_value
pop ebx
and al,bl
jmp logical_loop
logical_value_already_determined:
push eax
call skip_logical_value
jc invalid_expression
pop eax
jmp logical_loop
get_value_for_comparison:
mov [value_size],8
mov [size_override],-1
lods byte [esi]
call calculate_expression
cmp byte [edi+8],0
jne first_register_size_ok
mov byte [edi+10],0
first_register_size_ok:
cmp byte [edi+9],0
jne second_register_size_ok
mov byte [edi+11],0
second_register_size_ok:
mov eax,[edi+16]
mov [symbol_identifier],eax
mov al,[edi+13]
mov [value_sign],al
mov bl,[edi+12]
mov eax,[edi]
mov edx,[edi+4]
mov ecx,[edi+8]
ret
get_logical_value:
xor al,al
check_for_negation:
cmp byte [esi],'~'
jne negation_ok
inc esi
xor al,-1
jmp check_for_negation
negation_ok:
push eax
mov al,[esi]
cmp al,'{'
je logical_expression
cmp al,0FFh
je invalid_expression
cmp al,88h
je check_for_defined
cmp al,89h
je check_for_used
cmp al,'0'
je given_false
cmp al,'1'
je given_true
cmp al,'('
jne invalid_value
call get_value_for_comparison
mov bh,[value_sign]
push eax edx [symbol_identifier] ebx ecx
mov al,[esi]
or al,al
jz logical_number
cmp al,0Fh
je logical_number
cmp al,'}'
je logical_number
cmp al,'&'
je logical_number
cmp al,'|'
je logical_number
inc esi
mov [compare_type],al
cmp byte [esi],'('
jne invalid_value
call get_value_for_comparison
cmp bl,[esp+4]
jne values_not_relative
or bl,bl
jz check_values_registers
mov ebx,[symbol_identifier]
cmp ebx,[esp+8]
jne values_not_relative
check_values_registers:
cmp ecx,[esp]
je values_relative
ror ecx,16
xchg ch,cl
ror ecx,16
xchg ch,cl
cmp ecx,[esp]
je values_relative
values_not_relative:
cmp [compare_type],0F8h
jne invalid_comparison
add esp,12+8
jmp return_false
invalid_comparison:
call recoverable_misuse
values_relative:
pop ebx
shl ebx,16
mov bx,[esp]
add esp,8
pop ecx ebp
cmp [compare_type],'='
je check_equal
cmp [compare_type],0F1h
je check_not_equal
cmp [compare_type],0F8h
je return_true
test ebx,0FFFF0000h
jz check_less_or_greater
call recoverable_misuse
check_less_or_greater:
cmp [compare_type],'>'
je check_greater
cmp [compare_type],'<'
je check_less
cmp [compare_type],0F2h
je check_not_less
cmp [compare_type],0F3h
je check_not_greater
jmp invalid_expression
check_equal:
cmp bh,[value_sign]
jne return_false
cmp eax,ebp
jne return_false
cmp edx,ecx
jne return_false
jmp return_true
check_greater:
cmp bh,[value_sign]
jg return_true
jl return_false
cmp edx,ecx
jb return_true
ja return_false
cmp eax,ebp
jb return_true
jae return_false
check_less:
cmp bh,[value_sign]
jg return_false
jl return_true
cmp edx,ecx
jb return_false
ja return_true
cmp eax,ebp
jbe return_false
ja return_true
check_not_less:
cmp bh,[value_sign]
jg return_true
jl return_false
cmp edx,ecx
jb return_true
ja return_false
cmp eax,ebp
jbe return_true
ja return_false
check_not_greater:
cmp bh,[value_sign]
jg return_false
jl return_true
cmp edx,ecx
jb return_false
ja return_true
cmp eax,ebp
jb return_false
jae return_true
check_not_equal:
cmp bh,[value_sign]
jne return_true
cmp eax,ebp
jne return_true
cmp edx,ecx
jne return_true
jmp return_false
logical_number:
pop ecx ebx eax edx eax
or bl,bl
jnz invalid_logical_number
or cx,cx
jz logical_number_ok
invalid_logical_number:
call recoverable_misuse
logical_number_ok:
test bh,bh
jnz return_true
or eax,edx
jnz return_true
jmp return_false
check_for_defined:
or bl,-1
lods word [esi]
cmp ah,'('
jne invalid_expression
check_expression:
lods byte [esi]
or al,al
jz defined_string
cmp al,'.'
je defined_fp_value
cmp al,')'
je expression_checked
cmp al,'!'
je invalid_expression
cmp al,0Fh
je check_expression
cmp al,10h
je defined_register
cmp al,11h
je check_if_symbol_defined
cmp al,80h
jae check_expression
movzx eax,al
add esi,eax
jmp check_expression
defined_register:
inc esi
jmp check_expression
defined_fp_value:
add esi,12
jmp expression_checked
defined_string:
lods dword [esi]
add esi,eax
inc esi
jmp expression_checked
check_if_symbol_defined:
lods dword [esi]
cmp eax,-1
je invalid_expression
cmp eax,0Fh
jb check_expression
je reserved_word_used_as_symbol
test byte [eax+8],4
jnz no_prediction
test byte [eax+8],1
jz symbol_predicted_undefined
mov cx,[current_pass]
sub cx,[eax+16]
jz check_expression
cmp cx,1
ja symbol_predicted_undefined
or byte [eax+8],40h+80h
jmp check_expression
no_prediction:
test byte [eax+8],1
jz symbol_undefined
mov cx,[current_pass]
sub cx,[eax+16]
jz check_expression
jmp symbol_undefined
symbol_predicted_undefined:
or byte [eax+8],40h
and byte [eax+8],not 80h
symbol_undefined:
xor bl,bl
jmp check_expression
expression_checked:
mov al,bl
jmp logical_value_ok
check_for_used:
lods word [esi]
cmp ah,2
jne invalid_expression
lods dword [esi]
cmp eax,0Fh
jb invalid_use_of_symbol
je reserved_word_used_as_symbol
inc esi
test byte [eax+8],8
jz not_used
mov cx,[current_pass]
sub cx,[eax+18]
jz return_true
cmp cx,1
ja not_used
or byte [eax+8],10h+20h
jmp return_true
not_used:
or byte [eax+8],10h
and byte [eax+8],not 20h
jmp return_false
given_false:
inc esi
return_false:
xor al,al
jmp logical_value_ok
given_true:
inc esi
return_true:
or al,-1
jmp logical_value_ok
logical_expression:
lods byte [esi]
mov dl,[logical_value_wrapping]
push edx
call calculate_embedded_logical_expression
pop edx
mov [logical_value_wrapping],dl
push eax
lods byte [esi]
cmp al,'}'
jne invalid_expression
pop eax
logical_value_ok:
pop ebx
xor al,bl
ret
 
skip_symbol:
lods byte [esi]
or al,al
jz nothing_to_skip
cmp al,0Fh
je nothing_to_skip
cmp al,1
je skip_instruction
cmp al,2
je skip_label
cmp al,3
je skip_label
cmp al,4
je skip_special_label
cmp al,20h
jb skip_assembler_symbol
cmp al,'('
je skip_expression
cmp al,'['
je skip_address
skip_done:
clc
ret
skip_label:
add esi,2
skip_instruction:
add esi,2
skip_assembler_symbol:
inc esi
jmp skip_done
skip_special_label:
add esi,4
jmp skip_done
skip_address:
mov al,[esi]
and al,11110000b
cmp al,60h
jb skip_expression
cmp al,70h
ja skip_expression
inc esi
jmp skip_address
skip_expression:
lods byte [esi]
or al,al
jz skip_string
cmp al,'.'
je skip_fp_value
cmp al,')'
je skip_done
cmp al,']'
je skip_done
cmp al,'!'
je skip_expression
cmp al,0Fh
je skip_expression
cmp al,10h
je skip_register
cmp al,11h
je skip_label_value
cmp al,80h
jae skip_expression
movzx eax,al
add esi,eax
jmp skip_expression
skip_label_value:
add esi,3
skip_register:
inc esi
jmp skip_expression
skip_fp_value:
add esi,12
jmp skip_done
skip_string:
lods dword [esi]
add esi,eax
inc esi
jmp skip_done
nothing_to_skip:
dec esi
stc
ret
 
expand_path:
lods byte [esi]
cmp al,'%'
je environment_variable
stos byte [edi]
or al,al
jnz expand_path
cmp edi,[memory_end]
ja out_of_memory
ret
environment_variable:
mov ebx,esi
find_variable_end:
lods byte [esi]
or al,al
jz not_environment_variable
cmp al,'%'
jne find_variable_end
mov byte [esi-1],0
push esi
mov esi,ebx
call get_environment_variable
pop esi
mov byte [esi-1],'%'
jmp expand_path
not_environment_variable:
mov al,'%'
stos byte [edi]
mov esi,ebx
jmp expand_path
get_include_directory:
lods byte [esi]
cmp al,';'
je include_directory_ok
stos byte [edi]
or al,al
jnz get_include_directory
dec esi
dec edi
include_directory_ok:
cmp byte [edi-1],'/'
je path_separator_ok
cmp byte [edi-1],'\'
je path_separator_ok
mov al,'/'
stos byte [edi]
path_separator_ok:
ret
/programs/develop/fasm/trunk/exprpars.inc
1,1266 → 1,1266
 
; flat assembler core
; Copyright (c) 1999-2012, Tomasz Grysztar.
; All rights reserved.
 
convert_expression:
push ebp
call get_fp_value
jnc fp_expression
mov [current_offset],esp
expression_loop:
push edi
mov edi,single_operand_operators
call get_operator
pop edi
or al,al
jz expression_element
cmp al,82h
je expression_loop
push eax
jmp expression_loop
expression_element:
mov al,[esi]
cmp al,1Ah
je expression_number
cmp al,22h
je expression_number
cmp al,'('
je expression_number
mov al,'!'
stos byte [edi]
jmp expression_operator
expression_number:
call convert_number
expression_operator:
push edi
mov edi,operators
call get_operator
pop edi
or al,al
jz expression_end
operators_loop:
cmp esp,[current_offset]
je push_operator
mov bl,al
and bl,0F0h
mov bh,byte [esp]
and bh,0F0h
cmp bl,bh
ja push_operator
pop ebx
mov byte [edi],bl
inc edi
jmp operators_loop
push_operator:
push eax
jmp expression_loop
expression_end:
cmp esp,[current_offset]
je expression_converted
pop eax
stos byte [edi]
jmp expression_end
expression_converted:
pop ebp
ret
fp_expression:
mov al,'.'
stos byte [edi]
mov eax,[fp_value]
stos dword [edi]
mov eax,[fp_value+4]
stos dword [edi]
mov eax,[fp_value+8]
stos dword [edi]
pop ebp
ret
 
convert_number:
lea eax,[edi-10h]
mov edx,[memory_end]
cmp [source_start],0
je check_memory_for_number
mov edx,[labels_list]
check_memory_for_number:
cmp eax,edx
jae out_of_memory
mov eax,esp
sub eax,100h
jc stack_overflow
cmp eax,[stack_limit]
jb stack_overflow
cmp byte [esi],'('
je expression_value
inc edi
call get_number
jc symbol_value
or ebp,ebp
jz valid_number
mov byte [edi-1],0Fh
ret
valid_number:
cmp dword [edi+4],0
jne qword_number
cmp word [edi+2],0
jne dword_number
cmp byte [edi+1],0
jne word_number
byte_number:
mov byte [edi-1],1
inc edi
ret
qword_number:
mov byte [edi-1],8
add edi,8
ret
dword_number:
mov byte [edi-1],4
scas dword [edi]
ret
word_number:
mov byte [edi-1],2
scas word [edi]
ret
expression_value:
inc esi
push [current_offset]
call convert_expression
pop [current_offset]
lods byte [esi]
cmp al,')'
jne invalid_expression
ret
symbol_value:
cmp [source_start],0
je preprocessor_value
push edi esi
lods word [esi]
cmp al,1Ah
jne no_address_register
movzx ecx,ah
call get_symbol
jc no_address_register
cmp al,10h
jne no_address_register
mov al,ah
shr ah,4
cmp ah,4
je register_value
cmp ah,8
je register_value
cmp ah,0Ch
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
je register_value
cmp al,26h
je register_value
cmp al,27h
je register_value
no_address_register:
pop esi
mov edi,directive_operators
call get_operator
pop edi
or al,al
jnz broken_value
lods byte [esi]
cmp al,1Ah
jne invalid_value
lods byte [esi]
movzx ecx,al
call get_label_id
store_label_value:
mov byte [edi-1],11h
stos dword [edi]
ret
broken_value:
mov eax,0Fh
jmp store_label_value
register_value:
pop edx edi
mov byte [edi-1],10h
stos byte [edi]
ret
preprocessor_value:
dec edi
cmp [hash_tree],0
je invalid_value
lods byte [esi]
cmp al,1Ah
jne invalid_value
lods byte [esi]
mov cl,al
mov ch,10b
call get_preprocessor_symbol
jc invalid_value
push esi
mov esi,[edx+8]
push [current_offset]
call convert_expression
pop [current_offset]
pop esi
ret
 
get_number:
xor ebp,ebp
lods byte [esi]
cmp al,22h
je get_text_number
cmp al,1Ah
jne not_number
lods byte [esi]
movzx ecx,al
mov [number_start],esi
mov al,[esi]
cmp al,'$'
je number_begin
sub al,30h
cmp al,9
ja invalid_number
number_begin:
mov ebx,esi
add esi,ecx
push esi
dec esi
mov dword [edi],0
mov dword [edi+4],0
cmp byte [ebx],'$'
je pascal_hex_number
cmp word [ebx],'0x'
je get_hex_number
mov al,[esi]
dec esi
cmp al,'h'
je get_hex_number
cmp al,'b'
je get_bin_number
cmp al,'d'
je get_dec_number
cmp al,'o'
je get_oct_number
cmp al,'H'
je get_hex_number
cmp al,'B'
je get_bin_number
cmp al,'D'
je get_dec_number
cmp al,'O'
je get_oct_number
inc esi
get_dec_number:
mov ebx,esi
mov esi,[number_start]
get_dec_digit:
cmp esi,ebx
ja number_ok
cmp byte [esi],27h
je next_dec_digit
xor edx,edx
mov eax,[edi]
shld edx,eax,2
shl eax,2
add eax,[edi]
adc edx,0
add eax,eax
adc edx,edx
mov [edi],eax
mov eax,[edi+4]
add eax,eax
jc dec_out_of_range
add eax,eax
jc dec_out_of_range
add eax,[edi+4]
jc dec_out_of_range
add eax,eax
jc dec_out_of_range
add eax,edx
jc dec_out_of_range
mov [edi+4],eax
movzx eax,byte [esi]
sub al,30h
jc bad_number
cmp al,9
ja bad_number
add [edi],eax
adc dword [edi+4],0
jc dec_out_of_range
next_dec_digit:
inc esi
jmp get_dec_digit
dec_out_of_range:
cmp esi,ebx
ja dec_out_of_range_finished
lods byte [esi]
cmp al,27h
je bad_number
sub al,30h
jc bad_number
cmp al,9
ja bad_number
jmp dec_out_of_range
dec_out_of_range_finished:
or ebp,-1
jmp number_ok
bad_number:
pop eax
invalid_number:
mov esi,[number_start]
dec esi
not_number:
dec esi
stc
ret
get_bin_number:
xor bl,bl
get_bin_digit:
cmp esi,[number_start]
jb number_ok
movzx eax,byte [esi]
cmp al,27h
je bin_digit_skip
sub al,30h
cmp al,1
ja bad_number
xor edx,edx
mov cl,bl
dec esi
cmp bl,64
je bin_out_of_range
inc bl
cmp cl,32
jae bin_digit_high
shl eax,cl
or dword [edi],eax
jmp get_bin_digit
bin_digit_high:
sub cl,32
shl eax,cl
or dword [edi+4],eax
jmp get_bin_digit
bin_out_of_range:
or al,al
jz get_bin_digit
or ebp,-1
jmp get_bin_digit
bin_digit_skip:
dec esi
jmp get_bin_digit
pascal_hex_number:
cmp cl,1
je bad_number
get_hex_number:
xor bl,bl
get_hex_digit:
cmp esi,[number_start]
jb number_ok
movzx eax,byte [esi]
cmp al,27h
je hex_digit_skip
cmp al,'x'
je hex_number_ok
cmp al,'$'
je pascal_hex_ok
sub al,30h
cmp al,9
jbe hex_digit_ok
sub al,7
cmp al,15
jbe hex_letter_digit_ok
sub al,20h
cmp al,15
ja bad_number
hex_letter_digit_ok:
cmp al,10
jb bad_number
hex_digit_ok:
xor edx,edx
mov cl,bl
dec esi
cmp bl,64
je hex_out_of_range
add bl,4
cmp cl,32
jae hex_digit_high
shl eax,cl
or dword [edi],eax
jmp get_hex_digit
hex_digit_high:
sub cl,32
shl eax,cl
or dword [edi+4],eax
jmp get_hex_digit
hex_out_of_range:
or al,al
jz get_hex_digit
or ebp,-1
jmp get_hex_digit
hex_digit_skip:
dec esi
jmp get_hex_digit
get_oct_number:
xor bl,bl
get_oct_digit:
cmp esi,[number_start]
jb number_ok
movzx eax,byte [esi]
cmp al,27h
je oct_digit_skip
sub al,30h
cmp al,7
ja bad_number
oct_digit_ok:
xor edx,edx
mov cl,bl
dec esi
cmp bl,63
ja oct_out_of_range
jne oct_range_ok
cmp al,1
ja oct_out_of_range
oct_range_ok:
add bl,3
cmp cl,30
je oct_digit_wrap
ja oct_digit_high
shl eax,cl
or dword [edi],eax
jmp get_oct_digit
oct_digit_wrap:
shl eax,cl
adc dword [edi+4],0
or dword [edi],eax
jmp get_oct_digit
oct_digit_high:
sub cl,32
shl eax,cl
or dword [edi+4],eax
jmp get_oct_digit
oct_digit_skip:
dec esi
jmp get_oct_digit
oct_out_of_range:
or al,al
jz get_oct_digit
or ebp,-1
jmp get_oct_digit
hex_number_ok:
dec esi
pascal_hex_ok:
cmp esi,[number_start]
jne bad_number
number_ok:
pop esi
number_done:
clc
ret
get_text_number:
lods dword [esi]
mov edx,eax
xor bl,bl
mov dword [edi],0
mov dword [edi+4],0
get_text_character:
sub edx,1
jc number_done
movzx eax,byte [esi]
inc esi
mov cl,bl
cmp bl,64
je text_out_of_range
add bl,8
cmp cl,32
jae text_character_high
shl eax,cl
or dword [edi],eax
jmp get_text_character
text_character_high:
sub cl,32
shl eax,cl
or dword [edi+4],eax
jmp get_text_character
text_out_of_range:
or ebp,-1
jmp get_text_character
 
get_fp_value:
push edi esi
lods byte [esi]
cmp al,1Ah
je fp_value_start
cmp al,'-'
je fp_sign_ok
cmp al,'+'
jne not_fp_value
fp_sign_ok:
lods byte [esi]
cmp al,1Ah
jne not_fp_value
fp_value_start:
lods byte [esi]
movzx ecx,al
cmp cl,1
jbe not_fp_value
lea edx,[esi+1]
xor ah,ah
check_fp_value:
lods byte [esi]
cmp al,'.'
je fp_character_dot
cmp al,'E'
je fp_character_exp
cmp al,'e'
je fp_character_exp
cmp al,'F'
je fp_last_character
cmp al,'f'
je fp_last_character
digit_expected:
cmp al,'0'
jb not_fp_value
cmp al,'9'
ja not_fp_value
jmp fp_character_ok
fp_character_dot:
cmp esi,edx
je not_fp_value
or ah,ah
jnz not_fp_value
or ah,1
lods byte [esi]
loop digit_expected
not_fp_value:
pop esi edi
stc
ret
fp_last_character:
cmp cl,1
jne not_fp_value
or ah,4
jmp fp_character_ok
fp_character_exp:
cmp esi,edx
je not_fp_value
cmp ah,1
ja not_fp_value
or ah,2
cmp ecx,1
jne fp_character_ok
cmp byte [esi],'+'
je fp_exp_sign
cmp byte [esi],'-'
jne fp_character_ok
fp_exp_sign:
inc esi
cmp byte [esi],1Ah
jne not_fp_value
inc esi
lods byte [esi]
movzx ecx,al
inc ecx
fp_character_ok:
dec ecx
jnz check_fp_value
or ah,ah
jz not_fp_value
pop esi
lods byte [esi]
mov [fp_sign],0
cmp al,1Ah
je fp_get
inc esi
cmp al,'+'
je fp_get
mov [fp_sign],1
fp_get:
lods byte [esi]
movzx ecx,al
xor edx,edx
mov edi,fp_value
mov [edi],edx
mov [edi+4],edx
mov [edi+12],edx
call fp_optimize
mov [fp_format],0
mov al,[esi]
fp_before_dot:
lods byte [esi]
cmp al,'.'
je fp_dot
cmp al,'E'
je fp_exponent
cmp al,'e'
je fp_exponent
cmp al,'F'
je fp_done
cmp al,'f'
je fp_done
sub al,30h
mov edi,fp_value+16
xor edx,edx
mov dword [edi+12],edx
mov dword [edi],edx
mov dword [edi+4],edx
mov [edi+7],al
mov dl,7
mov dword [edi+8],edx
call fp_optimize
mov edi,fp_value
push ecx
mov ecx,10
call fp_mul
pop ecx
mov ebx,fp_value+16
call fp_add
loop fp_before_dot
fp_dot:
mov edi,fp_value+16
xor edx,edx
mov [edi],edx
mov [edi+4],edx
mov byte [edi+7],80h
mov [edi+8],edx
mov dword [edi+12],edx
dec ecx
jz fp_done
fp_after_dot:
lods byte [esi]
cmp al,'E'
je fp_exponent
cmp al,'e'
je fp_exponent
cmp al,'F'
je fp_done
cmp al,'f'
je fp_done
inc [fp_format]
cmp [fp_format],80h
jne fp_counter_ok
mov [fp_format],7Fh
fp_counter_ok:
dec esi
mov edi,fp_value+16
push ecx
mov ecx,10
call fp_div
push dword [edi]
push dword [edi+4]
push dword [edi+8]
push dword [edi+12]
lods byte [esi]
sub al,30h
movzx ecx,al
call fp_mul
mov ebx,edi
mov edi,fp_value
call fp_add
mov edi,fp_value+16
pop dword [edi+12]
pop dword [edi+8]
pop dword [edi+4]
pop dword [edi]
pop ecx
dec ecx
jnz fp_after_dot
jmp fp_done
fp_exponent:
or [fp_format],80h
xor edx,edx
xor ebp,ebp
dec ecx
jnz get_exponent
cmp byte [esi],'+'
je fp_exponent_sign
cmp byte [esi],'-'
jne fp_done
not ebp
fp_exponent_sign:
add esi,2
lods byte [esi]
movzx ecx,al
get_exponent:
movzx eax,byte [esi]
inc esi
sub al,30h
cmp al,10
jae exponent_ok
imul edx,10
cmp edx,8000h
jae value_out_of_range
add edx,eax
loop get_exponent
exponent_ok:
mov edi,fp_value
or edx,edx
jz fp_done
mov ecx,edx
or ebp,ebp
jnz fp_negative_power
fp_power:
push ecx
mov ecx,10
call fp_mul
pop ecx
loop fp_power
jmp fp_done
fp_negative_power:
push ecx
mov ecx,10
call fp_div
pop ecx
loop fp_negative_power
fp_done:
mov edi,fp_value
mov al,[fp_format]
mov [edi+10],al
mov al,[fp_sign]
mov [edi+11],al
test byte [edi+15],80h
jz fp_ok
add dword [edi],1
adc dword [edi+4],0
jnc fp_ok
mov eax,[edi+4]
shrd [edi],eax,1
shr eax,1
or eax,80000000h
mov [edi+4],eax
inc word [edi+8]
fp_ok:
pop edi
clc
ret
fp_mul:
or ecx,ecx
jz fp_zero
mov eax,[edi+12]
mul ecx
mov [edi+12],eax
mov ebx,edx
mov eax,[edi]
mul ecx
add eax,ebx
adc edx,0
mov [edi],eax
mov ebx,edx
mov eax,[edi+4]
mul ecx
add eax,ebx
adc edx,0
mov [edi+4],eax
.loop:
or edx,edx
jz .done
mov eax,[edi]
shrd [edi+12],eax,1
mov eax,[edi+4]
shrd [edi],eax,1
shrd eax,edx,1
mov [edi+4],eax
shr edx,1
inc dword [edi+8]
cmp dword [edi+8],8000h
jge value_out_of_range
jmp .loop
.done:
ret
fp_div:
mov eax,[edi+4]
xor edx,edx
div ecx
mov [edi+4],eax
mov eax,[edi]
div ecx
mov [edi],eax
mov eax,[edi+12]
div ecx
mov [edi+12],eax
mov ebx,eax
or ebx,[edi]
or ebx,[edi+4]
jz fp_zero
.loop:
test byte [edi+7],80h
jnz .exp_ok
mov eax,[edi]
shld [edi+4],eax,1
mov eax,[edi+12]
shld [edi],eax,1
add eax,eax
mov [edi+12],eax
dec dword [edi+8]
add edx,edx
jmp .loop
.exp_ok:
mov eax,edx
xor edx,edx
div ecx
add [edi+12],eax
adc dword [edi],0
adc dword [edi+4],0
jnc .done
mov eax,[edi+4]
mov ebx,[edi]
shrd [edi],eax,1
shrd [edi+12],ebx,1
shr eax,1
or eax,80000000h
mov [edi+4],eax
inc dword [edi+8]
.done:
ret
fp_add:
cmp dword [ebx+8],8000h
je .done
cmp dword [edi+8],8000h
je .copy
mov eax,[ebx+8]
cmp eax,[edi+8]
jge .exp_ok
mov eax,[edi+8]
.exp_ok:
call .change_exp
xchg ebx,edi
call .change_exp
xchg ebx,edi
mov edx,[ebx+12]
mov eax,[ebx]
mov ebx,[ebx+4]
add [edi+12],edx
adc [edi],eax
adc [edi+4],ebx
jnc .done
mov eax,[edi]
shrd [edi+12],eax,1
mov eax,[edi+4]
shrd [edi],eax,1
shr eax,1
or eax,80000000h
mov [edi+4],eax
inc dword [edi+8]
.done:
ret
.copy:
mov eax,[ebx]
mov [edi],eax
mov eax,[ebx+4]
mov [edi+4],eax
mov eax,[ebx+8]
mov [edi+8],eax
mov eax,[ebx+12]
mov [edi+12],eax
ret
.change_exp:
push ecx
mov ecx,eax
sub ecx,[ebx+8]
mov edx,[ebx+4]
jecxz .exp_done
.exp_loop:
mov ebp,[ebx]
shrd [ebx+12],ebp,1
shrd [ebx],edx,1
shr edx,1
inc dword [ebx+8]
loop .exp_loop
.exp_done:
mov [ebx+4],edx
pop ecx
ret
fp_optimize:
mov eax,[edi]
mov ebp,[edi+4]
or ebp,[edi]
or ebp,[edi+12]
jz fp_zero
.loop:
test byte [edi+7],80h
jnz .done
shld [edi+4],eax,1
mov ebp,[edi+12]
shld eax,ebp,1
mov [edi],eax
shl dword [edi+12],1
dec dword [edi+8]
jmp .loop
.done:
ret
fp_zero:
mov dword [edi+8],8000h
ret
 
preevaluate_logical_expression:
xor al,al
preevaluate_embedded_logical_expression:
mov [logical_value_wrapping],al
push edi
call preevaluate_logical_value
preevaluation_loop:
cmp al,0FFh
je invalid_logical_expression
mov dl,[esi]
inc esi
cmp dl,'|'
je preevaluate_or
cmp dl,'&'
je preevaluate_and
cmp dl,'}'
je preevaluation_done
or dl,dl
jnz invalid_logical_expression
preevaluation_done:
pop edx
dec esi
ret
preevaluate_or:
cmp al,'1'
je quick_true
cmp al,'0'
je leave_only_following
push edi
mov al,dl
stos byte [edi]
call preevaluate_logical_value
pop ebx
cmp al,'0'
je leave_only_preceding
cmp al,'1'
jne preevaluation_loop
stos byte [edi]
xor al,al
jmp preevaluation_loop
preevaluate_and:
cmp al,'0'
je quick_false
cmp al,'1'
je leave_only_following
push edi
mov al,dl
stos byte [edi]
call preevaluate_logical_value
pop ebx
cmp al,'1'
je leave_only_preceding
cmp al,'0'
jne preevaluation_loop
stos byte [edi]
xor al,al
jmp preevaluation_loop
leave_only_following:
mov edi,[esp]
call preevaluate_logical_value
jmp preevaluation_loop
leave_only_preceding:
mov edi,ebx
xor al,al
jmp preevaluation_loop
quick_true:
call skip_logical_value
jc invalid_logical_expression
mov edi,[esp]
mov al,'1'
jmp preevaluation_loop
quick_false:
call skip_logical_value
jc invalid_logical_expression
mov edi,[esp]
mov al,'0'
jmp preevaluation_loop
invalid_logical_expression:
pop edi
mov esi,edi
mov al,0FFh
stos byte [edi]
ret
skip_logical_value:
cmp byte [esi],'~'
jne negation_skipped
inc esi
jmp skip_logical_value
negation_skipped:
mov al,[esi]
cmp al,'{'
jne skip_simple_logical_value
inc esi
xchg al,[logical_value_wrapping]
push eax
skip_logical_expression:
call skip_logical_value
lods byte [esi]
or al,al
jz wrongly_structured_logical_expression
cmp al,0Fh
je wrongly_structured_logical_expression
cmp al,'|'
je skip_logical_expression
cmp al,'&'
je skip_logical_expression
cmp al,'}'
jne wrongly_structured_logical_expression
pop eax
mov [logical_value_wrapping],al
logical_value_skipped:
clc
ret
wrongly_structured_logical_expression:
pop eax
stc
ret
skip_simple_logical_value:
mov [logical_value_parentheses],0
find_simple_logical_value_end:
mov al,[esi]
or al,al
jz logical_value_skipped
cmp al,0Fh
je logical_value_skipped
cmp al,'|'
je logical_value_skipped
cmp al,'&'
je logical_value_skipped
cmp al,'{'
je skip_logical_value_internal_parenthesis
cmp al,'}'
jne skip_logical_value_symbol
sub [logical_value_parentheses],1
jnc skip_logical_value_symbol
cmp [logical_value_wrapping],'{'
jne skip_logical_value_symbol
jmp logical_value_skipped
skip_logical_value_internal_parenthesis:
inc [logical_value_parentheses]
skip_logical_value_symbol:
call skip_symbol
jmp find_simple_logical_value_end
preevaluate_logical_value:
mov ebp,edi
preevaluate_negation:
cmp byte [esi],'~'
jne preevaluate_negation_ok
movs byte [edi],[esi]
jmp preevaluate_negation
preevaluate_negation_ok:
mov ebx,esi
cmp byte [esi],'{'
jne preevaluate_simple_logical_value
lods byte [esi]
stos byte [edi]
push ebp
mov dl,[logical_value_wrapping]
push edx
call preevaluate_embedded_logical_expression
pop edx
mov [logical_value_wrapping],dl
pop ebp
cmp al,0FFh
je invalid_logical_value
cmp byte [esi],'}'
jne invalid_logical_value
or al,al
jnz preevaluated_expression_value
movs byte [edi],[esi]
ret
preevaluated_expression_value:
inc esi
lea edx,[edi-1]
sub edx,ebp
test edx,1
jz expression_negation_ok
xor al,1
expression_negation_ok:
mov edi,ebp
ret
invalid_logical_value:
mov edi,ebp
mov al,0FFh
ret
preevaluate_simple_logical_value:
xor edx,edx
mov [logical_value_parentheses],edx
find_logical_value_boundaries:
mov al,[esi]
or al,al
jz logical_value_boundaries_found
cmp al,'{'
je logical_value_internal_parentheses
cmp al,'}'
je logical_value_boundaries_parenthesis_close
cmp al,'|'
je logical_value_boundaries_found
cmp al,'&'
je logical_value_boundaries_found
or edx,edx
jnz next_symbol_in_logical_value
cmp al,0F0h
je preevaluable_logical_operator
cmp al,0F7h
je preevaluable_logical_operator
cmp al,0F6h
jne next_symbol_in_logical_value
preevaluable_logical_operator:
mov edx,esi
next_symbol_in_logical_value:
call skip_symbol
jmp find_logical_value_boundaries
logical_value_internal_parentheses:
inc [logical_value_parentheses]
jmp next_symbol_in_logical_value
logical_value_boundaries_parenthesis_close:
sub [logical_value_parentheses],1
jnc next_symbol_in_logical_value
cmp [logical_value_wrapping],'{'
jne next_symbol_in_logical_value
logical_value_boundaries_found:
or edx,edx
jz non_preevaluable_logical_value
mov al,[edx]
cmp al,0F0h
je compare_symbols
cmp al,0F7h
je compare_symbol_types
cmp al,0F6h
je scan_symbols_list
non_preevaluable_logical_value:
mov ecx,esi
mov esi,ebx
sub ecx,esi
jz invalid_logical_value
cmp esi,edi
je leave_logical_value_intact
rep movs byte [edi],[esi]
xor al,al
ret
leave_logical_value_intact:
add edi,ecx
add esi,ecx
xor al,al
ret
compare_symbols:
lea ecx,[esi-1]
sub ecx,edx
mov eax,edx
sub eax,ebx
cmp ecx,eax
jne preevaluated_false
push esi edi
mov esi,ebx
lea edi,[edx+1]
repe cmps byte [esi],[edi]
pop edi esi
je preevaluated_true
preevaluated_false:
mov eax,edi
sub eax,ebp
test eax,1
jnz store_true
store_false:
mov edi,ebp
mov al,'0'
ret
preevaluated_true:
mov eax,edi
sub eax,ebp
test eax,1
jnz store_false
store_true:
mov edi,ebp
mov al,'1'
ret
compare_symbol_types:
push esi
lea esi,[edx+1]
type_comparison:
cmp esi,[esp]
je types_compared
mov al,[esi]
cmp al,[ebx]
jne different_type
cmp al,'('
jne equal_type
mov al,[esi+1]
mov ah,[ebx+1]
cmp al,ah
je equal_type
or al,al
jz different_type
or ah,ah
jz different_type
cmp al,'.'
je different_type
cmp ah,'.'
je different_type
equal_type:
call skip_symbol
xchg esi,ebx
call skip_symbol
xchg esi,ebx
jmp type_comparison
types_compared:
pop esi
cmp byte [ebx],0F7h
jne preevaluated_false
jmp preevaluated_true
different_type:
pop esi
jmp preevaluated_false
scan_symbols_list:
push edi esi
lea esi,[edx+1]
sub edx,ebx
lods byte [esi]
cmp al,'<'
jne invalid_symbols_list
get_next_from_list:
mov edi,esi
get_from_list:
cmp byte [esi],','
je compare_in_list
cmp byte [esi],'>'
je compare_in_list
cmp esi,[esp]
jae invalid_symbols_list
call skip_symbol
jmp get_from_list
compare_in_list:
mov ecx,esi
sub ecx,edi
cmp ecx,edx
jne not_equal_length_in_list
mov esi,ebx
repe cmps byte [esi],[edi]
mov esi,edi
jne not_equal_in_list
skip_rest_of_list:
cmp byte [esi],'>'
je check_list_end
cmp esi,[esp]
jae invalid_symbols_list
call skip_symbol
jmp skip_rest_of_list
check_list_end:
inc esi
cmp esi,[esp]
jne invalid_symbols_list
pop esi edi
jmp preevaluated_true
not_equal_in_list:
add esi,ecx
not_equal_length_in_list:
lods byte [esi]
cmp al,','
je get_next_from_list
cmp esi,[esp]
jne invalid_symbols_list
pop esi edi
jmp preevaluated_false
invalid_symbols_list:
pop esi edi
jmp invalid_logical_value
 
; flat assembler core
; Copyright (c) 1999-2013, Tomasz Grysztar.
; All rights reserved.
 
convert_expression:
push ebp
call get_fp_value
jnc fp_expression
mov [current_offset],esp
expression_loop:
push edi
mov edi,single_operand_operators
call get_operator
pop edi
or al,al
jz expression_element
cmp al,82h
je expression_loop
push eax
jmp expression_loop
expression_element:
mov al,[esi]
cmp al,1Ah
je expression_number
cmp al,22h
je expression_number
cmp al,'('
je expression_number
mov al,'!'
stos byte [edi]
jmp expression_operator
expression_number:
call convert_number
expression_operator:
push edi
mov edi,operators
call get_operator
pop edi
or al,al
jz expression_end
operators_loop:
cmp esp,[current_offset]
je push_operator
mov bl,al
and bl,0F0h
mov bh,byte [esp]
and bh,0F0h
cmp bl,bh
ja push_operator
pop ebx
mov byte [edi],bl
inc edi
jmp operators_loop
push_operator:
push eax
jmp expression_loop
expression_end:
cmp esp,[current_offset]
je expression_converted
pop eax
stos byte [edi]
jmp expression_end
expression_converted:
pop ebp
ret
fp_expression:
mov al,'.'
stos byte [edi]
mov eax,[fp_value]
stos dword [edi]
mov eax,[fp_value+4]
stos dword [edi]
mov eax,[fp_value+8]
stos dword [edi]
pop ebp
ret
 
convert_number:
lea eax,[edi-10h]
mov edx,[memory_end]
cmp [source_start],0
je check_memory_for_number
mov edx,[labels_list]
check_memory_for_number:
cmp eax,edx
jae out_of_memory
mov eax,esp
sub eax,100h
jc stack_overflow
cmp eax,[stack_limit]
jb stack_overflow
cmp byte [esi],'('
je expression_value
inc edi
call get_number
jc symbol_value
or ebp,ebp
jz valid_number
mov byte [edi-1],0Fh
ret
valid_number:
cmp dword [edi+4],0
jne qword_number
cmp word [edi+2],0
jne dword_number
cmp byte [edi+1],0
jne word_number
byte_number:
mov byte [edi-1],1
inc edi
ret
qword_number:
mov byte [edi-1],8
add edi,8
ret
dword_number:
mov byte [edi-1],4
scas dword [edi]
ret
word_number:
mov byte [edi-1],2
scas word [edi]
ret
expression_value:
inc esi
push [current_offset]
call convert_expression
pop [current_offset]
lods byte [esi]
cmp al,')'
jne invalid_expression
ret
symbol_value:
cmp [source_start],0
je preprocessor_value
push edi esi
lods word [esi]
cmp al,1Ah
jne no_address_register
movzx ecx,ah
call get_symbol
jc no_address_register
cmp al,10h
jne no_address_register
mov al,ah
shr ah,4
cmp ah,4
je register_value
cmp ah,8
je register_value
cmp ah,0Ch
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
je register_value
cmp al,26h
je register_value
cmp al,27h
je register_value
no_address_register:
pop esi
mov edi,directive_operators
call get_operator
pop edi
or al,al
jnz broken_value
lods byte [esi]
cmp al,1Ah
jne invalid_value
lods byte [esi]
movzx ecx,al
call get_label_id
store_label_value:
mov byte [edi-1],11h
stos dword [edi]
ret
broken_value:
mov eax,0Fh
jmp store_label_value
register_value:
pop edx edi
mov byte [edi-1],10h
stos byte [edi]
ret
preprocessor_value:
dec edi
cmp [hash_tree],0
je invalid_value
lods byte [esi]
cmp al,1Ah
jne invalid_value
lods byte [esi]
mov cl,al
mov ch,10b
call get_preprocessor_symbol
jc invalid_value
push esi
mov esi,[edx+8]
push [current_offset]
call convert_expression
pop [current_offset]
pop esi
ret
 
get_number:
xor ebp,ebp
lods byte [esi]
cmp al,22h
je get_text_number
cmp al,1Ah
jne not_number
lods byte [esi]
movzx ecx,al
mov [number_start],esi
mov al,[esi]
cmp al,'$'
je number_begin
sub al,30h
cmp al,9
ja invalid_number
number_begin:
mov ebx,esi
add esi,ecx
push esi
dec esi
mov dword [edi],0
mov dword [edi+4],0
cmp byte [ebx],'$'
je pascal_hex_number
cmp word [ebx],'0x'
je get_hex_number
mov al,[esi]
dec esi
cmp al,'h'
je get_hex_number
cmp al,'b'
je get_bin_number
cmp al,'d'
je get_dec_number
cmp al,'o'
je get_oct_number
cmp al,'H'
je get_hex_number
cmp al,'B'
je get_bin_number
cmp al,'D'
je get_dec_number
cmp al,'O'
je get_oct_number
inc esi
get_dec_number:
mov ebx,esi
mov esi,[number_start]
get_dec_digit:
cmp esi,ebx
ja number_ok
cmp byte [esi],27h
je next_dec_digit
xor edx,edx
mov eax,[edi]
shld edx,eax,2
shl eax,2
add eax,[edi]
adc edx,0
add eax,eax
adc edx,edx
mov [edi],eax
mov eax,[edi+4]
add eax,eax
jc dec_out_of_range
add eax,eax
jc dec_out_of_range
add eax,[edi+4]
jc dec_out_of_range
add eax,eax
jc dec_out_of_range
add eax,edx
jc dec_out_of_range
mov [edi+4],eax
movzx eax,byte [esi]
sub al,30h
jc bad_number
cmp al,9
ja bad_number
add [edi],eax
adc dword [edi+4],0
jc dec_out_of_range
next_dec_digit:
inc esi
jmp get_dec_digit
dec_out_of_range:
cmp esi,ebx
ja dec_out_of_range_finished
lods byte [esi]
cmp al,27h
je bad_number
sub al,30h
jc bad_number
cmp al,9
ja bad_number
jmp dec_out_of_range
dec_out_of_range_finished:
or ebp,-1
jmp number_ok
bad_number:
pop eax
invalid_number:
mov esi,[number_start]
dec esi
not_number:
dec esi
stc
ret
get_bin_number:
xor bl,bl
get_bin_digit:
cmp esi,[number_start]
jb number_ok
movzx eax,byte [esi]
cmp al,27h
je bin_digit_skip
sub al,30h
cmp al,1
ja bad_number
xor edx,edx
mov cl,bl
dec esi
cmp bl,64
je bin_out_of_range
inc bl
cmp cl,32
jae bin_digit_high
shl eax,cl
or dword [edi],eax
jmp get_bin_digit
bin_digit_high:
sub cl,32
shl eax,cl
or dword [edi+4],eax
jmp get_bin_digit
bin_out_of_range:
or al,al
jz get_bin_digit
or ebp,-1
jmp get_bin_digit
bin_digit_skip:
dec esi
jmp get_bin_digit
pascal_hex_number:
cmp cl,1
je bad_number
get_hex_number:
xor bl,bl
get_hex_digit:
cmp esi,[number_start]
jb number_ok
movzx eax,byte [esi]
cmp al,27h
je hex_digit_skip
cmp al,'x'
je hex_number_ok
cmp al,'$'
je pascal_hex_ok
sub al,30h
cmp al,9
jbe hex_digit_ok
sub al,7
cmp al,15
jbe hex_letter_digit_ok
sub al,20h
cmp al,15
ja bad_number
hex_letter_digit_ok:
cmp al,10
jb bad_number
hex_digit_ok:
xor edx,edx
mov cl,bl
dec esi
cmp bl,64
je hex_out_of_range
add bl,4
cmp cl,32
jae hex_digit_high
shl eax,cl
or dword [edi],eax
jmp get_hex_digit
hex_digit_high:
sub cl,32
shl eax,cl
or dword [edi+4],eax
jmp get_hex_digit
hex_out_of_range:
or al,al
jz get_hex_digit
or ebp,-1
jmp get_hex_digit
hex_digit_skip:
dec esi
jmp get_hex_digit
get_oct_number:
xor bl,bl
get_oct_digit:
cmp esi,[number_start]
jb number_ok
movzx eax,byte [esi]
cmp al,27h
je oct_digit_skip
sub al,30h
cmp al,7
ja bad_number
oct_digit_ok:
xor edx,edx
mov cl,bl
dec esi
cmp bl,63
ja oct_out_of_range
jne oct_range_ok
cmp al,1
ja oct_out_of_range
oct_range_ok:
add bl,3
cmp cl,30
je oct_digit_wrap
ja oct_digit_high
shl eax,cl
or dword [edi],eax
jmp get_oct_digit
oct_digit_wrap:
shl eax,cl
adc dword [edi+4],0
or dword [edi],eax
jmp get_oct_digit
oct_digit_high:
sub cl,32
shl eax,cl
or dword [edi+4],eax
jmp get_oct_digit
oct_digit_skip:
dec esi
jmp get_oct_digit
oct_out_of_range:
or al,al
jz get_oct_digit
or ebp,-1
jmp get_oct_digit
hex_number_ok:
dec esi
pascal_hex_ok:
cmp esi,[number_start]
jne bad_number
number_ok:
pop esi
number_done:
clc
ret
get_text_number:
lods dword [esi]
mov edx,eax
xor bl,bl
mov dword [edi],0
mov dword [edi+4],0
get_text_character:
sub edx,1
jc number_done
movzx eax,byte [esi]
inc esi
mov cl,bl
cmp bl,64
je text_out_of_range
add bl,8
cmp cl,32
jae text_character_high
shl eax,cl
or dword [edi],eax
jmp get_text_character
text_character_high:
sub cl,32
shl eax,cl
or dword [edi+4],eax
jmp get_text_character
text_out_of_range:
or ebp,-1
jmp get_text_character
 
get_fp_value:
push edi esi
lods byte [esi]
cmp al,1Ah
je fp_value_start
cmp al,'-'
je fp_sign_ok
cmp al,'+'
jne not_fp_value
fp_sign_ok:
lods byte [esi]
cmp al,1Ah
jne not_fp_value
fp_value_start:
lods byte [esi]
movzx ecx,al
cmp cl,1
jbe not_fp_value
lea edx,[esi+1]
xor ah,ah
check_fp_value:
lods byte [esi]
cmp al,'.'
je fp_character_dot
cmp al,'E'
je fp_character_exp
cmp al,'e'
je fp_character_exp
cmp al,'F'
je fp_last_character
cmp al,'f'
je fp_last_character
digit_expected:
cmp al,'0'
jb not_fp_value
cmp al,'9'
ja not_fp_value
jmp fp_character_ok
fp_character_dot:
cmp esi,edx
je not_fp_value
or ah,ah
jnz not_fp_value
or ah,1
lods byte [esi]
loop digit_expected
not_fp_value:
pop esi edi
stc
ret
fp_last_character:
cmp cl,1
jne not_fp_value
or ah,4
jmp fp_character_ok
fp_character_exp:
cmp esi,edx
je not_fp_value
cmp ah,1
ja not_fp_value
or ah,2
cmp ecx,1
jne fp_character_ok
cmp byte [esi],'+'
je fp_exp_sign
cmp byte [esi],'-'
jne fp_character_ok
fp_exp_sign:
inc esi
cmp byte [esi],1Ah
jne not_fp_value
inc esi
lods byte [esi]
movzx ecx,al
inc ecx
fp_character_ok:
dec ecx
jnz check_fp_value
or ah,ah
jz not_fp_value
pop esi
lods byte [esi]
mov [fp_sign],0
cmp al,1Ah
je fp_get
inc esi
cmp al,'+'
je fp_get
mov [fp_sign],1
fp_get:
lods byte [esi]
movzx ecx,al
xor edx,edx
mov edi,fp_value
mov [edi],edx
mov [edi+4],edx
mov [edi+12],edx
call fp_optimize
mov [fp_format],0
mov al,[esi]
fp_before_dot:
lods byte [esi]
cmp al,'.'
je fp_dot
cmp al,'E'
je fp_exponent
cmp al,'e'
je fp_exponent
cmp al,'F'
je fp_done
cmp al,'f'
je fp_done
sub al,30h
mov edi,fp_value+16
xor edx,edx
mov dword [edi+12],edx
mov dword [edi],edx
mov dword [edi+4],edx
mov [edi+7],al
mov dl,7
mov dword [edi+8],edx
call fp_optimize
mov edi,fp_value
push ecx
mov ecx,10
call fp_mul
pop ecx
mov ebx,fp_value+16
call fp_add
loop fp_before_dot
fp_dot:
mov edi,fp_value+16
xor edx,edx
mov [edi],edx
mov [edi+4],edx
mov byte [edi+7],80h
mov [edi+8],edx
mov dword [edi+12],edx
dec ecx
jz fp_done
fp_after_dot:
lods byte [esi]
cmp al,'E'
je fp_exponent
cmp al,'e'
je fp_exponent
cmp al,'F'
je fp_done
cmp al,'f'
je fp_done
inc [fp_format]
cmp [fp_format],80h
jne fp_counter_ok
mov [fp_format],7Fh
fp_counter_ok:
dec esi
mov edi,fp_value+16
push ecx
mov ecx,10
call fp_div
push dword [edi]
push dword [edi+4]
push dword [edi+8]
push dword [edi+12]
lods byte [esi]
sub al,30h
movzx ecx,al
call fp_mul
mov ebx,edi
mov edi,fp_value
call fp_add
mov edi,fp_value+16
pop dword [edi+12]
pop dword [edi+8]
pop dword [edi+4]
pop dword [edi]
pop ecx
dec ecx
jnz fp_after_dot
jmp fp_done
fp_exponent:
or [fp_format],80h
xor edx,edx
xor ebp,ebp
dec ecx
jnz get_exponent
cmp byte [esi],'+'
je fp_exponent_sign
cmp byte [esi],'-'
jne fp_done
not ebp
fp_exponent_sign:
add esi,2
lods byte [esi]
movzx ecx,al
get_exponent:
movzx eax,byte [esi]
inc esi
sub al,30h
cmp al,10
jae exponent_ok
imul edx,10
cmp edx,8000h
jae value_out_of_range
add edx,eax
loop get_exponent
exponent_ok:
mov edi,fp_value
or edx,edx
jz fp_done
mov ecx,edx
or ebp,ebp
jnz fp_negative_power
fp_power:
push ecx
mov ecx,10
call fp_mul
pop ecx
loop fp_power
jmp fp_done
fp_negative_power:
push ecx
mov ecx,10
call fp_div
pop ecx
loop fp_negative_power
fp_done:
mov edi,fp_value
mov al,[fp_format]
mov [edi+10],al
mov al,[fp_sign]
mov [edi+11],al
test byte [edi+15],80h
jz fp_ok
add dword [edi],1
adc dword [edi+4],0
jnc fp_ok
mov eax,[edi+4]
shrd [edi],eax,1
shr eax,1
or eax,80000000h
mov [edi+4],eax
inc word [edi+8]
fp_ok:
pop edi
clc
ret
fp_mul:
or ecx,ecx
jz fp_zero
mov eax,[edi+12]
mul ecx
mov [edi+12],eax
mov ebx,edx
mov eax,[edi]
mul ecx
add eax,ebx
adc edx,0
mov [edi],eax
mov ebx,edx
mov eax,[edi+4]
mul ecx
add eax,ebx
adc edx,0
mov [edi+4],eax
.loop:
or edx,edx
jz .done
mov eax,[edi]
shrd [edi+12],eax,1
mov eax,[edi+4]
shrd [edi],eax,1
shrd eax,edx,1
mov [edi+4],eax
shr edx,1
inc dword [edi+8]
cmp dword [edi+8],8000h
jge value_out_of_range
jmp .loop
.done:
ret
fp_div:
mov eax,[edi+4]
xor edx,edx
div ecx
mov [edi+4],eax
mov eax,[edi]
div ecx
mov [edi],eax
mov eax,[edi+12]
div ecx
mov [edi+12],eax
mov ebx,eax
or ebx,[edi]
or ebx,[edi+4]
jz fp_zero
.loop:
test byte [edi+7],80h
jnz .exp_ok
mov eax,[edi]
shld [edi+4],eax,1
mov eax,[edi+12]
shld [edi],eax,1
add eax,eax
mov [edi+12],eax
dec dword [edi+8]
add edx,edx
jmp .loop
.exp_ok:
mov eax,edx
xor edx,edx
div ecx
add [edi+12],eax
adc dword [edi],0
adc dword [edi+4],0
jnc .done
mov eax,[edi+4]
mov ebx,[edi]
shrd [edi],eax,1
shrd [edi+12],ebx,1
shr eax,1
or eax,80000000h
mov [edi+4],eax
inc dword [edi+8]
.done:
ret
fp_add:
cmp dword [ebx+8],8000h
je .done
cmp dword [edi+8],8000h
je .copy
mov eax,[ebx+8]
cmp eax,[edi+8]
jge .exp_ok
mov eax,[edi+8]
.exp_ok:
call .change_exp
xchg ebx,edi
call .change_exp
xchg ebx,edi
mov edx,[ebx+12]
mov eax,[ebx]
mov ebx,[ebx+4]
add [edi+12],edx
adc [edi],eax
adc [edi+4],ebx
jnc .done
mov eax,[edi]
shrd [edi+12],eax,1
mov eax,[edi+4]
shrd [edi],eax,1
shr eax,1
or eax,80000000h
mov [edi+4],eax
inc dword [edi+8]
.done:
ret
.copy:
mov eax,[ebx]
mov [edi],eax
mov eax,[ebx+4]
mov [edi+4],eax
mov eax,[ebx+8]
mov [edi+8],eax
mov eax,[ebx+12]
mov [edi+12],eax
ret
.change_exp:
push ecx
mov ecx,eax
sub ecx,[ebx+8]
mov edx,[ebx+4]
jecxz .exp_done
.exp_loop:
mov ebp,[ebx]
shrd [ebx+12],ebp,1
shrd [ebx],edx,1
shr edx,1
inc dword [ebx+8]
loop .exp_loop
.exp_done:
mov [ebx+4],edx
pop ecx
ret
fp_optimize:
mov eax,[edi]
mov ebp,[edi+4]
or ebp,[edi]
or ebp,[edi+12]
jz fp_zero
.loop:
test byte [edi+7],80h
jnz .done
shld [edi+4],eax,1
mov ebp,[edi+12]
shld eax,ebp,1
mov [edi],eax
shl dword [edi+12],1
dec dword [edi+8]
jmp .loop
.done:
ret
fp_zero:
mov dword [edi+8],8000h
ret
 
preevaluate_logical_expression:
xor al,al
preevaluate_embedded_logical_expression:
mov [logical_value_wrapping],al
push edi
call preevaluate_logical_value
preevaluation_loop:
cmp al,0FFh
je invalid_logical_expression
mov dl,[esi]
inc esi
cmp dl,'|'
je preevaluate_or
cmp dl,'&'
je preevaluate_and
cmp dl,'}'
je preevaluation_done
or dl,dl
jnz invalid_logical_expression
preevaluation_done:
pop edx
dec esi
ret
preevaluate_or:
cmp al,'1'
je quick_true
cmp al,'0'
je leave_only_following
push edi
mov al,dl
stos byte [edi]
call preevaluate_logical_value
pop ebx
cmp al,'0'
je leave_only_preceding
cmp al,'1'
jne preevaluation_loop
stos byte [edi]
xor al,al
jmp preevaluation_loop
preevaluate_and:
cmp al,'0'
je quick_false
cmp al,'1'
je leave_only_following
push edi
mov al,dl
stos byte [edi]
call preevaluate_logical_value
pop ebx
cmp al,'1'
je leave_only_preceding
cmp al,'0'
jne preevaluation_loop
stos byte [edi]
xor al,al
jmp preevaluation_loop
leave_only_following:
mov edi,[esp]
call preevaluate_logical_value
jmp preevaluation_loop
leave_only_preceding:
mov edi,ebx
xor al,al
jmp preevaluation_loop
quick_true:
call skip_logical_value
jc invalid_logical_expression
mov edi,[esp]
mov al,'1'
jmp preevaluation_loop
quick_false:
call skip_logical_value
jc invalid_logical_expression
mov edi,[esp]
mov al,'0'
jmp preevaluation_loop
invalid_logical_expression:
pop edi
mov esi,edi
mov al,0FFh
stos byte [edi]
ret
skip_logical_value:
cmp byte [esi],'~'
jne negation_skipped
inc esi
jmp skip_logical_value
negation_skipped:
mov al,[esi]
cmp al,'{'
jne skip_simple_logical_value
inc esi
xchg al,[logical_value_wrapping]
push eax
skip_logical_expression:
call skip_logical_value
lods byte [esi]
or al,al
jz wrongly_structured_logical_expression
cmp al,0Fh
je wrongly_structured_logical_expression
cmp al,'|'
je skip_logical_expression
cmp al,'&'
je skip_logical_expression
cmp al,'}'
jne wrongly_structured_logical_expression
pop eax
mov [logical_value_wrapping],al
logical_value_skipped:
clc
ret
wrongly_structured_logical_expression:
pop eax
stc
ret
skip_simple_logical_value:
mov [logical_value_parentheses],0
find_simple_logical_value_end:
mov al,[esi]
or al,al
jz logical_value_skipped
cmp al,0Fh
je logical_value_skipped
cmp al,'|'
je logical_value_skipped
cmp al,'&'
je logical_value_skipped
cmp al,'{'
je skip_logical_value_internal_parenthesis
cmp al,'}'
jne skip_logical_value_symbol
sub [logical_value_parentheses],1
jnc skip_logical_value_symbol
cmp [logical_value_wrapping],'{'
jne skip_logical_value_symbol
jmp logical_value_skipped
skip_logical_value_internal_parenthesis:
inc [logical_value_parentheses]
skip_logical_value_symbol:
call skip_symbol
jmp find_simple_logical_value_end
preevaluate_logical_value:
mov ebp,edi
preevaluate_negation:
cmp byte [esi],'~'
jne preevaluate_negation_ok
movs byte [edi],[esi]
jmp preevaluate_negation
preevaluate_negation_ok:
mov ebx,esi
cmp byte [esi],'{'
jne preevaluate_simple_logical_value
lods byte [esi]
stos byte [edi]
push ebp
mov dl,[logical_value_wrapping]
push edx
call preevaluate_embedded_logical_expression
pop edx
mov [logical_value_wrapping],dl
pop ebp
cmp al,0FFh
je invalid_logical_value
cmp byte [esi],'}'
jne invalid_logical_value
or al,al
jnz preevaluated_expression_value
movs byte [edi],[esi]
ret
preevaluated_expression_value:
inc esi
lea edx,[edi-1]
sub edx,ebp
test edx,1
jz expression_negation_ok
xor al,1
expression_negation_ok:
mov edi,ebp
ret
invalid_logical_value:
mov edi,ebp
mov al,0FFh
ret
preevaluate_simple_logical_value:
xor edx,edx
mov [logical_value_parentheses],edx
find_logical_value_boundaries:
mov al,[esi]
or al,al
jz logical_value_boundaries_found
cmp al,'{'
je logical_value_internal_parentheses
cmp al,'}'
je logical_value_boundaries_parenthesis_close
cmp al,'|'
je logical_value_boundaries_found
cmp al,'&'
je logical_value_boundaries_found
or edx,edx
jnz next_symbol_in_logical_value
cmp al,0F0h
je preevaluable_logical_operator
cmp al,0F7h
je preevaluable_logical_operator
cmp al,0F6h
jne next_symbol_in_logical_value
preevaluable_logical_operator:
mov edx,esi
next_symbol_in_logical_value:
call skip_symbol
jmp find_logical_value_boundaries
logical_value_internal_parentheses:
inc [logical_value_parentheses]
jmp next_symbol_in_logical_value
logical_value_boundaries_parenthesis_close:
sub [logical_value_parentheses],1
jnc next_symbol_in_logical_value
cmp [logical_value_wrapping],'{'
jne next_symbol_in_logical_value
logical_value_boundaries_found:
or edx,edx
jz non_preevaluable_logical_value
mov al,[edx]
cmp al,0F0h
je compare_symbols
cmp al,0F7h
je compare_symbol_types
cmp al,0F6h
je scan_symbols_list
non_preevaluable_logical_value:
mov ecx,esi
mov esi,ebx
sub ecx,esi
jz invalid_logical_value
cmp esi,edi
je leave_logical_value_intact
rep movs byte [edi],[esi]
xor al,al
ret
leave_logical_value_intact:
add edi,ecx
add esi,ecx
xor al,al
ret
compare_symbols:
lea ecx,[esi-1]
sub ecx,edx
mov eax,edx
sub eax,ebx
cmp ecx,eax
jne preevaluated_false
push esi edi
mov esi,ebx
lea edi,[edx+1]
repe cmps byte [esi],[edi]
pop edi esi
je preevaluated_true
preevaluated_false:
mov eax,edi
sub eax,ebp
test eax,1
jnz store_true
store_false:
mov edi,ebp
mov al,'0'
ret
preevaluated_true:
mov eax,edi
sub eax,ebp
test eax,1
jnz store_false
store_true:
mov edi,ebp
mov al,'1'
ret
compare_symbol_types:
push esi
lea esi,[edx+1]
type_comparison:
cmp esi,[esp]
je types_compared
mov al,[esi]
cmp al,[ebx]
jne different_type
cmp al,'('
jne equal_type
mov al,[esi+1]
mov ah,[ebx+1]
cmp al,ah
je equal_type
or al,al
jz different_type
or ah,ah
jz different_type
cmp al,'.'
je different_type
cmp ah,'.'
je different_type
equal_type:
call skip_symbol
xchg esi,ebx
call skip_symbol
xchg esi,ebx
jmp type_comparison
types_compared:
pop esi
cmp byte [ebx],0F7h
jne preevaluated_false
jmp preevaluated_true
different_type:
pop esi
jmp preevaluated_false
scan_symbols_list:
push edi esi
lea esi,[edx+1]
sub edx,ebx
lods byte [esi]
cmp al,'<'
jne invalid_symbols_list
get_next_from_list:
mov edi,esi
get_from_list:
cmp byte [esi],','
je compare_in_list
cmp byte [esi],'>'
je compare_in_list
cmp esi,[esp]
jae invalid_symbols_list
call skip_symbol
jmp get_from_list
compare_in_list:
mov ecx,esi
sub ecx,edi
cmp ecx,edx
jne not_equal_length_in_list
mov esi,ebx
repe cmps byte [esi],[edi]
mov esi,edi
jne not_equal_in_list
skip_rest_of_list:
cmp byte [esi],'>'
je check_list_end
cmp esi,[esp]
jae invalid_symbols_list
call skip_symbol
jmp skip_rest_of_list
check_list_end:
inc esi
cmp esi,[esp]
jne invalid_symbols_list
pop esi edi
jmp preevaluated_true
not_equal_in_list:
add esi,ecx
not_equal_length_in_list:
lods byte [esi]
cmp al,','
je get_next_from_list
cmp esi,[esp]
jne invalid_symbols_list
pop esi edi
jmp preevaluated_false
invalid_symbols_list:
pop esi edi
jmp invalid_logical_value
/programs/develop/fasm/trunk/formats.inc
1,6 → 1,6
 
; flat assembler core
; Copyright (c) 1999-2012, Tomasz Grysztar.
; Copyright (c) 1999-2013, Tomasz Grysztar.
; All rights reserved.
 
formatter:
129,7 → 129,7
je labels_table_ok
mov ecx,[memory_end]
sub ecx,[labels_list]
mov edi,[display_buffer]
mov edi,[tagged_blocks]
sub edi,8
mov [edi],ecx
or dword [edi+4],-1
136,7 → 136,7
sub edi,ecx
cmp edi,[current_offset]
jbe out_of_memory
mov [display_buffer],edi
mov [tagged_blocks],edi
mov esi,[memory_end]
copy_labels:
sub esi,32
200,8 → 200,9
format_directive:
cmp edi,[code_start]
jne unexpected_instruction
cmp [virtual_data],0
jne unexpected_instruction
mov ebp,[addressing_space]
test byte [ds:ebp+0Ah],1
jnz unexpected_instruction
cmp [output_format],0
jne unexpected_instruction
lods byte [esi]
280,8 → 281,6
je pe_heap
jmp illegal_instruction
segment_directive:
cmp [virtual_data],0
jne illegal_instruction
mov al,[output_format]
cmp al,2
je mz_segment
289,8 → 288,6
je elf_segment
jmp illegal_instruction
section_directive:
cmp [virtual_data],0
jne illegal_instruction
mov al,[output_format]
cmp al,3
je pe_section
410,6 → 407,7
xor eax,eax
xor edx,edx
xor ebp,ebp
mov [address_sign],0
mov ch,2
test [format_flags],8
jz make_free_label
418,8 → 416,9
mark_relocation:
cmp [value_type],0
je relocation_ok
cmp [virtual_data],0
jne relocation_ok
mov ebp,[addressing_space]
test byte [ds:ebp+0Ah],1
jnz relocation_ok
cmp [output_format],2
je mark_mz_relocation
cmp [output_format],3
493,13 → 492,11
mov edx,edi
xor eax,eax
rep stos byte [edi]
mov dword [org_origin],edi
mov dword [org_origin+4],eax
mov [org_origin_sign],al
mov [org_registers],eax
mov [org_start],edi
mov eax,edx
call undefined_data
push ebx
call create_addressing_space
pop ebx
mov eax,edi
sub eax,[code_start]
shr eax,4
515,9 → 512,10
mov [code_type],al
mov eax,edx
mov ch,1
mov [label_size],0
mov [address_sign],0
xor edx,edx
xor ebp,ebp
mov [label_size],0
mov [address_symbol],edx
jmp make_free_label
mz_entry:
724,7 → 722,7
and ecx,not 11b
add ecx,(40h-1Ch) shr 2
lea eax,[edi+ecx*4]
cmp edi,[display_buffer]
cmp edi,[tagged_blocks]
jae out_of_memory
xor eax,eax
rep stos dword [edi]
762,7 → 760,7
inc ecx
shl ecx,1
lea eax,[edi+ecx*4]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
jae out_of_memory
xor eax,eax
rep stos dword [edi]
826,7 → 824,7
mov [esi+16h],ax
mov word [esi+14h],100h
mov byte [esi+18h],40h
mov eax,[display_buffer]
mov eax,[tagged_blocks]
sub eax,ecx
cmp edi,eax
jae out_of_memory
1053,7 → 1051,7
shl ebx,cl
sub ebx,ebp
mov ecx,ebx
mov eax,[display_buffer]
mov eax,[tagged_blocks]
sub eax,ecx
cmp edi,eax
jae out_of_memory
1117,12 → 1115,14
jc pe_labels_type_ok
xor bh,bh
pe_labels_type_ok:
mov [labels_type],bh
mov dword [org_origin],eax
mov dword [org_origin+4],ecx
mov [org_origin_sign],bl
and [org_registers],0
mov [org_start],edi
push eax ebx
call init_addressing_space
mov ebp,ebx
pop ebx eax
mov [ds:ebp],eax
mov [ds:ebp+4],ecx
mov [ds:ebp+8],bx
mov [ds:ebp+18h],edi
bt [format_flags],8
jnc dll_flag_ok
or byte [edx+16h+1],20h
1142,6 → 1142,10
jmp format_defined
pe_section:
call close_pe_section
push eax ebx
call create_addressing_space
mov ebp,ebx
pop ebx eax
bts [format_flags],5
lea ecx,[ebx+28h]
add edx,[edx+54h]
1179,15 → 1183,14
mov edx,[code_start]
mov eax,edi
xor ecx,ecx
mov [org_origin_sign],0
sub eax,[ebx+0Ch]
sbb ecx,0
sbb [org_origin_sign],0
mov [labels_type],2
sbb byte [ds:ebp+8],0
mov byte [ds:ebp+9],2
mov [code_type],32
test [format_flags],8
jz pe_section_code_type_ok
mov [labels_type],4
mov byte [ds:ebp+9],4
mov [code_type],64
pe_section_code_type_ok:
test [format_flags],4
1194,23 → 1197,22
jnz peplus_section_org
sub eax,[edx+34h]
sbb ecx,0
sbb [org_origin_sign],0
sbb byte [ds:ebp+8],0
bt [resolver_flags],0
jc pe_section_org_ok
mov [labels_type],0
mov byte [ds:ebp+9],0
jmp pe_section_org_ok
peplus_section_org:
sub eax,[edx+30h]
sbb ecx,[edx+34h]
sbb [org_origin_sign],0
sbb byte [ds:ebp+8],0
bt [resolver_flags],0
jc pe_section_org_ok
mov [labels_type],0
mov byte [ds:ebp+9],0
pe_section_org_ok:
mov dword [org_origin],eax
mov dword [org_origin+4],ecx
and [org_registers],0
mov [org_start],edi
mov [ds:ebp],eax
mov [ds:ebp+4],ecx
mov [ds:ebp+18h],edi
get_section_flags:
lods byte [esi]
cmp al,1Ah
1541,7 → 1543,7
cmp edx,[ecx+74h]
ja value_out_of_range
jb instruction_assembled
cmp eax,[edx+70h]
cmp eax,[ecx+70h]
ja value_out_of_range
jmp instruction_assembled
mark_pe_relocation:
1664,7 → 1666,7
and [resource_size],0
reserve_space_for_resource:
add edi,[resource_size]
cmp edi,[display_buffer]
cmp edi,[tagged_blocks]
ja out_of_memory
jmp resource_done
resource_from_file:
1750,7 → 1752,7
mov [esi],eax
mov [resource_data],edi
lea eax,[edi+16]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
jae out_of_memory
xor eax,eax
stos dword [edi]
1812,7 → 1814,7
mov eax,[resource_data]
inc word [eax+12]
lea eax,[edi+8]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
jae out_of_memory
mov eax,ebx
stos dword [edi]
1849,7 → 1851,7
mov eax,[resource_data]
inc word [eax+14]
lea eax,[edi+8]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
jae out_of_memory
mov eax,ebx
stos dword [edi]
1870,7 → 1872,7
bts edx,31
mov [esi+4],edx
lea eax,[edi+16]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
jae out_of_memory
xor eax,eax
stos dword [edi]
1949,7 → 1951,7
mov eax,[esp]
inc word [eax+12]
lea eax,[edi+8]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
jae out_of_memory
mov eax,ebx
stos dword [edi]
1992,7 → 1994,7
mov eax,[esp]
inc word [eax+14]
lea eax,[edi+8]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
jae out_of_memory
mov eax,ebx
stos dword [edi]
2031,7 → 2033,7
bts edx,31
mov [esi+4],edx
lea eax,[edi+16]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
jae out_of_memory
xor eax,eax
stos dword [edi]
2081,7 → 2083,7
mov eax,[esp]
inc word [eax+14]
lea eax,[edi+8]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
jae out_of_memory
mov eax,ebx
stos dword [edi]
2122,7 → 2124,7
stos word [edi]
copy_string_data:
lea eax,[edi+2]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
jae out_of_memory
mov ax,[edx]
or ax,ax
2160,7 → 2162,7
sub esi,[resource_data]
xchg esi,[ebx+4]
lea eax,[edi+16]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
jae out_of_memory
mov eax,esi
stos dword [edi]
2190,7 → 2192,7
mov edx,edi
mov ecx,[esi+4]
add edi,ecx
cmp edi,[display_buffer]
cmp edi,[tagged_blocks]
ja out_of_memory
call read
mov eax,edi
2319,28 → 2321,16
mov [current_section],ebx
xor eax,eax
mov [number_of_sections],eax
call setup_coff_section_org
mov edx,ebx
call init_addressing_space
mov [ebx+14h],edx
mov byte [ebx+9],2
mov [code_type],32
test [format_flags],8
jz format_defined
mov byte [ebx+9],4
mov [code_type],64
jmp format_defined
setup_coff_section_org:
xor eax,eax
mov dword [org_origin],edi
mov dword [org_origin+4],eax
mov [org_origin_sign],al
mov [org_registers],eax
mov [org_start],edi
mov [org_symbol],ebx
test [format_flags],8
jnz coff_64bit_labels
mov [labels_type],2
ret
coff_64bit_labels:
mov [labels_type],4
ret
 
coff_section:
call close_coff_section
mov ebx,[free_additional_memory]
2355,7 → 2345,15
mov [ebx+8],edi
mov [ebx+10h],eax
mov [ebx+14h],eax
call setup_coff_section_org
mov edx,ebx
call create_addressing_space
xchg edx,ebx
mov [edx+14h],ebx
mov byte [edx+9],2
test [format_flags],8
jz coff_labels_type_ok
mov byte [edx+9],4
coff_labels_type_ok:
lods word [esi]
cmp ax,'('
jne invalid_argument
2442,8 → 2440,10
test [format_flags],8
jnz coff_64bit_relocation
mov al,6
cmp [value_type],2
je coff_relocation
cmp [value_type],5
jne coff_relocation
jne invalid_use_of_symbol
inc al
jmp coff_relocation
coff_64bit_relocation:
2451,8 → 2451,10
cmp [value_type],4
je coff_relocation
mov al,2
cmp [value_type],2
je coff_relocation
cmp [value_type],5
jne coff_relocation
jne invalid_use_of_symbol
inc al
jmp coff_relocation
coff_relocation_relative:
2465,16 → 2467,17
sub eax,ebx
add eax,4
relative_ok:
mov ebx,[addressing_space]
push eax
mov al,20
test [format_flags],8
jnz relative_coff_64bit_relocation
cmp [labels_type],2
cmp byte [ebx+9],2
jne invalid_use_of_symbol
jmp coff_relocation
relative_coff_64bit_relocation:
mov al,4
cmp [labels_type],4
cmp byte [ebx+9],4
jne invalid_use_of_symbol
coff_relocation:
mov ebx,[free_additional_memory]
2686,7 → 2689,7
jmp find_relocations
add_relocation:
lea eax,[ebx+0Ah]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
ja out_of_memory
mov eax,[esi+4]
mov [ebx],eax
2905,7 → 2908,7
mov edx,edi
mov ecx,34h shr 2
lea eax,[edi+ecx*4]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
jae out_of_memory
xor eax,eax
rep stos dword [edi]
2940,9 → 2943,14
mov [ebx+14h],eax
mov al,4
mov [ebx+10h],eax
call setup_coff_section_org
mov edx,ebx
call init_addressing_space
xchg edx,ebx
mov [edx+14h],ebx
mov byte [edx+9],2
test [format_flags],8
jz format_defined
mov byte [edx+9],4
mov byte [ebx+10h],8
jmp format_defined
format_elf64:
2949,7 → 2957,7
mov edx,edi
mov ecx,40h shr 2
lea eax,[edi+ecx*4]
cmp eax,[display_buffer]
cmp eax,[tagged_blocks]
jae out_of_memory
xor eax,eax
rep stos dword [edi]
2984,7 → 2992,15
mov [ebx+10h],eax
mov al,10b
mov [ebx+14h],eax
call setup_coff_section_org
mov edx,ebx
call create_addressing_space
xchg edx,ebx
mov [edx+14h],ebx
mov byte [edx+9],2
test [format_flags],8
jz elf_labels_type_ok
mov byte [edx+9],4
elf_labels_type_ok:
lods word [esi]
cmp ax,'('
jne invalid_argument
3038,11 → 3054,13
mov byte [ebx+10h],8
jmp instruction_assembled
mark_elf_relocation:
push ebx
mov ebx,[addressing_space]
cmp [value_type],3
je elf_relocation_relative
cmp [value_type],7
je elf_relocation_relative
push ebx eax
push eax
cmp [value_type],5
je elf_gotoff_relocation
ja invalid_use_of_symbol
3059,9 → 3077,8
mov al,9 ; R_386_GOTOFF
jmp coff_relocation
elf_relocation_relative:
cmp [labels_type],0
cmp byte [ebx+9],0
je invalid_use_of_symbol
push ebx
mov ebx,[current_section]
mov ebx,[ebx+8]
sub ebx,edi
3690,11 → 3707,13
add eax,edi
adc ebp,0
adc cl,0
mov dword [org_origin],eax
mov dword [org_origin+4],edx
mov [org_origin_sign],cl
and [org_registers],0
mov [org_start],edi
elf_exe_addressing_setup:
push eax
call init_addressing_space
pop eax
mov [ebx],eax
mov [ebx+4],edx
mov [ebx+8],cl
mov [symbols_stream],edi
jmp format_defined
format_elf64_exe:
3768,13 → 3787,7
add eax,edi
adc edx,0
adc cl,0
mov dword [org_origin],eax
mov dword [org_origin+4],edx
mov [org_origin_sign],cl
and [org_registers],0
mov [org_start],edi
mov [symbols_stream],edi
jmp format_defined
jmp elf_exe_addressing_setup
elf_entry:
lods byte [esi]
cmp al,'('
3804,6 → 3817,8
jnz elf64_segment
call close_elf_segment
push eax
call create_addressing_space
mov ebp,ebx
mov ebx,[number_of_sections]
shl ebx,5
add ebx,[code_start]
3883,11 → 3898,10
add eax,edi
adc edx,0
adc cl,0
mov dword [org_origin],eax
mov dword [org_origin+4],edx
mov [org_origin_sign],cl
and [org_registers],0
mov [org_start],edi
elf_segment_addressing_setup:
mov [ds:ebp],eax
mov [ds:ebp+4],edx
mov [ds:ebp+8],cl
inc [number_of_sections]
jmp instruction_assembled
close_elf_segment:
3935,6 → 3949,8
elf64_segment:
call close_elf64_segment
push eax edx
call create_addressing_space
mov ebp,ebx
mov ebx,[number_of_sections]
imul ebx,38h
add ebx,[code_start]
4015,13 → 4031,7
add eax,edi
adc edx,0
adc cl,0
mov dword [org_origin],eax
mov dword [org_origin+4],edx
mov [org_origin_sign],cl
and [org_registers],0
mov [org_start],edi
inc [number_of_sections]
jmp instruction_assembled
jmp elf_segment_addressing_setup
close_elf64_segment:
cmp [number_of_sections],0
jne finish_elf64_segment
/programs/develop/fasm/trunk/messages.inc
1,52 → 1,52
 
; flat assembler core
; Copyright (c) 1999-2012, Tomasz Grysztar.
; All rights reserved.
 
_out_of_memory db 'out of memory',0
_stack_overflow db 'out of stack space',0
_main_file_not_found db 'source file not found',0
_unexpected_end_of_file db 'unexpected end of file',0
_code_cannot_be_generated db 'code cannot be generated',0
_format_limitations_exceeded db 'format limitations exceeded',0
_invalid_definition db 'invalid definition provided',0
_write_failed db 'write failed',0
_file_not_found db 'file not found',0
_error_reading_file db 'error reading file',0
_invalid_file_format db 'invalid file format',0
_invalid_macro_arguments db 'invalid macro arguments',0
_incomplete_macro db 'incomplete macro',0
_unexpected_characters db 'unexpected characters',0
_invalid_argument db 'invalid argument',0
_illegal_instruction db 'illegal instruction',0
_invalid_operand db 'invalid operand',0
_invalid_operand_size db 'invalid size of operand',0
_operand_size_not_specified db 'operand size not specified',0
_operand_sizes_do_not_match db 'operand sizes do not match',0
_invalid_address_size db 'invalid size of address value',0
_address_sizes_do_not_agree db 'address sizes do not agree',0
_disallowed_combination_of_registers db 'disallowed combination of registers',0
_long_immediate_not_encodable db 'not encodable with long immediate',0
_relative_jump_out_of_range db 'relative jump out of range',0
_invalid_expression db 'invalid expression',0
_invalid_address db 'invalid address',0
_invalid_value db 'invalid value',0
_value_out_of_range db 'value out of range',0
_undefined_symbol db 'undefined symbol',0
_symbol_out_of_scope_1 db 'symbol',0
_symbol_out_of_scope_2 db 'out of scope',0
_invalid_use_of_symbol db 'invalid use of symbol',0
_name_too_long db 'name too long',0
_invalid_name db 'invalid name',0
_reserved_word_used_as_symbol db 'reserved word used as symbol',0
_symbol_already_defined db 'symbol already defined',0
_missing_end_quote db 'missing end quote',0
_missing_end_directive db 'missing end directive',0
_unexpected_instruction db 'unexpected instruction',0
_extra_characters_on_line db 'extra characters on line',0
_section_not_aligned_enough db 'section is not aligned enough',0
_setting_already_specified db 'setting already specified',0
_data_already_defined db 'data already defined',0
_too_many_repeats db 'too many repeats',0
_invoked_error db 'error directive encountered in source file',0
_assertion_failed db 'assertion failed',0
 
; flat assembler core
; Copyright (c) 1999-2013, Tomasz Grysztar.
; All rights reserved.
 
_out_of_memory db 'out of memory',0
_stack_overflow db 'out of stack space',0
_main_file_not_found db 'source file not found',0
_unexpected_end_of_file db 'unexpected end of file',0
_code_cannot_be_generated db 'code cannot be generated',0
_format_limitations_exceeded db 'format limitations exceeded',0
_invalid_definition db 'invalid definition provided',0
_write_failed db 'write failed',0
_file_not_found db 'file not found',0
_error_reading_file db 'error reading file',0
_invalid_file_format db 'invalid file format',0
_invalid_macro_arguments db 'invalid macro arguments',0
_incomplete_macro db 'incomplete macro',0
_unexpected_characters db 'unexpected characters',0
_invalid_argument db 'invalid argument',0
_illegal_instruction db 'illegal instruction',0
_invalid_operand db 'invalid operand',0
_invalid_operand_size db 'invalid size of operand',0
_operand_size_not_specified db 'operand size not specified',0
_operand_sizes_do_not_match db 'operand sizes do not match',0
_invalid_address_size db 'invalid size of address value',0
_address_sizes_do_not_agree db 'address sizes do not agree',0
_disallowed_combination_of_registers db 'disallowed combination of registers',0
_long_immediate_not_encodable db 'not encodable with long immediate',0
_relative_jump_out_of_range db 'relative jump out of range',0
_invalid_expression db 'invalid expression',0
_invalid_address db 'invalid address',0
_invalid_value db 'invalid value',0
_value_out_of_range db 'value out of range',0
_undefined_symbol db 'undefined symbol',0
_symbol_out_of_scope_1 db 'symbol',0
_symbol_out_of_scope_2 db 'out of scope',0
_invalid_use_of_symbol db 'invalid use of symbol',0
_name_too_long db 'name too long',0
_invalid_name db 'invalid name',0
_reserved_word_used_as_symbol db 'reserved word used as symbol',0
_symbol_already_defined db 'symbol already defined',0
_missing_end_quote db 'missing end quote',0
_missing_end_directive db 'missing end directive',0
_unexpected_instruction db 'unexpected instruction',0
_extra_characters_on_line db 'extra characters on line',0
_section_not_aligned_enough db 'section is not aligned enough',0
_setting_already_specified db 'setting already specified',0
_data_already_defined db 'data already defined',0
_too_many_repeats db 'too many repeats',0
_invoked_error db 'error directive encountered in source file',0
_assertion_failed db 'assertion failed',0
/programs/develop/fasm/trunk/parser.inc
1,6 → 1,6
 
; flat assembler core
; Copyright (c) 1999-2012, Tomasz Grysztar.
; Copyright (c) 1999-2013, Tomasz Grysztar.
; All rights reserved.
 
parser:
64,6 → 64,8
simple_label:
pop edi
call identify_label
cmp byte [esi+1],':'
je block_label
mov byte [edi],2
inc edi
stos dword [edi]
71,6 → 73,12
xor al,al
stos byte [edi]
jmp parse_line
block_label:
mov byte [edi],4
inc edi
stos dword [edi]
add esi,2
jmp parse_line
constant_label:
pop edi
call get_label_id
127,8 → 135,6
cmp al,':'
je invalid_name
dec esi
cmp al,3Bh
je skip_rest_of_line
mov [parenthesis_stack],0
call parse_argument
jmp parse_next_line
530,6 → 536,8
je unallowed_character
cmp al,'`'
je unallowed_character
cmp al,3Bh
je foreign_argument
dec esi
cmp al,1Ah
jne expression_argument
550,6 → 558,10
pop edi
movs byte [edi],[esi]
jmp argument_parsed
foreign_argument:
dec esi
call skip_foreign_line
jmp contents_parsed
symbol_argument:
pop edi
stos word [edi]
560,7 → 572,7
je ptr_argument
stos byte [edi]
cmp al,80h
je forced_expression
je forced_multipart_expression
cmp al,8Ch
je forced_expression
cmp al,81h
725,7 → 737,7
jmp argument_parsed
parse_from_operator:
cmp byte [esi],22h
jne forced_expression
jne forced_multipart_expression
jmp argument_parsed
parse_quoted_extrn:
inc esi
771,14 → 783,10
mov eax,[esi+1]
lea ebx,[esi+5+eax]
push ebx ecx esi edi
mov al,'('
stos byte [edi]
call convert_expression
mov al,')'
stos byte [edi]
call parse_expression
pop eax edx ecx ebx
cmp esi,ebx
jne expression_parsed
jne expression_argument_parsed
mov edi,eax
mov esi,edx
string_argument:
799,7 → 807,14
rep movs dword [edi],[esi]
xor al,al
stos byte [edi]
jmp expression_parsed
jmp expression_argument_parsed
parse_expression:
mov al,'('
stos byte [edi]
call convert_expression
mov al,')'
stos byte [edi]
ret
not_string:
cmp byte [esi],'('
jne expression
838,24 → 853,27
mov al,0F1h
jmp expression_comparator
expression:
mov al,'('
stos byte [edi]
call convert_expression
mov al,')'
stos byte [edi]
jmp expression_parsed
call parse_expression
jmp expression_argument_parsed
forced_expression:
xor al,al
xchg al,[formatter_symbols_allowed]
push eax
mov al,'('
stos byte [edi]
call convert_expression
mov al,')'
stos byte [edi]
call parse_expression
forced_expression_parsed:
pop eax
mov [formatter_symbols_allowed],al
jmp argument_parsed
forced_multipart_expression:
xor al,al
xchg al,[formatter_symbols_allowed]
push eax
call parse_expression
cmp byte [esi],':'
jne forced_expression_parsed
movs byte [edi],[esi]
call parse_expression
jmp forced_expression_parsed
address_argument:
call parse_address
lods byte [esi]
925,7 → 943,7
dec [parenthesis_stack]
add esp,8
jmp argument_parsed
expression_parsed:
expression_argument_parsed:
cmp [parenthesis_stack],0
je parse_argument
cmp byte [esi],')'
/programs/develop/fasm/trunk/preproce.inc
1,6 → 1,6
 
; flat assembler core
; Copyright (c) 1999-2012, Tomasz Grysztar.
; Copyright (c) 1999-2013, Tomasz Grysztar.
; All rights reserved.
 
preprocessor:
38,7 → 38,7
mov [labels_list],eax
xor eax,eax
mov [source_start],eax
mov [display_buffer],eax
mov [tagged_blocks],eax
mov [hash_tree],eax
mov [error],eax
mov [macro_status],al
195,13 → 195,13
lods byte [esi]
stos byte [edi]
cmp al,0Ah
je missing_end_quote
je no_end_quote
cmp al,0Dh
je missing_end_quote
je no_end_quote
or al,al
jz missing_end_quote
jz no_end_quote
cmp al,1Ah
je missing_end_quote
je no_end_quote
cmp al,ah
jne copy_string
lods byte [esi]
243,6 → 243,9
stos byte [edi]
inc byte [ecx]
jmp group_backslashes
no_end_quote:
mov byte [ebx-5],0
jmp missing_end_quote
backslashed_symbol:
cmp al,1Ah
je unexpected_end_of_file
554,6 → 557,9
call get_preprocessor_symbol
jnc symbolic_constant_in_label
lea esi,[esi+ecx+1]
cmp byte [esi],':'
jne preprocess_instruction
inc esi
jmp preprocess_instruction
symbolic_constant_in_label:
mov ebx,[edx+8]
571,6 → 577,9
cmp byte [ebx],':'
jne label_broken
inc ebx
cmp byte [ebx],':'
jne check_for_broken_label
inc ebx
jmp check_for_broken_label
label_broken:
push line_preprocessed
1685,6 → 1694,7
or [default_argument_value],-1
call skip_macro_argument_value
inc esi
jmp irp_parameters_start
irps_name_ok:
cmp al,','
jne invalid_macro_arguments
/programs/develop/fasm/trunk/symbdump.inc
1,435 → 1,450
 
; flat assembler core
; Copyright (c) 1999-2012, Tomasz Grysztar.
; All rights reserved.
 
dump_symbols:
mov edi,[code_start]
call setup_dump_header
mov esi,[input_file]
call copy_asciiz
cmp edi,[display_buffer]
jae out_of_memory
mov eax,edi
sub eax,ebx
mov [ebx-40h+0Ch],eax
mov esi,[output_file]
call copy_asciiz
cmp edi,[display_buffer]
jae out_of_memory
mov edx,[symbols_stream]
mov ebp,[free_additional_memory]
and [number_of_sections],0
cmp [output_format],4
je prepare_strings_table
cmp [output_format],5
jne strings_table_ready
bt [format_flags],0
jc strings_table_ready
prepare_strings_table:
cmp edx,ebp
je strings_table_ready
mov al,[edx]
test al,al
jz prepare_string
cmp al,80h
je prepare_string
add edx,0Ch
cmp al,0C0h
jb prepare_strings_table
add edx,4
jmp prepare_strings_table
prepare_string:
mov esi,edi
sub esi,ebx
xchg esi,[edx+4]
test al,al
jz prepare_section_string
or dword [edx+4],1 shl 31
add edx,0Ch
prepare_external_string:
mov ecx,[esi]
add esi,4
rep movs byte [edi],[esi]
mov byte [edi],0
inc edi
cmp edi,[display_buffer]
jae out_of_memory
jmp prepare_strings_table
prepare_section_string:
mov ecx,[number_of_sections]
mov eax,ecx
inc eax
mov [number_of_sections],eax
xchg eax,[edx+4]
shl ecx,2
add ecx,[free_additional_memory]
mov [ecx],eax
add edx,20h
test esi,esi
jz prepare_default_section_string
cmp [output_format],5
jne prepare_external_string
bt [format_flags],0
jc prepare_external_string
mov esi,[esi]
add esi,[resource_data]
copy_elf_section_name:
lods byte [esi]
cmp edi,[display_buffer]
jae out_of_memory
stos byte [edi]
test al,al
jnz copy_elf_section_name
jmp prepare_strings_table
prepare_default_section_string:
mov eax,'.fla'
stos dword [edi]
mov ax,'t'
stos word [edi]
cmp edi,[display_buffer]
jae out_of_memory
jmp prepare_strings_table
strings_table_ready:
mov edx,[display_buffer]
mov ebp,[memory_end]
sub ebp,[labels_list]
add ebp,edx
prepare_labels_dump:
cmp edx,ebp
je labels_dump_ok
mov eax,[edx+24]
test eax,eax
jz label_dump_name_ok
cmp eax,[memory_start]
jb label_name_outside_source
cmp eax,[source_start]
ja label_name_outside_source
sub eax,[memory_start]
dec eax
mov [edx+24],eax
jmp label_dump_name_ok
label_name_outside_source:
mov esi,eax
mov eax,edi
sub eax,ebx
or eax,1 shl 31
mov [edx+24],eax
movzx ecx,byte [esi-1]
lea eax,[edi+ecx+1]
cmp edi,[display_buffer]
jae out_of_memory
rep movsb
xor al,al
stosb
label_dump_name_ok:
mov eax,[edx+28]
test eax,eax
jz label_dump_line_ok
sub eax,[memory_start]
mov [edx+28],eax
label_dump_line_ok:
mov eax,[edx+20]
test eax,eax
jz base_symbol_for_label_ok
cmp eax,[symbols_stream]
mov eax,[eax+4]
jae base_symbol_for_label_ok
xor eax,eax
base_symbol_for_label_ok:
mov [edx+20],eax
mov ax,[current_pass]
cmp ax,[edx+16]
je label_defined_flag_ok
and byte [edx+8],not 1
label_defined_flag_ok:
cmp ax,[edx+18]
je label_used_flag_ok
and byte [edx+8],not 8
label_used_flag_ok:
add edx,LABEL_STRUCTURE_SIZE
jmp prepare_labels_dump
labels_dump_ok:
mov eax,edi
sub eax,ebx
mov [ebx-40h+14h],eax
add eax,40h
mov [ebx-40h+18h],eax
mov ecx,[memory_end]
sub ecx,[labels_list]
mov [ebx-40h+1Ch],ecx
add eax,ecx
mov [ebx-40h+20h],eax
mov ecx,[source_start]
sub ecx,[memory_start]
mov [ebx-40h+24h],ecx
add eax,ecx
mov [ebx-40h+28h],eax
mov eax,[number_of_sections]
shl eax,2
mov [ebx-40h+34h],eax
call prepare_preprocessed_source
mov esi,[labels_list]
mov ebp,edi
make_lines_dump:
cmp esi,[display_buffer]
je lines_dump_ok
mov eax,[esi-4]
mov ecx,[esi-8]
sub esi,8
sub esi,ecx
cmp eax,1
je process_line_dump
cmp eax,2
jne make_lines_dump
add dword [ebx-40h+3Ch],8
jmp make_lines_dump
process_line_dump:
mov eax,[esi+4]
sub eax,[code_start]
add eax,[headers_size]
cmp byte [esi+1Ah],0
je store_offset
xor eax,eax
store_offset:
stos dword [edi]
mov eax,[esi]
sub eax,[memory_start]
stos dword [edi]
mov eax,[esi+4]
xor edx,edx
xor cl,cl
sub eax,[esi+8]
sbb edx,[esi+8+4]
sbb cl,[esi+1Bh]
stos dword [edi]
mov eax,edx
stos dword [edi]
mov eax,[esi+10h]
stos dword [edi]
mov eax,[esi+14h]
test eax,eax
jz base_symbol_for_line_ok
cmp eax,[symbols_stream]
mov eax,[eax+4]
jae base_symbol_for_line_ok
xor eax,eax
base_symbol_for_line_ok:
stos dword [edi]
mov eax,[esi+18h]
and eax,01FFFFh
stos dword [edi]
mov [edi-1],cl
cmp edi,[display_buffer]
jae out_of_memory
mov eax,edi
sub eax,1Ch
sub eax,ebp
mov [esi],eax
jmp make_lines_dump
lines_dump_ok:
mov edx,edi
mov eax,[current_offset]
sub eax,[code_start]
add eax,[headers_size]
stos dword [edi]
mov ecx,edi
sub ecx,ebx
sub ecx,[ebx-40h+14h]
mov [ebx-40h+2Ch],ecx
add ecx,[ebx-40h+28h]
mov [ebx-40h+30h],ecx
add ecx,[ebx-40h+34h]
mov [ebx-40h+38h],ecx
find_inexisting_offsets:
sub edx,1Ch
cmp edx,ebp
jb write_symbols
test byte [edx+1Ah],1
jnz find_inexisting_offsets
cmp eax,[edx]
jb correct_inexisting_offset
mov eax,[edx]
jmp find_inexisting_offsets
correct_inexisting_offset:
and dword [edx],0
or byte [edx+1Ah],2
jmp find_inexisting_offsets
write_symbols:
mov edx,[symbols_file]
call create
jc write_failed
mov edx,[code_start]
mov ecx,[edx+14h]
add ecx,40h
call write
jc write_failed
mov edx,[display_buffer]
mov ecx,[memory_end]
sub ecx,[labels_list]
call write
jc write_failed
mov edx,[memory_start]
mov ecx,[source_start]
sub ecx,edx
call write
jc write_failed
mov edx,ebp
mov ecx,edi
sub ecx,edx
call write
jc write_failed
mov edx,[free_additional_memory]
mov ecx,[number_of_sections]
shl ecx,2
call write
jc write_failed
mov esi,[labels_list]
mov edi,[memory_start]
make_references_dump:
cmp esi,[display_buffer]
je references_dump_ok
mov eax,[esi-4]
mov ecx,[esi-8]
sub esi,8
sub esi,ecx
cmp eax,2
je dump_reference
cmp eax,1
jne make_references_dump
mov edx,[esi]
jmp make_references_dump
dump_reference:
mov eax,[memory_end]
sub eax,[esi]
sub eax,LABEL_STRUCTURE_SIZE
stosd
mov eax,edx
stosd
cmp edi,[display_buffer]
jb make_references_dump
jmp out_of_memory
references_dump_ok:
mov edx,[memory_start]
mov ecx,edi
sub ecx,edx
call write
jc write_failed
call close
ret
setup_dump_header:
xor eax,eax
mov ecx,40h shr 2
rep stos dword [edi]
mov ebx,edi
mov dword [ebx-40h],'fas'+1Ah shl 24
mov dword [ebx-40h+4],VERSION_MAJOR + VERSION_MINOR shl 8 + 40h shl 16
mov dword [ebx-40h+10h],40h
ret
prepare_preprocessed_source:
mov esi,[memory_start]
mov ebp,[source_start]
test ebp,ebp
jnz prepare_preprocessed_line
mov ebp,[current_line]
inc ebp
prepare_preprocessed_line:
cmp esi,ebp
jae preprocessed_source_ok
mov eax,[memory_start]
mov edx,[input_file]
cmp [esi],edx
jne line_not_from_main_input
mov [esi],eax
line_not_from_main_input:
sub [esi],eax
test byte [esi+7],1 shl 7
jz prepare_next_preprocessed_line
sub [esi+8],eax
sub [esi+12],eax
prepare_next_preprocessed_line:
call skip_preprocessed_line
jmp prepare_preprocessed_line
preprocessed_source_ok:
ret
skip_preprocessed_line:
add esi,16
skip_preprocessed_line_content:
lods byte [esi]
cmp al,1Ah
je skip_preprocessed_symbol
cmp al,3Bh
je skip_preprocessed_symbol
cmp al,22h
je skip_preprocessed_string
or al,al
jnz skip_preprocessed_line_content
ret
skip_preprocessed_string:
lods dword [esi]
add esi,eax
jmp skip_preprocessed_line_content
skip_preprocessed_symbol:
lods byte [esi]
movzx eax,al
add esi,eax
jmp skip_preprocessed_line_content
restore_preprocessed_source:
mov esi,[memory_start]
mov ebp,[source_start]
test ebp,ebp
jnz restore_preprocessed_line
mov ebp,[current_line]
inc ebp
restore_preprocessed_line:
cmp esi,ebp
jae preprocessed_source_restored
mov eax,[memory_start]
add [esi],eax
cmp [esi],eax
jne preprocessed_line_source_restored
mov edx,[input_file]
mov [esi],edx
preprocessed_line_source_restored:
test byte [esi+7],1 shl 7
jz restore_next_preprocessed_line
add [esi+8],eax
add [esi+12],eax
restore_next_preprocessed_line:
call skip_preprocessed_line
jmp restore_preprocessed_line
preprocessed_source_restored:
ret
dump_preprocessed_source:
mov edi,[free_additional_memory]
call setup_dump_header
mov esi,[input_file]
call copy_asciiz
cmp edi,[additional_memory_end]
jae out_of_memory
mov eax,edi
sub eax,ebx
dec eax
mov [ebx-40h+0Ch],eax
mov eax,edi
sub eax,ebx
mov [ebx-40h+14h],eax
add eax,40h
mov [ebx-40h+20h],eax
call prepare_preprocessed_source
sub esi,[memory_start]
mov [ebx-40h+24h],esi
mov edx,[symbols_file]
call create
jc write_failed
mov edx,[free_additional_memory]
mov ecx,[edx+14h]
add ecx,40h
call write
jc write_failed
mov edx,[memory_start]
mov ecx,esi
call write
jc write_failed
call close
 
; flat assembler core
; Copyright (c) 1999-2013, Tomasz Grysztar.
; All rights reserved.
 
dump_symbols:
mov edi,[code_start]
call setup_dump_header
mov esi,[input_file]
call copy_asciiz
cmp edi,[tagged_blocks]
jae out_of_memory
mov eax,edi
sub eax,ebx
mov [ebx-40h+0Ch],eax
mov esi,[output_file]
call copy_asciiz
cmp edi,[tagged_blocks]
jae out_of_memory
mov edx,[symbols_stream]
mov ebp,[free_additional_memory]
and [number_of_sections],0
cmp [output_format],4
je prepare_strings_table
cmp [output_format],5
jne strings_table_ready
bt [format_flags],0
jc strings_table_ready
prepare_strings_table:
cmp edx,ebp
je strings_table_ready
mov al,[edx]
test al,al
jz prepare_string
cmp al,80h
je prepare_string
add edx,0Ch
cmp al,0C0h
jb prepare_strings_table
add edx,4
jmp prepare_strings_table
prepare_string:
mov esi,edi
sub esi,ebx
xchg esi,[edx+4]
test al,al
jz prepare_section_string
or dword [edx+4],1 shl 31
add edx,0Ch
prepare_external_string:
mov ecx,[esi]
add esi,4
rep movs byte [edi],[esi]
mov byte [edi],0
inc edi
cmp edi,[tagged_blocks]
jae out_of_memory
jmp prepare_strings_table
prepare_section_string:
mov ecx,[number_of_sections]
mov eax,ecx
inc eax
mov [number_of_sections],eax
xchg eax,[edx+4]
shl ecx,2
add ecx,[free_additional_memory]
mov [ecx],eax
add edx,20h
test esi,esi
jz prepare_default_section_string
cmp [output_format],5
jne prepare_external_string
bt [format_flags],0
jc prepare_external_string
mov esi,[esi]
add esi,[resource_data]
copy_elf_section_name:
lods byte [esi]
cmp edi,[tagged_blocks]
jae out_of_memory
stos byte [edi]
test al,al
jnz copy_elf_section_name
jmp prepare_strings_table
prepare_default_section_string:
mov eax,'.fla'
stos dword [edi]
mov ax,'t'
stos word [edi]
cmp edi,[tagged_blocks]
jae out_of_memory
jmp prepare_strings_table
strings_table_ready:
mov edx,[tagged_blocks]
mov ebp,[memory_end]
sub ebp,[labels_list]
add ebp,edx
prepare_labels_dump:
cmp edx,ebp
je labels_dump_ok
mov eax,[edx+24]
test eax,eax
jz label_dump_name_ok
cmp eax,[memory_start]
jb label_name_outside_source
cmp eax,[source_start]
ja label_name_outside_source
sub eax,[memory_start]
dec eax
mov [edx+24],eax
jmp label_dump_name_ok
label_name_outside_source:
mov esi,eax
mov eax,edi
sub eax,ebx
or eax,1 shl 31
mov [edx+24],eax
movzx ecx,byte [esi-1]
lea eax,[edi+ecx+1]
cmp edi,[tagged_blocks]
jae out_of_memory
rep movsb
xor al,al
stosb
label_dump_name_ok:
mov eax,[edx+28]
test eax,eax
jz label_dump_line_ok
sub eax,[memory_start]
mov [edx+28],eax
label_dump_line_ok:
test byte [edx+9],4
jz convert_base_symbol_for_label
xor eax,eax
mov [edx],eax
mov [edx+4],eax
jmp base_symbol_for_label_ok
convert_base_symbol_for_label:
mov eax,[edx+20]
test eax,eax
jz base_symbol_for_label_ok
cmp eax,[symbols_stream]
mov eax,[eax+4]
jae base_symbol_for_label_ok
xor eax,eax
base_symbol_for_label_ok:
mov [edx+20],eax
mov ax,[current_pass]
cmp ax,[edx+16]
je label_defined_flag_ok
and byte [edx+8],not 1
label_defined_flag_ok:
cmp ax,[edx+18]
je label_used_flag_ok
and byte [edx+8],not 8
label_used_flag_ok:
add edx,LABEL_STRUCTURE_SIZE
jmp prepare_labels_dump
labels_dump_ok:
mov eax,edi
sub eax,ebx
mov [ebx-40h+14h],eax
add eax,40h
mov [ebx-40h+18h],eax
mov ecx,[memory_end]
sub ecx,[labels_list]
mov [ebx-40h+1Ch],ecx
add eax,ecx
mov [ebx-40h+20h],eax
mov ecx,[source_start]
sub ecx,[memory_start]
mov [ebx-40h+24h],ecx
add eax,ecx
mov [ebx-40h+28h],eax
mov eax,[number_of_sections]
shl eax,2
mov [ebx-40h+34h],eax
call prepare_preprocessed_source
mov esi,[labels_list]
mov ebp,edi
make_lines_dump:
cmp esi,[tagged_blocks]
je lines_dump_ok
mov eax,[esi-4]
mov ecx,[esi-8]
sub esi,8
sub esi,ecx
cmp eax,1
je process_line_dump
cmp eax,2
jne make_lines_dump
add dword [ebx-40h+3Ch],8
jmp make_lines_dump
process_line_dump:
push ebx
mov ebx,[esi+8]
mov eax,[esi+4]
sub eax,[code_start]
add eax,[headers_size]
test byte [ebx+0Ah],1
jz store_offset
xor eax,eax
store_offset:
stos dword [edi]
mov eax,[esi]
sub eax,[memory_start]
stos dword [edi]
mov eax,[esi+4]
xor edx,edx
xor cl,cl
sub eax,[ebx]
sbb edx,[ebx+4]
sbb cl,[ebx+8]
stos dword [edi]
mov eax,edx
stos dword [edi]
mov eax,[ebx+10h]
stos dword [edi]
mov eax,[ebx+14h]
test eax,eax
jz base_symbol_for_line_ok
cmp eax,[symbols_stream]
mov eax,[eax+4]
jae base_symbol_for_line_ok
xor eax,eax
base_symbol_for_line_ok:
stos dword [edi]
mov al,[ebx+9]
stos byte [edi]
mov al,[esi+10h]
stos byte [edi]
mov al,[ebx+0Ah]
and al,1
stos byte [edi]
mov al,cl
stos byte [edi]
pop ebx
cmp edi,[tagged_blocks]
jae out_of_memory
mov eax,edi
sub eax,1Ch
sub eax,ebp
mov [esi],eax
jmp make_lines_dump
lines_dump_ok:
mov edx,edi
mov eax,[current_offset]
sub eax,[code_start]
add eax,[headers_size]
stos dword [edi]
mov ecx,edi
sub ecx,ebx
sub ecx,[ebx-40h+14h]
mov [ebx-40h+2Ch],ecx
add ecx,[ebx-40h+28h]
mov [ebx-40h+30h],ecx
add ecx,[ebx-40h+34h]
mov [ebx-40h+38h],ecx
find_inexisting_offsets:
sub edx,1Ch
cmp edx,ebp
jb write_symbols
test byte [edx+1Ah],1
jnz find_inexisting_offsets
cmp eax,[edx]
jb correct_inexisting_offset
mov eax,[edx]
jmp find_inexisting_offsets
correct_inexisting_offset:
and dword [edx],0
or byte [edx+1Ah],2
jmp find_inexisting_offsets
write_symbols:
mov edx,[symbols_file]
call create
jc write_failed
mov edx,[code_start]
mov ecx,[edx+14h]
add ecx,40h
call write
jc write_failed
mov edx,[tagged_blocks]
mov ecx,[memory_end]
sub ecx,[labels_list]
call write
jc write_failed
mov edx,[memory_start]
mov ecx,[source_start]
sub ecx,edx
call write
jc write_failed
mov edx,ebp
mov ecx,edi
sub ecx,edx
call write
jc write_failed
mov edx,[free_additional_memory]
mov ecx,[number_of_sections]
shl ecx,2
call write
jc write_failed
mov esi,[labels_list]
mov edi,[memory_start]
make_references_dump:
cmp esi,[tagged_blocks]
je references_dump_ok
mov eax,[esi-4]
mov ecx,[esi-8]
sub esi,8
sub esi,ecx
cmp eax,2
je dump_reference
cmp eax,1
jne make_references_dump
mov edx,[esi]
jmp make_references_dump
dump_reference:
mov eax,[memory_end]
sub eax,[esi]
sub eax,LABEL_STRUCTURE_SIZE
stosd
mov eax,edx
stosd
cmp edi,[tagged_blocks]
jb make_references_dump
jmp out_of_memory
references_dump_ok:
mov edx,[memory_start]
mov ecx,edi
sub ecx,edx
call write
jc write_failed
call close
ret
setup_dump_header:
xor eax,eax
mov ecx,40h shr 2
rep stos dword [edi]
mov ebx,edi
mov dword [ebx-40h],'fas'+1Ah shl 24
mov dword [ebx-40h+4],VERSION_MAJOR + VERSION_MINOR shl 8 + 40h shl 16
mov dword [ebx-40h+10h],40h
ret
prepare_preprocessed_source:
mov esi,[memory_start]
mov ebp,[source_start]
test ebp,ebp
jnz prepare_preprocessed_line
mov ebp,[current_line]
inc ebp
prepare_preprocessed_line:
cmp esi,ebp
jae preprocessed_source_ok
mov eax,[memory_start]
mov edx,[input_file]
cmp [esi],edx
jne line_not_from_main_input
mov [esi],eax
line_not_from_main_input:
sub [esi],eax
test byte [esi+7],1 shl 7
jz prepare_next_preprocessed_line
sub [esi+8],eax
sub [esi+12],eax
prepare_next_preprocessed_line:
call skip_preprocessed_line
jmp prepare_preprocessed_line
preprocessed_source_ok:
ret
skip_preprocessed_line:
add esi,16
skip_preprocessed_line_content:
lods byte [esi]
cmp al,1Ah
je skip_preprocessed_symbol
cmp al,3Bh
je skip_preprocessed_symbol
cmp al,22h
je skip_preprocessed_string
or al,al
jnz skip_preprocessed_line_content
ret
skip_preprocessed_string:
lods dword [esi]
add esi,eax
jmp skip_preprocessed_line_content
skip_preprocessed_symbol:
lods byte [esi]
movzx eax,al
add esi,eax
jmp skip_preprocessed_line_content
restore_preprocessed_source:
mov esi,[memory_start]
mov ebp,[source_start]
test ebp,ebp
jnz restore_preprocessed_line
mov ebp,[current_line]
inc ebp
restore_preprocessed_line:
cmp esi,ebp
jae preprocessed_source_restored
mov eax,[memory_start]
add [esi],eax
cmp [esi],eax
jne preprocessed_line_source_restored
mov edx,[input_file]
mov [esi],edx
preprocessed_line_source_restored:
test byte [esi+7],1 shl 7
jz restore_next_preprocessed_line
add [esi+8],eax
add [esi+12],eax
restore_next_preprocessed_line:
call skip_preprocessed_line
jmp restore_preprocessed_line
preprocessed_source_restored:
ret
dump_preprocessed_source:
mov edi,[free_additional_memory]
call setup_dump_header
mov esi,[input_file]
call copy_asciiz
cmp edi,[additional_memory_end]
jae out_of_memory
mov eax,edi
sub eax,ebx
dec eax
mov [ebx-40h+0Ch],eax
mov eax,edi
sub eax,ebx
mov [ebx-40h+14h],eax
add eax,40h
mov [ebx-40h+20h],eax
call prepare_preprocessed_source
sub esi,[memory_start]
mov [ebx-40h+24h],esi
mov edx,[symbols_file]
call create
jc write_failed
mov edx,[free_additional_memory]
mov ecx,[edx+14h]
add ecx,40h
call write
jc write_failed
mov edx,[memory_start]
mov ecx,esi
call write
jc write_failed
call close
ret
/programs/develop/fasm/trunk/tables.inc
1,3402 → 1,3412
 
; flat assembler core
; Copyright (c) 1999-2012, Tomasz Grysztar.
; All rights reserved.
 
include_variable db 'INCLUDE',0
 
symbol_characters db 27
db 9,0Ah,0Dh,1Ah,20h,'+-/*=<>()[]{}:,|&~#`;\'
 
preprocessor_directives:
db 6,'define'
dw define_symbolic_constant-directive_handler
db 7,'include'
dw include_file-directive_handler
db 3,'irp'
dw irp_directive-directive_handler
db 4,'irps'
dw irps_directive-directive_handler
db 5,'macro'
dw define_macro-directive_handler
db 5,'match'
dw match_directive-directive_handler
db 5,'purge'
dw purge_macro-directive_handler
db 4,'rept'
dw rept_directive-directive_handler
db 7,'restore'
dw restore_equ_constant-directive_handler
db 7,'restruc'
dw purge_struc-directive_handler
db 5,'struc'
dw define_struc-directive_handler
db 0
 
macro_directives:
db 6,'common'
dw common_block-directive_handler
db 7,'forward'
dw forward_block-directive_handler
db 5,'local'
dw local_symbols-directive_handler
db 7,'reverse'
dw reverse_block-directive_handler
db 0
 
operators:
db 1,'+',80h
db 1,'-',81h
db 1,'*',90h
db 1,'/',91h
db 3,'and',0B0h
db 3,'mod',0A0h
db 2,'or',0B1h
db 3,'shl',0C0h
db 3,'shr',0C1h
db 3,'xor',0B2h
db 0
 
single_operand_operators:
db 1,'+',82h
db 1,'-',83h
db 3,'not',0D0h
db 3,'plt',0E1h
db 3,'rva',0E0h
db 0
 
directive_operators:
db 5,'align',8Ch
db 2,'as',86h
db 2,'at',80h
db 7,'defined',88h
db 3,'dup',81h
db 2,'eq',0F0h
db 6,'eqtype',0F7h
db 4,'from',82h
db 2,'in',0F6h
db 2,'on',84h
db 3,'ptr',85h
db 10,'relativeto',0F8h
db 4,'used',89h
db 0
 
address_sizes:
db 4,'byte',1
db 5,'dword',4
db 5,'qword',8
db 4,'word',2
db 0
 
symbols:
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)
dw symbols_5-symbols,(symbols_6-symbols_5)/(5+2)
dw symbols_6-symbols,(symbols_7-symbols_6)/(6+2)
dw symbols_7-symbols,(symbols_8-symbols_7)/(7+2)
dw symbols_8-symbols,(symbols_9-symbols_8)/(8+2)
dw symbols_9-symbols,(symbols_10-symbols_9)/(9+2)
dw symbols_10-symbols,(symbols_11-symbols_10)/(10+2)
dw symbols_11-symbols,(symbols_end-symbols_11)/(11+2)
 
symbols_2:
db 'ah',10h,04h
db 'al',10h,10h
db 'ax',10h,20h
db 'bh',10h,07h
db 'bl',10h,13h
db 'bp',10h,25h
db 'bx',10h,23h
db 'ch',10h,05h
db 'cl',10h,11h
db 'cs',10h,62h
db 'cx',10h,21h
db 'dh',10h,06h
db 'di',10h,27h
db 'dl',10h,12h
db 'ds',10h,64h
db 'dx',10h,22h
db 'es',10h,61h
db 'fs',10h,65h
db 'gs',10h,66h
db 'ms',1Ch,41h
db 'mz',18h,20h
db 'nx',1Bh,83h
db 'pe',18h,30h
db 'r8',10h,88h
db 'r9',10h,89h
db 'si',10h,26h
db 'sp',10h,24h
db 'ss',10h,63h
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 '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 'eax',10h,40h
db 'ebp',10h,45h
db 'ebx',10h,43h
db 'ecx',10h,41h
db 'edi',10h,47h
db 'edx',10h,42h
db 'efi',1Bh,10
db 'eip',10h,0F4h
db 'elf',18h,50h
db 'esi',10h,46h
db 'esp',10h,44h
db 'far',12h,3
db 'gui',1Bh,2
db 'mm0',10h,0B0h
db 'mm1',10h,0B1h
db 'mm2',10h,0B2h
db 'mm3',10h,0B3h
db 'mm4',10h,0B4h
db 'mm5',10h,0B5h
db 'mm6',10h,0B6h
db 'mm7',10h,0B7h
db 'r10',10h,8Ah
db 'r11',10h,8Bh
db 'r12',10h,8Ch
db 'r13',10h,8Dh
db 'r14',10h,8Eh
db 'r15',10h,8Fh
db 'r8b',10h,18h
db 'r8d',10h,48h
db 'r8l',10h,18h
db 'r8w',10h,28h
db 'r9b',10h,19h
db 'r9d',10h,49h
db 'r9l',10h,19h
db 'r9w',10h,29h
db 'rax',10h,80h
db 'rbp',10h,85h
db 'rbx',10h,83h
db 'rcx',10h,81h
db 'rdi',10h,87h
db 'rdx',10h,82h
db 'rip',10h,0F8h
db 'rsi',10h,86h
db 'rsp',10h,84h
db 'sil',10h,16h
db 'spl',10h,14h
db 'st0',10h,0A0h
db 'st1',10h,0A1h
db 'st2',10h,0A2h
db 'st3',10h,0A3h
db 'st4',10h,0A4h
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 'wdm',1Bh,81h
symbols_4:
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 '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 'ms64',1Ch,49h
db 'near',12h,2
db 'note',1Eh,4
db 'pe64',18h,3Ch
db 'r10b',10h,1Ah
db 'r10d',10h,4Ah
db 'r10l',10h,1Ah
db 'r10w',10h,2Ah
db 'r11b',10h,1Bh
db 'r11d',10h,4Bh
db 'r11l',10h,1Bh
db 'r11w',10h,2Bh
db 'r12b',10h,1Ch
db 'r12d',10h,4Ch
db 'r12l',10h,1Ch
db 'r12w',10h,2Ch
db 'r13b',10h,1Dh
db 'r13d',10h,4Dh
db 'r13l',10h,1Dh
db 'r13w',10h,2Dh
db 'r14b',10h,1Eh
db 'r14d',10h,4Eh
db 'r14l',10h,1Eh
db 'r14w',10h,2Eh
db 'r15b',10h,1Fh
db 'r15d',10h,4Fh
db 'r15l',10h,1Fh
db 'r15w',10h,2Fh
db 'word',11h,2
db 'xmm0',10h,0C0h
db 'xmm1',10h,0C1h
db 'xmm2',10h,0C2h
db 'xmm3',10h,0C3h
db 'xmm4',10h,0C4h
db 'xmm5',10h,0C5h
db 'xmm6',10h,0C6h
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
symbols_5:
db 'dword',11h,4
db 'elf64',18h,58h
db 'fword',11h,6
db 'large',1Bh,82h
db 'pword',11h,6
db 'qword',11h,8
db 'short',12h,1
db 'tbyte',11h,0Ah
db 'tword',11h,0Ah
db 'use16',13h,16
db 'use32',13h,32
db 'use64',13h,64
db 'xmm10',10h,0CAh
db 'xmm11',10h,0CBh
db 'xmm12',10h,0CCh
db 'xmm13',10h,0CDh
db 'xmm14',10h,0CEh
db 'xmm15',10h,0CFh
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 'yword',11h,32
symbols_6:
db 'binary',18h,10h
db 'dqword',11h,16
db 'export',1Ah,0
db 'fixups',1Ah,5
db 'import',1Ah,1
db 'native',1Bh,1
db 'qqword',11h,32
db 'static',1Dh,1
symbols_7:
db 'console',1Bh,3
db 'dynamic',1Eh,2
db 'efiboot',1Bh,11
symbols_8:
db 'linkinfo',19h,9
db 'readable',19h,30
db 'resource',1Ah,2
db 'writable',19h,31
symbols_9:
db 'shareable',19h,28
db 'writeable',19h,31
symbols_10:
db 'efiruntime',1Bh,12
db 'executable',19h,29
db 'linkremove',19h,11
symbols_11:
db 'discardable',19h,25
db 'interpreter',1Eh,3
db 'notpageable',19h,27
symbols_end:
 
instructions:
dw instructions_2-instructions,(instructions_3-instructions_2)/(2+3)
dw instructions_3-instructions,(instructions_4-instructions_3)/(3+3)
dw instructions_4-instructions,(instructions_5-instructions_4)/(4+3)
dw instructions_5-instructions,(instructions_6-instructions_5)/(5+3)
dw instructions_6-instructions,(instructions_7-instructions_6)/(6+3)
dw instructions_7-instructions,(instructions_8-instructions_7)/(7+3)
dw instructions_8-instructions,(instructions_9-instructions_8)/(8+3)
dw instructions_9-instructions,(instructions_10-instructions_9)/(9+3)
dw instructions_10-instructions,(instructions_11-instructions_10)/(10+3)
dw instructions_11-instructions,(instructions_12-instructions_11)/(11+3)
dw instructions_12-instructions,(instructions_13-instructions_12)/(12+3)
dw instructions_13-instructions,(instructions_14-instructions_13)/(13+3)
dw instructions_14-instructions,(instructions_15-instructions_14)/(14+3)
dw instructions_15-instructions,(instructions_16-instructions_15)/(15+3)
dw instructions_16-instructions,(instructions_end-instructions_16)/(16+3)
 
instructions_2:
db 'bt',4
dw bt_instruction-instruction_handler
db 'if',0
dw if_directive-instruction_handler
db 'in',0
dw in_instruction-instruction_handler
db 'ja',77h
dw conditional_jump-instruction_handler
db 'jb',72h
dw conditional_jump-instruction_handler
db 'jc',72h
dw conditional_jump-instruction_handler
db 'je',74h
dw conditional_jump-instruction_handler
db 'jg',7Fh
dw conditional_jump-instruction_handler
db 'jl',7Ch
dw conditional_jump-instruction_handler
db 'jo',70h
dw conditional_jump-instruction_handler
db 'jp',7Ah
dw conditional_jump-instruction_handler
db 'js',78h
dw conditional_jump-instruction_handler
db 'jz',74h
dw conditional_jump-instruction_handler
db 'or',08h
dw basic_instruction-instruction_handler
instructions_3:
db 'aaa',37h
dw simple_instruction_except64-instruction_handler
db 'aad',0D5h
dw aa_instruction-instruction_handler
db 'aam',0D4h
dw aa_instruction-instruction_handler
db 'aas',3Fh
dw simple_instruction_except64-instruction_handler
db 'adc',10h
dw basic_instruction-instruction_handler
db 'add',00h
dw basic_instruction-instruction_handler
db 'and',20h
dw basic_instruction-instruction_handler
db 'bsf',0BCh
dw bs_instruction-instruction_handler
db 'bsr',0BDh
dw bs_instruction-instruction_handler
db 'btc',7
dw bt_instruction-instruction_handler
db 'btr',6
dw bt_instruction-instruction_handler
db 'bts',5
dw bt_instruction-instruction_handler
db 'cbw',98h
dw simple_instruction_16bit-instruction_handler
db 'cdq',99h
dw simple_instruction_32bit-instruction_handler
db 'clc',0F8h
dw simple_instruction-instruction_handler
db 'cld',0FCh
dw simple_instruction-instruction_handler
db 'cli',0FAh
dw simple_instruction-instruction_handler
db 'cmc',0F5h
dw simple_instruction-instruction_handler
db 'cmp',38h
dw basic_instruction-instruction_handler
db 'cqo',99h
dw simple_instruction_64bit-instruction_handler
db 'cwd',99h
dw simple_instruction_16bit-instruction_handler
db 'daa',27h
dw simple_instruction_except64-instruction_handler
db 'das',2Fh
dw simple_instruction_except64-instruction_handler
db 'dec',1
dw inc_instruction-instruction_handler
db 'div',6
dw single_operand_instruction-instruction_handler
db 'end',0
dw end_directive-instruction_handler
db 'err',0
dw err_directive-instruction_handler
db 'fld',0
dw fld_instruction-instruction_handler
db 'fst',2
dw fld_instruction-instruction_handler
db 'hlt',0F4h
dw simple_instruction-instruction_handler
db 'inc',0
dw inc_instruction-instruction_handler
db 'ins',6Ch
dw ins_instruction-instruction_handler
db 'int',0CDh
dw int_instruction-instruction_handler
db 'jae',73h
dw conditional_jump-instruction_handler
db 'jbe',76h
dw conditional_jump-instruction_handler
db 'jge',7Dh
dw conditional_jump-instruction_handler
db 'jle',7Eh
dw conditional_jump-instruction_handler
db 'jmp',0
dw jmp_instruction-instruction_handler
db 'jna',76h
dw conditional_jump-instruction_handler
db 'jnb',73h
dw conditional_jump-instruction_handler
db 'jnc',73h
dw conditional_jump-instruction_handler
db 'jne',75h
dw conditional_jump-instruction_handler
db 'jng',7Eh
dw conditional_jump-instruction_handler
db 'jnl',7Dh
dw conditional_jump-instruction_handler
db 'jno',71h
dw conditional_jump-instruction_handler
db 'jnp',7Bh
dw conditional_jump-instruction_handler
db 'jns',79h
dw conditional_jump-instruction_handler
db 'jnz',75h
dw conditional_jump-instruction_handler
db 'jpe',7Ah
dw conditional_jump-instruction_handler
db 'jpo',7Bh
dw conditional_jump-instruction_handler
db 'lar',2
dw lar_instruction-instruction_handler
db 'lds',3
dw ls_instruction-instruction_handler
db 'lea',0
dw lea_instruction-instruction_handler
db 'les',0
dw ls_instruction-instruction_handler
db 'lfs',4
dw ls_instruction-instruction_handler
db 'lgs',5
dw ls_instruction-instruction_handler
db 'lsl',3
dw lar_instruction-instruction_handler
db 'lss',2
dw ls_instruction-instruction_handler
db 'ltr',3
dw pm_word_instruction-instruction_handler
db 'mov',0
dw mov_instruction-instruction_handler
db 'mul',4
dw single_operand_instruction-instruction_handler
db 'neg',3
dw single_operand_instruction-instruction_handler
db 'nop',90h
dw nop_instruction-instruction_handler
db 'not',2
dw single_operand_instruction-instruction_handler
db 'org',0
dw org_directive-instruction_handler
db 'out',0
dw out_instruction-instruction_handler
db 'pop',0
dw pop_instruction-instruction_handler
db 'por',0EBh
dw basic_mmx_instruction-instruction_handler
db 'rcl',2
dw sh_instruction-instruction_handler
db 'rcr',3
dw sh_instruction-instruction_handler
db 'rep',0F3h
dw prefix_instruction-instruction_handler
db 'ret',0C2h
dw ret_instruction-instruction_handler
db 'rol',0
dw sh_instruction-instruction_handler
db 'ror',1
dw sh_instruction-instruction_handler
db 'rsm',0AAh
dw simple_extended_instruction-instruction_handler
db 'sal',4
dw sh_instruction-instruction_handler
db 'sar',7
dw sh_instruction-instruction_handler
db 'sbb',18h
dw basic_instruction-instruction_handler
db 'shl',4
dw sh_instruction-instruction_handler
db 'shr',5
dw sh_instruction-instruction_handler
db 'stc',0F9h
dw simple_instruction-instruction_handler
db 'std',0FDh
dw simple_instruction-instruction_handler
db 'sti',0FBh
dw simple_instruction-instruction_handler
db 'str',1
dw pm_store_word_instruction-instruction_handler
db 'sub',28h
dw basic_instruction-instruction_handler
db 'ud2',0Bh
dw simple_extended_instruction-instruction_handler
db 'xor',30h
dw basic_instruction-instruction_handler
instructions_4:
db 'andn',0F2h
dw andn_instruction-instruction_handler
db 'arpl',0
dw arpl_instruction-instruction_handler
db 'blci',26h
dw tbm_instruction-instruction_handler
db 'blcs',13h
dw tbm_instruction-instruction_handler
db 'blsi',3
dw bmi_instruction-instruction_handler
db 'blsr',1
dw bmi_instruction-instruction_handler
db 'bzhi',0F5h
dw bzhi_instruction-instruction_handler
db 'call',0
dw call_instruction-instruction_handler
db 'cdqe',98h
dw simple_instruction_64bit-instruction_handler
db 'clgi',0DDh
dw simple_vmx_instruction-instruction_handler
db 'clts',6
dw simple_extended_instruction-instruction_handler
db 'cmps',0A6h
dw cmps_instruction-instruction_handler
db 'cwde',98h
dw simple_instruction_32bit-instruction_handler
db 'data',0
dw data_directive-instruction_handler
db 'dppd',41h
dw sse4_instruction_3a_imm8-instruction_handler
db 'dpps',40h
dw sse4_instruction_3a_imm8-instruction_handler
db 'else',0
dw else_directive-instruction_handler
db 'emms',77h
dw simple_extended_instruction-instruction_handler
db 'fabs',100001b
dw simple_fpu_instruction-instruction_handler
db 'fadd',0
dw basic_fpu_instruction-instruction_handler
db 'fbld',4
dw fbld_instruction-instruction_handler
db 'fchs',100000b
dw simple_fpu_instruction-instruction_handler
db 'fcom',2
dw basic_fpu_instruction-instruction_handler
db 'fcos',111111b
dw simple_fpu_instruction-instruction_handler
db 'fdiv',6
dw basic_fpu_instruction-instruction_handler
db 'feni',0E0h
dw finit_instruction-instruction_handler
db 'fild',0
dw fild_instruction-instruction_handler
db 'fist',2
dw fild_instruction-instruction_handler
db 'fld1',101000b
dw simple_fpu_instruction-instruction_handler
db 'fldz',101110b
dw simple_fpu_instruction-instruction_handler
db 'fmul',1
dw basic_fpu_instruction-instruction_handler
db 'fnop',010000b
dw simple_fpu_instruction-instruction_handler
db 'fsin',111110b
dw simple_fpu_instruction-instruction_handler
db 'fstp',3
dw fld_instruction-instruction_handler
db 'fsub',4
dw basic_fpu_instruction-instruction_handler
db 'ftst',100100b
dw simple_fpu_instruction-instruction_handler
db 'fxam',100101b
dw simple_fpu_instruction-instruction_handler
db 'fxch',0
dw fxch_instruction-instruction_handler
db 'heap',0
dw heap_directive-instruction_handler
db 'idiv',7
dw single_operand_instruction-instruction_handler
db 'imul',0
dw imul_instruction-instruction_handler
db 'insb',6Ch
dw simple_instruction-instruction_handler
db 'insd',6Dh
dw simple_instruction_32bit-instruction_handler
db 'insw',6Dh
dw simple_instruction_16bit-instruction_handler
db 'int1',0F1h
dw simple_instruction-instruction_handler
db 'int3',0CCh
dw simple_instruction-instruction_handler
db 'into',0CEh
dw simple_instruction_except64-instruction_handler
db 'invd',8
dw simple_extended_instruction-instruction_handler
db 'iret',0CFh
dw iret_instruction-instruction_handler
db 'jcxz',0E3h
dw loop_instruction_16bit-instruction_handler
db 'jnae',72h
dw conditional_jump-instruction_handler
db 'jnbe',77h
dw conditional_jump-instruction_handler
db 'jnge',7Ch
dw conditional_jump-instruction_handler
db 'jnle',7Fh
dw conditional_jump-instruction_handler
db 'lahf',9Fh
dw simple_instruction-instruction_handler
db 'lgdt',2
dw lgdt_instruction-instruction_handler
db 'lidt',3
dw lgdt_instruction-instruction_handler
db 'lldt',2
dw pm_word_instruction-instruction_handler
db 'lmsw',16h
dw pm_word_instruction-instruction_handler
db 'load',0
dw load_directive-instruction_handler
db 'lock',0F0h
dw prefix_instruction-instruction_handler
db 'lods',0ACh
dw lods_instruction-instruction_handler
db 'loop',0E2h
dw loop_instruction-instruction_handler
db 'movd',0
dw movd_instruction-instruction_handler
db 'movq',0
dw movq_instruction-instruction_handler
db 'movs',0A4h
dw movs_instruction-instruction_handler
db 'mulx',0F6h
dw pdep_instruction-instruction_handler
db 'orpd',56h
dw sse_pd_instruction-instruction_handler
db 'orps',56h
dw sse_ps_instruction-instruction_handler
db 'outs',6Eh
dw outs_instruction-instruction_handler
db 'pand',0DBh
dw basic_mmx_instruction-instruction_handler
db 'pdep',0F5h
dw pdep_instruction-instruction_handler
db 'pext',0F5h
dw pext_instruction-instruction_handler
db 'popa',61h
dw simple_instruction_except64-instruction_handler
db 'popd',4
dw pop_instruction-instruction_handler
db 'popf',9Dh
dw simple_instruction-instruction_handler
db 'popq',8
dw pop_instruction-instruction_handler
db 'popw',2
dw pop_instruction-instruction_handler
db 'push',0
dw push_instruction-instruction_handler
db 'pxor',0EFh
dw basic_mmx_instruction-instruction_handler
db 'repe',0F3h
dw prefix_instruction-instruction_handler
db 'repz',0F3h
dw prefix_instruction-instruction_handler
db 'retd',0C2h
dw ret_instruction_32bit_except64-instruction_handler
db 'retf',0CAh
dw retf_instruction-instruction_handler
db 'retn',0C2h
dw ret_instruction-instruction_handler
db 'retq',0C2h
dw ret_instruction_only64-instruction_handler
db 'retw',0C2h
dw ret_instruction_16bit-instruction_handler
db 'rorx',0F0h
dw rorx_instruction-instruction_handler
db 'sahf',9Eh
dw simple_instruction-instruction_handler
db 'salc',0D6h
dw simple_instruction_except64-instruction_handler
db 'sarx',0F7h
dw sarx_instruction-instruction_handler
db 'scas',0AEh
dw stos_instruction-instruction_handler
db 'seta',97h
dw set_instruction-instruction_handler
db 'setb',92h
dw set_instruction-instruction_handler
db 'setc',92h
dw set_instruction-instruction_handler
db 'sete',94h
dw set_instruction-instruction_handler
db 'setg',9Fh
dw set_instruction-instruction_handler
db 'setl',9Ch
dw set_instruction-instruction_handler
db 'seto',90h
dw set_instruction-instruction_handler
db 'setp',9Ah
dw set_instruction-instruction_handler
db 'sets',98h
dw set_instruction-instruction_handler
db 'setz',94h
dw set_instruction-instruction_handler
db 'sgdt',0
dw lgdt_instruction-instruction_handler
db 'shld',0A4h
dw shd_instruction-instruction_handler
db 'shlx',0F7h
dw shlx_instruction-instruction_handler
db 'shrd',0ACh
dw shd_instruction-instruction_handler
db 'shrx',0F7h
dw shrx_instruction-instruction_handler
db 'sidt',1
dw lgdt_instruction-instruction_handler
db 'sldt',0
dw pm_store_word_instruction-instruction_handler
db 'smsw',14h
dw pm_store_word_instruction-instruction_handler
db 'stgi',0DCh
dw simple_vmx_instruction-instruction_handler
db 'stos',0AAh
dw stos_instruction-instruction_handler
db 'test',0
dw test_instruction-instruction_handler
db 'verr',4
dw pm_word_instruction-instruction_handler
db 'verw',5
dw pm_word_instruction-instruction_handler
db 'vpor',0EBh
dw avx_pd_instruction-instruction_handler
db 'wait',9Bh
dw simple_instruction-instruction_handler
db 'xadd',0C0h
dw basic_486_instruction-instruction_handler
db 'xchg',0
dw xchg_instruction-instruction_handler
db 'xend',0D5h
dw simple_vmx_instruction-instruction_handler
db 'xlat',0D7h
dw xlat_instruction-instruction_handler
instructions_5:
db 'addpd',58h
dw sse_pd_instruction-instruction_handler
db 'addps',58h
dw sse_ps_instruction-instruction_handler
db 'addsd',58h
dw sse_sd_instruction-instruction_handler
db 'addss',58h
dw sse_ss_instruction-instruction_handler
db 'align',0
dw align_directive-instruction_handler
db 'andpd',54h
dw sse_pd_instruction-instruction_handler
db 'andps',54h
dw sse_ps_instruction-instruction_handler
db 'bextr',0F7h
dw bextr_instruction-instruction_handler
db 'blcic',15h
dw tbm_instruction-instruction_handler
db 'blsic',16h
dw tbm_instruction-instruction_handler
db 'bound',0
dw bound_instruction-instruction_handler
db 'break',0
dw break_directive-instruction_handler
db 'bswap',0
dw bswap_instruction-instruction_handler
db 'cmova',47h
dw bs_instruction-instruction_handler
db 'cmovb',42h
dw bs_instruction-instruction_handler
db 'cmovc',42h
dw bs_instruction-instruction_handler
db 'cmove',44h
dw bs_instruction-instruction_handler
db 'cmovg',4Fh
dw bs_instruction-instruction_handler
db 'cmovl',4Ch
dw bs_instruction-instruction_handler
db 'cmovo',40h
dw bs_instruction-instruction_handler
db 'cmovp',4Ah
dw bs_instruction-instruction_handler
db 'cmovs',48h
dw bs_instruction-instruction_handler
db 'cmovz',44h
dw bs_instruction-instruction_handler
db 'cmppd',-1
dw cmp_pd_instruction-instruction_handler
db 'cmpps',-1
dw cmp_ps_instruction-instruction_handler
db 'cmpsb',0A6h
dw simple_instruction-instruction_handler
db 'cmpsd',-1
dw cmpsd_instruction-instruction_handler
db 'cmpsq',0A7h
dw simple_instruction_64bit-instruction_handler
db 'cmpss',-1
dw cmp_ss_instruction-instruction_handler
db 'cmpsw',0A7h
dw simple_instruction_16bit-instruction_handler
db 'cpuid',0A2h
dw simple_extended_instruction-instruction_handler
db 'crc32',0
dw crc32_instruction-instruction_handler
db 'divpd',5Eh
dw sse_pd_instruction-instruction_handler
db 'divps',5Eh
dw sse_ps_instruction-instruction_handler
db 'divsd',5Eh
dw sse_sd_instruction-instruction_handler
db 'divss',5Eh
dw sse_ss_instruction-instruction_handler
db 'enter',0
dw enter_instruction-instruction_handler
db 'entry',0
dw entry_directive-instruction_handler
db 'extrn',0
dw extrn_directive-instruction_handler
db 'extrq',0
dw extrq_instruction-instruction_handler
db 'f2xm1',110000b
dw simple_fpu_instruction-instruction_handler
db 'faddp',0
dw faddp_instruction-instruction_handler
db 'fbstp',6
dw fbld_instruction-instruction_handler
db 'fclex',0E2h
dw finit_instruction-instruction_handler
db 'fcomi',0F0h
dw fcomi_instruction-instruction_handler
db 'fcomp',3
dw basic_fpu_instruction-instruction_handler
db 'fdisi',0E1h
dw finit_instruction-instruction_handler
db 'fdivp',7
dw faddp_instruction-instruction_handler
db 'fdivr',7
dw basic_fpu_instruction-instruction_handler
db 'femms',0Eh
dw simple_extended_instruction-instruction_handler
db 'ffree',0
dw ffree_instruction-instruction_handler
db 'fiadd',0
dw fi_instruction-instruction_handler
db 'ficom',2
dw fi_instruction-instruction_handler
db 'fidiv',6
dw fi_instruction-instruction_handler
db 'fimul',1
dw fi_instruction-instruction_handler
db 'finit',0E3h
dw finit_instruction-instruction_handler
db 'fistp',3
dw fild_instruction-instruction_handler
db 'fisub',4
dw fi_instruction-instruction_handler
db 'fldcw',5
dw fldcw_instruction-instruction_handler
db 'fldpi',101011b
dw simple_fpu_instruction-instruction_handler
db 'fmulp',1
dw faddp_instruction-instruction_handler
db 'fneni',0E0h
dw fninit_instruction-instruction_handler
db 'fprem',111000b
dw simple_fpu_instruction-instruction_handler
db 'fptan',110010b
dw simple_fpu_instruction-instruction_handler
db 'fsave',6
dw fsave_instruction-instruction_handler
db 'fsqrt',111010b
dw simple_fpu_instruction-instruction_handler
db 'fstcw',7
dw fstcw_instruction-instruction_handler
db 'fstsw',0
dw fstsw_instruction-instruction_handler
db 'fsubp',5
dw faddp_instruction-instruction_handler
db 'fsubr',5
dw basic_fpu_instruction-instruction_handler
db 'fucom',4
dw ffree_instruction-instruction_handler
db 'fwait',9Bh
dw simple_instruction-instruction_handler
db 'fyl2x',110001b
dw simple_fpu_instruction-instruction_handler
db 'icebp',0F1h
dw simple_instruction-instruction_handler
db 'iretd',0CFh
dw simple_instruction_32bit-instruction_handler
db 'iretq',0CFh
dw simple_instruction_64bit-instruction_handler
db 'iretw',0CFh
dw simple_instruction_16bit-instruction_handler
db 'jecxz',0E3h
dw loop_instruction_32bit-instruction_handler
db 'jrcxz',0E3h
dw loop_instruction_64bit-instruction_handler
db 'label',0
dw label_directive-instruction_handler
db 'lddqu',0
dw lddqu_instruction-instruction_handler
db 'leave',0C9h
dw simple_instruction-instruction_handler
db 'lodsb',0ACh
dw simple_instruction-instruction_handler
db 'lodsd',0ADh
dw simple_instruction_32bit-instruction_handler
db 'lodsq',0ADh
dw simple_instruction_64bit-instruction_handler
db 'lodsw',0ADh
dw simple_instruction_16bit-instruction_handler
db 'loopd',0E2h
dw loop_instruction_32bit-instruction_handler
db 'loope',0E1h
dw loop_instruction-instruction_handler
db 'loopq',0E2h
dw loop_instruction_64bit-instruction_handler
db 'loopw',0E2h
dw loop_instruction_16bit-instruction_handler
db 'loopz',0E1h
dw loop_instruction-instruction_handler
db 'lzcnt',0BDh
dw popcnt_instruction-instruction_handler
db 'maxpd',5Fh
dw sse_pd_instruction-instruction_handler
db 'maxps',5Fh
dw sse_ps_instruction-instruction_handler
db 'maxsd',5Fh
dw sse_sd_instruction-instruction_handler
db 'maxss',5Fh
dw sse_ss_instruction-instruction_handler
db 'minpd',5Dh
dw sse_pd_instruction-instruction_handler
db 'minps',5Dh
dw sse_ps_instruction-instruction_handler
db 'minsd',5Dh
dw sse_sd_instruction-instruction_handler
db 'minss',5Dh
dw sse_ss_instruction-instruction_handler
db 'movbe',0F0h
dw movbe_instruction-instruction_handler
db 'movsb',0A4h
dw simple_instruction-instruction_handler
db 'movsd',0
dw movsd_instruction-instruction_handler
db 'movsq',0A5h
dw simple_instruction_64bit-instruction_handler
db 'movss',0
dw movss_instruction-instruction_handler
db 'movsw',0A5h
dw simple_instruction_16bit-instruction_handler
db 'movsx',0BEh
dw movx_instruction-instruction_handler
db 'movzx',0B6h
dw movx_instruction-instruction_handler
db 'mulpd',59h
dw sse_pd_instruction-instruction_handler
db 'mulps',59h
dw sse_ps_instruction-instruction_handler
db 'mulsd',59h
dw sse_sd_instruction-instruction_handler
db 'mulss',59h
dw sse_ss_instruction-instruction_handler
db 'mwait',0C9h
dw monitor_instruction-instruction_handler
db 'outsb',6Eh
dw simple_instruction-instruction_handler
db 'outsd',6Fh
dw simple_instruction_32bit-instruction_handler
db 'outsw',6Fh
dw simple_instruction_16bit-instruction_handler
db 'pabsb',1Ch
dw ssse3_instruction-instruction_handler
db 'pabsd',1Eh
dw ssse3_instruction-instruction_handler
db 'pabsw',1Dh
dw ssse3_instruction-instruction_handler
db 'paddb',0FCh
dw basic_mmx_instruction-instruction_handler
db 'paddd',0FEh
dw basic_mmx_instruction-instruction_handler
db 'paddq',0D4h
dw basic_mmx_instruction-instruction_handler
db 'paddw',0FDh
dw basic_mmx_instruction-instruction_handler
db 'pandn',0DFh
dw basic_mmx_instruction-instruction_handler
db 'pause',0
dw pause_instruction-instruction_handler
db 'pavgb',0E0h
dw basic_mmx_instruction-instruction_handler
db 'pavgw',0E3h
dw basic_mmx_instruction-instruction_handler
db 'pf2id',1Dh
dw amd3dnow_instruction-instruction_handler
db 'pf2iw',1Ch
dw amd3dnow_instruction-instruction_handler
db 'pfacc',0AEh
dw amd3dnow_instruction-instruction_handler
db 'pfadd',9Eh
dw amd3dnow_instruction-instruction_handler
db 'pfmax',0A4h
dw amd3dnow_instruction-instruction_handler
db 'pfmin',94h
dw amd3dnow_instruction-instruction_handler
db 'pfmul',0B4h
dw amd3dnow_instruction-instruction_handler
db 'pfrcp',96h
dw amd3dnow_instruction-instruction_handler
db 'pfsub',9Ah
dw amd3dnow_instruction-instruction_handler
db 'pi2fd',0Dh
dw amd3dnow_instruction-instruction_handler
db 'pi2fw',0Ch
dw amd3dnow_instruction-instruction_handler
db 'popad',61h
dw simple_instruction_32bit_except64-instruction_handler
db 'popaw',61h
dw simple_instruction_16bit_except64-instruction_handler
db 'popfd',9Dh
dw simple_instruction_32bit_except64-instruction_handler
db 'popfq',9Dh
dw simple_instruction_only64-instruction_handler
db 'popfw',9Dh
dw simple_instruction_16bit-instruction_handler
db 'pslld',0F2h
dw mmx_bit_shift_instruction-instruction_handler
db 'psllq',0F3h
dw mmx_bit_shift_instruction-instruction_handler
db 'psllw',0F1h
dw mmx_bit_shift_instruction-instruction_handler
db 'psrad',0E2h
dw mmx_bit_shift_instruction-instruction_handler
db 'psraw',0E1h
dw mmx_bit_shift_instruction-instruction_handler
db 'psrld',0D2h
dw mmx_bit_shift_instruction-instruction_handler
db 'psrlq',0D3h
dw mmx_bit_shift_instruction-instruction_handler
db 'psrlw',0D1h
dw mmx_bit_shift_instruction-instruction_handler
db 'psubb',0F8h
dw basic_mmx_instruction-instruction_handler
db 'psubd',0FAh
dw basic_mmx_instruction-instruction_handler
db 'psubq',0FBh
dw basic_mmx_instruction-instruction_handler
db 'psubw',0F9h
dw basic_mmx_instruction-instruction_handler
db 'ptest',17h
dw sse4_instruction_38-instruction_handler
db 'pusha',60h
dw simple_instruction_except64-instruction_handler
db 'pushd',4
dw push_instruction-instruction_handler
db 'pushf',9Ch
dw simple_instruction-instruction_handler
db 'pushq',8
dw push_instruction-instruction_handler
db 'pushw',2
dw push_instruction-instruction_handler
db 'rcpps',53h
dw sse_ps_instruction-instruction_handler
db 'rcpss',53h
dw sse_ss_instruction-instruction_handler
db 'rdmsr',32h
dw simple_extended_instruction-instruction_handler
db 'rdpmc',33h
dw simple_extended_instruction-instruction_handler
db 'rdtsc',31h
dw simple_extended_instruction-instruction_handler
db 'repne',0F2h
dw prefix_instruction-instruction_handler
db 'repnz',0F2h
dw prefix_instruction-instruction_handler
db 'retfd',0CAh
dw ret_instruction_32bit-instruction_handler
db 'retfq',0CAh
dw ret_instruction_64bit-instruction_handler
db 'retfw',0CAh
dw ret_instruction_16bit-instruction_handler
db 'retnd',0C2h
dw ret_instruction_32bit_except64-instruction_handler
db 'retnq',0C2h
dw ret_instruction_only64-instruction_handler
db 'retnw',0C2h
dw ret_instruction_16bit-instruction_handler
db 'scasb',0AEh
dw simple_instruction-instruction_handler
db 'scasd',0AFh
dw simple_instruction_32bit-instruction_handler
db 'scasq',0AFh
dw simple_instruction_64bit-instruction_handler
db 'scasw',0AFh
dw simple_instruction_16bit-instruction_handler
db 'setae',93h
dw set_instruction-instruction_handler
db 'setbe',96h
dw set_instruction-instruction_handler
db 'setge',9Dh
dw set_instruction-instruction_handler
db 'setle',9Eh
dw set_instruction-instruction_handler
db 'setna',96h
dw set_instruction-instruction_handler
db 'setnb',93h
dw set_instruction-instruction_handler
db 'setnc',93h
dw set_instruction-instruction_handler
db 'setne',95h
dw set_instruction-instruction_handler
db 'setng',9Eh
dw set_instruction-instruction_handler
db 'setnl',9Dh
dw set_instruction-instruction_handler
db 'setno',91h
dw set_instruction-instruction_handler
db 'setnp',9Bh
dw set_instruction-instruction_handler
db 'setns',99h
dw set_instruction-instruction_handler
db 'setnz',95h
dw set_instruction-instruction_handler
db 'setpe',9Ah
dw set_instruction-instruction_handler
db 'setpo',9Bh
dw set_instruction-instruction_handler
db 'stack',0
dw stack_directive-instruction_handler
db 'store',0
dw store_directive-instruction_handler
db 'stosb',0AAh
dw simple_instruction-instruction_handler
db 'stosd',0ABh
dw simple_instruction_32bit-instruction_handler
db 'stosq',0ABh
dw simple_instruction_64bit-instruction_handler
db 'stosw',0ABh
dw simple_instruction_16bit-instruction_handler
db 'subpd',5Ch
dw sse_pd_instruction-instruction_handler
db 'subps',5Ch
dw sse_ps_instruction-instruction_handler
db 'subsd',5Ch
dw sse_sd_instruction-instruction_handler
db 'subss',5Ch
dw sse_ss_instruction-instruction_handler
db 'times',0
dw times_directive-instruction_handler
db 'tzcnt',0BCh
dw popcnt_instruction-instruction_handler
db 'tzmsk',14h
dw tbm_instruction-instruction_handler
db 'vdppd',41h
dw avx_128bit_instruction_3a_imm8-instruction_handler
db 'vdpps',40h
dw avx_instruction_3a_imm8-instruction_handler
db 'vmovd',0
dw avx_movd_instruction-instruction_handler
db 'vmovq',0
dw avx_movq_instruction-instruction_handler
db 'vmrun',0D8h
dw simple_svm_instruction-instruction_handler
db 'vmxon',6
dw vmxon_instruction-instruction_handler
db 'vorpd',56h
dw avx_pd_instruction-instruction_handler
db 'vorps',56h
dw avx_ps_instruction-instruction_handler
db 'vpand',0DBh
dw avx_pd_instruction-instruction_handler
db 'vpxor',0EFh
dw avx_pd_instruction-instruction_handler
db 'while',0
dw while_directive-instruction_handler
db 'wrmsr',30h
dw simple_extended_instruction-instruction_handler
db 'xlatb',0D7h
dw simple_instruction-instruction_handler
db 'xorpd',57h
dw sse_pd_instruction-instruction_handler
db 'xorps',57h
dw sse_ps_instruction-instruction_handler
db 'xsave',100b
dw fxsave_instruction-instruction_handler
db 'xtest',0D6h
dw simple_vmx_instruction-instruction_handler
instructions_6:
db 'aesdec',0DEh
dw sse4_instruction_38-instruction_handler
db 'aesenc',0DCh
dw sse4_instruction_38-instruction_handler
db 'aesimc',0DBh
dw sse4_instruction_38-instruction_handler
db 'andnpd',55h
dw sse_pd_instruction-instruction_handler
db 'andnps',55h
dw sse_ps_instruction-instruction_handler
db 'assert',0
dw assert_directive-instruction_handler
db 'blcmsk',21h
dw tbm_instruction-instruction_handler
db 'blsmsk',2
dw bmi_instruction-instruction_handler
db 'cmovae',43h
dw bs_instruction-instruction_handler
db 'cmovbe',46h
dw bs_instruction-instruction_handler
db 'cmovge',4Dh
dw bs_instruction-instruction_handler
db 'cmovle',4Eh
dw bs_instruction-instruction_handler
db 'cmovna',46h
dw bs_instruction-instruction_handler
db 'cmovnb',43h
dw bs_instruction-instruction_handler
db 'cmovnc',43h
dw bs_instruction-instruction_handler
db 'cmovne',45h
dw bs_instruction-instruction_handler
db 'cmovng',4Eh
dw bs_instruction-instruction_handler
db 'cmovnl',4Dh
dw bs_instruction-instruction_handler
db 'cmovno',41h
dw bs_instruction-instruction_handler
db 'cmovnp',4Bh
dw bs_instruction-instruction_handler
db 'cmovns',49h
dw bs_instruction-instruction_handler
db 'cmovnz',45h
dw bs_instruction-instruction_handler
db 'cmovpe',4Ah
dw bs_instruction-instruction_handler
db 'cmovpo',4Bh
dw bs_instruction-instruction_handler
db 'comisd',2Fh
dw comisd_instruction-instruction_handler
db 'comiss',2Fh
dw comiss_instruction-instruction_handler
db 'fcmovb',0C0h
dw fcmov_instruction-instruction_handler
db 'fcmove',0C8h
dw fcmov_instruction-instruction_handler
db 'fcmovu',0D8h
dw fcmov_instruction-instruction_handler
db 'fcomip',0F0h
dw fcomip_instruction-instruction_handler
db 'fcompp',0
dw fcompp_instruction-instruction_handler
db 'fdivrp',6
dw faddp_instruction-instruction_handler
db 'ffreep',0
dw ffreep_instruction-instruction_handler
db 'ficomp',3
dw fi_instruction-instruction_handler
db 'fidivr',7
dw fi_instruction-instruction_handler
db 'fisttp',1
dw fild_instruction-instruction_handler
db 'fisubr',5
dw fi_instruction-instruction_handler
db 'fldenv',4
dw fldenv_instruction-instruction_handler
db 'fldl2e',101010b
dw simple_fpu_instruction-instruction_handler
db 'fldl2t',101001b
dw simple_fpu_instruction-instruction_handler
db 'fldlg2',101100b
dw simple_fpu_instruction-instruction_handler
db 'fldln2',101101b
dw simple_fpu_instruction-instruction_handler
db 'fnclex',0E2h
dw fninit_instruction-instruction_handler
db 'fndisi',0E1h
dw fninit_instruction-instruction_handler
db 'fninit',0E3h
dw fninit_instruction-instruction_handler
db 'fnsave',6
dw fnsave_instruction-instruction_handler
db 'fnstcw',7
dw fldcw_instruction-instruction_handler
db 'fnstsw',0
dw fnstsw_instruction-instruction_handler
db 'format',0
dw format_directive-instruction_handler
db 'fpatan',110011b
dw simple_fpu_instruction-instruction_handler
db 'fprem1',110101b
dw simple_fpu_instruction-instruction_handler
db 'frstor',4
dw fnsave_instruction-instruction_handler
db 'frstpm',0E5h
dw fninit_instruction-instruction_handler
db 'fsaved',6
dw fsave_instruction_32bit-instruction_handler
db 'fsavew',6
dw fsave_instruction_16bit-instruction_handler
db 'fscale',111101b
dw simple_fpu_instruction-instruction_handler
db 'fsetpm',0E4h
dw fninit_instruction-instruction_handler
db 'fstenv',6
dw fstenv_instruction-instruction_handler
db 'fsubrp',4
dw faddp_instruction-instruction_handler
db 'fucomi',0E8h
dw fcomi_instruction-instruction_handler
db 'fucomp',5
dw ffree_instruction-instruction_handler
db 'fxsave',0
dw fxsave_instruction-instruction_handler
db 'getsec',37h
dw simple_extended_instruction-instruction_handler
db 'haddpd',07Ch
dw sse_pd_instruction-instruction_handler
db 'haddps',07Ch
dw cvtpd2dq_instruction-instruction_handler
db 'hsubpd',07Dh
dw sse_pd_instruction-instruction_handler
db 'hsubps',07Dh
dw cvtpd2dq_instruction-instruction_handler
db 'invept',80h
dw vmx_inv_instruction-instruction_handler
db 'invlpg',0
dw invlpg_instruction-instruction_handler
db 'lfence',0E8h
dw fence_instruction-instruction_handler
db 'llwpcb',0
dw llwpcb_instruction-instruction_handler
db 'looped',0E1h
dw loop_instruction_32bit-instruction_handler
db 'loopeq',0E1h
dw loop_instruction_64bit-instruction_handler
db 'loopew',0E1h
dw loop_instruction_16bit-instruction_handler
db 'loopne',0E0h
dw loop_instruction-instruction_handler
db 'loopnz',0E0h
dw loop_instruction-instruction_handler
db 'loopzd',0E1h
dw loop_instruction_32bit-instruction_handler
db 'loopzq',0E1h
dw loop_instruction_64bit-instruction_handler
db 'loopzw',0E1h
dw loop_instruction_16bit-instruction_handler
db 'lwpins',0
dw lwpins_instruction-instruction_handler
db 'lwpval',1
dw lwpins_instruction-instruction_handler
db 'mfence',0F0h
dw fence_instruction-instruction_handler
db 'movapd',28h
dw movpd_instruction-instruction_handler
db 'movaps',28h
dw movps_instruction-instruction_handler
db 'movdqa',66h
dw movdq_instruction-instruction_handler
db 'movdqu',0F3h
dw movdq_instruction-instruction_handler
db 'movhpd',16h
dw movlpd_instruction-instruction_handler
db 'movhps',16h
dw movlps_instruction-instruction_handler
db 'movlpd',12h
dw movlpd_instruction-instruction_handler
db 'movlps',12h
dw movlps_instruction-instruction_handler
db 'movnti',0C3h
dw movnti_instruction-instruction_handler
db 'movntq',0E7h
dw movntq_instruction-instruction_handler
db 'movsxd',63h
dw movsxd_instruction-instruction_handler
db 'movupd',10h
dw movpd_instruction-instruction_handler
db 'movups',10h
dw movps_instruction-instruction_handler
db 'paddsb',0ECh
dw basic_mmx_instruction-instruction_handler
db 'paddsw',0EDh
dw basic_mmx_instruction-instruction_handler
db 'pextrb',14h
dw pextrb_instruction-instruction_handler
db 'pextrd',16h
dw pextrd_instruction-instruction_handler
db 'pextrq',16h
dw pextrq_instruction-instruction_handler
db 'pextrw',15h
dw pextrw_instruction-instruction_handler
db 'pfnacc',8Ah
dw amd3dnow_instruction-instruction_handler
db 'pfsubr',0AAh
dw amd3dnow_instruction-instruction_handler
db 'phaddd',2
dw ssse3_instruction-instruction_handler
db 'phaddw',1
dw ssse3_instruction-instruction_handler
db 'phsubd',6
dw ssse3_instruction-instruction_handler
db 'phsubw',5
dw ssse3_instruction-instruction_handler
db 'pinsrb',20h
dw pinsrb_instruction-instruction_handler
db 'pinsrd',22h
dw pinsrd_instruction-instruction_handler
db 'pinsrq',22h
dw pinsrq_instruction-instruction_handler
db 'pinsrw',0C4h
dw pinsrw_instruction-instruction_handler
db 'pmaxsb',3Ch
dw sse4_instruction_38-instruction_handler
db 'pmaxsd',3Dh
dw sse4_instruction_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
db 'pmaxuw',3Eh
dw sse4_instruction_38-instruction_handler
db 'pminsb',38h
dw sse4_instruction_38-instruction_handler
db 'pminsd',39h
dw sse4_instruction_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
db 'pminuw',3Ah
dw sse4_instruction_38-instruction_handler
db 'pmuldq',28h
dw sse4_instruction_38-instruction_handler
db 'pmulhw',0E5h
dw basic_mmx_instruction-instruction_handler
db 'pmulld',40h
dw sse4_instruction_38-instruction_handler
db 'pmullw',0D5h
dw basic_mmx_instruction-instruction_handler
db 'popcnt',0B8h
dw popcnt_instruction-instruction_handler
db 'psadbw',0F6h
dw basic_mmx_instruction-instruction_handler
db 'pshufb',0
dw ssse3_instruction-instruction_handler
db 'pshufd',66h
dw pshufd_instruction-instruction_handler
db 'pshufw',0
dw pshufw_instruction-instruction_handler
db 'psignb',8
dw ssse3_instruction-instruction_handler
db 'psignd',0Ah
dw ssse3_instruction-instruction_handler
db 'psignw',9
dw ssse3_instruction-instruction_handler
db 'pslldq',111b
dw pslldq_instruction-instruction_handler
db 'psrldq',011b
dw pslldq_instruction-instruction_handler
db 'psubsb',0E8h
dw basic_mmx_instruction-instruction_handler
db 'psubsw',0E9h
dw basic_mmx_instruction-instruction_handler
db 'pswapd',0BBh
dw amd3dnow_instruction-instruction_handler
db 'public',0
dw public_directive-instruction_handler
db 'pushad',60h
dw simple_instruction_32bit_except64-instruction_handler
db 'pushaw',60h
dw simple_instruction_16bit_except64-instruction_handler
db 'pushfd',9Ch
dw simple_instruction_32bit_except64-instruction_handler
db 'pushfq',9Ch
dw simple_instruction_only64-instruction_handler
db 'pushfw',9Ch
dw simple_instruction_16bit-instruction_handler
db 'rdmsrq',32h
dw simple_extended_instruction_64bit-instruction_handler
db 'rdrand',110b
dw rdrand_instruction-instruction_handler
db 'rdtscp',1
dw rdtscp_instruction-instruction_handler
db 'repeat',0
dw repeat_directive-instruction_handler
db 'setalc',0D6h
dw simple_instruction_except64-instruction_handler
db 'setnae',92h
dw set_instruction-instruction_handler
db 'setnbe',97h
dw set_instruction-instruction_handler
db 'setnge',9Ch
dw set_instruction-instruction_handler
db 'setnle',9Fh
dw set_instruction-instruction_handler
db 'sfence',0F8h
dw fence_instruction-instruction_handler
db 'shufpd',0C6h
dw sse_pd_instruction_imm8-instruction_handler
db 'shufps',0C6h
dw sse_ps_instruction_imm8-instruction_handler
db 'skinit',0
dw skinit_instruction-instruction_handler
db 'slwpcb',1
dw llwpcb_instruction-instruction_handler
db 'sqrtpd',51h
dw sse_pd_instruction-instruction_handler
db 'sqrtps',51h
dw sse_ps_instruction-instruction_handler
db 'sqrtsd',51h
dw sse_sd_instruction-instruction_handler
db 'sqrtss',51h
dw sse_ss_instruction-instruction_handler
db 'swapgs',0
dw swapgs_instruction-instruction_handler
db 'sysret',07h
dw simple_extended_instruction-instruction_handler
db 't1mskc',17h
dw tbm_instruction-instruction_handler
db 'vaddpd',58h
dw avx_pd_instruction-instruction_handler
db 'vaddps',58h
dw avx_ps_instruction-instruction_handler
db 'vaddsd',58h
dw avx_sd_instruction-instruction_handler
db 'vaddss',58h
dw avx_ss_instruction-instruction_handler
db 'vandpd',54h
dw avx_pd_instruction-instruction_handler
db 'vandps',54h
dw avx_ps_instruction-instruction_handler
db 'vcmppd',-1
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpps',-1
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpsd',-1
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpss',-1
dw avx_cmp_ss_instruction-instruction_handler
db 'vdivpd',5Eh
dw avx_pd_instruction-instruction_handler
db 'vdivps',5Eh
dw avx_ps_instruction-instruction_handler
db 'vdivsd',5Eh
dw avx_sd_instruction-instruction_handler
db 'vdivss',5Eh
dw avx_ss_instruction-instruction_handler
db 'vlddqu',0F0h
dw avx_lddqu_instruction-instruction_handler
db 'vmaxpd',5Fh
dw avx_pd_instruction-instruction_handler
db 'vmaxps',5Fh
dw avx_ps_instruction-instruction_handler
db 'vmaxsd',5Fh
dw avx_sd_instruction-instruction_handler
db 'vmaxss',5Fh
dw avx_ss_instruction-instruction_handler
db 'vmcall',0C1h
dw simple_vmx_instruction-instruction_handler
db 'vminpd',5Dh
dw avx_pd_instruction-instruction_handler
db 'vminps',5Dh
dw avx_ps_instruction-instruction_handler
db 'vminsd',5Dh
dw avx_sd_instruction-instruction_handler
db 'vminss',5Dh
dw avx_ss_instruction-instruction_handler
db 'vmload',0DAh
dw simple_svm_instruction-instruction_handler
db 'vmovsd',0
dw avx_movsd_instruction-instruction_handler
db 'vmovss',0
dw avx_movss_instruction-instruction_handler
db 'vmread',0
dw vmread_instruction-instruction_handler
db 'vmsave',0DBh
dw simple_svm_instruction-instruction_handler
db 'vmulpd',59h
dw avx_pd_instruction-instruction_handler
db 'vmulps',59h
dw avx_ps_instruction-instruction_handler
db 'vmulsd',59h
dw avx_sd_instruction-instruction_handler
db 'vmulss',59h
dw avx_ss_instruction-instruction_handler
db 'vmxoff',0C4h
dw simple_vmx_instruction-instruction_handler
db 'vpabsb',1Ch
dw avx_single_source_instruction_38-instruction_handler
db 'vpabsd',1Eh
dw avx_single_source_instruction_38-instruction_handler
db 'vpabsw',1Dh
dw avx_single_source_instruction_38-instruction_handler
db 'vpaddb',0FCh
dw avx_pd_instruction-instruction_handler
db 'vpaddd',0FEh
dw avx_pd_instruction-instruction_handler
db 'vpaddq',0D4h
dw avx_pd_instruction-instruction_handler
db 'vpaddw',0FDh
dw avx_pd_instruction-instruction_handler
db 'vpandn',0DFh
dw avx_pd_instruction-instruction_handler
db 'vpavgb',0E0h
dw avx_pd_instruction-instruction_handler
db 'vpavgw',0E3h
dw avx_pd_instruction-instruction_handler
db 'vpcmov',0A2h
dw vpcmov_instruction-instruction_handler
db 'vpcomb',-1
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomd',-1
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomq',-1
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomw',-1
dw xop_pcom_w_instruction-instruction_handler
db 'vpermd',36h
dw avx_permd_instruction-instruction_handler
db 'vpermq',0
dw avx_permq_instruction-instruction_handler
db 'vpperm',0A3h
dw xop_128bit_instruction-instruction_handler
db 'vprotb',90h
dw xop_shift_instruction-instruction_handler
db 'vprotd',92h
dw xop_shift_instruction-instruction_handler
db 'vprotq',93h
dw xop_shift_instruction-instruction_handler
db 'vprotw',91h
dw xop_shift_instruction-instruction_handler
db 'vpshab',98h
dw xop_shift_instruction-instruction_handler
db 'vpshad',9Ah
dw xop_shift_instruction-instruction_handler
db 'vpshaq',9Bh
dw xop_shift_instruction-instruction_handler
db 'vpshaw',99h
dw xop_shift_instruction-instruction_handler
db 'vpshlb',94h
dw xop_shift_instruction-instruction_handler
db 'vpshld',96h
dw xop_shift_instruction-instruction_handler
db 'vpshlq',97h
dw xop_shift_instruction-instruction_handler
db 'vpshlw',95h
dw xop_shift_instruction-instruction_handler
db 'vpslld',0F2h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsllq',0F3h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsllw',0F1h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsrad',0E2h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsraw',0E1h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsrld',0D2h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsrlq',0D3h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsrlw',0D1h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsubb',0F8h
dw avx_pd_instruction-instruction_handler
db 'vpsubd',0FAh
dw avx_pd_instruction-instruction_handler
db 'vpsubq',0FBh
dw avx_pd_instruction-instruction_handler
db 'vpsubw',0F9h
dw avx_pd_instruction-instruction_handler
db 'vptest',17h
dw avx_single_source_instruction_38-instruction_handler
db 'vrcpps',53h
dw avx_single_source_ps_instruction-instruction_handler
db 'vrcpss',53h
dw avx_ss_instruction-instruction_handler
db 'vsubpd',5Ch
dw avx_pd_instruction-instruction_handler
db 'vsubps',5Ch
dw avx_ps_instruction-instruction_handler
db 'vsubsd',5Ch
dw avx_sd_instruction-instruction_handler
db 'vsubss',5Ch
dw avx_ss_instruction-instruction_handler
db 'vxorpd',57h
dw avx_pd_instruction-instruction_handler
db 'vxorps',57h
dw avx_ps_instruction-instruction_handler
db 'wbinvd',9
dw simple_extended_instruction-instruction_handler
db 'wrmsrq',30h
dw simple_extended_instruction_64bit-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
db 'xrstor',101b
dw fxsave_instruction-instruction_handler
db 'xsetbv',0D1h
dw simple_vmx_instruction-instruction_handler
instructions_7:
db 'blcfill',11h
dw tbm_instruction-instruction_handler
db 'blendpd',0Dh
dw sse4_instruction_3a_imm8-instruction_handler
db 'blendps',0Ch
dw sse4_instruction_3a_imm8-instruction_handler
db 'blsfill',12h
dw tbm_instruction-instruction_handler
db 'clflush',111b
dw fxsave_instruction-instruction_handler
db 'cmovnae',42h
dw bs_instruction-instruction_handler
db 'cmovnbe',47h
dw bs_instruction-instruction_handler
db 'cmovnge',4Ch
dw bs_instruction-instruction_handler
db 'cmovnle',4Fh
dw bs_instruction-instruction_handler
db 'cmpeqpd',0
dw cmp_pd_instruction-instruction_handler
db 'cmpeqps',0
dw cmp_ps_instruction-instruction_handler
db 'cmpeqsd',0
dw cmp_sd_instruction-instruction_handler
db 'cmpeqss',0
dw cmp_ss_instruction-instruction_handler
db 'cmplepd',2
dw cmp_pd_instruction-instruction_handler
db 'cmpleps',2
dw cmp_ps_instruction-instruction_handler
db 'cmplesd',2
dw cmp_sd_instruction-instruction_handler
db 'cmpless',2
dw cmp_ss_instruction-instruction_handler
db 'cmpltpd',1
dw cmp_pd_instruction-instruction_handler
db 'cmpltps',1
dw cmp_ps_instruction-instruction_handler
db 'cmpltsd',1
dw cmp_sd_instruction-instruction_handler
db 'cmpltss',1
dw cmp_ss_instruction-instruction_handler
db 'cmpxchg',0B0h
dw basic_486_instruction-instruction_handler
db 'display',0
dw display_directive-instruction_handler
db 'fcmovbe',0D0h
dw fcmov_instruction-instruction_handler
db 'fcmovnb',0C0h
dw fcomi_instruction-instruction_handler
db 'fcmovne',0C8h
dw fcomi_instruction-instruction_handler
db 'fcmovnu',0D8h
dw fcomi_instruction-instruction_handler
db 'fdecstp',110110b
dw simple_fpu_instruction-instruction_handler
db 'fincstp',110111b
dw simple_fpu_instruction-instruction_handler
db 'fldenvd',4
dw fldenv_instruction_32bit-instruction_handler
db 'fldenvw',4
dw fldenv_instruction_16bit-instruction_handler
db 'fnsaved',6
dw fnsave_instruction_32bit-instruction_handler
db 'fnsavew',6
dw fnsave_instruction_16bit-instruction_handler
db 'fnstenv',6
dw fldenv_instruction-instruction_handler
db 'frndint',111100b
dw simple_fpu_instruction-instruction_handler
db 'frstord',4
dw fnsave_instruction_32bit-instruction_handler
db 'frstorw',4
dw fnsave_instruction_16bit-instruction_handler
db 'fsincos',111011b
dw simple_fpu_instruction-instruction_handler
db 'fstenvd',6
dw fstenv_instruction_32bit-instruction_handler
db 'fstenvw',6
dw fstenv_instruction_16bit-instruction_handler
db 'fucomip',0E8h
dw fcomip_instruction-instruction_handler
db 'fucompp',0
dw fucompp_instruction-instruction_handler
db 'fxrstor',1
dw fxsave_instruction-instruction_handler
db 'fxtract',110100b
dw simple_fpu_instruction-instruction_handler
db 'fyl2xp1',111001b
dw simple_fpu_instruction-instruction_handler
db 'insertq',0
dw insertq_instruction-instruction_handler
db 'invlpga',0DFh
dw invlpga_instruction-instruction_handler
db 'invpcid',82h
dw vmx_inv_instruction-instruction_handler
db 'invvpid',81h
dw vmx_inv_instruction-instruction_handler
db 'ldmxcsr',10b
dw fxsave_instruction-instruction_handler
db 'loopned',0E0h
dw loop_instruction_32bit-instruction_handler
db 'loopneq',0E0h
dw loop_instruction_64bit-instruction_handler
db 'loopnew',0E0h
dw loop_instruction_16bit-instruction_handler
db 'loopnzd',0E0h
dw loop_instruction_32bit-instruction_handler
db 'loopnzq',0E0h
dw loop_instruction_64bit-instruction_handler
db 'loopnzw',0E0h
dw loop_instruction_16bit-instruction_handler
db 'monitor',0C8h
dw monitor_instruction-instruction_handler
db 'movddup',12h
dw sse_sd_instruction-instruction_handler
db 'movdq2q',0
dw movdq2q_instruction-instruction_handler
db 'movhlps',12h
dw movhlps_instruction-instruction_handler
db 'movlhps',16h
dw movhlps_instruction-instruction_handler
db 'movntdq',0E7h
dw movntpd_instruction-instruction_handler
db 'movntpd',2Bh
dw movntpd_instruction-instruction_handler
db 'movntps',2Bh
dw movntps_instruction-instruction_handler
db 'movntsd',2Bh
dw movntsd_instruction-instruction_handler
db 'movntss',2Bh
dw movntss_instruction-instruction_handler
db 'movq2dq',0
dw movq2dq_instruction-instruction_handler
db 'mpsadbw',42h
dw sse4_instruction_3a_imm8-instruction_handler
db 'paddusb',0DCh
dw basic_mmx_instruction-instruction_handler
db 'paddusw',0DDh
dw basic_mmx_instruction-instruction_handler
db 'palignr',0
dw palignr_instruction-instruction_handler
db 'pavgusb',0BFh
dw amd3dnow_instruction-instruction_handler
db 'pblendw',0Eh
dw sse4_instruction_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
db 'pcmpeqw',75h
dw basic_mmx_instruction-instruction_handler
db 'pcmpgtb',64h
dw basic_mmx_instruction-instruction_handler
db 'pcmpgtd',66h
dw basic_mmx_instruction-instruction_handler
db 'pcmpgtq',37h
dw sse4_instruction_38-instruction_handler
db 'pcmpgtw',65h
dw basic_mmx_instruction-instruction_handler
db 'pfcmpeq',0B0h
dw amd3dnow_instruction-instruction_handler
db 'pfcmpge',90h
dw amd3dnow_instruction-instruction_handler
db 'pfcmpgt',0A0h
dw amd3dnow_instruction-instruction_handler
db 'pfpnacc',8Eh
dw amd3dnow_instruction-instruction_handler
db 'pfrsqrt',97h
dw amd3dnow_instruction-instruction_handler
db 'phaddsw',3
dw ssse3_instruction-instruction_handler
db 'phsubsw',7
dw ssse3_instruction-instruction_handler
db 'pmaddwd',0F5h
dw basic_mmx_instruction-instruction_handler
db 'pmulhrw',0B7h
dw amd3dnow_instruction-instruction_handler
db 'pmulhuw',0E4h
dw basic_mmx_instruction-instruction_handler
db 'pmuludq',0F4h
dw basic_mmx_instruction-instruction_handler
db 'pshufhw',0F3h
dw pshufd_instruction-instruction_handler
db 'pshuflw',0F2h
dw pshufd_instruction-instruction_handler
db 'psubusb',0D8h
dw basic_mmx_instruction-instruction_handler
db 'psubusw',0D9h
dw basic_mmx_instruction-instruction_handler
db 'roundpd',9
dw sse4_instruction_3a_imm8-instruction_handler
db 'roundps',8
dw sse4_instruction_3a_imm8-instruction_handler
db 'roundsd',0Bh
dw sse4_sd_instruction_3a_imm8-instruction_handler
db 'roundss',0Ah
dw sse4_ss_instruction_3a_imm8-instruction_handler
db 'rsqrtps',52h
dw sse_ps_instruction-instruction_handler
db 'rsqrtss',52h
dw sse_ss_instruction-instruction_handler
db 'section',0
dw section_directive-instruction_handler
db 'segment',0
dw segment_directive-instruction_handler
db 'stmxcsr',11b
dw fxsave_instruction-instruction_handler
db 'syscall',05h
dw simple_extended_instruction-instruction_handler
db 'sysexit',35h
dw simple_extended_instruction-instruction_handler
db 'sysretq',07h
dw simple_extended_instruction_64bit-instruction_handler
db 'ucomisd',2Eh
dw comisd_instruction-instruction_handler
db 'ucomiss',2Eh
dw comiss_instruction-instruction_handler
db 'vaesdec',0DEh
dw avx_128bit_instruction_38-instruction_handler
db 'vaesenc',0DCh
dw avx_128bit_instruction_38-instruction_handler
db 'vaesimc',0DBh
dw avx_single_source_128bit_instruction_38-instruction_handler
db 'vandnpd',55h
dw avx_pd_instruction-instruction_handler
db 'vandnps',55h
dw avx_ps_instruction-instruction_handler
db 'vcomisd',2Fh
dw avx_comisd_instruction-instruction_handler
db 'vcomiss',2Fh
dw avx_comiss_instruction-instruction_handler
db 'vfrczpd',81h
dw xop_single_source_instruction-instruction_handler
db 'vfrczps',80h
dw xop_single_source_instruction-instruction_handler
db 'vfrczsd',83h
dw xop_single_source_sd_instruction-instruction_handler
db 'vfrczss',82h
dw xop_single_source_ss_instruction-instruction_handler
db 'vhaddpd',07Ch
dw avx_pd_instruction-instruction_handler
db 'vhaddps',07Ch
dw avx_haddps_instruction-instruction_handler
db 'vhsubpd',07Dh
dw avx_pd_instruction-instruction_handler
db 'vhsubps',07Dh
dw avx_haddps_instruction-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
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
db 'vmovdqu',6Fh
dw avx_movdqu_instruction-instruction_handler
db 'vmovhpd',16h
dw avx_movlpd_instruction-instruction_handler
db 'vmovhps',16h
dw avx_movlps_instruction-instruction_handler
db 'vmovlpd',12h
dw avx_movlpd_instruction-instruction_handler
db 'vmovlps',12h
dw avx_movlps_instruction-instruction_handler
db 'vmovupd',10h
dw avx_movpd_instruction-instruction_handler
db 'vmovups',10h
dw avx_movps_instruction-instruction_handler
db 'vmptrld',6
dw vmx_instruction-instruction_handler
db 'vmptrst',7
dw vmx_instruction-instruction_handler
db 'vmwrite',0
dw vmwrite_instruction-instruction_handler
db 'vpaddsb',0ECh
dw avx_pd_instruction-instruction_handler
db 'vpaddsw',0EDh
dw avx_pd_instruction-instruction_handler
db 'vpcomub',-1
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomud',-1
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomuq',-1
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomuw',-1
dw xop_pcom_uw_instruction-instruction_handler
db 'vpermpd',1
dw avx_permq_instruction-instruction_handler
db 'vpermps',16h
dw avx_permd_instruction-instruction_handler
db 'vpextrb',14h
dw avx_pextrb_instruction-instruction_handler
db 'vpextrd',16h
dw avx_pextrd_instruction-instruction_handler
db 'vpextrq',16h
dw avx_pextrq_instruction-instruction_handler
db 'vpextrw',15h
dw avx_pextrw_instruction-instruction_handler
db 'vphaddd',2
dw avx_instruction_38-instruction_handler
db 'vphaddw',1
dw avx_instruction_38-instruction_handler
db 'vphsubd',6
dw avx_instruction_38-instruction_handler
db 'vphsubw',5
dw avx_instruction_38-instruction_handler
db 'vpinsrb',20h
dw avx_pinsrb_instruction-instruction_handler
db 'vpinsrd',22h
dw avx_pinsrd_instruction-instruction_handler
db 'vpinsrq',22h
dw avx_pinsrq_instruction-instruction_handler
db 'vpinsrw',0C4h
dw avx_pinsrw_instruction-instruction_handler
db 'vpmaxsb',3Ch
dw avx_instruction_38-instruction_handler
db 'vpmaxsd',3Dh
dw avx_instruction_38-instruction_handler
db 'vpmaxsw',0EEh
dw avx_pd_instruction-instruction_handler
db 'vpmaxub',0DEh
dw avx_pd_instruction-instruction_handler
db 'vpmaxud',3Fh
dw avx_instruction_38-instruction_handler
db 'vpmaxuw',3Eh
dw avx_instruction_38-instruction_handler
db 'vpminsb',38h
dw avx_instruction_38-instruction_handler
db 'vpminsd',39h
dw avx_instruction_38-instruction_handler
db 'vpminsw',0EAh
dw avx_pd_instruction-instruction_handler
db 'vpminub',0DAh
dw avx_pd_instruction-instruction_handler
db 'vpminud',3Bh
dw avx_instruction_38-instruction_handler
db 'vpminuw',3Ah
dw avx_instruction_38-instruction_handler
db 'vpmuldq',28h
dw avx_instruction_38-instruction_handler
db 'vpmulhw',0E5h
dw avx_pd_instruction-instruction_handler
db 'vpmulld',40h
dw avx_instruction_38-instruction_handler
db 'vpmullw',0D5h
dw avx_pd_instruction-instruction_handler
db 'vpsadbw',0F6h
dw avx_pd_instruction-instruction_handler
db 'vpshufb',0
dw avx_instruction_38-instruction_handler
db 'vpshufd',66h
dw avx_pshufd_instruction-instruction_handler
db 'vpsignb',8
dw avx_instruction_38-instruction_handler
db 'vpsignd',0Ah
dw avx_instruction_38-instruction_handler
db 'vpsignw',9
dw avx_instruction_38-instruction_handler
db 'vpslldq',111b
dw avx_pslldq_instruction-instruction_handler
db 'vpsllvd',47h
dw avx_instruction_38-instruction_handler
db 'vpsllvq',47h
dw avx_instruction_38_w1-instruction_handler
db 'vpsravd',46h
dw avx_instruction_38-instruction_handler
db 'vpsrldq',011b
dw avx_pslldq_instruction-instruction_handler
db 'vpsrlvd',45h
dw avx_instruction_38-instruction_handler
db 'vpsrlvq',45h
dw avx_instruction_38_w1-instruction_handler
db 'vpsubsb',0E8h
dw avx_pd_instruction-instruction_handler
db 'vpsubsw',0E9h
dw avx_pd_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
db 'vsqrtps',51h
dw avx_single_source_ps_instruction-instruction_handler
db 'vsqrtsd',51h
dw avx_sd_instruction-instruction_handler
db 'vsqrtss',51h
dw avx_ss_instruction-instruction_handler
db 'vtestpd',0Fh
dw avx_single_source_instruction_38-instruction_handler
db 'vtestps',0Eh
dw avx_single_source_instruction_38-instruction_handler
db 'xsave64',100b
dw fxsave_instruction_64bit-instruction_handler
instructions_8:
db 'addsubpd',0D0h
dw sse_pd_instruction-instruction_handler
db 'addsubps',0D0h
dw cvtpd2dq_instruction-instruction_handler
db 'blendvpd',15h
dw sse4_instruction_38_xmm0-instruction_handler
db 'blendvps',14h
dw sse4_instruction_38_xmm0-instruction_handler
db 'cmpneqpd',4
dw cmp_pd_instruction-instruction_handler
db 'cmpneqps',4
dw cmp_ps_instruction-instruction_handler
db 'cmpneqsd',4
dw cmp_sd_instruction-instruction_handler
db 'cmpneqss',4
dw cmp_ss_instruction-instruction_handler
db 'cmpnlepd',6
dw cmp_pd_instruction-instruction_handler
db 'cmpnleps',6
dw cmp_ps_instruction-instruction_handler
db 'cmpnlesd',6
dw cmp_sd_instruction-instruction_handler
db 'cmpnless',6
dw cmp_ss_instruction-instruction_handler
db 'cmpnltpd',5
dw cmp_pd_instruction-instruction_handler
db 'cmpnltps',5
dw cmp_ps_instruction-instruction_handler
db 'cmpnltsd',5
dw cmp_sd_instruction-instruction_handler
db 'cmpnltss',5
dw cmp_ss_instruction-instruction_handler
db 'cmpordpd',7
dw cmp_pd_instruction-instruction_handler
db 'cmpordps',7
dw cmp_ps_instruction-instruction_handler
db 'cmpordsd',7
dw cmp_sd_instruction-instruction_handler
db 'cmpordss',7
dw cmp_ss_instruction-instruction_handler
db 'cvtdq2pd',0E6h
dw cvtdq2pd_instruction-instruction_handler
db 'cvtdq2ps',5Bh
dw sse_ps_instruction-instruction_handler
db 'cvtpd2dq',0E6h
dw cvtpd2dq_instruction-instruction_handler
db 'cvtpd2pi',2Dh
dw cvtpd2pi_instruction-instruction_handler
db 'cvtpd2ps',5Ah
dw sse_pd_instruction-instruction_handler
db 'cvtpi2pd',2Ah
dw cvtpi2pd_instruction-instruction_handler
db 'cvtpi2ps',2Ah
dw cvtpi2ps_instruction-instruction_handler
db 'cvtps2dq',5Bh
dw sse_pd_instruction-instruction_handler
db 'cvtps2pd',5Ah
dw cvtps2pd_instruction-instruction_handler
db 'cvtps2pi',2Dh
dw cvtps2pi_instruction-instruction_handler
db 'cvtsd2si',2Dh
dw cvtsd2si_instruction-instruction_handler
db 'cvtsd2ss',5Ah
dw sse_sd_instruction-instruction_handler
db 'cvtsi2sd',2Ah
dw cvtsi2sd_instruction-instruction_handler
db 'cvtsi2ss',2Ah
dw cvtsi2ss_instruction-instruction_handler
db 'cvtss2sd',5Ah
dw sse_ss_instruction-instruction_handler
db 'cvtss2si',2Dh
dw cvtss2si_instruction-instruction_handler
db 'fcmovnbe',0D0h
dw fcomi_instruction-instruction_handler
db 'fnstenvd',6
dw fldenv_instruction_32bit-instruction_handler
db 'fnstenvw',6
dw fldenv_instruction_16bit-instruction_handler
db 'fxsave64',0
dw fxsave_instruction_64bit-instruction_handler
db 'insertps',0
dw insertps_instruction-instruction_handler
db 'maskmovq',0
dw maskmovq_instruction-instruction_handler
db 'movmskpd',0
dw movmskpd_instruction-instruction_handler
db 'movmskps',0
dw movmskps_instruction-instruction_handler
db 'movntdqa',2Ah
dw movntdqa_instruction-instruction_handler
db 'movshdup',16h
dw movshdup_instruction-instruction_handler
db 'movsldup',12h
dw movshdup_instruction-instruction_handler
db 'packssdw',6Bh
dw basic_mmx_instruction-instruction_handler
db 'packsswb',63h
dw basic_mmx_instruction-instruction_handler
db 'packusdw',2Bh
dw sse4_instruction_38-instruction_handler
db 'packuswb',67h
dw basic_mmx_instruction-instruction_handler
db 'pblendvb',10h
dw sse4_instruction_38_xmm0-instruction_handler
db 'pfrcpit1',0A6h
dw amd3dnow_instruction-instruction_handler
db 'pfrcpit2',0B6h
dw amd3dnow_instruction-instruction_handler
db 'pfrsqit1',0A7h
dw amd3dnow_instruction-instruction_handler
db 'pmovmskb',0D7h
dw pmovmskb_instruction-instruction_handler
db 'pmovsxbd',21h
dw pmovsxbd_instruction-instruction_handler
db 'pmovsxbq',22h
dw pmovsxbq_instruction-instruction_handler
db 'pmovsxbw',20h
dw pmovsxbw_instruction-instruction_handler
db 'pmovsxdq',25h
dw pmovsxdq_instruction-instruction_handler
db 'pmovsxwd',23h
dw pmovsxwd_instruction-instruction_handler
db 'pmovsxwq',24h
dw pmovsxwq_instruction-instruction_handler
db 'pmovzxbd',31h
dw pmovsxbd_instruction-instruction_handler
db 'pmovzxbq',32h
dw pmovsxbq_instruction-instruction_handler
db 'pmovzxbw',30h
dw pmovsxbw_instruction-instruction_handler
db 'pmovzxdq',35h
dw pmovsxdq_instruction-instruction_handler
db 'pmovzxwd',33h
dw pmovsxwd_instruction-instruction_handler
db 'pmovzxwq',34h
dw pmovsxwq_instruction-instruction_handler
db 'pmulhrsw',0Bh
dw ssse3_instruction-instruction_handler
db 'prefetch',0
dw amd_prefetch_instruction-instruction_handler
db 'rdfsbase',0
dw rdfsbase_instruction-instruction_handler
db 'rdgsbase',1
dw rdfsbase_instruction-instruction_handler
db 'sysenter',34h
dw simple_extended_instruction-instruction_handler
db 'sysexitq',35h
dw simple_extended_instruction_64bit-instruction_handler
db 'unpckhpd',15h
dw sse_pd_instruction-instruction_handler
db 'unpckhps',15h
dw sse_ps_instruction-instruction_handler
db 'unpcklpd',14h
dw sse_pd_instruction-instruction_handler
db 'unpcklps',14h
dw sse_ps_instruction-instruction_handler
db 'vblendpd',0Dh
dw avx_instruction_3a_imm8-instruction_handler
db 'vblendps',0Ch
dw avx_instruction_3a_imm8-instruction_handler
db 'vcmpeqpd',0
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpeqps',0
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpeqsd',0
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpeqss',0
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpgepd',0Dh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpgeps',0Dh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpgesd',0Dh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpgess',0Dh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpgtpd',0Eh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpgtps',0Eh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpgtsd',0Eh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpgtss',0Eh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmplepd',2
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpleps',2
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmplesd',2
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpless',2
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpltpd',1
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpltps',1
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpltsd',1
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpltss',1
dw avx_cmp_ss_instruction-instruction_handler
db 'vfmaddpd',69h
dw fma4_instruction_p-instruction_handler
db 'vfmaddps',68h
dw fma4_instruction_p-instruction_handler
db 'vfmaddsd',6Bh
dw fma4_instruction_sd-instruction_handler
db 'vfmaddss',6Ah
dw fma4_instruction_ss-instruction_handler
db 'vfmsubpd',6Dh
dw fma4_instruction_p-instruction_handler
db 'vfmsubps',6Ch
dw fma4_instruction_p-instruction_handler
db 'vfmsubsd',6Fh
dw fma4_instruction_sd-instruction_handler
db 'vfmsubss',6Eh
dw fma4_instruction_ss-instruction_handler
db 'vldmxcsr',10b
dw vldmxcsr_instruction-instruction_handler
db 'vmlaunch',0C2h
dw simple_vmx_instruction-instruction_handler
db 'vmovddup',12h
dw avx_movddup_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
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
db 'vmresume',0C3h
dw simple_vmx_instruction-instruction_handler
db 'vpaddusb',0DCh
dw avx_pd_instruction-instruction_handler
db 'vpaddusw',0DDh
dw avx_pd_instruction-instruction_handler
db 'vpalignr',0Fh
dw avx_instruction_3a_imm8-instruction_handler
db 'vpblendd',2
dw avx_instruction_3a_imm8-instruction_handler
db 'vpblendw',0Eh
dw avx_instruction_3a_imm8-instruction_handler
db 'vpcmpeqb',74h
dw avx_pd_instruction-instruction_handler
db 'vpcmpeqd',76h
dw avx_pd_instruction-instruction_handler
db 'vpcmpeqq',29h
dw avx_instruction_38-instruction_handler
db 'vpcmpeqw',75h
dw avx_pd_instruction-instruction_handler
db 'vpcmpgtb',64h
dw avx_pd_instruction-instruction_handler
db 'vpcmpgtd',66h
dw avx_pd_instruction-instruction_handler
db 'vpcmpgtq',37h
dw avx_instruction_38-instruction_handler
db 'vpcmpgtw',65h
dw avx_pd_instruction-instruction_handler
db 'vpcomeqb',4
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomeqd',4
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomeqq',4
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomeqw',4
dw xop_pcom_w_instruction-instruction_handler
db 'vpcomgeb',3
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomged',3
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomgeq',3
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomgew',3
dw xop_pcom_w_instruction-instruction_handler
db 'vpcomgtb',2
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomgtd',2
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomgtq',2
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomgtw',2
dw xop_pcom_w_instruction-instruction_handler
db 'vpcomleb',1
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomled',1
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomleq',1
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomlew',1
dw xop_pcom_w_instruction-instruction_handler
db 'vpcomltb',0
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomltd',0
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomltq',0
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomltw',0
dw xop_pcom_w_instruction-instruction_handler
db 'vphaddbd',0C2h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddbq',0C3h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddbw',0C1h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphadddq',0CBh
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddsw',3
dw avx_instruction_38-instruction_handler
db 'vphaddwd',0C6h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddwq',0C7h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphsubbw',0E1h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphsubdq',0E3h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphsubsw',7
dw avx_instruction_38-instruction_handler
db 'vphsubwd',0E2h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vpmacsdd',9Eh
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacswd',96h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacsww',95h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmaddwd',0F5h
dw avx_pd_instruction-instruction_handler
db 'vpmulhuw',0E4h
dw avx_pd_instruction-instruction_handler
db 'vpmuludq',0F4h
dw avx_pd_instruction-instruction_handler
db 'vpshufhw',0F3h
dw avx_pshufd_instruction-instruction_handler
db 'vpshuflw',0F2h
dw avx_pshufd_instruction-instruction_handler
db 'vpsubusb',0D8h
dw avx_pd_instruction-instruction_handler
db 'vpsubusw',0D9h
dw avx_pd_instruction-instruction_handler
db 'vroundpd',9
dw avx_single_source_instruction_3a_imm8-instruction_handler
db 'vroundps',8
dw avx_single_source_instruction_3a_imm8-instruction_handler
db 'vroundsd',0Bh
dw avx_sd_instruction_3a_imm8-instruction_handler
db 'vroundss',0Ah
dw avx_ss_instruction_3a_imm8-instruction_handler
db 'vrsqrtps',52h
dw avx_single_source_ps_instruction-instruction_handler
db 'vrsqrtss',52h
dw avx_ss_instruction-instruction_handler
db 'vstmxcsr',11b
dw vldmxcsr_instruction-instruction_handler
db 'vucomisd',2Eh
dw avx_comisd_instruction-instruction_handler
db 'vucomiss',2Eh
dw avx_comiss_instruction-instruction_handler
db 'vzeroall',77h
dw vzeroall_instruction-instruction_handler
db 'wrfsbase',2
dw rdfsbase_instruction-instruction_handler
db 'wrgsbase',3
dw rdfsbase_instruction-instruction_handler
db 'xacquire',0F2h
dw prefix_instruction-instruction_handler
db 'xrelease',0F3h
dw prefix_instruction-instruction_handler
db 'xrstor64',101b
dw fxsave_instruction_64bit-instruction_handler
db 'xsaveopt',110b
dw fxsave_instruction-instruction_handler
instructions_9:
db 'cmpxchg8b',8
dw cmpxchgx_instruction-instruction_handler
db 'cvttpd2dq',0E6h
dw sse_pd_instruction-instruction_handler
db 'cvttpd2pi',2Ch
dw cvtpd2pi_instruction-instruction_handler
db 'cvttps2dq',5Bh
dw movshdup_instruction-instruction_handler
db 'cvttps2pi',2Ch
dw cvtps2pi_instruction-instruction_handler
db 'cvttsd2si',2Ch
dw cvtsd2si_instruction-instruction_handler
db 'cvttss2si',2Ch
dw cvtss2si_instruction-instruction_handler
db 'extractps',0
dw extractps_instruction-instruction_handler
db 'fxrstor64',1
dw fxsave_instruction_64bit-instruction_handler
db 'pclmulqdq',-1
dw pclmulqdq_instruction-instruction_handler
db 'pcmpestri',61h
dw sse4_instruction_3a_imm8-instruction_handler
db 'pcmpestrm',60h
dw sse4_instruction_3a_imm8-instruction_handler
db 'pcmpistri',63h
dw sse4_instruction_3a_imm8-instruction_handler
db 'pcmpistrm',62h
dw sse4_instruction_3a_imm8-instruction_handler
db 'pmaddubsw',4
dw ssse3_instruction-instruction_handler
db 'prefetchw',1
dw amd_prefetch_instruction-instruction_handler
db 'punpckhbw',68h
dw basic_mmx_instruction-instruction_handler
db 'punpckhdq',6Ah
dw basic_mmx_instruction-instruction_handler
db 'punpckhwd',69h
dw basic_mmx_instruction-instruction_handler
db 'punpcklbw',60h
dw basic_mmx_instruction-instruction_handler
db 'punpckldq',62h
dw basic_mmx_instruction-instruction_handler
db 'punpcklwd',61h
dw basic_mmx_instruction-instruction_handler
db 'vaddsubpd',0D0h
dw avx_pd_instruction-instruction_handler
db 'vaddsubps',0D0h
dw avx_haddps_instruction-instruction_handler
db 'vblendvpd',4Bh
dw avx_triple_source_instruction_3a-instruction_handler
db 'vblendvps',4Ah
dw avx_triple_source_instruction_3a-instruction_handler
db 'vcmpneqpd',4
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpneqps',4
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpneqsd',4
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpneqss',4
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpngepd',9
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpngeps',9
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpngesd',9
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpngess',9
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpngtpd',0Ah
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpngtps',0Ah
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpngtsd',0Ah
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpngtss',0Ah
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpnlepd',6
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpnleps',6
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpnlesd',6
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpnless',6
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpnltpd',5
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpnltps',5
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpnltsd',5
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpnltss',5
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpordpd',7
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpordps',7
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpordsd',7
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpordss',7
dw avx_cmp_ss_instruction-instruction_handler
db 'vcvtdq2pd',0E6h
dw avx_cvtdq2pd_instruction-instruction_handler
db 'vcvtdq2ps',5Bh
dw avx_single_source_ps_instruction-instruction_handler
db 'vcvtpd2dq',0E6h
dw avx_cvtpd2dq_instruction-instruction_handler
db 'vcvtpd2ps',5Ah
dw avx_cvtpd2ps_instruction-instruction_handler
db 'vcvtph2ps',13h
dw vcvtph2ps_instruction-instruction_handler
db 'vcvtps2dq',5Bh
dw avx_single_source_pd_instruction-instruction_handler
db 'vcvtps2pd',5Ah
dw avx_cvtps2pd_instruction-instruction_handler
db 'vcvtps2ph',1Dh
dw vcvtps2ph_instruction-instruction_handler
db 'vcvtsd2si',2Dh
dw avx_cvtsd2si_instruction-instruction_handler
db 'vcvtsd2ss',5Ah
dw avx_sd_instruction-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
db 'vcvtss2si',2Dh
dw avx_cvtss2si_instruction-instruction_handler
db 'vfnmaddpd',79h
dw fma4_instruction_p-instruction_handler
db 'vfnmaddps',78h
dw fma4_instruction_p-instruction_handler
db 'vfnmaddsd',7Bh
dw fma4_instruction_sd-instruction_handler
db 'vfnmaddss',7Ah
dw fma4_instruction_ss-instruction_handler
db 'vfnmsubpd',7Dh
dw fma4_instruction_p-instruction_handler
db 'vfnmsubps',7Ch
dw fma4_instruction_p-instruction_handler
db 'vfnmsubsd',7Fh
dw fma4_instruction_sd-instruction_handler
db 'vfnmsubss',7Eh
dw fma4_instruction_ss-instruction_handler
db 'vinsertps',0
dw avx_insertps_instruction-instruction_handler
db 'vmovmskpd',0
dw avx_movmskpd_instruction-instruction_handler
db 'vmovmskps',0
dw avx_movmskps_instruction-instruction_handler
db 'vmovntdqa',2Ah
dw avx_movntdqa_instruction-instruction_handler
db 'vmovshdup',16h
dw avx_movshdup_instruction-instruction_handler
db 'vmovsldup',12h
dw avx_movshdup_instruction-instruction_handler
db 'vpackssdw',6Bh
dw avx_pd_instruction-instruction_handler
db 'vpacksswb',63h
dw avx_pd_instruction-instruction_handler
db 'vpackusdw',2Bh
dw avx_instruction_38-instruction_handler
db 'vpackuswb',67h
dw avx_pd_instruction-instruction_handler
db 'vpblendvb',4Ch
dw avx_triple_source_instruction_3a-instruction_handler
db 'vpcomequb',4
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomequd',4
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomequq',4
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomequw',4
dw xop_pcom_uw_instruction-instruction_handler
db 'vpcomgeub',3
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomgeud',3
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomgeuq',3
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomgeuw',3
dw xop_pcom_uw_instruction-instruction_handler
db 'vpcomgtub',2
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomgtud',2
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomgtuq',2
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomgtuw',2
dw xop_pcom_uw_instruction-instruction_handler
db 'vpcomleub',1
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomleud',1
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomleuq',1
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomleuw',1
dw xop_pcom_uw_instruction-instruction_handler
db 'vpcomltub',0
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomltud',0
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomltuq',0
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomltuw',0
dw xop_pcom_uw_instruction-instruction_handler
db 'vpcomneqb',5
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomneqd',5
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomneqq',5
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomneqw',5
dw xop_pcom_w_instruction-instruction_handler
db 'vpermilpd',5
dw avx_permil_instruction-instruction_handler
db 'vpermilps',4
dw avx_permil_instruction-instruction_handler
db 'vphaddubd',0D2h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddubq',0D3h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddubw',0D1h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddudq',0DBh
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphadduwd',0D6h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphadduwq',0D7h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vpmacsdqh',9Fh
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacsdql',97h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacssdd',8Eh
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacsswd',86h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacssww',85h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmadcswd',0B6h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmovmskb',0D7h
dw avx_pmovmskb_instruction-instruction_handler
db 'vpmovsxbd',21h
dw avx_pmovsxbd_instruction-instruction_handler
db 'vpmovsxbq',22h
dw avx_pmovsxbq_instruction-instruction_handler
db 'vpmovsxbw',20h
dw avx_pmovsxbw_instruction-instruction_handler
db 'vpmovsxdq',25h
dw avx_pmovsxdq_instruction-instruction_handler
db 'vpmovsxwd',23h
dw avx_pmovsxwd_instruction-instruction_handler
db 'vpmovsxwq',24h
dw avx_pmovsxwq_instruction-instruction_handler
db 'vpmovzxbd',31h
dw avx_pmovsxbd_instruction-instruction_handler
db 'vpmovzxbq',32h
dw avx_pmovsxbq_instruction-instruction_handler
db 'vpmovzxbw',30h
dw avx_pmovsxbw_instruction-instruction_handler
db 'vpmovzxdq',35h
dw avx_pmovsxdq_instruction-instruction_handler
db 'vpmovzxwd',33h
dw avx_pmovsxwd_instruction-instruction_handler
db 'vpmovzxwq',34h
dw avx_pmovsxwq_instruction-instruction_handler
db 'vpmulhrsw',0Bh
dw avx_instruction_38-instruction_handler
db 'vunpckhpd',15h
dw avx_pd_instruction-instruction_handler
db 'vunpckhps',15h
dw avx_ps_instruction-instruction_handler
db 'vunpcklpd',14h
dw avx_pd_instruction-instruction_handler
db 'vunpcklps',14h
dw avx_ps_instruction-instruction_handler
instructions_10:
db 'aesdeclast',0DFh
dw sse4_instruction_38-instruction_handler
db 'aesenclast',0DDh
dw sse4_instruction_38-instruction_handler
db 'cmpunordpd',3
dw cmp_pd_instruction-instruction_handler
db 'cmpunordps',3
dw cmp_ps_instruction-instruction_handler
db 'cmpunordsd',3
dw cmp_sd_instruction-instruction_handler
db 'cmpunordss',3
dw cmp_ss_instruction-instruction_handler
db 'cmpxchg16b',16
dw cmpxchgx_instruction-instruction_handler
db 'loadall286',5
dw simple_extended_instruction-instruction_handler
db 'loadall386',7
dw simple_extended_instruction-instruction_handler
db 'maskmovdqu',0
dw maskmovdqu_instruction-instruction_handler
db 'phminposuw',41h
dw sse4_instruction_38-instruction_handler
db 'prefetcht0',1
dw prefetch_instruction-instruction_handler
db 'prefetcht1',2
dw prefetch_instruction-instruction_handler
db 'prefetcht2',3
dw prefetch_instruction-instruction_handler
db 'punpckhqdq',6Dh
dw sse_pd_instruction-instruction_handler
db 'punpcklqdq',6Ch
dw sse_pd_instruction-instruction_handler
db 'vcmptruepd',0Fh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmptrueps',0Fh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmptruesd',0Fh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmptruess',0Fh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcvttpd2dq',0E6h
dw avx_cvtpd2ps_instruction-instruction_handler
db 'vcvttps2dq',5Bh
dw avx_cvttps2dq_instruction-instruction_handler
db 'vcvttsd2si',2Ch
dw avx_cvtsd2si_instruction-instruction_handler
db 'vcvttss2si',2Ch
dw avx_cvtss2si_instruction-instruction_handler
db 'vextractps',0
dw avx_extractps_instruction-instruction_handler
db 'vgatherdpd',92h
dw gather_instruction_pd-instruction_handler
db 'vgatherdps',92h
dw gather_instruction_ps-instruction_handler
db 'vgatherqpd',93h
dw gather_instruction_pd-instruction_handler
db 'vgatherqps',93h
dw gather_instruction_ps-instruction_handler
db 'vmaskmovpd',2Dh
dw avx_maskmov_instruction-instruction_handler
db 'vmaskmovps',2Ch
dw avx_maskmov_instruction-instruction_handler
db 'vpclmulqdq',-1
dw avx_pclmulqdq_instruction-instruction_handler
db 'vpcmpestri',61h
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler
db 'vpcmpestrm',60h
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler
db 'vpcmpistri',63h
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler
db 'vpcmpistrm',62h
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler
db 'vpcomnequb',5
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomnequd',5
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomnequq',5
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomnequw',5
dw xop_pcom_uw_instruction-instruction_handler
db 'vpcomtrueb',7
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomtrued',7
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomtrueq',7
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomtruew',7
dw xop_pcom_w_instruction-instruction_handler
db 'vperm2f128',6
dw avx_perm2f128_instruction-instruction_handler
db 'vperm2i128',46h
dw avx_perm2f128_instruction-instruction_handler
db 'vpermil2pd',49h
dw vpermil2_instruction-instruction_handler
db 'vpermil2ps',48h
dw vpermil2_instruction-instruction_handler
db 'vpgatherdd',90h
dw gather_instruction_ps-instruction_handler
db 'vpgatherdq',90h
dw gather_instruction_pd-instruction_handler
db 'vpgatherqd',91h
dw gather_instruction_ps-instruction_handler
db 'vpgatherqq',91h
dw gather_instruction_pd-instruction_handler
db 'vpmacssdqh',8Fh
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacssdql',87h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmadcsswd',0A6h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmaddubsw',4
dw avx_instruction_38-instruction_handler
db 'vpmaskmovd',8Ch
dw avx_maskmov_instruction-instruction_handler
db 'vpmaskmovq',8Ch
dw avx_maskmov_w1_instruction-instruction_handler
db 'vpunpckhbw',68h
dw avx_pd_instruction-instruction_handler
db 'vpunpckhdq',6Ah
dw avx_pd_instruction-instruction_handler
db 'vpunpckhwd',69h
dw avx_pd_instruction-instruction_handler
db 'vpunpcklbw',60h
dw avx_pd_instruction-instruction_handler
db 'vpunpckldq',62h
dw avx_pd_instruction-instruction_handler
db 'vpunpcklwd',61h
dw avx_pd_instruction-instruction_handler
db 'vzeroupper',77h
dw vzeroupper_instruction-instruction_handler
db 'xsaveopt64',110b
dw fxsave_instruction_64bit-instruction_handler
instructions_11:
db 'pclmulhqhdq',10001b
dw pclmulqdq_instruction-instruction_handler
db 'pclmullqhdq',10000b
dw pclmulqdq_instruction-instruction_handler
db 'prefetchnta',0
dw prefetch_instruction-instruction_handler
db 'vaesdeclast',0DFh
dw avx_128bit_instruction_38-instruction_handler
db 'vaesenclast',0DDh
dw avx_128bit_instruction_38-instruction_handler
db 'vcmpeq_ospd',10h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpeq_osps',10h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpeq_ossd',10h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpeq_osss',10h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpeq_uqpd',8
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpeq_uqps',8
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpeq_uqsd',8
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpeq_uqss',8
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpeq_uspd',18h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpeq_usps',18h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpeq_ussd',18h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpeq_usss',18h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpfalsepd',0Bh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpfalseps',0Bh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpfalsesd',0Bh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpfalsess',0Bh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpge_oqpd',1Dh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpge_oqps',1Dh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpge_oqsd',1Dh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpge_oqss',1Dh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpgt_oqpd',1Eh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpgt_oqps',1Eh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpgt_oqsd',1Eh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpgt_oqss',1Eh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmple_oqpd',12h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmple_oqps',12h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmple_oqsd',12h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmple_oqss',12h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmplt_oqpd',11h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmplt_oqps',11h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmplt_oqsd',11h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmplt_oqss',11h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpord_spd',17h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpord_sps',17h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpord_ssd',17h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpord_sss',17h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpunordpd',3
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpunordps',3
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpunordsd',3
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpunordss',3
dw avx_cmp_ss_instruction-instruction_handler
db 'vfmadd132pd',98h
dw fma_instruction_pd-instruction_handler
db 'vfmadd132ps',98h
dw fma_instruction_ps-instruction_handler
db 'vfmadd132sd',99h
dw fma_instruction_sd-instruction_handler
db 'vfmadd132ss',99h
dw fma_instruction_ss-instruction_handler
db 'vfmadd213pd',0A8h
dw fma_instruction_pd-instruction_handler
db 'vfmadd213ps',0A8h
dw fma_instruction_ps-instruction_handler
db 'vfmadd213sd',0A9h
dw fma_instruction_sd-instruction_handler
db 'vfmadd213ss',0A9h
dw fma_instruction_ss-instruction_handler
db 'vfmadd231pd',0B8h
dw fma_instruction_pd-instruction_handler
db 'vfmadd231ps',0B8h
dw fma_instruction_ps-instruction_handler
db 'vfmadd231sd',0B9h
dw fma_instruction_sd-instruction_handler
db 'vfmadd231ss',0B9h
dw fma_instruction_ss-instruction_handler
db 'vfmaddsubpd',5Dh
dw fma4_instruction_p-instruction_handler
db 'vfmaddsubps',5Ch
dw fma4_instruction_p-instruction_handler
db 'vfmsub132pd',9Ah
dw fma_instruction_pd-instruction_handler
db 'vfmsub132ps',9Ah
dw fma_instruction_ps-instruction_handler
db 'vfmsub132sd',9Bh
dw fma_instruction_sd-instruction_handler
db 'vfmsub132ss',9Bh
dw fma_instruction_ss-instruction_handler
db 'vfmsub213pd',0AAh
dw fma_instruction_pd-instruction_handler
db 'vfmsub213ps',0AAh
dw fma_instruction_ps-instruction_handler
db 'vfmsub213sd',0ABh
dw fma_instruction_sd-instruction_handler
db 'vfmsub213ss',0ABh
dw fma_instruction_ss-instruction_handler
db 'vfmsub231pd',0BAh
dw fma_instruction_pd-instruction_handler
db 'vfmsub231ps',0BAh
dw fma_instruction_ps-instruction_handler
db 'vfmsub231sd',0BBh
dw fma_instruction_sd-instruction_handler
db 'vfmsub231ss',0BBh
dw fma_instruction_ss-instruction_handler
db 'vfmsubaddpd',5Fh
dw fma4_instruction_p-instruction_handler
db 'vfmsubaddps',5Eh
dw fma4_instruction_p-instruction_handler
db 'vinsertf128',18h
dw avx_insertf128_instruction-instruction_handler
db 'vinserti128',38h
dw avx_insertf128_instruction-instruction_handler
db 'vmaskmovdqu',0
dw avx_maskmovdqu_instruction-instruction_handler
db 'vpcomfalseb',6
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomfalsed',6
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomfalseq',6
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomfalsew',6
dw xop_pcom_w_instruction-instruction_handler
db 'vpcomtrueub',7
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomtrueud',7
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomtrueuq',7
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomtrueuw',7
dw xop_pcom_uw_instruction-instruction_handler
db 'vphminposuw',41h
dw avx_single_source_instruction_38-instruction_handler
db 'vpunpckhqdq',6Dh
dw avx_pd_instruction-instruction_handler
db 'vpunpcklqdq',6Ch
dw avx_pd_instruction-instruction_handler
instructions_12:
db 'pclmulhqhqdq',10001b
dw pclmulqdq_instruction-instruction_handler
db 'pclmulhqlqdq',1
dw pclmulqdq_instruction-instruction_handler
db 'pclmullqhqdq',10000b
dw pclmulqdq_instruction-instruction_handler
db 'pclmullqlqdq',0
dw pclmulqdq_instruction-instruction_handler
db 'vbroadcastsd',19h
dw avx_broadcastsd_instruction-instruction_handler
db 'vbroadcastss',18h
dw avx_broadcastss_instruction-instruction_handler
db 'vcmpneq_oqpd',0Ch
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpneq_oqps',0Ch
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpneq_oqsd',0Ch
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpneq_oqss',0Ch
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpneq_ospd',1Ch
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpneq_osps',1Ch
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpneq_ossd',1Ch
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpneq_osss',1Ch
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpneq_uspd',14h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpneq_usps',14h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpneq_ussd',14h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpneq_usss',14h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpnge_uqpd',19h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpnge_uqps',19h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpnge_uqsd',19h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpnge_uqss',19h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpngt_uqpd',1Ah
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpngt_uqps',1Ah
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpngt_uqsd',1Ah
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpngt_uqss',1Ah
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpnle_uqpd',16h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpnle_uqps',16h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpnle_uqsd',16h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpnle_uqss',16h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpnlt_uqpd',15h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpnlt_uqps',15h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpnlt_uqsd',15h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpnlt_uqss',15h
dw avx_cmp_ss_instruction-instruction_handler
db 'vextractf128',19h
dw avx_extractf128_instruction-instruction_handler
db 'vextracti128',39h
dw avx_extractf128_instruction-instruction_handler
db 'vfnmadd132pd',9Ch
dw fma_instruction_pd-instruction_handler
db 'vfnmadd132ps',9Ch
dw fma_instruction_ps-instruction_handler
db 'vfnmadd132sd',9Dh
dw fma_instruction_sd-instruction_handler
db 'vfnmadd132ss',9Dh
dw fma_instruction_ss-instruction_handler
db 'vfnmadd213pd',0ACh
dw fma_instruction_pd-instruction_handler
db 'vfnmadd213ps',0ACh
dw fma_instruction_ps-instruction_handler
db 'vfnmadd213sd',0ADh
dw fma_instruction_sd-instruction_handler
db 'vfnmadd213ss',0ADh
dw fma_instruction_ss-instruction_handler
db 'vfnmadd231pd',0BCh
dw fma_instruction_pd-instruction_handler
db 'vfnmadd231ps',0BCh
dw fma_instruction_ps-instruction_handler
db 'vfnmadd231sd',0BDh
dw fma_instruction_sd-instruction_handler
db 'vfnmadd231ss',0BDh
dw fma_instruction_ss-instruction_handler
db 'vfnmsub132pd',9Eh
dw fma_instruction_pd-instruction_handler
db 'vfnmsub132ps',9Eh
dw fma_instruction_ps-instruction_handler
db 'vfnmsub132sd',9Fh
dw fma_instruction_sd-instruction_handler
db 'vfnmsub132ss',9Fh
dw fma_instruction_ss-instruction_handler
db 'vfnmsub213pd',0AEh
dw fma_instruction_pd-instruction_handler
db 'vfnmsub213ps',0AEh
dw fma_instruction_ps-instruction_handler
db 'vfnmsub213sd',0AFh
dw fma_instruction_sd-instruction_handler
db 'vfnmsub213ss',0AFh
dw fma_instruction_ss-instruction_handler
db 'vfnmsub231pd',0BEh
dw fma_instruction_pd-instruction_handler
db 'vfnmsub231ps',0BEh
dw fma_instruction_ps-instruction_handler
db 'vfnmsub231sd',0BFh
dw fma_instruction_sd-instruction_handler
db 'vfnmsub231ss',0BFh
dw fma_instruction_ss-instruction_handler
db 'vpbroadcastb',78h
dw avx_pbroadcastb_instruction-instruction_handler
db 'vpbroadcastd',58h
dw avx_pbroadcastd_instruction-instruction_handler
db 'vpbroadcastq',59h
dw avx_pbroadcastq_instruction-instruction_handler
db 'vpbroadcastw',79h
dw avx_pbroadcastw_instruction-instruction_handler
db 'vpclmulhqhdq',10001b
dw avx_pclmulqdq_instruction-instruction_handler
db 'vpclmullqhdq',10000b
dw avx_pclmulqdq_instruction-instruction_handler
db 'vpcomfalseub',6
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomfalseud',6
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomfalseuq',6
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomfalseuw',6
dw xop_pcom_uw_instruction-instruction_handler
db 'vpermilmo2pd',10b
dw vpermil_2pd_instruction-instruction_handler
db 'vpermilmo2ps',10b
dw vpermil_2ps_instruction-instruction_handler
db 'vpermilmz2pd',11b
dw vpermil_2pd_instruction-instruction_handler
db 'vpermilmz2ps',11b
dw vpermil_2ps_instruction-instruction_handler
db 'vpermiltd2pd',0
dw vpermil_2pd_instruction-instruction_handler
db 'vpermiltd2ps',0
dw vpermil_2ps_instruction-instruction_handler
instructions_13:
db 'vcmptrue_uspd',1Fh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmptrue_usps',1Fh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmptrue_ussd',1Fh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmptrue_usss',1Fh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpunord_spd',13h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpunord_sps',13h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpunord_ssd',13h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpunord_sss',13h
dw avx_cmp_ss_instruction-instruction_handler
db 'vpclmulhqlqdq',1
dw avx_pclmulqdq_instruction-instruction_handler
db 'vpclmullqlqdq',0
dw avx_pclmulqdq_instruction-instruction_handler
instructions_14:
db 'vbroadcastf128',1Ah
dw avx_broadcastf128_instruction-instruction_handler
db 'vbroadcasti128',5Ah
dw avx_broadcastf128_instruction-instruction_handler
db 'vcmpfalse_ospd',1Bh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpfalse_osps',1Bh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpfalse_ossd',1Bh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpfalse_osss',1Bh
dw avx_cmp_ss_instruction-instruction_handler
db 'vfmaddsub132pd',96h
dw fma_instruction_pd-instruction_handler
db 'vfmaddsub132ps',96h
dw fma_instruction_ps-instruction_handler
db 'vfmaddsub213pd',0A6h
dw fma_instruction_pd-instruction_handler
db 'vfmaddsub213ps',0A6h
dw fma_instruction_ps-instruction_handler
db 'vfmaddsub231pd',0B6h
dw fma_instruction_pd-instruction_handler
db 'vfmaddsub231ps',0B6h
dw fma_instruction_ps-instruction_handler
db 'vfmsubadd132pd',97h
dw fma_instruction_pd-instruction_handler
db 'vfmsubadd132ps',97h
dw fma_instruction_ps-instruction_handler
db 'vfmsubadd213pd',0A7h
dw fma_instruction_pd-instruction_handler
db 'vfmsubadd213ps',0A7h
dw fma_instruction_ps-instruction_handler
db 'vfmsubadd231pd',0B7h
dw fma_instruction_pd-instruction_handler
db 'vfmsubadd231ps',0B7h
dw fma_instruction_ps-instruction_handler
instructions_15:
db 'aeskeygenassist',0DFh
dw sse4_instruction_3a_imm8-instruction_handler
instructions_16:
db 'vaeskeygenassist',0DFh
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler
instructions_end:
 
data_directives:
dw data_directives_2-data_directives,(data_directives_3-data_directives_2)/(2+3)
dw data_directives_3-data_directives,(data_directives_4-data_directives_3)/(3+3)
dw data_directives_4-data_directives,(data_directives_end-data_directives_4)/(4+3)
 
data_directives_2:
db 'db',1
dw data_bytes-instruction_handler
db 'dd',4
dw data_dwords-instruction_handler
db 'df',6
dw data_pwords-instruction_handler
db 'dp',6
dw data_pwords-instruction_handler
db 'dq',8
dw data_qwords-instruction_handler
db 'dt',10
dw data_twords-instruction_handler
db 'du',2
dw data_unicode-instruction_handler
db 'dw',2
dw data_words-instruction_handler
db 'rb',1
dw reserve_bytes-instruction_handler
db 'rd',4
dw reserve_dwords-instruction_handler
db 'rf',6
dw reserve_pwords-instruction_handler
db 'rp',6
dw reserve_pwords-instruction_handler
db 'rq',8
dw reserve_qwords-instruction_handler
db 'rt',10
dw reserve_twords-instruction_handler
db 'rw',2
dw reserve_words-instruction_handler
data_directives_3:
data_directives_4:
db 'file',1
dw data_file-instruction_handler
data_directives_end:
 
; flat assembler core
; Copyright (c) 1999-2013, Tomasz Grysztar.
; All rights reserved.
 
include_variable db 'INCLUDE',0
 
symbol_characters db 27
db 9,0Ah,0Dh,1Ah,20h,'+-/*=<>()[]{}:,|&~#`;\'
 
preprocessor_directives:
db 6,'define'
dw define_symbolic_constant-directive_handler
db 7,'include'
dw include_file-directive_handler
db 3,'irp'
dw irp_directive-directive_handler
db 4,'irps'
dw irps_directive-directive_handler
db 5,'macro'
dw define_macro-directive_handler
db 5,'match'
dw match_directive-directive_handler
db 5,'purge'
dw purge_macro-directive_handler
db 4,'rept'
dw rept_directive-directive_handler
db 7,'restore'
dw restore_equ_constant-directive_handler
db 7,'restruc'
dw purge_struc-directive_handler
db 5,'struc'
dw define_struc-directive_handler
db 0
 
macro_directives:
db 6,'common'
dw common_block-directive_handler
db 7,'forward'
dw forward_block-directive_handler
db 5,'local'
dw local_symbols-directive_handler
db 7,'reverse'
dw reverse_block-directive_handler
db 0
 
operators:
db 1,'+',80h
db 1,'-',81h
db 1,'*',90h
db 1,'/',91h
db 3,'and',0B0h
db 3,'mod',0A0h
db 2,'or',0B1h
db 3,'shl',0C0h
db 3,'shr',0C1h
db 3,'xor',0B2h
db 0
 
single_operand_operators:
db 1,'+',82h
db 1,'-',83h
db 3,'not',0D0h
db 3,'plt',0E1h
db 3,'rva',0E0h
db 0
 
directive_operators:
db 5,'align',8Ch
db 2,'as',86h
db 2,'at',80h
db 7,'defined',88h
db 3,'dup',81h
db 2,'eq',0F0h
db 6,'eqtype',0F7h
db 4,'from',82h
db 2,'in',0F6h
db 2,'on',84h
db 3,'ptr',85h
db 10,'relativeto',0F8h
db 4,'used',89h
db 0
 
address_sizes:
db 4,'byte',1
db 5,'dword',4
db 5,'qword',8
db 4,'word',2
db 0
 
symbols:
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)
dw symbols_5-symbols,(symbols_6-symbols_5)/(5+2)
dw symbols_6-symbols,(symbols_7-symbols_6)/(6+2)
dw symbols_7-symbols,(symbols_8-symbols_7)/(7+2)
dw symbols_8-symbols,(symbols_9-symbols_8)/(8+2)
dw symbols_9-symbols,(symbols_10-symbols_9)/(9+2)
dw symbols_10-symbols,(symbols_11-symbols_10)/(10+2)
dw symbols_11-symbols,(symbols_end-symbols_11)/(11+2)
 
symbols_2:
db 'ah',10h,04h
db 'al',10h,10h
db 'ax',10h,20h
db 'bh',10h,07h
db 'bl',10h,13h
db 'bp',10h,25h
db 'bx',10h,23h
db 'ch',10h,05h
db 'cl',10h,11h
db 'cs',10h,62h
db 'cx',10h,21h
db 'dh',10h,06h
db 'di',10h,27h
db 'dl',10h,12h
db 'ds',10h,64h
db 'dx',10h,22h
db 'es',10h,61h
db 'fs',10h,65h
db 'gs',10h,66h
db 'ms',1Ch,41h
db 'mz',18h,20h
db 'nx',1Bh,83h
db 'pe',18h,30h
db 'r8',10h,88h
db 'r9',10h,89h
db 'si',10h,26h
db 'sp',10h,24h
db 'ss',10h,63h
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 '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 'eax',10h,40h
db 'ebp',10h,45h
db 'ebx',10h,43h
db 'ecx',10h,41h
db 'edi',10h,47h
db 'edx',10h,42h
db 'efi',1Bh,10
db 'eip',10h,0F4h
db 'elf',18h,50h
db 'esi',10h,46h
db 'esp',10h,44h
db 'far',12h,3
db 'gui',1Bh,2
db 'mm0',10h,0B0h
db 'mm1',10h,0B1h
db 'mm2',10h,0B2h
db 'mm3',10h,0B3h
db 'mm4',10h,0B4h
db 'mm5',10h,0B5h
db 'mm6',10h,0B6h
db 'mm7',10h,0B7h
db 'r10',10h,8Ah
db 'r11',10h,8Bh
db 'r12',10h,8Ch
db 'r13',10h,8Dh
db 'r14',10h,8Eh
db 'r15',10h,8Fh
db 'r8b',10h,18h
db 'r8d',10h,48h
db 'r8l',10h,18h
db 'r8w',10h,28h
db 'r9b',10h,19h
db 'r9d',10h,49h
db 'r9l',10h,19h
db 'r9w',10h,29h
db 'rax',10h,80h
db 'rbp',10h,85h
db 'rbx',10h,83h
db 'rcx',10h,81h
db 'rdi',10h,87h
db 'rdx',10h,82h
db 'rip',10h,0F8h
db 'rsi',10h,86h
db 'rsp',10h,84h
db 'sil',10h,16h
db 'spl',10h,14h
db 'st0',10h,0A0h
db 'st1',10h,0A1h
db 'st2',10h,0A2h
db 'st3',10h,0A3h
db 'st4',10h,0A4h
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 'wdm',1Bh,81h
symbols_4:
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 '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 'ms64',1Ch,49h
db 'near',12h,2
db 'note',1Eh,4
db 'pe64',18h,3Ch
db 'r10b',10h,1Ah
db 'r10d',10h,4Ah
db 'r10l',10h,1Ah
db 'r10w',10h,2Ah
db 'r11b',10h,1Bh
db 'r11d',10h,4Bh
db 'r11l',10h,1Bh
db 'r11w',10h,2Bh
db 'r12b',10h,1Ch
db 'r12d',10h,4Ch
db 'r12l',10h,1Ch
db 'r12w',10h,2Ch
db 'r13b',10h,1Dh
db 'r13d',10h,4Dh
db 'r13l',10h,1Dh
db 'r13w',10h,2Dh
db 'r14b',10h,1Eh
db 'r14d',10h,4Eh
db 'r14l',10h,1Eh
db 'r14w',10h,2Eh
db 'r15b',10h,1Fh
db 'r15d',10h,4Fh
db 'r15l',10h,1Fh
db 'r15w',10h,2Fh
db 'word',11h,2
db 'xmm0',10h,0C0h
db 'xmm1',10h,0C1h
db 'xmm2',10h,0C2h
db 'xmm3',10h,0C3h
db 'xmm4',10h,0C4h
db 'xmm5',10h,0C5h
db 'xmm6',10h,0C6h
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
symbols_5:
db 'dword',11h,4
db 'elf64',18h,58h
db 'fword',11h,6
db 'large',1Bh,82h
db 'pword',11h,6
db 'qword',11h,8
db 'short',12h,1
db 'tbyte',11h,0Ah
db 'tword',11h,0Ah
db 'use16',13h,16
db 'use32',13h,32
db 'use64',13h,64
db 'xmm10',10h,0CAh
db 'xmm11',10h,0CBh
db 'xmm12',10h,0CCh
db 'xmm13',10h,0CDh
db 'xmm14',10h,0CEh
db 'xmm15',10h,0CFh
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 'yword',11h,32
symbols_6:
db 'binary',18h,10h
db 'dqword',11h,16
db 'export',1Ah,0
db 'fixups',1Ah,5
db 'import',1Ah,1
db 'native',1Bh,1
db 'qqword',11h,32
db 'static',1Dh,1
symbols_7:
db 'console',1Bh,3
db 'dynamic',1Eh,2
db 'efiboot',1Bh,11
symbols_8:
db 'linkinfo',19h,9
db 'readable',19h,30
db 'resource',1Ah,2
db 'writable',19h,31
symbols_9:
db 'shareable',19h,28
db 'writeable',19h,31
symbols_10:
db 'efiruntime',1Bh,12
db 'executable',19h,29
db 'linkremove',19h,11
symbols_11:
db 'discardable',19h,25
db 'interpreter',1Eh,3
db 'notpageable',19h,27
symbols_end:
 
instructions:
dw instructions_2-instructions,(instructions_3-instructions_2)/(2+3)
dw instructions_3-instructions,(instructions_4-instructions_3)/(3+3)
dw instructions_4-instructions,(instructions_5-instructions_4)/(4+3)
dw instructions_5-instructions,(instructions_6-instructions_5)/(5+3)
dw instructions_6-instructions,(instructions_7-instructions_6)/(6+3)
dw instructions_7-instructions,(instructions_8-instructions_7)/(7+3)
dw instructions_8-instructions,(instructions_9-instructions_8)/(8+3)
dw instructions_9-instructions,(instructions_10-instructions_9)/(9+3)
dw instructions_10-instructions,(instructions_11-instructions_10)/(10+3)
dw instructions_11-instructions,(instructions_12-instructions_11)/(11+3)
dw instructions_12-instructions,(instructions_13-instructions_12)/(12+3)
dw instructions_13-instructions,(instructions_14-instructions_13)/(13+3)
dw instructions_14-instructions,(instructions_15-instructions_14)/(14+3)
dw instructions_15-instructions,(instructions_16-instructions_15)/(15+3)
dw instructions_16-instructions,(instructions_end-instructions_16)/(16+3)
 
instructions_2:
db 'bt',4
dw bt_instruction-instruction_handler
db 'if',0
dw if_directive-instruction_handler
db 'in',0
dw in_instruction-instruction_handler
db 'ja',77h
dw conditional_jump-instruction_handler
db 'jb',72h
dw conditional_jump-instruction_handler
db 'jc',72h
dw conditional_jump-instruction_handler
db 'je',74h
dw conditional_jump-instruction_handler
db 'jg',7Fh
dw conditional_jump-instruction_handler
db 'jl',7Ch
dw conditional_jump-instruction_handler
db 'jo',70h
dw conditional_jump-instruction_handler
db 'jp',7Ah
dw conditional_jump-instruction_handler
db 'js',78h
dw conditional_jump-instruction_handler
db 'jz',74h
dw conditional_jump-instruction_handler
db 'or',08h
dw basic_instruction-instruction_handler
instructions_3:
db 'aaa',37h
dw simple_instruction_except64-instruction_handler
db 'aad',0D5h
dw aa_instruction-instruction_handler
db 'aam',0D4h
dw aa_instruction-instruction_handler
db 'aas',3Fh
dw simple_instruction_except64-instruction_handler
db 'adc',10h
dw basic_instruction-instruction_handler
db 'add',00h
dw basic_instruction-instruction_handler
db 'and',20h
dw basic_instruction-instruction_handler
db 'bsf',0BCh
dw bs_instruction-instruction_handler
db 'bsr',0BDh
dw bs_instruction-instruction_handler
db 'btc',7
dw bt_instruction-instruction_handler
db 'btr',6
dw bt_instruction-instruction_handler
db 'bts',5
dw bt_instruction-instruction_handler
db 'cbw',98h
dw simple_instruction_16bit-instruction_handler
db 'cdq',99h
dw simple_instruction_32bit-instruction_handler
db 'clc',0F8h
dw simple_instruction-instruction_handler
db 'cld',0FCh
dw simple_instruction-instruction_handler
db 'cli',0FAh
dw simple_instruction-instruction_handler
db 'cmc',0F5h
dw simple_instruction-instruction_handler
db 'cmp',38h
dw basic_instruction-instruction_handler
db 'cqo',99h
dw simple_instruction_64bit-instruction_handler
db 'cwd',99h
dw simple_instruction_16bit-instruction_handler
db 'daa',27h
dw simple_instruction_except64-instruction_handler
db 'das',2Fh
dw simple_instruction_except64-instruction_handler
db 'dec',1
dw inc_instruction-instruction_handler
db 'div',6
dw single_operand_instruction-instruction_handler
db 'end',0
dw end_directive-instruction_handler
db 'err',0
dw err_directive-instruction_handler
db 'fld',0
dw fld_instruction-instruction_handler
db 'fst',2
dw fld_instruction-instruction_handler
db 'hlt',0F4h
dw simple_instruction-instruction_handler
db 'inc',0
dw inc_instruction-instruction_handler
db 'ins',6Ch
dw ins_instruction-instruction_handler
db 'int',0CDh
dw int_instruction-instruction_handler
db 'jae',73h
dw conditional_jump-instruction_handler
db 'jbe',76h
dw conditional_jump-instruction_handler
db 'jge',7Dh
dw conditional_jump-instruction_handler
db 'jle',7Eh
dw conditional_jump-instruction_handler
db 'jmp',0
dw jmp_instruction-instruction_handler
db 'jna',76h
dw conditional_jump-instruction_handler
db 'jnb',73h
dw conditional_jump-instruction_handler
db 'jnc',73h
dw conditional_jump-instruction_handler
db 'jne',75h
dw conditional_jump-instruction_handler
db 'jng',7Eh
dw conditional_jump-instruction_handler
db 'jnl',7Dh
dw conditional_jump-instruction_handler
db 'jno',71h
dw conditional_jump-instruction_handler
db 'jnp',7Bh
dw conditional_jump-instruction_handler
db 'jns',79h
dw conditional_jump-instruction_handler
db 'jnz',75h
dw conditional_jump-instruction_handler
db 'jpe',7Ah
dw conditional_jump-instruction_handler
db 'jpo',7Bh
dw conditional_jump-instruction_handler
db 'lar',2
dw lar_instruction-instruction_handler
db 'lds',3
dw ls_instruction-instruction_handler
db 'lea',0
dw lea_instruction-instruction_handler
db 'les',0
dw ls_instruction-instruction_handler
db 'lfs',4
dw ls_instruction-instruction_handler
db 'lgs',5
dw ls_instruction-instruction_handler
db 'lsl',3
dw lar_instruction-instruction_handler
db 'lss',2
dw ls_instruction-instruction_handler
db 'ltr',3
dw pm_word_instruction-instruction_handler
db 'mov',0
dw mov_instruction-instruction_handler
db 'mul',4
dw single_operand_instruction-instruction_handler
db 'neg',3
dw single_operand_instruction-instruction_handler
db 'nop',90h
dw nop_instruction-instruction_handler
db 'not',2
dw single_operand_instruction-instruction_handler
db 'org',0
dw org_directive-instruction_handler
db 'out',0
dw out_instruction-instruction_handler
db 'pop',0
dw pop_instruction-instruction_handler
db 'por',0EBh
dw basic_mmx_instruction-instruction_handler
db 'rcl',2
dw sh_instruction-instruction_handler
db 'rcr',3
dw sh_instruction-instruction_handler
db 'rep',0F3h
dw prefix_instruction-instruction_handler
db 'ret',0C2h
dw ret_instruction-instruction_handler
db 'rol',0
dw sh_instruction-instruction_handler
db 'ror',1
dw sh_instruction-instruction_handler
db 'rsm',0AAh
dw simple_extended_instruction-instruction_handler
db 'sal',4
dw sh_instruction-instruction_handler
db 'sar',7
dw sh_instruction-instruction_handler
db 'sbb',18h
dw basic_instruction-instruction_handler
db 'shl',4
dw sh_instruction-instruction_handler
db 'shr',5
dw sh_instruction-instruction_handler
db 'stc',0F9h
dw simple_instruction-instruction_handler
db 'std',0FDh
dw simple_instruction-instruction_handler
db 'sti',0FBh
dw simple_instruction-instruction_handler
db 'str',1
dw pm_store_word_instruction-instruction_handler
db 'sub',28h
dw basic_instruction-instruction_handler
db 'ud2',0Bh
dw simple_extended_instruction-instruction_handler
db 'xor',30h
dw basic_instruction-instruction_handler
instructions_4:
db 'adcx',66h
dw adx_instruction-instruction_handler
db 'adox',0F3h
dw adx_instruction-instruction_handler
db 'andn',0F2h
dw andn_instruction-instruction_handler
db 'arpl',0
dw arpl_instruction-instruction_handler
db 'blci',26h
dw tbm_instruction-instruction_handler
db 'blcs',13h
dw tbm_instruction-instruction_handler
db 'blsi',3
dw bmi_instruction-instruction_handler
db 'blsr',1
dw bmi_instruction-instruction_handler
db 'bzhi',0F5h
dw bzhi_instruction-instruction_handler
db 'call',0
dw call_instruction-instruction_handler
db 'cdqe',98h
dw simple_instruction_64bit-instruction_handler
db 'clac',0CAh
dw simple_vmx_instruction-instruction_handler
db 'clgi',0DDh
dw simple_vmx_instruction-instruction_handler
db 'clts',6
dw simple_extended_instruction-instruction_handler
db 'cmps',0A6h
dw cmps_instruction-instruction_handler
db 'cwde',98h
dw simple_instruction_32bit-instruction_handler
db 'data',0
dw data_directive-instruction_handler
db 'dppd',41h
dw sse4_instruction_3a_imm8-instruction_handler
db 'dpps',40h
dw sse4_instruction_3a_imm8-instruction_handler
db 'else',0
dw else_directive-instruction_handler
db 'emms',77h
dw simple_extended_instruction-instruction_handler
db 'fabs',100001b
dw simple_fpu_instruction-instruction_handler
db 'fadd',0
dw basic_fpu_instruction-instruction_handler
db 'fbld',4
dw fbld_instruction-instruction_handler
db 'fchs',100000b
dw simple_fpu_instruction-instruction_handler
db 'fcom',2
dw basic_fpu_instruction-instruction_handler
db 'fcos',111111b
dw simple_fpu_instruction-instruction_handler
db 'fdiv',6
dw basic_fpu_instruction-instruction_handler
db 'feni',0E0h
dw finit_instruction-instruction_handler
db 'fild',0
dw fild_instruction-instruction_handler
db 'fist',2
dw fild_instruction-instruction_handler
db 'fld1',101000b
dw simple_fpu_instruction-instruction_handler
db 'fldz',101110b
dw simple_fpu_instruction-instruction_handler
db 'fmul',1
dw basic_fpu_instruction-instruction_handler
db 'fnop',010000b
dw simple_fpu_instruction-instruction_handler
db 'fsin',111110b
dw simple_fpu_instruction-instruction_handler
db 'fstp',3
dw fld_instruction-instruction_handler
db 'fsub',4
dw basic_fpu_instruction-instruction_handler
db 'ftst',100100b
dw simple_fpu_instruction-instruction_handler
db 'fxam',100101b
dw simple_fpu_instruction-instruction_handler
db 'fxch',0
dw fxch_instruction-instruction_handler
db 'heap',0
dw heap_directive-instruction_handler
db 'idiv',7
dw single_operand_instruction-instruction_handler
db 'imul',0
dw imul_instruction-instruction_handler
db 'insb',6Ch
dw simple_instruction-instruction_handler
db 'insd',6Dh
dw simple_instruction_32bit-instruction_handler
db 'insw',6Dh
dw simple_instruction_16bit-instruction_handler
db 'int1',0F1h
dw simple_instruction-instruction_handler
db 'int3',0CCh
dw simple_instruction-instruction_handler
db 'into',0CEh
dw simple_instruction_except64-instruction_handler
db 'invd',8
dw simple_extended_instruction-instruction_handler
db 'iret',0CFh
dw iret_instruction-instruction_handler
db 'jcxz',0E3h
dw loop_instruction_16bit-instruction_handler
db 'jnae',72h
dw conditional_jump-instruction_handler
db 'jnbe',77h
dw conditional_jump-instruction_handler
db 'jnge',7Ch
dw conditional_jump-instruction_handler
db 'jnle',7Fh
dw conditional_jump-instruction_handler
db 'lahf',9Fh
dw simple_instruction-instruction_handler
db 'lgdt',2
dw lgdt_instruction-instruction_handler
db 'lidt',3
dw lgdt_instruction-instruction_handler
db 'lldt',2
dw pm_word_instruction-instruction_handler
db 'lmsw',16h
dw pm_word_instruction-instruction_handler
db 'load',0
dw load_directive-instruction_handler
db 'lock',0F0h
dw prefix_instruction-instruction_handler
db 'lods',0ACh
dw lods_instruction-instruction_handler
db 'loop',0E2h
dw loop_instruction-instruction_handler
db 'movd',0
dw movd_instruction-instruction_handler
db 'movq',0
dw movq_instruction-instruction_handler
db 'movs',0A4h
dw movs_instruction-instruction_handler
db 'mulx',0F6h
dw pdep_instruction-instruction_handler
db 'orpd',56h
dw sse_pd_instruction-instruction_handler
db 'orps',56h
dw sse_ps_instruction-instruction_handler
db 'outs',6Eh
dw outs_instruction-instruction_handler
db 'pand',0DBh
dw basic_mmx_instruction-instruction_handler
db 'pdep',0F5h
dw pdep_instruction-instruction_handler
db 'pext',0F5h
dw pext_instruction-instruction_handler
db 'popa',61h
dw simple_instruction_except64-instruction_handler
db 'popd',4
dw pop_instruction-instruction_handler
db 'popf',9Dh
dw simple_instruction-instruction_handler
db 'popq',8
dw pop_instruction-instruction_handler
db 'popw',2
dw pop_instruction-instruction_handler
db 'push',0
dw push_instruction-instruction_handler
db 'pxor',0EFh
dw basic_mmx_instruction-instruction_handler
db 'repe',0F3h
dw prefix_instruction-instruction_handler
db 'repz',0F3h
dw prefix_instruction-instruction_handler
db 'retd',0C2h
dw ret_instruction_32bit_except64-instruction_handler
db 'retf',0CAh
dw retf_instruction-instruction_handler
db 'retn',0C2h
dw ret_instruction-instruction_handler
db 'retq',0C2h
dw ret_instruction_only64-instruction_handler
db 'retw',0C2h
dw ret_instruction_16bit-instruction_handler
db 'rorx',0F0h
dw rorx_instruction-instruction_handler
db 'sahf',9Eh
dw simple_instruction-instruction_handler
db 'salc',0D6h
dw simple_instruction_except64-instruction_handler
db 'sarx',0F7h
dw sarx_instruction-instruction_handler
db 'scas',0AEh
dw stos_instruction-instruction_handler
db 'seta',97h
dw set_instruction-instruction_handler
db 'setb',92h
dw set_instruction-instruction_handler
db 'setc',92h
dw set_instruction-instruction_handler
db 'sete',94h
dw set_instruction-instruction_handler
db 'setg',9Fh
dw set_instruction-instruction_handler
db 'setl',9Ch
dw set_instruction-instruction_handler
db 'seto',90h
dw set_instruction-instruction_handler
db 'setp',9Ah
dw set_instruction-instruction_handler
db 'sets',98h
dw set_instruction-instruction_handler
db 'setz',94h
dw set_instruction-instruction_handler
db 'sgdt',0
dw lgdt_instruction-instruction_handler
db 'shld',0A4h
dw shd_instruction-instruction_handler
db 'shlx',0F7h
dw shlx_instruction-instruction_handler
db 'shrd',0ACh
dw shd_instruction-instruction_handler
db 'shrx',0F7h
dw shrx_instruction-instruction_handler
db 'sidt',1
dw lgdt_instruction-instruction_handler
db 'sldt',0
dw pm_store_word_instruction-instruction_handler
db 'smsw',14h
dw pm_store_word_instruction-instruction_handler
db 'stac',0CBh
dw simple_vmx_instruction-instruction_handler
db 'stgi',0DCh
dw simple_vmx_instruction-instruction_handler
db 'stos',0AAh
dw stos_instruction-instruction_handler
db 'test',0
dw test_instruction-instruction_handler
db 'verr',4
dw pm_word_instruction-instruction_handler
db 'verw',5
dw pm_word_instruction-instruction_handler
db 'vpor',0EBh
dw avx_pd_instruction-instruction_handler
db 'wait',9Bh
dw simple_instruction-instruction_handler
db 'xadd',0C0h
dw basic_486_instruction-instruction_handler
db 'xchg',0
dw xchg_instruction-instruction_handler
db 'xend',0D5h
dw simple_vmx_instruction-instruction_handler
db 'xlat',0D7h
dw xlat_instruction-instruction_handler
instructions_5:
db 'addpd',58h
dw sse_pd_instruction-instruction_handler
db 'addps',58h
dw sse_ps_instruction-instruction_handler
db 'addsd',58h
dw sse_sd_instruction-instruction_handler
db 'addss',58h
dw sse_ss_instruction-instruction_handler
db 'align',0
dw align_directive-instruction_handler
db 'andpd',54h
dw sse_pd_instruction-instruction_handler
db 'andps',54h
dw sse_ps_instruction-instruction_handler
db 'bextr',0F7h
dw bextr_instruction-instruction_handler
db 'blcic',15h
dw tbm_instruction-instruction_handler
db 'blsic',16h
dw tbm_instruction-instruction_handler
db 'bound',0
dw bound_instruction-instruction_handler
db 'break',0
dw break_directive-instruction_handler
db 'bswap',0
dw bswap_instruction-instruction_handler
db 'cmova',47h
dw bs_instruction-instruction_handler
db 'cmovb',42h
dw bs_instruction-instruction_handler
db 'cmovc',42h
dw bs_instruction-instruction_handler
db 'cmove',44h
dw bs_instruction-instruction_handler
db 'cmovg',4Fh
dw bs_instruction-instruction_handler
db 'cmovl',4Ch
dw bs_instruction-instruction_handler
db 'cmovo',40h
dw bs_instruction-instruction_handler
db 'cmovp',4Ah
dw bs_instruction-instruction_handler
db 'cmovs',48h
dw bs_instruction-instruction_handler
db 'cmovz',44h
dw bs_instruction-instruction_handler
db 'cmppd',-1
dw cmp_pd_instruction-instruction_handler
db 'cmpps',-1
dw cmp_ps_instruction-instruction_handler
db 'cmpsb',0A6h
dw simple_instruction-instruction_handler
db 'cmpsd',-1
dw cmpsd_instruction-instruction_handler
db 'cmpsq',0A7h
dw simple_instruction_64bit-instruction_handler
db 'cmpss',-1
dw cmp_ss_instruction-instruction_handler
db 'cmpsw',0A7h
dw simple_instruction_16bit-instruction_handler
db 'cpuid',0A2h
dw simple_extended_instruction-instruction_handler
db 'crc32',0
dw crc32_instruction-instruction_handler
db 'divpd',5Eh
dw sse_pd_instruction-instruction_handler
db 'divps',5Eh
dw sse_ps_instruction-instruction_handler
db 'divsd',5Eh
dw sse_sd_instruction-instruction_handler
db 'divss',5Eh
dw sse_ss_instruction-instruction_handler
db 'enter',0
dw enter_instruction-instruction_handler
db 'entry',0
dw entry_directive-instruction_handler
db 'extrn',0
dw extrn_directive-instruction_handler
db 'extrq',0
dw extrq_instruction-instruction_handler
db 'f2xm1',110000b
dw simple_fpu_instruction-instruction_handler
db 'faddp',0
dw faddp_instruction-instruction_handler
db 'fbstp',6
dw fbld_instruction-instruction_handler
db 'fclex',0E2h
dw finit_instruction-instruction_handler
db 'fcomi',0F0h
dw fcomi_instruction-instruction_handler
db 'fcomp',3
dw basic_fpu_instruction-instruction_handler
db 'fdisi',0E1h
dw finit_instruction-instruction_handler
db 'fdivp',7
dw faddp_instruction-instruction_handler
db 'fdivr',7
dw basic_fpu_instruction-instruction_handler
db 'femms',0Eh
dw simple_extended_instruction-instruction_handler
db 'ffree',0
dw ffree_instruction-instruction_handler
db 'fiadd',0
dw fi_instruction-instruction_handler
db 'ficom',2
dw fi_instruction-instruction_handler
db 'fidiv',6
dw fi_instruction-instruction_handler
db 'fimul',1
dw fi_instruction-instruction_handler
db 'finit',0E3h
dw finit_instruction-instruction_handler
db 'fistp',3
dw fild_instruction-instruction_handler
db 'fisub',4
dw fi_instruction-instruction_handler
db 'fldcw',5
dw fldcw_instruction-instruction_handler
db 'fldpi',101011b
dw simple_fpu_instruction-instruction_handler
db 'fmulp',1
dw faddp_instruction-instruction_handler
db 'fneni',0E0h
dw fninit_instruction-instruction_handler
db 'fprem',111000b
dw simple_fpu_instruction-instruction_handler
db 'fptan',110010b
dw simple_fpu_instruction-instruction_handler
db 'fsave',6
dw fsave_instruction-instruction_handler
db 'fsqrt',111010b
dw simple_fpu_instruction-instruction_handler
db 'fstcw',7
dw fstcw_instruction-instruction_handler
db 'fstsw',0
dw fstsw_instruction-instruction_handler
db 'fsubp',5
dw faddp_instruction-instruction_handler
db 'fsubr',5
dw basic_fpu_instruction-instruction_handler
db 'fucom',4
dw ffree_instruction-instruction_handler
db 'fwait',9Bh
dw simple_instruction-instruction_handler
db 'fyl2x',110001b
dw simple_fpu_instruction-instruction_handler
db 'icebp',0F1h
dw simple_instruction-instruction_handler
db 'iretd',0CFh
dw simple_instruction_32bit-instruction_handler
db 'iretq',0CFh
dw simple_instruction_64bit-instruction_handler
db 'iretw',0CFh
dw simple_instruction_16bit-instruction_handler
db 'jecxz',0E3h
dw loop_instruction_32bit-instruction_handler
db 'jrcxz',0E3h
dw loop_instruction_64bit-instruction_handler
db 'label',0
dw label_directive-instruction_handler
db 'lddqu',0
dw lddqu_instruction-instruction_handler
db 'leave',0C9h
dw simple_instruction-instruction_handler
db 'lodsb',0ACh
dw simple_instruction-instruction_handler
db 'lodsd',0ADh
dw simple_instruction_32bit-instruction_handler
db 'lodsq',0ADh
dw simple_instruction_64bit-instruction_handler
db 'lodsw',0ADh
dw simple_instruction_16bit-instruction_handler
db 'loopd',0E2h
dw loop_instruction_32bit-instruction_handler
db 'loope',0E1h
dw loop_instruction-instruction_handler
db 'loopq',0E2h
dw loop_instruction_64bit-instruction_handler
db 'loopw',0E2h
dw loop_instruction_16bit-instruction_handler
db 'loopz',0E1h
dw loop_instruction-instruction_handler
db 'lzcnt',0BDh
dw popcnt_instruction-instruction_handler
db 'maxpd',5Fh
dw sse_pd_instruction-instruction_handler
db 'maxps',5Fh
dw sse_ps_instruction-instruction_handler
db 'maxsd',5Fh
dw sse_sd_instruction-instruction_handler
db 'maxss',5Fh
dw sse_ss_instruction-instruction_handler
db 'minpd',5Dh
dw sse_pd_instruction-instruction_handler
db 'minps',5Dh
dw sse_ps_instruction-instruction_handler
db 'minsd',5Dh
dw sse_sd_instruction-instruction_handler
db 'minss',5Dh
dw sse_ss_instruction-instruction_handler
db 'movbe',0F0h
dw movbe_instruction-instruction_handler
db 'movsb',0A4h
dw simple_instruction-instruction_handler
db 'movsd',0
dw movsd_instruction-instruction_handler
db 'movsq',0A5h
dw simple_instruction_64bit-instruction_handler
db 'movss',0
dw movss_instruction-instruction_handler
db 'movsw',0A5h
dw simple_instruction_16bit-instruction_handler
db 'movsx',0BEh
dw movx_instruction-instruction_handler
db 'movzx',0B6h
dw movx_instruction-instruction_handler
db 'mulpd',59h
dw sse_pd_instruction-instruction_handler
db 'mulps',59h
dw sse_ps_instruction-instruction_handler
db 'mulsd',59h
dw sse_sd_instruction-instruction_handler
db 'mulss',59h
dw sse_ss_instruction-instruction_handler
db 'mwait',0C9h
dw monitor_instruction-instruction_handler
db 'outsb',6Eh
dw simple_instruction-instruction_handler
db 'outsd',6Fh
dw simple_instruction_32bit-instruction_handler
db 'outsw',6Fh
dw simple_instruction_16bit-instruction_handler
db 'pabsb',1Ch
dw ssse3_instruction-instruction_handler
db 'pabsd',1Eh
dw ssse3_instruction-instruction_handler
db 'pabsw',1Dh
dw ssse3_instruction-instruction_handler
db 'paddb',0FCh
dw basic_mmx_instruction-instruction_handler
db 'paddd',0FEh
dw basic_mmx_instruction-instruction_handler
db 'paddq',0D4h
dw basic_mmx_instruction-instruction_handler
db 'paddw',0FDh
dw basic_mmx_instruction-instruction_handler
db 'pandn',0DFh
dw basic_mmx_instruction-instruction_handler
db 'pause',0
dw pause_instruction-instruction_handler
db 'pavgb',0E0h
dw basic_mmx_instruction-instruction_handler
db 'pavgw',0E3h
dw basic_mmx_instruction-instruction_handler
db 'pf2id',1Dh
dw amd3dnow_instruction-instruction_handler
db 'pf2iw',1Ch
dw amd3dnow_instruction-instruction_handler
db 'pfacc',0AEh
dw amd3dnow_instruction-instruction_handler
db 'pfadd',9Eh
dw amd3dnow_instruction-instruction_handler
db 'pfmax',0A4h
dw amd3dnow_instruction-instruction_handler
db 'pfmin',94h
dw amd3dnow_instruction-instruction_handler
db 'pfmul',0B4h
dw amd3dnow_instruction-instruction_handler
db 'pfrcp',96h
dw amd3dnow_instruction-instruction_handler
db 'pfsub',9Ah
dw amd3dnow_instruction-instruction_handler
db 'pi2fd',0Dh
dw amd3dnow_instruction-instruction_handler
db 'pi2fw',0Ch
dw amd3dnow_instruction-instruction_handler
db 'popad',61h
dw simple_instruction_32bit_except64-instruction_handler
db 'popaw',61h
dw simple_instruction_16bit_except64-instruction_handler
db 'popfd',9Dh
dw simple_instruction_32bit_except64-instruction_handler
db 'popfq',9Dh
dw simple_instruction_only64-instruction_handler
db 'popfw',9Dh
dw simple_instruction_16bit-instruction_handler
db 'pslld',0F2h
dw mmx_bit_shift_instruction-instruction_handler
db 'psllq',0F3h
dw mmx_bit_shift_instruction-instruction_handler
db 'psllw',0F1h
dw mmx_bit_shift_instruction-instruction_handler
db 'psrad',0E2h
dw mmx_bit_shift_instruction-instruction_handler
db 'psraw',0E1h
dw mmx_bit_shift_instruction-instruction_handler
db 'psrld',0D2h
dw mmx_bit_shift_instruction-instruction_handler
db 'psrlq',0D3h
dw mmx_bit_shift_instruction-instruction_handler
db 'psrlw',0D1h
dw mmx_bit_shift_instruction-instruction_handler
db 'psubb',0F8h
dw basic_mmx_instruction-instruction_handler
db 'psubd',0FAh
dw basic_mmx_instruction-instruction_handler
db 'psubq',0FBh
dw basic_mmx_instruction-instruction_handler
db 'psubw',0F9h
dw basic_mmx_instruction-instruction_handler
db 'ptest',17h
dw sse4_instruction_38-instruction_handler
db 'pusha',60h
dw simple_instruction_except64-instruction_handler
db 'pushd',4
dw push_instruction-instruction_handler
db 'pushf',9Ch
dw simple_instruction-instruction_handler
db 'pushq',8
dw push_instruction-instruction_handler
db 'pushw',2
dw push_instruction-instruction_handler
db 'rcpps',53h
dw sse_ps_instruction-instruction_handler
db 'rcpss',53h
dw sse_ss_instruction-instruction_handler
db 'rdmsr',32h
dw simple_extended_instruction-instruction_handler
db 'rdpmc',33h
dw simple_extended_instruction-instruction_handler
db 'rdtsc',31h
dw simple_extended_instruction-instruction_handler
db 'repne',0F2h
dw prefix_instruction-instruction_handler
db 'repnz',0F2h
dw prefix_instruction-instruction_handler
db 'retfd',0CAh
dw ret_instruction_32bit-instruction_handler
db 'retfq',0CAh
dw ret_instruction_64bit-instruction_handler
db 'retfw',0CAh
dw ret_instruction_16bit-instruction_handler
db 'retnd',0C2h
dw ret_instruction_32bit_except64-instruction_handler
db 'retnq',0C2h
dw ret_instruction_only64-instruction_handler
db 'retnw',0C2h
dw ret_instruction_16bit-instruction_handler
db 'scasb',0AEh
dw simple_instruction-instruction_handler
db 'scasd',0AFh
dw simple_instruction_32bit-instruction_handler
db 'scasq',0AFh
dw simple_instruction_64bit-instruction_handler
db 'scasw',0AFh
dw simple_instruction_16bit-instruction_handler
db 'setae',93h
dw set_instruction-instruction_handler
db 'setbe',96h
dw set_instruction-instruction_handler
db 'setge',9Dh
dw set_instruction-instruction_handler
db 'setle',9Eh
dw set_instruction-instruction_handler
db 'setna',96h
dw set_instruction-instruction_handler
db 'setnb',93h
dw set_instruction-instruction_handler
db 'setnc',93h
dw set_instruction-instruction_handler
db 'setne',95h
dw set_instruction-instruction_handler
db 'setng',9Eh
dw set_instruction-instruction_handler
db 'setnl',9Dh
dw set_instruction-instruction_handler
db 'setno',91h
dw set_instruction-instruction_handler
db 'setnp',9Bh
dw set_instruction-instruction_handler
db 'setns',99h
dw set_instruction-instruction_handler
db 'setnz',95h
dw set_instruction-instruction_handler
db 'setpe',9Ah
dw set_instruction-instruction_handler
db 'setpo',9Bh
dw set_instruction-instruction_handler
db 'stack',0
dw stack_directive-instruction_handler
db 'store',0
dw store_directive-instruction_handler
db 'stosb',0AAh
dw simple_instruction-instruction_handler
db 'stosd',0ABh
dw simple_instruction_32bit-instruction_handler
db 'stosq',0ABh
dw simple_instruction_64bit-instruction_handler
db 'stosw',0ABh
dw simple_instruction_16bit-instruction_handler
db 'subpd',5Ch
dw sse_pd_instruction-instruction_handler
db 'subps',5Ch
dw sse_ps_instruction-instruction_handler
db 'subsd',5Ch
dw sse_sd_instruction-instruction_handler
db 'subss',5Ch
dw sse_ss_instruction-instruction_handler
db 'times',0
dw times_directive-instruction_handler
db 'tzcnt',0BCh
dw popcnt_instruction-instruction_handler
db 'tzmsk',14h
dw tbm_instruction-instruction_handler
db 'vdppd',41h
dw avx_128bit_instruction_3a_imm8-instruction_handler
db 'vdpps',40h
dw avx_instruction_3a_imm8-instruction_handler
db 'vmovd',0
dw avx_movd_instruction-instruction_handler
db 'vmovq',0
dw avx_movq_instruction-instruction_handler
db 'vmrun',0D8h
dw simple_svm_instruction-instruction_handler
db 'vmxon',6
dw vmxon_instruction-instruction_handler
db 'vorpd',56h
dw avx_pd_instruction-instruction_handler
db 'vorps',56h
dw avx_ps_instruction-instruction_handler
db 'vpand',0DBh
dw avx_pd_instruction-instruction_handler
db 'vpxor',0EFh
dw avx_pd_instruction-instruction_handler
db 'while',0
dw while_directive-instruction_handler
db 'wrmsr',30h
dw simple_extended_instruction-instruction_handler
db 'xlatb',0D7h
dw simple_instruction-instruction_handler
db 'xorpd',57h
dw sse_pd_instruction-instruction_handler
db 'xorps',57h
dw sse_ps_instruction-instruction_handler
db 'xsave',100b
dw fxsave_instruction-instruction_handler
db 'xtest',0D6h
dw simple_vmx_instruction-instruction_handler
instructions_6:
db 'aesdec',0DEh
dw sse4_instruction_38-instruction_handler
db 'aesenc',0DCh
dw sse4_instruction_38-instruction_handler
db 'aesimc',0DBh
dw sse4_instruction_38-instruction_handler
db 'andnpd',55h
dw sse_pd_instruction-instruction_handler
db 'andnps',55h
dw sse_ps_instruction-instruction_handler
db 'assert',0
dw assert_directive-instruction_handler
db 'blcmsk',21h
dw tbm_instruction-instruction_handler
db 'blsmsk',2
dw bmi_instruction-instruction_handler
db 'cmovae',43h
dw bs_instruction-instruction_handler
db 'cmovbe',46h
dw bs_instruction-instruction_handler
db 'cmovge',4Dh
dw bs_instruction-instruction_handler
db 'cmovle',4Eh
dw bs_instruction-instruction_handler
db 'cmovna',46h
dw bs_instruction-instruction_handler
db 'cmovnb',43h
dw bs_instruction-instruction_handler
db 'cmovnc',43h
dw bs_instruction-instruction_handler
db 'cmovne',45h
dw bs_instruction-instruction_handler
db 'cmovng',4Eh
dw bs_instruction-instruction_handler
db 'cmovnl',4Dh
dw bs_instruction-instruction_handler
db 'cmovno',41h
dw bs_instruction-instruction_handler
db 'cmovnp',4Bh
dw bs_instruction-instruction_handler
db 'cmovns',49h
dw bs_instruction-instruction_handler
db 'cmovnz',45h
dw bs_instruction-instruction_handler
db 'cmovpe',4Ah
dw bs_instruction-instruction_handler
db 'cmovpo',4Bh
dw bs_instruction-instruction_handler
db 'comisd',2Fh
dw comisd_instruction-instruction_handler
db 'comiss',2Fh
dw comiss_instruction-instruction_handler
db 'fcmovb',0C0h
dw fcmov_instruction-instruction_handler
db 'fcmove',0C8h
dw fcmov_instruction-instruction_handler
db 'fcmovu',0D8h
dw fcmov_instruction-instruction_handler
db 'fcomip',0F0h
dw fcomip_instruction-instruction_handler
db 'fcompp',0
dw fcompp_instruction-instruction_handler
db 'fdivrp',6
dw faddp_instruction-instruction_handler
db 'ffreep',0
dw ffreep_instruction-instruction_handler
db 'ficomp',3
dw fi_instruction-instruction_handler
db 'fidivr',7
dw fi_instruction-instruction_handler
db 'fisttp',1
dw fild_instruction-instruction_handler
db 'fisubr',5
dw fi_instruction-instruction_handler
db 'fldenv',4
dw fldenv_instruction-instruction_handler
db 'fldl2e',101010b
dw simple_fpu_instruction-instruction_handler
db 'fldl2t',101001b
dw simple_fpu_instruction-instruction_handler
db 'fldlg2',101100b
dw simple_fpu_instruction-instruction_handler
db 'fldln2',101101b
dw simple_fpu_instruction-instruction_handler
db 'fnclex',0E2h
dw fninit_instruction-instruction_handler
db 'fndisi',0E1h
dw fninit_instruction-instruction_handler
db 'fninit',0E3h
dw fninit_instruction-instruction_handler
db 'fnsave',6
dw fnsave_instruction-instruction_handler
db 'fnstcw',7
dw fldcw_instruction-instruction_handler
db 'fnstsw',0
dw fnstsw_instruction-instruction_handler
db 'format',0
dw format_directive-instruction_handler
db 'fpatan',110011b
dw simple_fpu_instruction-instruction_handler
db 'fprem1',110101b
dw simple_fpu_instruction-instruction_handler
db 'frstor',4
dw fnsave_instruction-instruction_handler
db 'frstpm',0E5h
dw fninit_instruction-instruction_handler
db 'fsaved',6
dw fsave_instruction_32bit-instruction_handler
db 'fsavew',6
dw fsave_instruction_16bit-instruction_handler
db 'fscale',111101b
dw simple_fpu_instruction-instruction_handler
db 'fsetpm',0E4h
dw fninit_instruction-instruction_handler
db 'fstenv',6
dw fstenv_instruction-instruction_handler
db 'fsubrp',4
dw faddp_instruction-instruction_handler
db 'fucomi',0E8h
dw fcomi_instruction-instruction_handler
db 'fucomp',5
dw ffree_instruction-instruction_handler
db 'fxsave',0
dw fxsave_instruction-instruction_handler
db 'getsec',37h
dw simple_extended_instruction-instruction_handler
db 'haddpd',07Ch
dw sse_pd_instruction-instruction_handler
db 'haddps',07Ch
dw cvtpd2dq_instruction-instruction_handler
db 'hsubpd',07Dh
dw sse_pd_instruction-instruction_handler
db 'hsubps',07Dh
dw cvtpd2dq_instruction-instruction_handler
db 'invept',80h
dw vmx_inv_instruction-instruction_handler
db 'invlpg',0
dw invlpg_instruction-instruction_handler
db 'lfence',0E8h
dw fence_instruction-instruction_handler
db 'llwpcb',0
dw llwpcb_instruction-instruction_handler
db 'looped',0E1h
dw loop_instruction_32bit-instruction_handler
db 'loopeq',0E1h
dw loop_instruction_64bit-instruction_handler
db 'loopew',0E1h
dw loop_instruction_16bit-instruction_handler
db 'loopne',0E0h
dw loop_instruction-instruction_handler
db 'loopnz',0E0h
dw loop_instruction-instruction_handler
db 'loopzd',0E1h
dw loop_instruction_32bit-instruction_handler
db 'loopzq',0E1h
dw loop_instruction_64bit-instruction_handler
db 'loopzw',0E1h
dw loop_instruction_16bit-instruction_handler
db 'lwpins',0
dw lwpins_instruction-instruction_handler
db 'lwpval',1
dw lwpins_instruction-instruction_handler
db 'mfence',0F0h
dw fence_instruction-instruction_handler
db 'movapd',28h
dw movpd_instruction-instruction_handler
db 'movaps',28h
dw movps_instruction-instruction_handler
db 'movdqa',66h
dw movdq_instruction-instruction_handler
db 'movdqu',0F3h
dw movdq_instruction-instruction_handler
db 'movhpd',16h
dw movlpd_instruction-instruction_handler
db 'movhps',16h
dw movlps_instruction-instruction_handler
db 'movlpd',12h
dw movlpd_instruction-instruction_handler
db 'movlps',12h
dw movlps_instruction-instruction_handler
db 'movnti',0C3h
dw movnti_instruction-instruction_handler
db 'movntq',0E7h
dw movntq_instruction-instruction_handler
db 'movsxd',63h
dw movsxd_instruction-instruction_handler
db 'movupd',10h
dw movpd_instruction-instruction_handler
db 'movups',10h
dw movps_instruction-instruction_handler
db 'paddsb',0ECh
dw basic_mmx_instruction-instruction_handler
db 'paddsw',0EDh
dw basic_mmx_instruction-instruction_handler
db 'pextrb',14h
dw pextrb_instruction-instruction_handler
db 'pextrd',16h
dw pextrd_instruction-instruction_handler
db 'pextrq',16h
dw pextrq_instruction-instruction_handler
db 'pextrw',15h
dw pextrw_instruction-instruction_handler
db 'pfnacc',8Ah
dw amd3dnow_instruction-instruction_handler
db 'pfsubr',0AAh
dw amd3dnow_instruction-instruction_handler
db 'phaddd',2
dw ssse3_instruction-instruction_handler
db 'phaddw',1
dw ssse3_instruction-instruction_handler
db 'phsubd',6
dw ssse3_instruction-instruction_handler
db 'phsubw',5
dw ssse3_instruction-instruction_handler
db 'pinsrb',20h
dw pinsrb_instruction-instruction_handler
db 'pinsrd',22h
dw pinsrd_instruction-instruction_handler
db 'pinsrq',22h
dw pinsrq_instruction-instruction_handler
db 'pinsrw',0C4h
dw pinsrw_instruction-instruction_handler
db 'pmaxsb',3Ch
dw sse4_instruction_38-instruction_handler
db 'pmaxsd',3Dh
dw sse4_instruction_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
db 'pmaxuw',3Eh
dw sse4_instruction_38-instruction_handler
db 'pminsb',38h
dw sse4_instruction_38-instruction_handler
db 'pminsd',39h
dw sse4_instruction_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
db 'pminuw',3Ah
dw sse4_instruction_38-instruction_handler
db 'pmuldq',28h
dw sse4_instruction_38-instruction_handler
db 'pmulhw',0E5h
dw basic_mmx_instruction-instruction_handler
db 'pmulld',40h
dw sse4_instruction_38-instruction_handler
db 'pmullw',0D5h
dw basic_mmx_instruction-instruction_handler
db 'popcnt',0B8h
dw popcnt_instruction-instruction_handler
db 'psadbw',0F6h
dw basic_mmx_instruction-instruction_handler
db 'pshufb',0
dw ssse3_instruction-instruction_handler
db 'pshufd',66h
dw pshufd_instruction-instruction_handler
db 'pshufw',0
dw pshufw_instruction-instruction_handler
db 'psignb',8
dw ssse3_instruction-instruction_handler
db 'psignd',0Ah
dw ssse3_instruction-instruction_handler
db 'psignw',9
dw ssse3_instruction-instruction_handler
db 'pslldq',111b
dw pslldq_instruction-instruction_handler
db 'psrldq',011b
dw pslldq_instruction-instruction_handler
db 'psubsb',0E8h
dw basic_mmx_instruction-instruction_handler
db 'psubsw',0E9h
dw basic_mmx_instruction-instruction_handler
db 'pswapd',0BBh
dw amd3dnow_instruction-instruction_handler
db 'public',0
dw public_directive-instruction_handler
db 'pushad',60h
dw simple_instruction_32bit_except64-instruction_handler
db 'pushaw',60h
dw simple_instruction_16bit_except64-instruction_handler
db 'pushfd',9Ch
dw simple_instruction_32bit_except64-instruction_handler
db 'pushfq',9Ch
dw simple_instruction_only64-instruction_handler
db 'pushfw',9Ch
dw simple_instruction_16bit-instruction_handler
db 'rdmsrq',32h
dw simple_extended_instruction_64bit-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 'repeat',0
dw repeat_directive-instruction_handler
db 'setalc',0D6h
dw simple_instruction_except64-instruction_handler
db 'setnae',92h
dw set_instruction-instruction_handler
db 'setnbe',97h
dw set_instruction-instruction_handler
db 'setnge',9Ch
dw set_instruction-instruction_handler
db 'setnle',9Fh
dw set_instruction-instruction_handler
db 'sfence',0F8h
dw fence_instruction-instruction_handler
db 'shufpd',0C6h
dw sse_pd_instruction_imm8-instruction_handler
db 'shufps',0C6h
dw sse_ps_instruction_imm8-instruction_handler
db 'skinit',0
dw skinit_instruction-instruction_handler
db 'slwpcb',1
dw llwpcb_instruction-instruction_handler
db 'sqrtpd',51h
dw sse_pd_instruction-instruction_handler
db 'sqrtps',51h
dw sse_ps_instruction-instruction_handler
db 'sqrtsd',51h
dw sse_sd_instruction-instruction_handler
db 'sqrtss',51h
dw sse_ss_instruction-instruction_handler
db 'swapgs',0
dw swapgs_instruction-instruction_handler
db 'sysret',07h
dw simple_extended_instruction-instruction_handler
db 't1mskc',17h
dw tbm_instruction-instruction_handler
db 'vaddpd',58h
dw avx_pd_instruction-instruction_handler
db 'vaddps',58h
dw avx_ps_instruction-instruction_handler
db 'vaddsd',58h
dw avx_sd_instruction-instruction_handler
db 'vaddss',58h
dw avx_ss_instruction-instruction_handler
db 'vandpd',54h
dw avx_pd_instruction-instruction_handler
db 'vandps',54h
dw avx_ps_instruction-instruction_handler
db 'vcmppd',-1
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpps',-1
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpsd',-1
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpss',-1
dw avx_cmp_ss_instruction-instruction_handler
db 'vdivpd',5Eh
dw avx_pd_instruction-instruction_handler
db 'vdivps',5Eh
dw avx_ps_instruction-instruction_handler
db 'vdivsd',5Eh
dw avx_sd_instruction-instruction_handler
db 'vdivss',5Eh
dw avx_ss_instruction-instruction_handler
db 'vlddqu',0F0h
dw avx_lddqu_instruction-instruction_handler
db 'vmaxpd',5Fh
dw avx_pd_instruction-instruction_handler
db 'vmaxps',5Fh
dw avx_ps_instruction-instruction_handler
db 'vmaxsd',5Fh
dw avx_sd_instruction-instruction_handler
db 'vmaxss',5Fh
dw avx_ss_instruction-instruction_handler
db 'vmcall',0C1h
dw simple_vmx_instruction-instruction_handler
db 'vminpd',5Dh
dw avx_pd_instruction-instruction_handler
db 'vminps',5Dh
dw avx_ps_instruction-instruction_handler
db 'vminsd',5Dh
dw avx_sd_instruction-instruction_handler
db 'vminss',5Dh
dw avx_ss_instruction-instruction_handler
db 'vmload',0DAh
dw simple_svm_instruction-instruction_handler
db 'vmovsd',0
dw avx_movsd_instruction-instruction_handler
db 'vmovss',0
dw avx_movss_instruction-instruction_handler
db 'vmread',0
dw vmread_instruction-instruction_handler
db 'vmsave',0DBh
dw simple_svm_instruction-instruction_handler
db 'vmulpd',59h
dw avx_pd_instruction-instruction_handler
db 'vmulps',59h
dw avx_ps_instruction-instruction_handler
db 'vmulsd',59h
dw avx_sd_instruction-instruction_handler
db 'vmulss',59h
dw avx_ss_instruction-instruction_handler
db 'vmxoff',0C4h
dw simple_vmx_instruction-instruction_handler
db 'vpabsb',1Ch
dw avx_single_source_instruction_38-instruction_handler
db 'vpabsd',1Eh
dw avx_single_source_instruction_38-instruction_handler
db 'vpabsw',1Dh
dw avx_single_source_instruction_38-instruction_handler
db 'vpaddb',0FCh
dw avx_pd_instruction-instruction_handler
db 'vpaddd',0FEh
dw avx_pd_instruction-instruction_handler
db 'vpaddq',0D4h
dw avx_pd_instruction-instruction_handler
db 'vpaddw',0FDh
dw avx_pd_instruction-instruction_handler
db 'vpandn',0DFh
dw avx_pd_instruction-instruction_handler
db 'vpavgb',0E0h
dw avx_pd_instruction-instruction_handler
db 'vpavgw',0E3h
dw avx_pd_instruction-instruction_handler
db 'vpcmov',0A2h
dw vpcmov_instruction-instruction_handler
db 'vpcomb',-1
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomd',-1
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomq',-1
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomw',-1
dw xop_pcom_w_instruction-instruction_handler
db 'vpermd',36h
dw avx_permd_instruction-instruction_handler
db 'vpermq',0
dw avx_permq_instruction-instruction_handler
db 'vpperm',0A3h
dw xop_128bit_instruction-instruction_handler
db 'vprotb',90h
dw xop_shift_instruction-instruction_handler
db 'vprotd',92h
dw xop_shift_instruction-instruction_handler
db 'vprotq',93h
dw xop_shift_instruction-instruction_handler
db 'vprotw',91h
dw xop_shift_instruction-instruction_handler
db 'vpshab',98h
dw xop_shift_instruction-instruction_handler
db 'vpshad',9Ah
dw xop_shift_instruction-instruction_handler
db 'vpshaq',9Bh
dw xop_shift_instruction-instruction_handler
db 'vpshaw',99h
dw xop_shift_instruction-instruction_handler
db 'vpshlb',94h
dw xop_shift_instruction-instruction_handler
db 'vpshld',96h
dw xop_shift_instruction-instruction_handler
db 'vpshlq',97h
dw xop_shift_instruction-instruction_handler
db 'vpshlw',95h
dw xop_shift_instruction-instruction_handler
db 'vpslld',0F2h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsllq',0F3h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsllw',0F1h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsrad',0E2h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsraw',0E1h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsrld',0D2h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsrlq',0D3h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsrlw',0D1h
dw avx_bit_shift_instruction-instruction_handler
db 'vpsubb',0F8h
dw avx_pd_instruction-instruction_handler
db 'vpsubd',0FAh
dw avx_pd_instruction-instruction_handler
db 'vpsubq',0FBh
dw avx_pd_instruction-instruction_handler
db 'vpsubw',0F9h
dw avx_pd_instruction-instruction_handler
db 'vptest',17h
dw avx_single_source_instruction_38-instruction_handler
db 'vrcpps',53h
dw avx_single_source_ps_instruction-instruction_handler
db 'vrcpss',53h
dw avx_ss_instruction-instruction_handler
db 'vsubpd',5Ch
dw avx_pd_instruction-instruction_handler
db 'vsubps',5Ch
dw avx_ps_instruction-instruction_handler
db 'vsubsd',5Ch
dw avx_sd_instruction-instruction_handler
db 'vsubss',5Ch
dw avx_ss_instruction-instruction_handler
db 'vxorpd',57h
dw avx_pd_instruction-instruction_handler
db 'vxorps',57h
dw avx_ps_instruction-instruction_handler
db 'wbinvd',9
dw simple_extended_instruction-instruction_handler
db 'wrmsrq',30h
dw simple_extended_instruction_64bit-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
db 'xrstor',101b
dw fxsave_instruction-instruction_handler
db 'xsetbv',0D1h
dw simple_vmx_instruction-instruction_handler
instructions_7:
db 'blcfill',11h
dw tbm_instruction-instruction_handler
db 'blendpd',0Dh
dw sse4_instruction_3a_imm8-instruction_handler
db 'blendps',0Ch
dw sse4_instruction_3a_imm8-instruction_handler
db 'blsfill',12h
dw tbm_instruction-instruction_handler
db 'clflush',111b
dw fxsave_instruction-instruction_handler
db 'cmovnae',42h
dw bs_instruction-instruction_handler
db 'cmovnbe',47h
dw bs_instruction-instruction_handler
db 'cmovnge',4Ch
dw bs_instruction-instruction_handler
db 'cmovnle',4Fh
dw bs_instruction-instruction_handler
db 'cmpeqpd',0
dw cmp_pd_instruction-instruction_handler
db 'cmpeqps',0
dw cmp_ps_instruction-instruction_handler
db 'cmpeqsd',0
dw cmp_sd_instruction-instruction_handler
db 'cmpeqss',0
dw cmp_ss_instruction-instruction_handler
db 'cmplepd',2
dw cmp_pd_instruction-instruction_handler
db 'cmpleps',2
dw cmp_ps_instruction-instruction_handler
db 'cmplesd',2
dw cmp_sd_instruction-instruction_handler
db 'cmpless',2
dw cmp_ss_instruction-instruction_handler
db 'cmpltpd',1
dw cmp_pd_instruction-instruction_handler
db 'cmpltps',1
dw cmp_ps_instruction-instruction_handler
db 'cmpltsd',1
dw cmp_sd_instruction-instruction_handler
db 'cmpltss',1
dw cmp_ss_instruction-instruction_handler
db 'cmpxchg',0B0h
dw basic_486_instruction-instruction_handler
db 'display',0
dw display_directive-instruction_handler
db 'fcmovbe',0D0h
dw fcmov_instruction-instruction_handler
db 'fcmovnb',0C0h
dw fcomi_instruction-instruction_handler
db 'fcmovne',0C8h
dw fcomi_instruction-instruction_handler
db 'fcmovnu',0D8h
dw fcomi_instruction-instruction_handler
db 'fdecstp',110110b
dw simple_fpu_instruction-instruction_handler
db 'fincstp',110111b
dw simple_fpu_instruction-instruction_handler
db 'fldenvd',4
dw fldenv_instruction_32bit-instruction_handler
db 'fldenvw',4
dw fldenv_instruction_16bit-instruction_handler
db 'fnsaved',6
dw fnsave_instruction_32bit-instruction_handler
db 'fnsavew',6
dw fnsave_instruction_16bit-instruction_handler
db 'fnstenv',6
dw fldenv_instruction-instruction_handler
db 'frndint',111100b
dw simple_fpu_instruction-instruction_handler
db 'frstord',4
dw fnsave_instruction_32bit-instruction_handler
db 'frstorw',4
dw fnsave_instruction_16bit-instruction_handler
db 'fsincos',111011b
dw simple_fpu_instruction-instruction_handler
db 'fstenvd',6
dw fstenv_instruction_32bit-instruction_handler
db 'fstenvw',6
dw fstenv_instruction_16bit-instruction_handler
db 'fucomip',0E8h
dw fcomip_instruction-instruction_handler
db 'fucompp',0
dw fucompp_instruction-instruction_handler
db 'fxrstor',1
dw fxsave_instruction-instruction_handler
db 'fxtract',110100b
dw simple_fpu_instruction-instruction_handler
db 'fyl2xp1',111001b
dw simple_fpu_instruction-instruction_handler
db 'insertq',0
dw insertq_instruction-instruction_handler
db 'invlpga',0DFh
dw invlpga_instruction-instruction_handler
db 'invpcid',82h
dw vmx_inv_instruction-instruction_handler
db 'invvpid',81h
dw vmx_inv_instruction-instruction_handler
db 'ldmxcsr',10b
dw fxsave_instruction-instruction_handler
db 'loopned',0E0h
dw loop_instruction_32bit-instruction_handler
db 'loopneq',0E0h
dw loop_instruction_64bit-instruction_handler
db 'loopnew',0E0h
dw loop_instruction_16bit-instruction_handler
db 'loopnzd',0E0h
dw loop_instruction_32bit-instruction_handler
db 'loopnzq',0E0h
dw loop_instruction_64bit-instruction_handler
db 'loopnzw',0E0h
dw loop_instruction_16bit-instruction_handler
db 'monitor',0C8h
dw monitor_instruction-instruction_handler
db 'movddup',12h
dw sse_sd_instruction-instruction_handler
db 'movdq2q',0
dw movdq2q_instruction-instruction_handler
db 'movhlps',12h
dw movhlps_instruction-instruction_handler
db 'movlhps',16h
dw movhlps_instruction-instruction_handler
db 'movntdq',0E7h
dw movntpd_instruction-instruction_handler
db 'movntpd',2Bh
dw movntpd_instruction-instruction_handler
db 'movntps',2Bh
dw movntps_instruction-instruction_handler
db 'movntsd',2Bh
dw movntsd_instruction-instruction_handler
db 'movntss',2Bh
dw movntss_instruction-instruction_handler
db 'movq2dq',0
dw movq2dq_instruction-instruction_handler
db 'mpsadbw',42h
dw sse4_instruction_3a_imm8-instruction_handler
db 'paddusb',0DCh
dw basic_mmx_instruction-instruction_handler
db 'paddusw',0DDh
dw basic_mmx_instruction-instruction_handler
db 'palignr',0
dw palignr_instruction-instruction_handler
db 'pavgusb',0BFh
dw amd3dnow_instruction-instruction_handler
db 'pblendw',0Eh
dw sse4_instruction_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
db 'pcmpeqw',75h
dw basic_mmx_instruction-instruction_handler
db 'pcmpgtb',64h
dw basic_mmx_instruction-instruction_handler
db 'pcmpgtd',66h
dw basic_mmx_instruction-instruction_handler
db 'pcmpgtq',37h
dw sse4_instruction_38-instruction_handler
db 'pcmpgtw',65h
dw basic_mmx_instruction-instruction_handler
db 'pfcmpeq',0B0h
dw amd3dnow_instruction-instruction_handler
db 'pfcmpge',90h
dw amd3dnow_instruction-instruction_handler
db 'pfcmpgt',0A0h
dw amd3dnow_instruction-instruction_handler
db 'pfpnacc',8Eh
dw amd3dnow_instruction-instruction_handler
db 'pfrsqrt',97h
dw amd3dnow_instruction-instruction_handler
db 'phaddsw',3
dw ssse3_instruction-instruction_handler
db 'phsubsw',7
dw ssse3_instruction-instruction_handler
db 'pmaddwd',0F5h
dw basic_mmx_instruction-instruction_handler
db 'pmulhrw',0B7h
dw amd3dnow_instruction-instruction_handler
db 'pmulhuw',0E4h
dw basic_mmx_instruction-instruction_handler
db 'pmuludq',0F4h
dw basic_mmx_instruction-instruction_handler
db 'pshufhw',0F3h
dw pshufd_instruction-instruction_handler
db 'pshuflw',0F2h
dw pshufd_instruction-instruction_handler
db 'psubusb',0D8h
dw basic_mmx_instruction-instruction_handler
db 'psubusw',0D9h
dw basic_mmx_instruction-instruction_handler
db 'roundpd',9
dw sse4_instruction_3a_imm8-instruction_handler
db 'roundps',8
dw sse4_instruction_3a_imm8-instruction_handler
db 'roundsd',0Bh
dw sse4_sd_instruction_3a_imm8-instruction_handler
db 'roundss',0Ah
dw sse4_ss_instruction_3a_imm8-instruction_handler
db 'rsqrtps',52h
dw sse_ps_instruction-instruction_handler
db 'rsqrtss',52h
dw sse_ss_instruction-instruction_handler
db 'section',0
dw section_directive-instruction_handler
db 'segment',0
dw segment_directive-instruction_handler
db 'stmxcsr',11b
dw fxsave_instruction-instruction_handler
db 'syscall',05h
dw simple_extended_instruction-instruction_handler
db 'sysexit',35h
dw simple_extended_instruction-instruction_handler
db 'sysretq',07h
dw simple_extended_instruction_64bit-instruction_handler
db 'ucomisd',2Eh
dw comisd_instruction-instruction_handler
db 'ucomiss',2Eh
dw comiss_instruction-instruction_handler
db 'vaesdec',0DEh
dw avx_128bit_instruction_38-instruction_handler
db 'vaesenc',0DCh
dw avx_128bit_instruction_38-instruction_handler
db 'vaesimc',0DBh
dw avx_single_source_128bit_instruction_38-instruction_handler
db 'vandnpd',55h
dw avx_pd_instruction-instruction_handler
db 'vandnps',55h
dw avx_ps_instruction-instruction_handler
db 'vcomisd',2Fh
dw avx_comisd_instruction-instruction_handler
db 'vcomiss',2Fh
dw avx_comiss_instruction-instruction_handler
db 'vfrczpd',81h
dw xop_single_source_instruction-instruction_handler
db 'vfrczps',80h
dw xop_single_source_instruction-instruction_handler
db 'vfrczsd',83h
dw xop_single_source_sd_instruction-instruction_handler
db 'vfrczss',82h
dw xop_single_source_ss_instruction-instruction_handler
db 'vhaddpd',07Ch
dw avx_pd_instruction-instruction_handler
db 'vhaddps',07Ch
dw avx_haddps_instruction-instruction_handler
db 'vhsubpd',07Dh
dw avx_pd_instruction-instruction_handler
db 'vhsubps',07Dh
dw avx_haddps_instruction-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
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
db 'vmovdqu',6Fh
dw avx_movdqu_instruction-instruction_handler
db 'vmovhpd',16h
dw avx_movlpd_instruction-instruction_handler
db 'vmovhps',16h
dw avx_movlps_instruction-instruction_handler
db 'vmovlpd',12h
dw avx_movlpd_instruction-instruction_handler
db 'vmovlps',12h
dw avx_movlps_instruction-instruction_handler
db 'vmovupd',10h
dw avx_movpd_instruction-instruction_handler
db 'vmovups',10h
dw avx_movps_instruction-instruction_handler
db 'vmptrld',6
dw vmx_instruction-instruction_handler
db 'vmptrst',7
dw vmx_instruction-instruction_handler
db 'vmwrite',0
dw vmwrite_instruction-instruction_handler
db 'vpaddsb',0ECh
dw avx_pd_instruction-instruction_handler
db 'vpaddsw',0EDh
dw avx_pd_instruction-instruction_handler
db 'vpcomub',-1
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomud',-1
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomuq',-1
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomuw',-1
dw xop_pcom_uw_instruction-instruction_handler
db 'vpermpd',1
dw avx_permq_instruction-instruction_handler
db 'vpermps',16h
dw avx_permd_instruction-instruction_handler
db 'vpextrb',14h
dw avx_pextrb_instruction-instruction_handler
db 'vpextrd',16h
dw avx_pextrd_instruction-instruction_handler
db 'vpextrq',16h
dw avx_pextrq_instruction-instruction_handler
db 'vpextrw',15h
dw avx_pextrw_instruction-instruction_handler
db 'vphaddd',2
dw avx_instruction_38-instruction_handler
db 'vphaddw',1
dw avx_instruction_38-instruction_handler
db 'vphsubd',6
dw avx_instruction_38-instruction_handler
db 'vphsubw',5
dw avx_instruction_38-instruction_handler
db 'vpinsrb',20h
dw avx_pinsrb_instruction-instruction_handler
db 'vpinsrd',22h
dw avx_pinsrd_instruction-instruction_handler
db 'vpinsrq',22h
dw avx_pinsrq_instruction-instruction_handler
db 'vpinsrw',0C4h
dw avx_pinsrw_instruction-instruction_handler
db 'vpmaxsb',3Ch
dw avx_instruction_38-instruction_handler
db 'vpmaxsd',3Dh
dw avx_instruction_38-instruction_handler
db 'vpmaxsw',0EEh
dw avx_pd_instruction-instruction_handler
db 'vpmaxub',0DEh
dw avx_pd_instruction-instruction_handler
db 'vpmaxud',3Fh
dw avx_instruction_38-instruction_handler
db 'vpmaxuw',3Eh
dw avx_instruction_38-instruction_handler
db 'vpminsb',38h
dw avx_instruction_38-instruction_handler
db 'vpminsd',39h
dw avx_instruction_38-instruction_handler
db 'vpminsw',0EAh
dw avx_pd_instruction-instruction_handler
db 'vpminub',0DAh
dw avx_pd_instruction-instruction_handler
db 'vpminud',3Bh
dw avx_instruction_38-instruction_handler
db 'vpminuw',3Ah
dw avx_instruction_38-instruction_handler
db 'vpmuldq',28h
dw avx_instruction_38-instruction_handler
db 'vpmulhw',0E5h
dw avx_pd_instruction-instruction_handler
db 'vpmulld',40h
dw avx_instruction_38-instruction_handler
db 'vpmullw',0D5h
dw avx_pd_instruction-instruction_handler
db 'vpsadbw',0F6h
dw avx_pd_instruction-instruction_handler
db 'vpshufb',0
dw avx_instruction_38-instruction_handler
db 'vpshufd',66h
dw avx_pshufd_instruction-instruction_handler
db 'vpsignb',8
dw avx_instruction_38-instruction_handler
db 'vpsignd',0Ah
dw avx_instruction_38-instruction_handler
db 'vpsignw',9
dw avx_instruction_38-instruction_handler
db 'vpslldq',111b
dw avx_pslldq_instruction-instruction_handler
db 'vpsllvd',47h
dw avx_instruction_38-instruction_handler
db 'vpsllvq',47h
dw avx_instruction_38_w1-instruction_handler
db 'vpsravd',46h
dw avx_instruction_38-instruction_handler
db 'vpsrldq',011b
dw avx_pslldq_instruction-instruction_handler
db 'vpsrlvd',45h
dw avx_instruction_38-instruction_handler
db 'vpsrlvq',45h
dw avx_instruction_38_w1-instruction_handler
db 'vpsubsb',0E8h
dw avx_pd_instruction-instruction_handler
db 'vpsubsw',0E9h
dw avx_pd_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
db 'vsqrtps',51h
dw avx_single_source_ps_instruction-instruction_handler
db 'vsqrtsd',51h
dw avx_sd_instruction-instruction_handler
db 'vsqrtss',51h
dw avx_ss_instruction-instruction_handler
db 'vtestpd',0Fh
dw avx_single_source_instruction_38-instruction_handler
db 'vtestps',0Eh
dw avx_single_source_instruction_38-instruction_handler
db 'xsave64',100b
dw fxsave_instruction_64bit-instruction_handler
instructions_8:
db 'addsubpd',0D0h
dw sse_pd_instruction-instruction_handler
db 'addsubps',0D0h
dw cvtpd2dq_instruction-instruction_handler
db 'blendvpd',15h
dw sse4_instruction_38_xmm0-instruction_handler
db 'blendvps',14h
dw sse4_instruction_38_xmm0-instruction_handler
db 'cmpneqpd',4
dw cmp_pd_instruction-instruction_handler
db 'cmpneqps',4
dw cmp_ps_instruction-instruction_handler
db 'cmpneqsd',4
dw cmp_sd_instruction-instruction_handler
db 'cmpneqss',4
dw cmp_ss_instruction-instruction_handler
db 'cmpnlepd',6
dw cmp_pd_instruction-instruction_handler
db 'cmpnleps',6
dw cmp_ps_instruction-instruction_handler
db 'cmpnlesd',6
dw cmp_sd_instruction-instruction_handler
db 'cmpnless',6
dw cmp_ss_instruction-instruction_handler
db 'cmpnltpd',5
dw cmp_pd_instruction-instruction_handler
db 'cmpnltps',5
dw cmp_ps_instruction-instruction_handler
db 'cmpnltsd',5
dw cmp_sd_instruction-instruction_handler
db 'cmpnltss',5
dw cmp_ss_instruction-instruction_handler
db 'cmpordpd',7
dw cmp_pd_instruction-instruction_handler
db 'cmpordps',7
dw cmp_ps_instruction-instruction_handler
db 'cmpordsd',7
dw cmp_sd_instruction-instruction_handler
db 'cmpordss',7
dw cmp_ss_instruction-instruction_handler
db 'cvtdq2pd',0E6h
dw cvtdq2pd_instruction-instruction_handler
db 'cvtdq2ps',5Bh
dw sse_ps_instruction-instruction_handler
db 'cvtpd2dq',0E6h
dw cvtpd2dq_instruction-instruction_handler
db 'cvtpd2pi',2Dh
dw cvtpd2pi_instruction-instruction_handler
db 'cvtpd2ps',5Ah
dw sse_pd_instruction-instruction_handler
db 'cvtpi2pd',2Ah
dw cvtpi2pd_instruction-instruction_handler
db 'cvtpi2ps',2Ah
dw cvtpi2ps_instruction-instruction_handler
db 'cvtps2dq',5Bh
dw sse_pd_instruction-instruction_handler
db 'cvtps2pd',5Ah
dw cvtps2pd_instruction-instruction_handler
db 'cvtps2pi',2Dh
dw cvtps2pi_instruction-instruction_handler
db 'cvtsd2si',2Dh
dw cvtsd2si_instruction-instruction_handler
db 'cvtsd2ss',5Ah
dw sse_sd_instruction-instruction_handler
db 'cvtsi2sd',2Ah
dw cvtsi2sd_instruction-instruction_handler
db 'cvtsi2ss',2Ah
dw cvtsi2ss_instruction-instruction_handler
db 'cvtss2sd',5Ah
dw sse_ss_instruction-instruction_handler
db 'cvtss2si',2Dh
dw cvtss2si_instruction-instruction_handler
db 'fcmovnbe',0D0h
dw fcomi_instruction-instruction_handler
db 'fnstenvd',6
dw fldenv_instruction_32bit-instruction_handler
db 'fnstenvw',6
dw fldenv_instruction_16bit-instruction_handler
db 'fxsave64',0
dw fxsave_instruction_64bit-instruction_handler
db 'insertps',0
dw insertps_instruction-instruction_handler
db 'maskmovq',0
dw maskmovq_instruction-instruction_handler
db 'movmskpd',0
dw movmskpd_instruction-instruction_handler
db 'movmskps',0
dw movmskps_instruction-instruction_handler
db 'movntdqa',2Ah
dw movntdqa_instruction-instruction_handler
db 'movshdup',16h
dw movshdup_instruction-instruction_handler
db 'movsldup',12h
dw movshdup_instruction-instruction_handler
db 'packssdw',6Bh
dw basic_mmx_instruction-instruction_handler
db 'packsswb',63h
dw basic_mmx_instruction-instruction_handler
db 'packusdw',2Bh
dw sse4_instruction_38-instruction_handler
db 'packuswb',67h
dw basic_mmx_instruction-instruction_handler
db 'pblendvb',10h
dw sse4_instruction_38_xmm0-instruction_handler
db 'pfrcpit1',0A6h
dw amd3dnow_instruction-instruction_handler
db 'pfrcpit2',0B6h
dw amd3dnow_instruction-instruction_handler
db 'pfrsqit1',0A7h
dw amd3dnow_instruction-instruction_handler
db 'pmovmskb',0D7h
dw pmovmskb_instruction-instruction_handler
db 'pmovsxbd',21h
dw pmovsxbd_instruction-instruction_handler
db 'pmovsxbq',22h
dw pmovsxbq_instruction-instruction_handler
db 'pmovsxbw',20h
dw pmovsxbw_instruction-instruction_handler
db 'pmovsxdq',25h
dw pmovsxdq_instruction-instruction_handler
db 'pmovsxwd',23h
dw pmovsxwd_instruction-instruction_handler
db 'pmovsxwq',24h
dw pmovsxwq_instruction-instruction_handler
db 'pmovzxbd',31h
dw pmovsxbd_instruction-instruction_handler
db 'pmovzxbq',32h
dw pmovsxbq_instruction-instruction_handler
db 'pmovzxbw',30h
dw pmovsxbw_instruction-instruction_handler
db 'pmovzxdq',35h
dw pmovsxdq_instruction-instruction_handler
db 'pmovzxwd',33h
dw pmovsxwd_instruction-instruction_handler
db 'pmovzxwq',34h
dw pmovsxwq_instruction-instruction_handler
db 'pmulhrsw',0Bh
dw ssse3_instruction-instruction_handler
db 'prefetch',0
dw amd_prefetch_instruction-instruction_handler
db 'rdfsbase',0
dw rdfsbase_instruction-instruction_handler
db 'rdgsbase',1
dw rdfsbase_instruction-instruction_handler
db 'sysenter',34h
dw simple_extended_instruction-instruction_handler
db 'sysexitq',35h
dw simple_extended_instruction_64bit-instruction_handler
db 'unpckhpd',15h
dw sse_pd_instruction-instruction_handler
db 'unpckhps',15h
dw sse_ps_instruction-instruction_handler
db 'unpcklpd',14h
dw sse_pd_instruction-instruction_handler
db 'unpcklps',14h
dw sse_ps_instruction-instruction_handler
db 'vblendpd',0Dh
dw avx_instruction_3a_imm8-instruction_handler
db 'vblendps',0Ch
dw avx_instruction_3a_imm8-instruction_handler
db 'vcmpeqpd',0
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpeqps',0
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpeqsd',0
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpeqss',0
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpgepd',0Dh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpgeps',0Dh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpgesd',0Dh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpgess',0Dh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpgtpd',0Eh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpgtps',0Eh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpgtsd',0Eh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpgtss',0Eh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmplepd',2
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpleps',2
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmplesd',2
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpless',2
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpltpd',1
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpltps',1
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpltsd',1
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpltss',1
dw avx_cmp_ss_instruction-instruction_handler
db 'vfmaddpd',69h
dw fma4_instruction_p-instruction_handler
db 'vfmaddps',68h
dw fma4_instruction_p-instruction_handler
db 'vfmaddsd',6Bh
dw fma4_instruction_sd-instruction_handler
db 'vfmaddss',6Ah
dw fma4_instruction_ss-instruction_handler
db 'vfmsubpd',6Dh
dw fma4_instruction_p-instruction_handler
db 'vfmsubps',6Ch
dw fma4_instruction_p-instruction_handler
db 'vfmsubsd',6Fh
dw fma4_instruction_sd-instruction_handler
db 'vfmsubss',6Eh
dw fma4_instruction_ss-instruction_handler
db 'vldmxcsr',10b
dw vldmxcsr_instruction-instruction_handler
db 'vmlaunch',0C2h
dw simple_vmx_instruction-instruction_handler
db 'vmovddup',12h
dw avx_movddup_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
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
db 'vmresume',0C3h
dw simple_vmx_instruction-instruction_handler
db 'vpaddusb',0DCh
dw avx_pd_instruction-instruction_handler
db 'vpaddusw',0DDh
dw avx_pd_instruction-instruction_handler
db 'vpalignr',0Fh
dw avx_instruction_3a_imm8-instruction_handler
db 'vpblendd',2
dw avx_instruction_3a_imm8-instruction_handler
db 'vpblendw',0Eh
dw avx_instruction_3a_imm8-instruction_handler
db 'vpcmpeqb',74h
dw avx_pd_instruction-instruction_handler
db 'vpcmpeqd',76h
dw avx_pd_instruction-instruction_handler
db 'vpcmpeqq',29h
dw avx_instruction_38-instruction_handler
db 'vpcmpeqw',75h
dw avx_pd_instruction-instruction_handler
db 'vpcmpgtb',64h
dw avx_pd_instruction-instruction_handler
db 'vpcmpgtd',66h
dw avx_pd_instruction-instruction_handler
db 'vpcmpgtq',37h
dw avx_instruction_38-instruction_handler
db 'vpcmpgtw',65h
dw avx_pd_instruction-instruction_handler
db 'vpcomeqb',4
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomeqd',4
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomeqq',4
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomeqw',4
dw xop_pcom_w_instruction-instruction_handler
db 'vpcomgeb',3
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomged',3
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomgeq',3
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomgew',3
dw xop_pcom_w_instruction-instruction_handler
db 'vpcomgtb',2
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomgtd',2
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomgtq',2
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomgtw',2
dw xop_pcom_w_instruction-instruction_handler
db 'vpcomleb',1
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomled',1
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomleq',1
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomlew',1
dw xop_pcom_w_instruction-instruction_handler
db 'vpcomltb',0
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomltd',0
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomltq',0
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomltw',0
dw xop_pcom_w_instruction-instruction_handler
db 'vphaddbd',0C2h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddbq',0C3h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddbw',0C1h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphadddq',0CBh
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddsw',3
dw avx_instruction_38-instruction_handler
db 'vphaddwd',0C6h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddwq',0C7h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphsubbw',0E1h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphsubdq',0E3h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphsubsw',7
dw avx_instruction_38-instruction_handler
db 'vphsubwd',0E2h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vpmacsdd',9Eh
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacswd',96h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacsww',95h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmaddwd',0F5h
dw avx_pd_instruction-instruction_handler
db 'vpmulhuw',0E4h
dw avx_pd_instruction-instruction_handler
db 'vpmuludq',0F4h
dw avx_pd_instruction-instruction_handler
db 'vpshufhw',0F3h
dw avx_pshufd_instruction-instruction_handler
db 'vpshuflw',0F2h
dw avx_pshufd_instruction-instruction_handler
db 'vpsubusb',0D8h
dw avx_pd_instruction-instruction_handler
db 'vpsubusw',0D9h
dw avx_pd_instruction-instruction_handler
db 'vroundpd',9
dw avx_single_source_instruction_3a_imm8-instruction_handler
db 'vroundps',8
dw avx_single_source_instruction_3a_imm8-instruction_handler
db 'vroundsd',0Bh
dw avx_sd_instruction_3a_imm8-instruction_handler
db 'vroundss',0Ah
dw avx_ss_instruction_3a_imm8-instruction_handler
db 'vrsqrtps',52h
dw avx_single_source_ps_instruction-instruction_handler
db 'vrsqrtss',52h
dw avx_ss_instruction-instruction_handler
db 'vstmxcsr',11b
dw vldmxcsr_instruction-instruction_handler
db 'vucomisd',2Eh
dw avx_comisd_instruction-instruction_handler
db 'vucomiss',2Eh
dw avx_comiss_instruction-instruction_handler
db 'vzeroall',77h
dw vzeroall_instruction-instruction_handler
db 'wrfsbase',2
dw rdfsbase_instruction-instruction_handler
db 'wrgsbase',3
dw rdfsbase_instruction-instruction_handler
db 'xacquire',0F2h
dw prefix_instruction-instruction_handler
db 'xrelease',0F3h
dw prefix_instruction-instruction_handler
db 'xrstor64',101b
dw fxsave_instruction_64bit-instruction_handler
db 'xsaveopt',110b
dw fxsave_instruction-instruction_handler
instructions_9:
db 'cmpxchg8b',8
dw cmpxchgx_instruction-instruction_handler
db 'cvttpd2dq',0E6h
dw sse_pd_instruction-instruction_handler
db 'cvttpd2pi',2Ch
dw cvtpd2pi_instruction-instruction_handler
db 'cvttps2dq',5Bh
dw movshdup_instruction-instruction_handler
db 'cvttps2pi',2Ch
dw cvtps2pi_instruction-instruction_handler
db 'cvttsd2si',2Ch
dw cvtsd2si_instruction-instruction_handler
db 'cvttss2si',2Ch
dw cvtss2si_instruction-instruction_handler
db 'extractps',0
dw extractps_instruction-instruction_handler
db 'fxrstor64',1
dw fxsave_instruction_64bit-instruction_handler
db 'pclmulqdq',-1
dw pclmulqdq_instruction-instruction_handler
db 'pcmpestri',61h
dw sse4_instruction_3a_imm8-instruction_handler
db 'pcmpestrm',60h
dw sse4_instruction_3a_imm8-instruction_handler
db 'pcmpistri',63h
dw sse4_instruction_3a_imm8-instruction_handler
db 'pcmpistrm',62h
dw sse4_instruction_3a_imm8-instruction_handler
db 'pmaddubsw',4
dw ssse3_instruction-instruction_handler
db 'prefetchw',1
dw amd_prefetch_instruction-instruction_handler
db 'punpckhbw',68h
dw basic_mmx_instruction-instruction_handler
db 'punpckhdq',6Ah
dw basic_mmx_instruction-instruction_handler
db 'punpckhwd',69h
dw basic_mmx_instruction-instruction_handler
db 'punpcklbw',60h
dw basic_mmx_instruction-instruction_handler
db 'punpckldq',62h
dw basic_mmx_instruction-instruction_handler
db 'punpcklwd',61h
dw basic_mmx_instruction-instruction_handler
db 'vaddsubpd',0D0h
dw avx_pd_instruction-instruction_handler
db 'vaddsubps',0D0h
dw avx_haddps_instruction-instruction_handler
db 'vblendvpd',4Bh
dw avx_triple_source_instruction_3a-instruction_handler
db 'vblendvps',4Ah
dw avx_triple_source_instruction_3a-instruction_handler
db 'vcmpneqpd',4
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpneqps',4
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpneqsd',4
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpneqss',4
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpngepd',9
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpngeps',9
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpngesd',9
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpngess',9
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpngtpd',0Ah
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpngtps',0Ah
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpngtsd',0Ah
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpngtss',0Ah
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpnlepd',6
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpnleps',6
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpnlesd',6
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpnless',6
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpnltpd',5
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpnltps',5
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpnltsd',5
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpnltss',5
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpordpd',7
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpordps',7
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpordsd',7
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpordss',7
dw avx_cmp_ss_instruction-instruction_handler
db 'vcvtdq2pd',0E6h
dw avx_cvtdq2pd_instruction-instruction_handler
db 'vcvtdq2ps',5Bh
dw avx_single_source_ps_instruction-instruction_handler
db 'vcvtpd2dq',0E6h
dw avx_cvtpd2dq_instruction-instruction_handler
db 'vcvtpd2ps',5Ah
dw avx_cvtpd2ps_instruction-instruction_handler
db 'vcvtph2ps',13h
dw vcvtph2ps_instruction-instruction_handler
db 'vcvtps2dq',5Bh
dw avx_single_source_pd_instruction-instruction_handler
db 'vcvtps2pd',5Ah
dw avx_cvtps2pd_instruction-instruction_handler
db 'vcvtps2ph',1Dh
dw vcvtps2ph_instruction-instruction_handler
db 'vcvtsd2si',2Dh
dw avx_cvtsd2si_instruction-instruction_handler
db 'vcvtsd2ss',5Ah
dw avx_sd_instruction-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
db 'vcvtss2si',2Dh
dw avx_cvtss2si_instruction-instruction_handler
db 'vfnmaddpd',79h
dw fma4_instruction_p-instruction_handler
db 'vfnmaddps',78h
dw fma4_instruction_p-instruction_handler
db 'vfnmaddsd',7Bh
dw fma4_instruction_sd-instruction_handler
db 'vfnmaddss',7Ah
dw fma4_instruction_ss-instruction_handler
db 'vfnmsubpd',7Dh
dw fma4_instruction_p-instruction_handler
db 'vfnmsubps',7Ch
dw fma4_instruction_p-instruction_handler
db 'vfnmsubsd',7Fh
dw fma4_instruction_sd-instruction_handler
db 'vfnmsubss',7Eh
dw fma4_instruction_ss-instruction_handler
db 'vinsertps',0
dw avx_insertps_instruction-instruction_handler
db 'vmovmskpd',0
dw avx_movmskpd_instruction-instruction_handler
db 'vmovmskps',0
dw avx_movmskps_instruction-instruction_handler
db 'vmovntdqa',2Ah
dw avx_movntdqa_instruction-instruction_handler
db 'vmovshdup',16h
dw avx_movshdup_instruction-instruction_handler
db 'vmovsldup',12h
dw avx_movshdup_instruction-instruction_handler
db 'vpackssdw',6Bh
dw avx_pd_instruction-instruction_handler
db 'vpacksswb',63h
dw avx_pd_instruction-instruction_handler
db 'vpackusdw',2Bh
dw avx_instruction_38-instruction_handler
db 'vpackuswb',67h
dw avx_pd_instruction-instruction_handler
db 'vpblendvb',4Ch
dw avx_triple_source_instruction_3a-instruction_handler
db 'vpcomequb',4
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomequd',4
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomequq',4
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomequw',4
dw xop_pcom_uw_instruction-instruction_handler
db 'vpcomgeub',3
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomgeud',3
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomgeuq',3
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomgeuw',3
dw xop_pcom_uw_instruction-instruction_handler
db 'vpcomgtub',2
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomgtud',2
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomgtuq',2
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomgtuw',2
dw xop_pcom_uw_instruction-instruction_handler
db 'vpcomleub',1
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomleud',1
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomleuq',1
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomleuw',1
dw xop_pcom_uw_instruction-instruction_handler
db 'vpcomltub',0
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomltud',0
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomltuq',0
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomltuw',0
dw xop_pcom_uw_instruction-instruction_handler
db 'vpcomneqb',5
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomneqd',5
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomneqq',5
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomneqw',5
dw xop_pcom_w_instruction-instruction_handler
db 'vpermilpd',5
dw avx_permil_instruction-instruction_handler
db 'vpermilps',4
dw avx_permil_instruction-instruction_handler
db 'vphaddubd',0D2h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddubq',0D3h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddubw',0D1h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphaddudq',0DBh
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphadduwd',0D6h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vphadduwq',0D7h
dw xop_single_source_128bit_instruction-instruction_handler
db 'vpmacsdqh',9Fh
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacsdql',97h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacssdd',8Eh
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacsswd',86h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacssww',85h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmadcswd',0B6h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmovmskb',0D7h
dw avx_pmovmskb_instruction-instruction_handler
db 'vpmovsxbd',21h
dw avx_pmovsxbd_instruction-instruction_handler
db 'vpmovsxbq',22h
dw avx_pmovsxbq_instruction-instruction_handler
db 'vpmovsxbw',20h
dw avx_pmovsxbw_instruction-instruction_handler
db 'vpmovsxdq',25h
dw avx_pmovsxdq_instruction-instruction_handler
db 'vpmovsxwd',23h
dw avx_pmovsxwd_instruction-instruction_handler
db 'vpmovsxwq',24h
dw avx_pmovsxwq_instruction-instruction_handler
db 'vpmovzxbd',31h
dw avx_pmovsxbd_instruction-instruction_handler
db 'vpmovzxbq',32h
dw avx_pmovsxbq_instruction-instruction_handler
db 'vpmovzxbw',30h
dw avx_pmovsxbw_instruction-instruction_handler
db 'vpmovzxdq',35h
dw avx_pmovsxdq_instruction-instruction_handler
db 'vpmovzxwd',33h
dw avx_pmovsxwd_instruction-instruction_handler
db 'vpmovzxwq',34h
dw avx_pmovsxwq_instruction-instruction_handler
db 'vpmulhrsw',0Bh
dw avx_instruction_38-instruction_handler
db 'vunpckhpd',15h
dw avx_pd_instruction-instruction_handler
db 'vunpckhps',15h
dw avx_ps_instruction-instruction_handler
db 'vunpcklpd',14h
dw avx_pd_instruction-instruction_handler
db 'vunpcklps',14h
dw avx_ps_instruction-instruction_handler
instructions_10:
db 'aesdeclast',0DFh
dw sse4_instruction_38-instruction_handler
db 'aesenclast',0DDh
dw sse4_instruction_38-instruction_handler
db 'cmpunordpd',3
dw cmp_pd_instruction-instruction_handler
db 'cmpunordps',3
dw cmp_ps_instruction-instruction_handler
db 'cmpunordsd',3
dw cmp_sd_instruction-instruction_handler
db 'cmpunordss',3
dw cmp_ss_instruction-instruction_handler
db 'cmpxchg16b',16
dw cmpxchgx_instruction-instruction_handler
db 'loadall286',5
dw simple_extended_instruction-instruction_handler
db 'loadall386',7
dw simple_extended_instruction-instruction_handler
db 'maskmovdqu',0
dw maskmovdqu_instruction-instruction_handler
db 'phminposuw',41h
dw sse4_instruction_38-instruction_handler
db 'prefetcht0',1
dw prefetch_instruction-instruction_handler
db 'prefetcht1',2
dw prefetch_instruction-instruction_handler
db 'prefetcht2',3
dw prefetch_instruction-instruction_handler
db 'punpckhqdq',6Dh
dw sse_pd_instruction-instruction_handler
db 'punpcklqdq',6Ch
dw sse_pd_instruction-instruction_handler
db 'vcmptruepd',0Fh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmptrueps',0Fh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmptruesd',0Fh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmptruess',0Fh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcvttpd2dq',0E6h
dw avx_cvtpd2ps_instruction-instruction_handler
db 'vcvttps2dq',5Bh
dw avx_cvttps2dq_instruction-instruction_handler
db 'vcvttsd2si',2Ch
dw avx_cvtsd2si_instruction-instruction_handler
db 'vcvttss2si',2Ch
dw avx_cvtss2si_instruction-instruction_handler
db 'vextractps',0
dw avx_extractps_instruction-instruction_handler
db 'vgatherdpd',92h
dw gather_instruction_pd-instruction_handler
db 'vgatherdps',92h
dw gather_instruction_ps-instruction_handler
db 'vgatherqpd',93h
dw gather_instruction_pd-instruction_handler
db 'vgatherqps',93h
dw gather_instruction_ps-instruction_handler
db 'vmaskmovpd',2Dh
dw avx_maskmov_instruction-instruction_handler
db 'vmaskmovps',2Ch
dw avx_maskmov_instruction-instruction_handler
db 'vpclmulqdq',-1
dw avx_pclmulqdq_instruction-instruction_handler
db 'vpcmpestri',61h
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler
db 'vpcmpestrm',60h
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler
db 'vpcmpistri',63h
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler
db 'vpcmpistrm',62h
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler
db 'vpcomnequb',5
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomnequd',5
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomnequq',5
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomnequw',5
dw xop_pcom_uw_instruction-instruction_handler
db 'vpcomtrueb',7
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomtrued',7
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomtrueq',7
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomtruew',7
dw xop_pcom_w_instruction-instruction_handler
db 'vperm2f128',6
dw avx_perm2f128_instruction-instruction_handler
db 'vperm2i128',46h
dw avx_perm2f128_instruction-instruction_handler
db 'vpermil2pd',49h
dw vpermil2_instruction-instruction_handler
db 'vpermil2ps',48h
dw vpermil2_instruction-instruction_handler
db 'vpgatherdd',90h
dw gather_instruction_ps-instruction_handler
db 'vpgatherdq',90h
dw gather_instruction_pd-instruction_handler
db 'vpgatherqd',91h
dw gather_instruction_ps-instruction_handler
db 'vpgatherqq',91h
dw gather_instruction_pd-instruction_handler
db 'vpmacssdqh',8Fh
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmacssdql',87h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmadcsswd',0A6h
dw xop_triple_source_128bit_instruction-instruction_handler
db 'vpmaddubsw',4
dw avx_instruction_38-instruction_handler
db 'vpmaskmovd',8Ch
dw avx_maskmov_instruction-instruction_handler
db 'vpmaskmovq',8Ch
dw avx_maskmov_w1_instruction-instruction_handler
db 'vpunpckhbw',68h
dw avx_pd_instruction-instruction_handler
db 'vpunpckhdq',6Ah
dw avx_pd_instruction-instruction_handler
db 'vpunpckhwd',69h
dw avx_pd_instruction-instruction_handler
db 'vpunpcklbw',60h
dw avx_pd_instruction-instruction_handler
db 'vpunpckldq',62h
dw avx_pd_instruction-instruction_handler
db 'vpunpcklwd',61h
dw avx_pd_instruction-instruction_handler
db 'vzeroupper',77h
dw vzeroupper_instruction-instruction_handler
db 'xsaveopt64',110b
dw fxsave_instruction_64bit-instruction_handler
instructions_11:
db 'pclmulhqhdq',10001b
dw pclmulqdq_instruction-instruction_handler
db 'pclmullqhdq',10000b
dw pclmulqdq_instruction-instruction_handler
db 'prefetchnta',0
dw prefetch_instruction-instruction_handler
db 'vaesdeclast',0DFh
dw avx_128bit_instruction_38-instruction_handler
db 'vaesenclast',0DDh
dw avx_128bit_instruction_38-instruction_handler
db 'vcmpeq_ospd',10h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpeq_osps',10h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpeq_ossd',10h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpeq_osss',10h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpeq_uqpd',8
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpeq_uqps',8
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpeq_uqsd',8
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpeq_uqss',8
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpeq_uspd',18h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpeq_usps',18h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpeq_ussd',18h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpeq_usss',18h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpfalsepd',0Bh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpfalseps',0Bh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpfalsesd',0Bh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpfalsess',0Bh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpge_oqpd',1Dh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpge_oqps',1Dh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpge_oqsd',1Dh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpge_oqss',1Dh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpgt_oqpd',1Eh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpgt_oqps',1Eh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpgt_oqsd',1Eh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpgt_oqss',1Eh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmple_oqpd',12h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmple_oqps',12h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmple_oqsd',12h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmple_oqss',12h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmplt_oqpd',11h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmplt_oqps',11h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmplt_oqsd',11h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmplt_oqss',11h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpord_spd',17h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpord_sps',17h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpord_ssd',17h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpord_sss',17h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpunordpd',3
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpunordps',3
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpunordsd',3
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpunordss',3
dw avx_cmp_ss_instruction-instruction_handler
db 'vfmadd132pd',98h
dw fma_instruction_pd-instruction_handler
db 'vfmadd132ps',98h
dw fma_instruction_ps-instruction_handler
db 'vfmadd132sd',99h
dw fma_instruction_sd-instruction_handler
db 'vfmadd132ss',99h
dw fma_instruction_ss-instruction_handler
db 'vfmadd213pd',0A8h
dw fma_instruction_pd-instruction_handler
db 'vfmadd213ps',0A8h
dw fma_instruction_ps-instruction_handler
db 'vfmadd213sd',0A9h
dw fma_instruction_sd-instruction_handler
db 'vfmadd213ss',0A9h
dw fma_instruction_ss-instruction_handler
db 'vfmadd231pd',0B8h
dw fma_instruction_pd-instruction_handler
db 'vfmadd231ps',0B8h
dw fma_instruction_ps-instruction_handler
db 'vfmadd231sd',0B9h
dw fma_instruction_sd-instruction_handler
db 'vfmadd231ss',0B9h
dw fma_instruction_ss-instruction_handler
db 'vfmaddsubpd',5Dh
dw fma4_instruction_p-instruction_handler
db 'vfmaddsubps',5Ch
dw fma4_instruction_p-instruction_handler
db 'vfmsub132pd',9Ah
dw fma_instruction_pd-instruction_handler
db 'vfmsub132ps',9Ah
dw fma_instruction_ps-instruction_handler
db 'vfmsub132sd',9Bh
dw fma_instruction_sd-instruction_handler
db 'vfmsub132ss',9Bh
dw fma_instruction_ss-instruction_handler
db 'vfmsub213pd',0AAh
dw fma_instruction_pd-instruction_handler
db 'vfmsub213ps',0AAh
dw fma_instruction_ps-instruction_handler
db 'vfmsub213sd',0ABh
dw fma_instruction_sd-instruction_handler
db 'vfmsub213ss',0ABh
dw fma_instruction_ss-instruction_handler
db 'vfmsub231pd',0BAh
dw fma_instruction_pd-instruction_handler
db 'vfmsub231ps',0BAh
dw fma_instruction_ps-instruction_handler
db 'vfmsub231sd',0BBh
dw fma_instruction_sd-instruction_handler
db 'vfmsub231ss',0BBh
dw fma_instruction_ss-instruction_handler
db 'vfmsubaddpd',5Fh
dw fma4_instruction_p-instruction_handler
db 'vfmsubaddps',5Eh
dw fma4_instruction_p-instruction_handler
db 'vinsertf128',18h
dw avx_insertf128_instruction-instruction_handler
db 'vinserti128',38h
dw avx_insertf128_instruction-instruction_handler
db 'vmaskmovdqu',0
dw avx_maskmovdqu_instruction-instruction_handler
db 'vpcomfalseb',6
dw xop_pcom_b_instruction-instruction_handler
db 'vpcomfalsed',6
dw xop_pcom_d_instruction-instruction_handler
db 'vpcomfalseq',6
dw xop_pcom_q_instruction-instruction_handler
db 'vpcomfalsew',6
dw xop_pcom_w_instruction-instruction_handler
db 'vpcomtrueub',7
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomtrueud',7
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomtrueuq',7
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomtrueuw',7
dw xop_pcom_uw_instruction-instruction_handler
db 'vphminposuw',41h
dw avx_single_source_instruction_38-instruction_handler
db 'vpunpckhqdq',6Dh
dw avx_pd_instruction-instruction_handler
db 'vpunpcklqdq',6Ch
dw avx_pd_instruction-instruction_handler
instructions_12:
db 'pclmulhqhqdq',10001b
dw pclmulqdq_instruction-instruction_handler
db 'pclmulhqlqdq',1
dw pclmulqdq_instruction-instruction_handler
db 'pclmullqhqdq',10000b
dw pclmulqdq_instruction-instruction_handler
db 'pclmullqlqdq',0
dw pclmulqdq_instruction-instruction_handler
db 'vbroadcastsd',19h
dw avx_broadcastsd_instruction-instruction_handler
db 'vbroadcastss',18h
dw avx_broadcastss_instruction-instruction_handler
db 'vcmpneq_oqpd',0Ch
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpneq_oqps',0Ch
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpneq_oqsd',0Ch
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpneq_oqss',0Ch
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpneq_ospd',1Ch
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpneq_osps',1Ch
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpneq_ossd',1Ch
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpneq_osss',1Ch
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpneq_uspd',14h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpneq_usps',14h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpneq_ussd',14h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpneq_usss',14h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpnge_uqpd',19h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpnge_uqps',19h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpnge_uqsd',19h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpnge_uqss',19h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpngt_uqpd',1Ah
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpngt_uqps',1Ah
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpngt_uqsd',1Ah
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpngt_uqss',1Ah
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpnle_uqpd',16h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpnle_uqps',16h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpnle_uqsd',16h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpnle_uqss',16h
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpnlt_uqpd',15h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpnlt_uqps',15h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpnlt_uqsd',15h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpnlt_uqss',15h
dw avx_cmp_ss_instruction-instruction_handler
db 'vextractf128',19h
dw avx_extractf128_instruction-instruction_handler
db 'vextracti128',39h
dw avx_extractf128_instruction-instruction_handler
db 'vfnmadd132pd',9Ch
dw fma_instruction_pd-instruction_handler
db 'vfnmadd132ps',9Ch
dw fma_instruction_ps-instruction_handler
db 'vfnmadd132sd',9Dh
dw fma_instruction_sd-instruction_handler
db 'vfnmadd132ss',9Dh
dw fma_instruction_ss-instruction_handler
db 'vfnmadd213pd',0ACh
dw fma_instruction_pd-instruction_handler
db 'vfnmadd213ps',0ACh
dw fma_instruction_ps-instruction_handler
db 'vfnmadd213sd',0ADh
dw fma_instruction_sd-instruction_handler
db 'vfnmadd213ss',0ADh
dw fma_instruction_ss-instruction_handler
db 'vfnmadd231pd',0BCh
dw fma_instruction_pd-instruction_handler
db 'vfnmadd231ps',0BCh
dw fma_instruction_ps-instruction_handler
db 'vfnmadd231sd',0BDh
dw fma_instruction_sd-instruction_handler
db 'vfnmadd231ss',0BDh
dw fma_instruction_ss-instruction_handler
db 'vfnmsub132pd',9Eh
dw fma_instruction_pd-instruction_handler
db 'vfnmsub132ps',9Eh
dw fma_instruction_ps-instruction_handler
db 'vfnmsub132sd',9Fh
dw fma_instruction_sd-instruction_handler
db 'vfnmsub132ss',9Fh
dw fma_instruction_ss-instruction_handler
db 'vfnmsub213pd',0AEh
dw fma_instruction_pd-instruction_handler
db 'vfnmsub213ps',0AEh
dw fma_instruction_ps-instruction_handler
db 'vfnmsub213sd',0AFh
dw fma_instruction_sd-instruction_handler
db 'vfnmsub213ss',0AFh
dw fma_instruction_ss-instruction_handler
db 'vfnmsub231pd',0BEh
dw fma_instruction_pd-instruction_handler
db 'vfnmsub231ps',0BEh
dw fma_instruction_ps-instruction_handler
db 'vfnmsub231sd',0BFh
dw fma_instruction_sd-instruction_handler
db 'vfnmsub231ss',0BFh
dw fma_instruction_ss-instruction_handler
db 'vpbroadcastb',78h
dw avx_pbroadcastb_instruction-instruction_handler
db 'vpbroadcastd',58h
dw avx_pbroadcastd_instruction-instruction_handler
db 'vpbroadcastq',59h
dw avx_pbroadcastq_instruction-instruction_handler
db 'vpbroadcastw',79h
dw avx_pbroadcastw_instruction-instruction_handler
db 'vpclmulhqhdq',10001b
dw avx_pclmulqdq_instruction-instruction_handler
db 'vpclmullqhdq',10000b
dw avx_pclmulqdq_instruction-instruction_handler
db 'vpcomfalseub',6
dw xop_pcom_ub_instruction-instruction_handler
db 'vpcomfalseud',6
dw xop_pcom_ud_instruction-instruction_handler
db 'vpcomfalseuq',6
dw xop_pcom_uq_instruction-instruction_handler
db 'vpcomfalseuw',6
dw xop_pcom_uw_instruction-instruction_handler
db 'vpermilmo2pd',10b
dw vpermil_2pd_instruction-instruction_handler
db 'vpermilmo2ps',10b
dw vpermil_2ps_instruction-instruction_handler
db 'vpermilmz2pd',11b
dw vpermil_2pd_instruction-instruction_handler
db 'vpermilmz2ps',11b
dw vpermil_2ps_instruction-instruction_handler
db 'vpermiltd2pd',0
dw vpermil_2pd_instruction-instruction_handler
db 'vpermiltd2ps',0
dw vpermil_2ps_instruction-instruction_handler
instructions_13:
db 'vcmptrue_uspd',1Fh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmptrue_usps',1Fh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmptrue_ussd',1Fh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmptrue_usss',1Fh
dw avx_cmp_ss_instruction-instruction_handler
db 'vcmpunord_spd',13h
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpunord_sps',13h
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpunord_ssd',13h
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpunord_sss',13h
dw avx_cmp_ss_instruction-instruction_handler
db 'vpclmulhqlqdq',1
dw avx_pclmulqdq_instruction-instruction_handler
db 'vpclmullqlqdq',0
dw avx_pclmulqdq_instruction-instruction_handler
instructions_14:
db 'vbroadcastf128',1Ah
dw avx_broadcastf128_instruction-instruction_handler
db 'vbroadcasti128',5Ah
dw avx_broadcastf128_instruction-instruction_handler
db 'vcmpfalse_ospd',1Bh
dw avx_cmp_pd_instruction-instruction_handler
db 'vcmpfalse_osps',1Bh
dw avx_cmp_ps_instruction-instruction_handler
db 'vcmpfalse_ossd',1Bh
dw avx_cmp_sd_instruction-instruction_handler
db 'vcmpfalse_osss',1Bh
dw avx_cmp_ss_instruction-instruction_handler
db 'vfmaddsub132pd',96h
dw fma_instruction_pd-instruction_handler
db 'vfmaddsub132ps',96h
dw fma_instruction_ps-instruction_handler
db 'vfmaddsub213pd',0A6h
dw fma_instruction_pd-instruction_handler
db 'vfmaddsub213ps',0A6h
dw fma_instruction_ps-instruction_handler
db 'vfmaddsub231pd',0B6h
dw fma_instruction_pd-instruction_handler
db 'vfmaddsub231ps',0B6h
dw fma_instruction_ps-instruction_handler
db 'vfmsubadd132pd',97h
dw fma_instruction_pd-instruction_handler
db 'vfmsubadd132ps',97h
dw fma_instruction_ps-instruction_handler
db 'vfmsubadd213pd',0A7h
dw fma_instruction_pd-instruction_handler
db 'vfmsubadd213ps',0A7h
dw fma_instruction_ps-instruction_handler
db 'vfmsubadd231pd',0B7h
dw fma_instruction_pd-instruction_handler
db 'vfmsubadd231ps',0B7h
dw fma_instruction_ps-instruction_handler
instructions_15:
db 'aeskeygenassist',0DFh
dw sse4_instruction_3a_imm8-instruction_handler
instructions_16:
db 'vaeskeygenassist',0DFh
dw avx_single_source_128bit_instruction_3a_imm8-instruction_handler
instructions_end:
 
data_directives:
dw data_directives_2-data_directives,(data_directives_3-data_directives_2)/(2+3)
dw data_directives_3-data_directives,(data_directives_4-data_directives_3)/(3+3)
dw data_directives_4-data_directives,(data_directives_end-data_directives_4)/(4+3)
 
data_directives_2:
db 'db',1
dw data_bytes-instruction_handler
db 'dd',4
dw data_dwords-instruction_handler
db 'df',6
dw data_pwords-instruction_handler
db 'dp',6
dw data_pwords-instruction_handler
db 'dq',8
dw data_qwords-instruction_handler
db 'dt',10
dw data_twords-instruction_handler
db 'du',2
dw data_unicode-instruction_handler
db 'dw',2
dw data_words-instruction_handler
db 'rb',1
dw reserve_bytes-instruction_handler
db 'rd',4
dw reserve_dwords-instruction_handler
db 'rf',6
dw reserve_pwords-instruction_handler
db 'rp',6
dw reserve_pwords-instruction_handler
db 'rq',8
dw reserve_qwords-instruction_handler
db 'rt',10
dw reserve_twords-instruction_handler
db 'rw',2
dw reserve_words-instruction_handler
data_directives_3:
data_directives_4:
db 'file',1
dw data_file-instruction_handler
data_directives_end:
/programs/develop/fasm/trunk/variable.inc
1,6 → 1,6
 
; flat assembler core variables
; Copyright (c) 1999-2012, Tomasz Grysztar.
; Copyright (c) 1999-2013, Tomasz Grysztar.
; All rights reserved.
 
; Variables which have to be set up by interface:
50,10 → 50,7
label_hash dd ?
label_leaf dd ?
hash_tree dd ?
org_origin dq ?
org_registers dd ?
org_symbol dd ?
org_start dd ?
addressing_space dd ?
undefined_data_start dd ?
undefined_data_end dd ?
counter dd ?
61,7 → 58,7
error_info dd ?
error_line dd ?
error dd ?
display_buffer dd ?
tagged_blocks dd ?
structures_buffer dd ?
number_start dd ?
current_offset dd ?
131,10 → 128,7
logical_value_wrapping db ?
next_pass_needed db ?
output_format db ?
labels_type db ?
code_type db ?
virtual_data db ?
org_origin_sign db ?
adjustment_sign db ?
 
macro_status db ?
141,7 → 135,9
default_argument_value db ?
prefixed_instruction db ?
formatter_symbols_allowed db ?
free_address_range db ?
 
 
characters rb 100h
converted rb 100h
message rb 200h
/programs/develop/fasm/trunk/version.inc
1,6 → 1,6
 
; flat assembler version 1.70
; Copyright (c) 1999-2012, Tomasz Grysztar.
; flat assembler version 1.71
; Copyright (c) 1999-2013, 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.70.03"
VERSION_STRING equ "1.71.13"
 
VERSION_MAJOR = 1
VERSION_MINOR = 70
VERSION_MINOR = 71
/programs/develop/fasm/trunk/x86_64.inc
1,6 → 1,6
 
; flat assembler core
; Copyright (c) 1999-2012, Tomasz Grysztar.
; Copyright (c) 1999-2013, Tomasz Grysztar.
; All rights reserved.
 
simple_instruction_except64:
2989,6 → 2989,7
jmp instruction_assembled
calculate_jump_offset:
add edi,2
mov ebp,[addressing_space]
call calculate_relative_offset
sub edi,2
ret
5982,6 → 5983,27
mov al,[operand_size]
call operand_autodetect
jmp instruction_ready
adx_instruction:
mov [base_code],0Fh
mov [extended_code],38h
mov [supplemental_code],0F6h
mov [operand_prefix],al
call get_reg_mem
jc adx_reg_reg
mov al,[operand_size]
cmp al,4
je instruction_ready
cmp al,8
jne invalid_operand_size
call operand_64bit
jmp instruction_ready
adx_reg_reg:
cmp ah,4
je nomem_instruction_ready
cmp ah,8
jne invalid_operand_size
call operand_64bit
jmp nomem_instruction_ready
 
simple_vmx_instruction:
mov ah,al
6251,6 → 6273,7
xbegin_16bit:
call get_address_word_value
add edi,4
mov ebp,[addressing_space]
call calculate_relative_offset
sub edi,4
shl eax,16
6264,6 → 6287,7
call get_address_qword_value
xbegin_address_ok:
add edi,5
mov ebp,[addressing_space]
call calculate_relative_offset
sub edi,5
mov edx,eax
6383,6 → 6407,7
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
6422,6 → 6447,7
mov edx,[address_symbol]
mov [symbol_identifier],edx
mov edx,[address_high]
mov ebp,[addressing_space]
call calculate_relative_offset
mov [address_high],edx
cdq