diff --git a/FASM.TXT b/FASM.TXT index 125f22d..132967d 100644 --- a/FASM.TXT +++ b/FASM.TXT @@ -5,7 +5,7 @@ Û ÜßßßßÛ ßßßßÜ Û Û Û Û ßÜÜÜÜÛÜ ÜÜÜÜÜß Û Û Û - flat assembler 1.41 + flat assembler 1.42 Programmer's Manual @@ -118,21 +118,21 @@ compilation summary. It includes the information of how many passes was done, how much time it took, and how many bytes were written into destination file. Here is an example of the compilation summary: -flat assembler version 1.41 +flat assembler version 1.42 38 passes, 5.3 seconds, 77824 bytes. In case of error during the compilation process, program will display an error message. For example, when compiler can't find the input file, it will display the following message: -flat assembler version 1.41 +flat assembler version 1.42 error: source file not found. If the error is connected with a specific part of source code, the source line that caused the error will be also displayed. Also placement of this line in the source is given to help you finding this error, for example: -flat assembler version 1.41 +flat assembler version 1.42 example.asm [3]: mob ax,1 error: illegal instruction. @@ -142,7 +142,7 @@ encountered an unrecognized instruction. When the line that caused error contains a macroinstruction, also number of erroneous line inside the macroinstruction is gived: -flat assembler version 1.41 +flat assembler version 1.42 example.asm [6] stoschar [2]: stoschar 7 error: illegal instruction. @@ -1473,7 +1473,7 @@ proceeding, "fnstenv" does not. "fldenv" loads the complete operating environment from memory into the FPU. "fsave" and "fnsave" store the current FPU state (operating environment and register stack) at the specified destination in memory and reinitializes the FPU. "fsave" check for pending -unmasked FPU exceptions before proceeding, verb"fnsave" does not. "frstor" +unmasked FPU exceptions before proceeding, "fnsave" does not. "frstor" loads the FPU state from the specified memory location. All these instructions need an operand being a memory location. "finit" and "fninit" set the FPU operating environment into its default diff --git a/LICENSE.TXT b/LICENSE.TXT index 9e6bf4c..baebfb8 100644 --- a/LICENSE.TXT +++ b/LICENSE.TXT @@ -1,5 +1,5 @@ -flat assembler version 1.41 +flat assembler version 1.42 Copyright (c) 1999-2002, Tomasz Grysztar. All rights reserved. diff --git a/SOURCE/ASSEMBLE.INC b/SOURCE/ASSEMBLE.INC index 267038a..18dd73c 100644 --- a/SOURCE/ASSEMBLE.INC +++ b/SOURCE/ASSEMBLE.INC @@ -646,8 +646,9 @@ times_directive: call get_dword_value cmp [value_type],0 jne invalid_use_of_symbol - or eax,eax - jz zero_times + cmp eax,0 + je zero_times + jl negative_times cmp byte [esi],':' jne times_argument_ok inc esi @@ -670,6 +671,12 @@ times_directive: pop eax pop [counter_limit] [counter] jmp instruction_assembled + negative_times: + cmp [error_line],0 + jne zero_times + mov eax,[current_line] + mov [error_line],eax + mov [error],invalid_value zero_times: call skip_line jmp instruction_assembled @@ -796,8 +803,9 @@ repeat_directive: call get_dword_value cmp [value_type],0 jne invalid_use_of_symbol - or eax,eax - jz zero_repeat + cmp eax,0 + je zero_repeat + jl negative_repeat call allocate_structure_data mov word [ebx],repeat_directive-assembler xchg eax,[counter_limit] @@ -824,6 +832,12 @@ repeat_directive: continue_repeating: mov esi,[ebx+0Ch] jmp instruction_assembled + negative_repeat: + cmp [error_line],0 + jne zero_repeat + mov eax,[current_line] + mov [error_line],eax + mov [error],invalid_value zero_repeat: mov al,[esi] or al,al @@ -1115,7 +1129,7 @@ data_dwords: cmp byte [esi],'.' je invalid_value call get_word_value - mov dx,ax + push eax inc esi lods byte [esi] cmp al,'(' @@ -1129,7 +1143,7 @@ data_dwords: stos word [edi] pop eax mov [value_type],al - mov ax,dx + pop eax call mark_relocation stos word [edi] dword_ok: @@ -1172,7 +1186,7 @@ data_pwords: cmp byte [esi],'.' je invalid_value call get_word_value - mov dx,ax + push eax inc esi lods byte [esi] cmp al,'(' @@ -1186,7 +1200,7 @@ data_pwords: stos dword [edi] pop eax mov [value_type],al - mov ax,dx + pop eax call mark_relocation stos word [edi] pword_ok: diff --git a/SOURCE/DOS/FASM.ASM b/SOURCE/DOS/FASM.ASM index ed63322..15dd2ad 100644 --- a/SOURCE/DOS/FASM.ASM +++ b/SOURCE/DOS/FASM.ASM @@ -242,6 +242,7 @@ fp_sign db ? fp_format db ? value_size db ? forced_size db ? +value_undefined db ? value_type db ? address_size db ? compare_type db ? diff --git a/SOURCE/EXPRESSI.INC b/SOURCE/EXPRESSI.INC index ebb1c6f..c253425 100644 --- a/SOURCE/EXPRESSI.INC +++ b/SOURCE/EXPRESSI.INC @@ -782,6 +782,7 @@ get_fp_value: calculate_expression: mov [current_offset],edi + mov [value_undefined],0 calculation_loop: lods byte [esi] or al,al @@ -848,6 +849,12 @@ calculate_expression: 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 + expression_value_ok: mov eax,[edi+16] mov [symbol_identifier],eax ret @@ -988,6 +995,7 @@ calculate_expression: jne invalid_value or [next_pass_needed],-1 mov byte [edi+12],0 + or [value_undefined],-1 xor eax,eax stos dword [edi] stos dword [edi] @@ -2189,9 +2197,10 @@ get_logical_value: cmp ah,2 jne invalid_expression lods dword [esi] - cmp eax,10h - jb return_true inc esi + cmp eax,0Fh + je reserved_word_used_as_symbol + jb return_true test byte [eax+8],1 jnz symbol_defined cmp [current_pass],0 diff --git a/SOURCE/LINUX/FASM.ASM b/SOURCE/LINUX/FASM.ASM index ac6e4ca..9d63d45 100644 --- a/SOURCE/LINUX/FASM.ASM +++ b/SOURCE/LINUX/FASM.ASM @@ -221,6 +221,7 @@ fp_sign db ? fp_format db ? value_size db ? forced_size db ? +value_undefined db ? value_type db ? address_size db ? compare_type db ? diff --git a/SOURCE/VERSION.INC b/SOURCE/VERSION.INC index eaef6d2..e4c0baf 100644 --- a/SOURCE/VERSION.INC +++ b/SOURCE/VERSION.INC @@ -1,5 +1,5 @@ -; flat assembler version 1.41 +; flat assembler version 1.42 ; Copyright (c) 1999-2002, Tomasz Grysztar. ; All rights reserved. ; @@ -33,7 +33,7 @@ ; cannot simply be copied and put under another distribution licence ; (including the GNU Public Licence). -VERSION_STRING equ "1.41" +VERSION_STRING equ "1.42" VERSION_MAJOR = 1 -VERSION_MINOR = 41 +VERSION_MINOR = 42 diff --git a/SOURCE/WIN32/FASM.ASM b/SOURCE/WIN32/FASM.ASM index 192025f..97bb1cc 100644 --- a/SOURCE/WIN32/FASM.ASM +++ b/SOURCE/WIN32/FASM.ASM @@ -256,6 +256,7 @@ fp_sign db ? fp_format db ? value_size db ? forced_size db ? +value_undefined db ? value_type db ? address_size db ? compare_type db ? diff --git a/SOURCE/X86.INC b/SOURCE/X86.INC index e38fdbf..cf9668b 100644 --- a/SOURCE/X86.INC +++ b/SOURCE/X86.INC @@ -4148,7 +4148,10 @@ basic_fpu_instruction: je basic_fpu_single_streg or al,al jz basic_fpu_st0 + test ah,110b + jz basic_fpu_streg_st0 xor ah,1 + basic_fpu_streg_st0: shl ah,3 or al,ah mov [postbyte_register],al @@ -5610,23 +5613,18 @@ fxsave_instruction: call get_size_operator cmp al,'[' jne invalid_operand - cmp ah,0 - je fxsave_size_ok + call get_address + mov ah,[operand_size] + or ah,ah + jz fxsave_size_ok mov al,[postbyte_register] cmp al,10b jb invalid_operand_size cmp al,11b - jbe ldmxcsr_size_check - cmp al,111b - jne invalid_operand_size - cmp ah,1 - je fxsave_size_ok - jmp invalid_operand_size - ldmxcsr_size_check: + ja invalid_operand_size cmp ah,4 jne invalid_operand_size fxsave_size_ok: - call get_address call store_instruction jmp instruction_assembled prefetch_instruction: @@ -7164,7 +7162,7 @@ instructions_6: db 'fprem1',110101b dw simple_fpu_instruction-assembler db 'frstor',4 - dw fsave_instruction-assembler + dw fnsave_instruction-assembler db 'fscale',111101b dw simple_fpu_instruction-assembler db 'fstenv',6 diff --git a/WHATSNEW.TXT b/WHATSNEW.TXT index c9174ca..a1086a8 100644 --- a/WHATSNEW.TXT +++ b/WHATSNEW.TXT @@ -1,6 +1,12 @@ Visit http://fasm.sourceforge.net for more information +version 1.42 +[05-12-2002] +------------ +[+] improved optimization algorithms +[-] more small fixes + version 1.41 [14-11-2002] ------------ @@ -9,6 +15,7 @@ version 1.41 [+] added missing syntax options for some FPU and MMX instructions [+] added defined and used operators [-] parser algorithms corrected +[-] minor bugs fixed version 1.40 [28-08-2002]