diff --git a/programs/develop/fasm/trunk/expressi.inc b/programs/develop/fasm/trunk/expressi.inc index 2bb11e785e..46af470242 100644 --- a/programs/develop/fasm/trunk/expressi.inc +++ b/programs/develop/fasm/trunk/expressi.inc @@ -1014,11 +1014,8 @@ calculate_expression: jne operand_sizes_do_not_match jmp calculation_loop current_offset_label: - mov al,[labels_type] - mov [edi+12],al - mov eax,[org_symbol] - mov [edi+16],eax mov eax,[current_offset] + make_current_offset_label: xor edx,edx sub eax,dword [org_origin] sbb edx,dword [org_origin+4] @@ -1027,24 +1024,15 @@ calculate_expression: stos dword [edi] mov eax,[org_registers] stos dword [edi] + mov al,[labels_type] + mov [edi-12+12],al + mov eax,[org_symbol] + mov [edi-12+16],eax add edi,8 jmp calculation_loop org_origin_label: - mov al,[labels_type] - mov [edi+12],al - mov eax,[org_symbol] - mov [edi+16],eax mov eax,[org_start] - xor edx,edx - sub eax,dword [org_origin] - sbb edx,dword [org_origin+4] - stos dword [edi] - mov eax,edx - stos dword [edi] - mov eax,[org_registers] - stos dword [edi] - add edi,8 - jmp calculation_loop + jmp make_current_offset_label counter_label: mov eax,[counter] make_dword_label_value: diff --git a/programs/develop/fasm/trunk/tables.inc b/programs/develop/fasm/trunk/tables.inc index b935927004..5bc98d18e3 100644 --- a/programs/develop/fasm/trunk/tables.inc +++ b/programs/develop/fasm/trunk/tables.inc @@ -1714,9 +1714,9 @@ instructions_7: db 'roundps',8 dw sse4_instruction_3a_imm8-assembler db 'roundsd',0Bh - dw sse4_instruction_3a_imm8-assembler + dw sse4_sd_instruction_3a_imm8-assembler db 'roundss',0Ah - dw sse4_instruction_3a_imm8-assembler + dw sse4_ss_instruction_3a_imm8-assembler db 'rsqrtps',52h dw sse_ps_instruction-assembler db 'rsqrtss',52h diff --git a/programs/develop/fasm/trunk/version.inc b/programs/develop/fasm/trunk/version.inc index 3052a9d83f..caf2ce54af 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.67.37" +VERSION_STRING equ "1.67.38" VERSION_MAJOR = 1 VERSION_MINOR = 67 diff --git a/programs/develop/fasm/trunk/x86_64.inc b/programs/develop/fasm/trunk/x86_64.inc index 462840641c..093b9cb0f6 100644 --- a/programs/develop/fasm/trunk/x86_64.inc +++ b/programs/develop/fasm/trunk/x86_64.inc @@ -4821,12 +4821,12 @@ movdq2q_instruction: jmp nomem_instruction_ready sse_ps_instruction_imm8: - mov [immediate_size],8 + mov [immediate_size],1 sse_ps_instruction: mov [mmx_size],16 jmp sse_instruction sse_pd_instruction_imm8: - mov [immediate_size],8 + mov [immediate_size],1 sse_pd_instruction: mov [mmx_size],16 mov [opcode_prefix],66h @@ -4888,7 +4888,7 @@ sse_instruction: cmp [operand_size],al jne invalid_operand_size sse_mem_size_ok: - cmp [immediate_size],8 + cmp [immediate_size],1 je mmx_imm8 cmp [immediate_size],-1 jne sse_ok @@ -4908,7 +4908,7 @@ sse_instruction: cmp ah,16 jne invalid_operand_size mov bl,al - cmp [immediate_size],8 + cmp [immediate_size],1 je mmx_nomem_imm8 cmp [immediate_size],-1 jne sse_nomem_ok @@ -5405,22 +5405,31 @@ sse4_instruction_38_xmm0: mov [immediate_size],-1 jmp sse4_instruction_38 sse4_instruction_38_imm8: - mov [immediate_size],8 + mov [immediate_size],1 sse4_instruction_38: + mov [mmx_size],16 mov [opcode_prefix],66h mov [base_code],0Fh mov [supplemental_code],al mov al,38h - mov [mmx_size],16 jmp sse_instruction +sse4_ss_instruction_3a_imm8: + mov [immediate_size],1 + mov [mmx_size],4 + jmp sse4_instruction_3a_setup +sse4_sd_instruction_3a_imm8: + mov [immediate_size],1 + mov [mmx_size],8 + jmp sse4_instruction_3a_setup sse4_instruction_3a_imm8: - mov [immediate_size],8 + mov [immediate_size],1 sse4_instruction_3a: + mov [mmx_size],16 + sse4_instruction_3a_setup: mov [opcode_prefix],66h mov [base_code],0Fh mov [supplemental_code],al mov al,3Ah - mov [mmx_size],16 jmp sse_instruction extractps_instruction: mov [opcode_prefix],66h