This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] x86/Intel: invlpg and prefetch* should allow any operand size


>>> On 08.10.13 at 15:57, "Jan Beulich" <JBeulich@suse.com> wrote:
> ... just like done by MASM.
> 
> opcodes/
> 2013-10-08  Jan Beulich <jbeulich@suse.com>
> 
> 	* i386-opc.tbl (invlpg): Use Anysize instead of Unspecified.
> 	(prefetch*): Use Anysize instead of Byte|Unspecified.

Oops, should have mentioned "clflush" here too (fixed in my local
copy, so would be committed that way).

Jan

> 	* i386-tbl.h: Re-generate.
> 
> --- 2013-10-07/opcodes/i386-opc.tbl
> +++ 2013-10-07/opcodes/i386-opc.tbl
> @@ -832,7 +832,7 @@ xadd, 2, 0xfc0, None, 2, Cpu486, W|Check
>  cmpxchg, 2, 0xfb0, None, 2, Cpu486, 
> W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { 
> Reg8|Reg16|Reg32|Reg64, 
> Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp
> 16|Disp32|Disp32S }
>  invd, 0, 0xf08, None, 2, Cpu486, 
> No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
>  wbinvd, 0, 0xf09, None, 2, Cpu486, 
> No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
> -invlpg, 1, 0xf01, 0x7, 2, Cpu486, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> +invlpg, 1, 0xf01, 0x7, 2, Cpu486, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> Anysize|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
>  
>  // 586 and late 486 extensions.
>  cpuid, 0, 0xfa2, None, 2, Cpu486, 
> No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
> @@ -926,7 +926,7 @@ fucompi, 1, 0xdfe8, None, 2, Cpu687, Sho
>  // Pentium4 extensions.
>  
>  movnti, 2, 0xfc3, None, 2, CpuSSE2, 
> Modrm|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoAVX, { Reg32|Reg64, 
> Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> -clflush, 1, 0xfae, 0x7, 2, CpuClflush, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> +clflush, 1, 0xfae, 0x7, 2, CpuClflush, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> Anysize|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
>  lfence, 0, 0xfae, 0xe8, 2, CpuSSE2, 
> No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|NoAVX, { 0 }
>  mfence, 0, 0xfae, 0xf0, 2, CpuSSE2, 
> No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|NoAVX, { 0 }
>  // Processors that do not support PAUSE treat this opcode as a NOP 
> instruction.
> @@ -1287,10 +1287,10 @@ pmovmskb, 2, 0xfd7, None, 2, CpuSSE|Cpu3
>  pmulhuw, 2, 0x66e4, None, 1, CpuAVX, 
> Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_
> sSuf|No_qSuf|No_ldSuf|SSE2AVX, { 
> Xmmword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
>  pmulhuw, 2, 0x660fe4, None, 2, CpuSSE2, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> Xmmword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
>  pmulhuw, 2, 0xfe4, None, 2, CpuSSE|Cpu3dnowA, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { 
> Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
> -prefetchnta, 1, 0xf18, 0x0, 2, CpuSSE|Cpu3dnowA, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { 
> Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> -prefetcht0, 1, 0xf18, 0x1, 2, CpuSSE|Cpu3dnowA, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { 
> Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> -prefetcht1, 1, 0xf18, 0x2, 2, CpuSSE|Cpu3dnowA, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { 
> Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> -prefetcht2, 1, 0xf18, 0x3, 2, CpuSSE|Cpu3dnowA, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { 
> Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> +prefetchnta, 1, 0xf18, 0x0, 2, CpuSSE|Cpu3dnowA, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { 
> Anysize|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> +prefetcht0, 1, 0xf18, 0x1, 2, CpuSSE|Cpu3dnowA, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { 
> Anysize|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> +prefetcht1, 1, 0xf18, 0x2, 2, CpuSSE|Cpu3dnowA, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { 
> Anysize|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> +prefetcht2, 1, 0xf18, 0x3, 2, CpuSSE|Cpu3dnowA, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { 
> Anysize|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
>  psadbw, 2, 0xff6, None, 2, CpuSSE|Cpu3dnowA, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { 
> Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
>  psadbw, 2, 0x66f6, None, 1, CpuAVX, 
> Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_
> sSuf|No_qSuf|No_ldSuf|SSE2AVX, { 
> Xmmword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
>  psadbw, 2, 0x660ff6, None, 2, CpuSSE2, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> Xmmword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
> @@ -2964,8 +2964,8 @@ tzmsk,  2, 0x01,   0x4, 1, CpuTBM, Modrm
>  
>  // AMD 3DNow! instructions.
>  
> -prefetch, 1, 0xf0d, 0x0, 2, Cpu3dnow|CpuPRFCHW, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> -prefetchw, 1, 0xf0d, 0x1, 2, Cpu3dnow|CpuPRFCHW, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> +prefetch, 1, 0xf0d, 0x0, 2, Cpu3dnow|CpuPRFCHW, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> Anysize|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> +prefetchw, 1, 0xf0d, 0x1, 2, Cpu3dnow|CpuPRFCHW, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> Anysize|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
>  femms, 0, 0xf0e, None, 2, Cpu3dnow, 
> No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
>  pavgusb, 2, 0xf0f, 0xbf, 2, Cpu3dnow, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { 
> Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
>  pf2id, 2, 0xf0f, 0x1d, 2, Cpu3dnow, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { 
> Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
> @@ -4285,6 +4285,6 @@ vscatterpf0qps, 1, 0x66C7, 5, 1, CpuAVX5
>  vscatterpf1dps, 1, 0x66C6, 6, 1, CpuAVX512PF, 
> Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|
> IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> ZMMword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|Vec_Disp8 }
>  vscatterpf1qps, 1, 0x66C7, 6, 1, CpuAVX512PF, 
> Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|
> IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> ZMMword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|Vec_Disp8 }
>  
> -prefetchwt1, 1, 0x0F0D, 2, 2, CpuAVX512PF, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
> +prefetchwt1, 1, 0x0F0D, 2, 2, CpuAVX512PF, 
> Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 
> Anysize|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
>  
>  // AVX512PF instructions end.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]