diff --git a/programs/develop/fasm/trunk/expressi.inc b/programs/develop/fasm/trunk/expressi.inc index e748955c15..f838dd6fc3 100644 --- a/programs/develop/fasm/trunk/expressi.inc +++ b/programs/develop/fasm/trunk/expressi.inc @@ -162,6 +162,8 @@ convert_number: ret preprocessor_value: dec edi + cmp [hash_tree],0 + je invalid_value lods byte [esi] cmp al,1Ah jne invalid_value diff --git a/programs/develop/fasm/trunk/formats.inc b/programs/develop/fasm/trunk/formats.inc index 62f088fc70..4aad3f133f 100644 --- a/programs/develop/fasm/trunk/formats.inc +++ b/programs/develop/fasm/trunk/formats.inc @@ -4077,7 +4077,7 @@ dump_symbols: je prepare_string add edx,0Ch cmp al,0C0h - jne prepare_strings_table + jb prepare_strings_table add edx,4 jmp prepare_strings_table prepare_string: diff --git a/programs/develop/fasm/trunk/parser.inc b/programs/develop/fasm/trunk/parser.inc index 5b60ca2bc2..684a7b18bd 100644 --- a/programs/develop/fasm/trunk/parser.inc +++ b/programs/develop/fasm/trunk/parser.inc @@ -126,6 +126,7 @@ parser: dec esi cmp al,3Bh je skip_rest_of_line + mov [parenthesis_stack],0 call parse_argument jmp parse_next_line empty_line: diff --git a/programs/develop/fasm/trunk/version.inc b/programs/develop/fasm/trunk/version.inc index 1427a1b93c..0251bd7ca5 100644 --- a/programs/develop/fasm/trunk/version.inc +++ b/programs/develop/fasm/trunk/version.inc @@ -33,7 +33,7 @@ ; cannot simply be copied and put under another distribution licence ; (including the GNU Public Licence). -VERSION_STRING equ "1.69.06" +VERSION_STRING equ "1.69.10" VERSION_MAJOR = 1 -VERSION_MINOR = 68 +VERSION_MINOR = 69 diff --git a/programs/develop/fasm/trunk/x86_64.inc b/programs/develop/fasm/trunk/x86_64.inc index 4c18fa6116..c114799613 100644 --- a/programs/develop/fasm/trunk/x86_64.inc +++ b/programs/develop/fasm/trunk/x86_64.inc @@ -5969,6 +5969,7 @@ extrq_instruction: cmp al,'(' jne invalid_operand xor bl,bl + xchg bl,[postbyte_register] call store_nomem_instruction call get_byte_value stosb @@ -6989,15 +6990,16 @@ store_instruction: stos dword [edi] ret address_immediate_sib: - test ch,not 44h + test ch,44h + jnz address_immediate_sib_32bit + test ch,not 88h jnz invalid_address_size - test ecx,0FF0000h - jnz address_immediate_sib_nosignextend - test edx,80000000h - jz address_immediate_sib_prefix_ok - address_immediate_sib_nosignextend: - call address_32bit_prefix - address_immediate_sib_prefix_ok: + xor eax,eax + bt edx,31 + sbb eax,0 + cmp eax,[address_high] + jne value_out_of_range + address_immediate_sib_store: call store_instruction_code mov al,100b mov ah,100101b @@ -7006,6 +7008,14 @@ store_instruction: or al,cl stos word [edi] jmp store_address_32bit_value + address_immediate_sib_32bit: + test ecx,0FF0000h + jnz address_immediate_sib_nosignextend + test edx,80000000h + jz address_immediate_sib_store + address_immediate_sib_nosignextend: + call address_32bit_prefix + jmp address_immediate_sib_store address_eip_based: mov al,67h stos byte [edi]