/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 |
/programs/proc32.inc |
---|
55,11 → 55,15 |
prologue@proc equ prologuedef |
macro prologuedef procname,flag,parmbytes,localbytes,reglist |
{ if parmbytes | localbytes |
{ local loc |
loc = (localbytes+3) and (not 3) |
parmbase@proc equ ebp+8 |
localbase@proc equ ebp-loc |
if parmbytes | localbytes |
push ebp |
mov ebp,esp |
if localbytes |
sub esp,localbytes |
sub esp,loc |
end if |
end if |
irps reg, reglist \{ push reg \} } |
77,6 → 81,8 |
retn parmbytes |
end if } |
close@proc equ |
macro define@proc name,statement |
{ local params,flag,regs,parmbytes,localbytes,current |
if used name |
91,22 → 97,22 |
flag = 10001b \} |
match =params, params \{ params equ statement |
flag = 0 \} |
virtual at ebp+8 |
match =uses reglist=,args, params \{ regs equ reglist |
params equ args \} |
match =regs =uses reglist, regs params \{ regs equ reglist |
params equ \} |
match =regs, regs \{ regs equ \} |
match prologue:reglist, prologue@proc:<regs> \{ prologue name,flag,parmbytes,localbytes,reglist \} |
virtual at parmbase@proc |
match =,args, params \{ defargs@proc args \} |
match =args@proc args, args@proc params \{ defargs@proc args \} |
parmbytes = $ - (ebp+8) |
parmbytes = $-(parmbase@proc) |
end virtual |
name # % = parmbytes/4 |
all@vars equ |
current = 0 |
match prologue:reglist, prologue@proc:<regs> \{ prologue name,flag,parmbytes,localbytes,reglist \} |
macro locals |
\{ virtual at ebp-localbytes+current |
\{ virtual at localbase@proc+current |
macro label def \\{ match . type,def> \\\{ deflocal@proc .,label,<type \\\} \\} |
struc db [val] \\{ \common deflocal@proc .,db,val \\} |
struc du [val] \\{ \common deflocal@proc .,du,val \\} |
125,14 → 131,15 |
\{ purge label |
restruc db,du,dw,dp,dd,dt,dq |
restruc rb,rw,rp,rd,rt,rq |
current = $-(ebp-localbytes) |
current = $-(localbase@proc) |
end virtual \} |
macro ret operand |
\{ match any, operand \\{ retn operand \\} |
match , operand \\{ match epilogue:reglist, epilogue@proc:<regs> |
\\\{ epilogue name,flag,parmbytes,localbytes,reglist \\\} \\} \} |
macro finish@proc \{ localbytes = (((current-1) shr 2)+1) shl 2 |
end if \} } |
match , operand \\{ match epilogue:reglist, epilogue@proc:<regs> \\\{ epilogue name,flag,parmbytes,localbytes,reglist \\\} \\} \} |
macro finish@proc |
\{ localbytes = current |
match close:reglist, close@proc:<regs> \\{ close name,flag,parmbytes,localbytes,reglist \\} |
end if \} } |
macro defargs@proc [arg] |
{ common |
143,7 → 150,9 |
\{ current@arg equ argname |
label ..arg type |
argname equ ..arg |
if dqword eq type |
if qqword eq type |
dd ?,?,?,?,?,?,?,? |
else if dqword eq type |
dd ?,?,?,? |
else if tbyte eq type |
dd ?,?,? |
163,6 → 172,8 |
common |
end if } |
macro deflocal@proc name,def,[val] { name def val } |
macro deflocal@proc name,def,[val] |
{ common |
match vars, all@vars \{ all@vars equ all@vars, \} |
169,11 → 180,11 |
all@vars equ all@vars name |
forward |
local ..var,..tmp |
match =label,def \{ ..tmp equ \} |
match tmp,..tmp \{ ..var def val \} |
match ,..tmp \{ label ..var val \} |
..var def val |
match =?, val \{ ..tmp equ \} |
match any =dup (=?), val \{ ..tmp equ \} |
match any =?, val \{ ..tmp equ \} |
match any (=?), val \{ ..tmp equ \} |
match =label, def \{ ..tmp equ \} |
match tmp : value, ..tmp : val |
\{ tmp: end virtual |
initlocal@proc ..var,def value |
181,6 → 192,8 |
common |
match first rest, ..var, \{ name equ first \} } |
struc label type { label . type } |
macro initlocal@proc name,def |
{ virtual at name |
def |
238,8 → 251,17 |
match =TBYTE, vartype \\{ varname rt count |
restore done@local \\} |
match =DQWORD, vartype \\{ label varname dqword |
rq count+count |
rq count*2 |
restore done@local \\} |
match =QQWORD, vartype \\{ label varname qqword |
rq count*4 |
restore done@local \\} |
match =XWORD, vartype \\{ label varname xword |
rq count*2 |
restore done@local \\} |
match =YWORD, vartype \\{ label varname yword |
rq count*4 |
restore done@local \\} |
match , done@local \\{ virtual |
varname vartype |
end virtual |
261,6 → 283,15 |
match =DQWORD, vartype \\{ label varname dqword |
dq ?,? |
restore done@local \\} |
match =QQWORD, vartype \\{ label varname qqword |
dq ?,?,?,? |
restore done@local \\} |
match =XWORD, vartype \\{ label varname xword |
dq ?,? |
restore done@local \\} |
match =YWORD, vartype \\{ label varname yword |
dq ?,?,?,? |
restore done@local \\} |
match , done@local \\{ varname vartype |
restore done@local \\} \} |
match ,done@local |
/programs/struct.inc |
---|
2,53 → 2,79 |
; Macroinstructions for defining data structures |
macro struct name |
{ fields@struct equ name |
{ virtual at 0 |
fields@struct equ name |
match child parent, name \{ fields@struct equ child,fields@\#parent \} |
sub@struct equ |
struc db [val] \{ \common fields@struct equ fields@struct,.,db,<val> \} |
struc dw [val] \{ \common fields@struct equ fields@struct,.,dw,<val> \} |
struc du [val] \{ \common fields@struct equ fields@struct,.,du,<val> \} |
struc dd [val] \{ \common fields@struct equ fields@struct,.,dd,<val> \} |
struc dp [val] \{ \common fields@struct equ fields@struct,.,dp,<val> \} |
struc dq [val] \{ \common fields@struct equ fields@struct,.,dq,<val> \} |
struc dt [val] \{ \common fields@struct equ fields@struct,.,dt,<val> \} |
struc rb count \{ fields@struct equ fields@struct,.,db,count dup (?) \} |
struc rw count \{ fields@struct equ fields@struct,.,dw,count dup (?) \} |
struc rd count \{ fields@struct equ fields@struct,.,dd,count dup (?) \} |
struc rp count \{ fields@struct equ fields@struct,.,dp,count dup (?) \} |
struc rq count \{ fields@struct equ fields@struct,.,dq,count dup (?) \} |
struc rt count \{ fields@struct equ fields@struct,.,dt,count dup (?) \} |
struc db [val] \{ \common define field@struct .,db,<val> |
fields@struct equ fields@struct,field@struct \} |
struc dw [val] \{ \common define field@struct .,dw,<val> |
fields@struct equ fields@struct,field@struct \} |
struc du [val] \{ \common define field@struct .,du,<val> |
fields@struct equ fields@struct,field@struct \} |
struc dd [val] \{ \common define field@struct .,dd,<val> |
fields@struct equ fields@struct,field@struct \} |
struc dp [val] \{ \common define field@struct .,dp,<val> |
fields@struct equ fields@struct,field@struct \} |
struc dq [val] \{ \common define field@struct .,dq,<val> |
fields@struct equ fields@struct,field@struct \} |
struc dt [val] \{ \common define field@struct .,dt,<val> |
fields@struct equ fields@struct,field@struct \} |
struc rb count \{ define field@struct .,db,count dup (?) |
fields@struct equ fields@struct,field@struct \} |
struc rw count \{ define field@struct .,dw,count dup (?) |
fields@struct equ fields@struct,field@struct \} |
struc rd count \{ define field@struct .,dd,count dup (?) |
fields@struct equ fields@struct,field@struct \} |
struc rp count \{ define field@struct .,dp,count dup (?) |
fields@struct equ fields@struct,field@struct \} |
struc rq count \{ define field@struct .,dq,count dup (?) |
fields@struct equ fields@struct,field@struct \} |
struc rt count \{ define field@struct .,dt,count dup (?) |
fields@struct equ fields@struct,field@struct \} |
macro db [val] \{ \common \local anonymous |
fields@struct equ fields@struct,anonymous,db,<val> \} |
define field@struct anonymous,db,<val> |
fields@struct equ fields@struct,field@struct \} |
macro dw [val] \{ \common \local anonymous |
fields@struct equ fields@struct,anonymous,dw,<val> \} |
define field@struct anonymous,dw,<val> |
fields@struct equ fields@struct,field@struct \} |
macro du [val] \{ \common \local anonymous |
fields@struct equ fields@struct,anonymous,du,<val> \} |
define field@struct anonymous,du,<val> |
fields@struct equ fields@struct,field@struct \} |
macro dd [val] \{ \common \local anonymous |
fields@struct equ fields@struct,anonymous,dd,<val> \} |
define field@struct anonymous,dd,<val> |
fields@struct equ fields@struct,field@struct \} |
macro dp [val] \{ \common \local anonymous |
fields@struct equ fields@struct,anonymous,dp,<val> \} |
define field@struct anonymous,dp,<val> |
fields@struct equ fields@struct,field@struct \} |
macro dq [val] \{ \common \local anonymous |
fields@struct equ fields@struct,anonymous,dq,<val> \} |
define field@struct anonymous,dq,<val> |
fields@struct equ fields@struct,field@struct \} |
macro dt [val] \{ \common \local anonymous |
fields@struct equ fields@struct,anonymous,dt,<val> \} |
define field@struct anonymous,dt,<val> |
fields@struct equ fields@struct,field@struct \} |
macro rb count \{ \local anonymous |
fields@struct equ fields@struct,anonymous,db,count dup (?) \} |
define field@struct anonymous,db,count dup (?) |
fields@struct equ fields@struct,field@struct \} |
macro rw count \{ \local anonymous |
fields@struct equ fields@struct,anonymous,dw,count dup (?) \} |
define field@struct anonymous,dw,count dup (?) |
fields@struct equ fields@struct,field@struct \} |
macro rd count \{ \local anonymous |
fields@struct equ fields@struct,anonymous,dd,count dup (?) \} |
define field@struct anonymous,dd,count dup (?) |
fields@struct equ fields@struct,field@struct \} |
macro rp count \{ \local anonymous |
fields@struct equ fields@struct,anonymous,dp,count dup (?) \} |
define field@struct anonymous,dp,count dup (?) |
fields@struct equ fields@struct,field@struct \} |
macro rq count \{ \local anonymous |
fields@struct equ fields@struct,anonymous,dq,count dup (?) \} |
define field@struct anonymous,dq,count dup (?) |
fields@struct equ fields@struct,field@struct \} |
macro rt count \{ \local anonymous |
fields@struct equ fields@struct,anonymous,dt,count dup (?) \} |
define field@struct anonymous,dt,count dup (?) |
fields@struct equ fields@struct,field@struct \} |
macro union \{ fields@struct equ fields@struct,,union,< |
sub@struct equ union \} |
macro struct \{ fields@struct equ fields@struct,,substruct,< |
sub@struct equ substruct \} |
virtual at 0 } |
sub@struct equ substruct \} } |
macro ends |
{ match , sub@struct \{ restruc db,dw,du,dd,dp,dq,dt |
56,9 → 82,13 |
purge db,dw,du,dd,dp,dq,dt |
purge rb,rw,rd,rp,rq,rt |
purge union,struct |
match name tail,fields@struct, \\{ if $ |
display 'Error: definition of ',\\`name,' contains illegal instructions.',0Dh,0Ah |
err |
end if \\} |
match name=,fields,fields@struct \\{ fields@struct equ |
make@struct name,fields |
fields@\\#name equ fields \\} |
define fields@\\#name fields \\} |
end virtual \} |
match any, sub@struct \{ fields@struct equ fields@struct> \} |
restore sub@struct } |
65,10 → 95,6 |
macro make@struct name,[field,type,def] |
{ common |
if $ |
display 'Error: definition of ',`name,' contains illegal instructions.',0Dh,0Ah |
err |
end if |
local define |
define equ name |
forward |
81,6 → 107,14 |
macro define@struct name,[field,type,def] |
{ common |
virtual |
db `name |
load initial@struct byte from 0 |
if initial@struct = '.' |
display 'Error: name of structure should not begin with a dot.',0Dh,0Ah |
err |
end if |
end virtual |
local list |
list equ |
forward |
88,6 → 122,7 |
name#field type def |
sizeof.#name#field = $ - name#field |
else |
label name#.#type |
rb sizeof.#type |
end if |
local value |
97,14 → 132,28 |
sizeof.#name = $ |
restruc name |
match values, list \{ |
struc name value \\{ |
struc name value \\{ \\local \\..base |
match any, fields@struct \\\{ fields@struct equ fields@struct,.,name,<values> \\\} |
match , fields@struct \\\{ label . |
match , fields@struct \\\{ label \\..base |
forward |
match , value \\\\{ field type def \\\\} |
match any, value \\\\{ field type value |
if ~ field eq . |
rb sizeof.#name#field - ($-field) |
end if \\\\} |
common label . at \\..base \\\} |
\\} |
macro name value \\{ |
match any, fields@struct \\\{ \\\local anonymous |
fields@struct equ fields@struct,anonymous,name,<values> \\\} |
match , fields@struct \\\{ |
forward |
match , value \\\\{ type def \\\\} |
match any, value \\\\{ \\\\local ..field |
..field = $ |
type value |
if ~ field eq . |
rb sizeof.#name#field - ($-field) |
rb sizeof.#name#field - ($-..field) |
end if \\\\} |
common \\\} \\} \} } |
116,7 → 165,7 |
\forward |
\local sub |
match , field \\{ match any, type \\\{ enable@substruct |
make@substruct type,name,sub def |
make@substruct type,parent,sub def |
purge make@substruct |
define equ define,.,sub, \\\} \\} |
match any, field \\{ define equ define,.\#field,type,<def> \\} |
127,21 → 176,28 |
macro define@union parent,name,[field,type,def] |
{ common |
virtual at 0 |
virtual at parent#.#name |
forward |
if ~ field eq . |
virtual at 0 |
virtual at parent#.#name |
parent#field type def |
sizeof.#parent#field = $ - parent#field |
end virtual |
if sizeof.#parent#field > $ |
rb sizeof.#parent#field - $ |
if sizeof.#parent#field > $ - parent#.#name |
rb sizeof.#parent#field - ($ - parent#.#name) |
end if |
else if sizeof.#type > $ |
rb sizeof.#type - $ |
else |
virtual at parent#.#name |
label parent#.#type |
type def |
end virtual |
label name#.#type at parent#.#name |
if sizeof.#type > $ - parent#.#name |
rb sizeof.#type - ($ - parent#.#name) |
end if |
end if |
common |
sizeof.#name = $ |
sizeof.#name = $ - parent#.#name |
end virtual |
struc name [value] \{ \common |
label .\#name |
153,21 → 209,23 |
match , last@union \\{ match , value \\\{ field type def \\\} |
match any, value \\\{ field type value \\\} \\} |
last@union equ field |
common rb sizeof.#name - ($ - .\#name) \} } |
common rb sizeof.#name - ($ - .\#name) \} |
macro name [value] \{ \common \local ..anonymous |
..anonymous name value \} } |
macro define@substruct parent,name,[field,type,def] |
{ common |
virtual at 0 |
virtual at parent#.#name |
forward |
if ~ field eq . |
parent#field type def |
sizeof.#parent#field = $ - parent#field |
else |
label parent#.#type |
rb sizeof.#type |
end if |
local value |
common |
sizeof.#name = $ |
sizeof.#name = $ - parent#.#name |
end virtual |
struc name value \{ |
label .\#name |
177,4 → 235,6 |
if ~ field eq . |
rb sizeof.#parent#field - ($-field) |
end if \\} |
common \} } |
common \} |
macro name value \{ \local ..anonymous |
..anonymous name \} } |