From eda7490bf5aff8835ea9bdbd09ec80b8acc1e64b Mon Sep 17 00:00:00 2001 From: heavyiron Date: Thu, 31 Jan 2008 21:32:32 +0000 Subject: [PATCH] fasm 1.67.26 git-svn-id: svn://kolibrios.org@707 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/fasm/trunk/assemble.inc | 9 +-- programs/develop/fasm/trunk/tables.inc | 70 +++++++++++++++++++++++- programs/develop/fasm/trunk/variable.inc | 41 +++++++------- programs/develop/fasm/trunk/version.inc | 2 +- programs/develop/fasm/trunk/x86_64.inc | 59 +++++++++++++++++++- 5 files changed, 151 insertions(+), 30 deletions(-) diff --git a/programs/develop/fasm/trunk/assemble.inc b/programs/develop/fasm/trunk/assemble.inc index 651c96d6ed..c57c1c25ad 100644 --- a/programs/develop/fasm/trunk/assemble.inc +++ b/programs/develop/fasm/trunk/assemble.inc @@ -331,10 +331,11 @@ assemble_line: or byte [ebx+8],1+2 jmp instruction_assembled assemble_instruction: - mov [operand_size],0 - mov [size_override],0 - mov [operand_prefix],0 - mov [rex_prefix],0 +; mov [operand_size],0 +; mov [size_override],0 +; mov [operand_prefix],0 +; mov [rex_prefix],0 + mov dword [operand_size],0 mov [immediate_size],0 movzx ebx,word [esi] mov al,[esi+2] diff --git a/programs/develop/fasm/trunk/tables.inc b/programs/develop/fasm/trunk/tables.inc index d600fc2f6c..536846e2f2 100644 --- a/programs/develop/fasm/trunk/tables.inc +++ b/programs/develop/fasm/trunk/tables.inc @@ -583,6 +583,10 @@ instructions_4: dw simple_instruction_32bit-assembler db 'data',0 dw data_directive-assembler + db 'dppd',41h + dw sse4_instruction_3a_imm8-assembler + db 'dpps',40h + dw sse4_instruction_3a_imm8-assembler db 'else',0 dw else_directive-assembler db 'emms',77h @@ -1072,6 +1076,8 @@ instructions_5: dw basic_mmx_instruction-assembler db 'psubw',0F9h dw basic_mmx_instruction-assembler + db 'ptest',17h + dw sse4_instruction_38-assembler db 'pusha',60h dw simple_instruction_except64-assembler db 'pushd',4 @@ -1293,6 +1299,8 @@ instructions_6: dw ffree_instruction-assembler db 'fxsave',0 dw fxsave_instruction-assembler + db 'getsec',37h + dw simple_extended_instruction-assembler db 'haddpd',07Ch dw sse_pd_instruction-assembler db 'haddps',07Ch @@ -1369,16 +1377,36 @@ instructions_6: dw ssse3_instruction-assembler db 'pinsrw',0C4h dw pinsrw_instruction-assembler + db 'pmaxsb',3Ch + dw sse4_instruction_38-assembler + db 'pmaxsd',3Dh + dw sse4_instruction_38-assembler db 'pmaxsw',0EEh dw basic_mmx_instruction-assembler db 'pmaxub',0DEh dw basic_mmx_instruction-assembler + db 'pmaxud',3Fh + dw sse4_instruction_38-assembler + db 'pmaxuw',3Eh + dw sse4_instruction_38-assembler + db 'pminsb',38h + dw sse4_instruction_38-assembler + db 'pminsd',39h + dw sse4_instruction_38-assembler db 'pminsw',0EAh dw basic_mmx_instruction-assembler db 'pminub',0DAh dw basic_mmx_instruction-assembler + db 'pminud',3Bh + dw sse4_instruction_38-assembler + db 'pminuw',3Ah + dw sse4_instruction_38-assembler + db 'pmuldq',28h + dw sse4_instruction_38-assembler db 'pmulhw',0E5h dw basic_mmx_instruction-assembler + db 'pmulld',40h + dw sse4_instruction_38-assembler db 'pmullw',0D5h dw basic_mmx_instruction-assembler db 'psadbw',0F6h @@ -1436,9 +1464,9 @@ instructions_6: db 'sfence',0F8h dw fence_instruction-assembler db 'shufpd',0C6h - dw sse_pd_instruction-assembler + dw sse_pd_instruction_imm8-assembler db 'shufps',0C6h - dw sse_ps_instruction-assembler + dw sse_ps_instruction_imm8-assembler db 'skinit',0 dw skinit_instruction-assembler db 'sqrtpd',51h @@ -1468,6 +1496,10 @@ instructions_6: db 'wrmsrq',30h dw simple_extended_instruction_64bit-assembler instructions_7: + db 'blendpd',0Dh + dw sse4_instruction_3a_imm8-assembler + db 'blendps',0Ch + dw sse4_instruction_3a_imm8-assembler db 'clflush',111b dw fxsave_instruction-assembler db 'cmovnae',42h @@ -1568,6 +1600,8 @@ instructions_7: dw movntps_instruction-assembler db 'movq2dq',0 dw movq2dq_instruction-assembler + db 'mpsadbw',42h + dw sse4_instruction_3a_imm8-assembler db 'paddusb',0DCh dw basic_mmx_instruction-assembler db 'paddusw',0DDh @@ -1576,16 +1610,22 @@ instructions_7: dw palignr_instruction-assembler db 'pavgusb',0BFh dw amd3dnow_instruction-assembler + db 'pblendw',0Eh + dw sse4_instruction_3a_imm8-assembler db 'pcmpeqb',74h dw basic_mmx_instruction-assembler db 'pcmpeqd',76h dw basic_mmx_instruction-assembler + db 'pcmpeqq',29h + dw sse4_instruction_38-assembler db 'pcmpeqw',75h dw basic_mmx_instruction-assembler db 'pcmpgtb',64h dw basic_mmx_instruction-assembler db 'pcmpgtd',66h dw basic_mmx_instruction-assembler + db 'pcmpgtq',37h + dw sse4_instruction_38-assembler db 'pcmpgtw',65h dw basic_mmx_instruction-assembler db 'pfcmpeq',0B0h @@ -1618,6 +1658,14 @@ instructions_7: dw basic_mmx_instruction-assembler db 'psubusw',0D9h dw basic_mmx_instruction-assembler + db 'roundpd',9 + dw sse4_instruction_3a_imm8-assembler + db 'roundps',8 + dw sse4_instruction_3a_imm8-assembler + db 'roundsd',0Bh + dw sse4_instruction_3a_imm8-assembler + db 'roundss',0Ah + dw sse4_instruction_3a_imm8-assembler db 'rsqrtps',52h dw sse_ps_instruction-assembler db 'rsqrtss',52h @@ -1655,6 +1703,10 @@ instructions_8: dw sse_pd_instruction-assembler db 'addsubps',0D0h dw cvtpd2dq_instruction-assembler + db 'blendvpd',15h + dw sse4_instruction_38_xmm0-assembler + db 'blendvps',14h + dw sse4_instruction_38_xmm0-assembler db 'cmpneqpd',4 dw cmp_pd_instruction-assembler db 'cmpneqps',4 @@ -1735,8 +1787,12 @@ instructions_8: dw basic_mmx_instruction-assembler db 'packsswb',63h dw basic_mmx_instruction-assembler + db 'packusdw',2Bh + dw sse4_instruction_38-assembler db 'packuswb',67h dw basic_mmx_instruction-assembler + db 'pblendvb',10h + dw sse4_instruction_38_xmm0-assembler db 'pfrcpit1',0A6h dw amd3dnow_instruction-assembler db 'pfrcpit2',0B6h @@ -1780,6 +1836,14 @@ instructions_9: dw cvtsd2si_instruction-assembler db 'cvttss2si',2Ch dw cvtss2si_instruction-assembler + db 'pcmpestri',61h + dw sse4_instruction_3a_imm8-assembler + db 'pcmpestrm',60h + dw sse4_instruction_3a_imm8-assembler + db 'pcmpistri',63h + dw sse4_instruction_3a_imm8-assembler + db 'pcmpistrm',62h + dw sse4_instruction_3a_imm8-assembler db 'pmaddubsw',4 dw ssse3_instruction-assembler db 'prefetchw',1 @@ -1813,6 +1877,8 @@ instructions_10: dw simple_extended_instruction-assembler db 'maskmovdqu',0 dw maskmovdqu_instruction-assembler + db 'phminposuw',41h + dw sse4_instruction_38-assembler db 'prefetcht0',1 dw prefetch_instruction-assembler db 'prefetcht1',2 diff --git a/programs/develop/fasm/trunk/variable.inc b/programs/develop/fasm/trunk/variable.inc index 9d03f9c8ed..8101779183 100644 --- a/programs/develop/fasm/trunk/variable.inc +++ b/programs/develop/fasm/trunk/variable.inc @@ -91,35 +91,36 @@ parsed_lines dd ? logical_value_parentheses dd ? file_extension dd ? +operand_size db ? +size_override db ? +operand_prefix db ? +rex_prefix db ? +base_code db ? +extended_code db ? +supplemental_code db ? +postbyte_register db ? + +immediate_size db ? +mmx_size db ? +jump_type db ? +push_size db ? +value_size db ? +address_size db ? +size_declared db ? +value_undefined db ? +value_type db ? +compare_type db ? +logical_value_wrapping db ? next_pass_needed db ? macro_status db ? output_format db ? code_type db ? labels_type db ? +segment_register db ? prefixed_instruction db ? virtual_data db ? fp_sign db ? fp_format db ? -value_size db ? -size_override db ? -address_size db ? -operand_size db ? -size_declared db ? -value_undefined db ? -value_type db ? -compare_type db ? -base_code db ? -extended_code db ? -supplemental_code db ? -postbyte_register db ? -segment_register db ? -mmx_size db ? -jump_type db ? -push_size db ? -operand_prefix db ? -rex_prefix db ? -immediate_size db ? -logical_value_wrapping db ? characters rb 100h converted rb 100h diff --git a/programs/develop/fasm/trunk/version.inc b/programs/develop/fasm/trunk/version.inc index af9eb3e5b9..20fa2e8906 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.25" +VERSION_STRING equ "1.67.26" 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 4ffd31c195..a0989f16b9 100644 --- a/programs/develop/fasm/trunk/x86_64.inc +++ b/programs/develop/fasm/trunk/x86_64.inc @@ -5022,9 +5022,13 @@ movdq2q_instruction: call store_nomem_instruction jmp instruction_assembled +sse_ps_instruction_imm8: + mov [immediate_size],8 sse_ps_instruction: mov [mmx_size],16 jmp sse_instruction +sse_pd_instruction_imm8: + mov [immediate_size],8 sse_pd_instruction: mov [mmx_size],16 mov [operand_prefix],66h @@ -5086,8 +5090,12 @@ sse_instruction: cmp [operand_size],al jne invalid_operand_size sse_mem_size_ok: - cmp [extended_code],0C6h + cmp [immediate_size],8 je mmx_imm8 + cmp [immediate_size],-1 + jne sse_ok + call take_additional_xmm0 + sse_ok: call store_instruction jmp instruction_assembled sse_xmmreg_xmmreg: @@ -5103,10 +5111,29 @@ sse_instruction: cmp ah,16 jne invalid_operand_size mov bl,al - cmp [extended_code],0C6h + cmp [immediate_size],8 je mmx_nomem_imm8 + cmp [immediate_size],-1 + jne sse_nomem_ok + call take_additional_xmm0 + sse_nomem_ok: call store_nomem_instruction jmp instruction_assembled + take_additional_xmm0: + lods byte [esi] + cmp al,',' + jne invalid_operand + lods byte [esi] + cmp al,10h + jne invalid_operand + lods byte [esi] + call convert_mmx_register + cmp ah,16 + jne invalid_operand_size + test al,al + jnz invalid_operand + ret + ps_dq_instruction: mov [postbyte_register],al mov [operand_prefix],66h @@ -5585,6 +5612,26 @@ amd3dnow_instruction: stos byte [edi] jmp instruction_assembled +sse4_instruction_38_xmm0: + mov [immediate_size],-1 + jmp sse4_instruction_38 +sse4_instruction_38_imm8: + mov [immediate_size],8 +sse4_instruction_38: + mov [operand_prefix],66h + mov [base_code],0Fh + mov [supplemental_code],al + mov al,38h + jmp sse_instruction +sse4_instruction_3a_imm8: + mov [immediate_size],8 +sse4_instruction_3a: + mov [operand_prefix],66h + mov [base_code],0Fh + mov [supplemental_code],al + mov al,3Ah + jmp sse_instruction + fxsave_instruction: mov [extended_code],0AEh mov [base_code],0Fh @@ -6063,7 +6110,13 @@ get_address: mov [address_high],edx cdq cmp edx,[address_high] - jne value_out_of_range + je address_high_ok + cmp [error_line],0 + jne address_high_ok + mov ebx,[current_line] + mov [error_line],ebx + mov [error],value_out_of_range + address_high_ok: mov edx,eax ror ecx,16 mov cl,[value_type]