This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: paddq and psubq??? Where are they?
- To: Will Deutsch <wdeutsch at netapp dot com>
- Subject: Re: paddq and psubq??? Where are they?
- From: Alan Modra <alan at linuxcare dot com dot au>
- Date: Thu, 22 Mar 2001 13:25:17 +1100 (EST)
- cc: binutils at sources dot redhat dot com, Jan Hubicka <jh at suse dot cz>, patches at x86-64 dot org
On Wed, 21 Mar 2001, Will Deutsch wrote:
> When (if ever) will these be added? From what I can tell these are the
> only MMX/SSE instructions not supported.
Committing to trunk and branch.
include/opcode/ChangeLog
* i386.h (i386_optab): Add paddq, psubq.
opcodes/ChangeLog
* i386-dis.c (dis386_twobyte_att): Add entries for paddq, psubq.
(dis386_twobyte_intel): Likewise.
(twobyte_has_modrm): Set entry for paddq, psubq.
When adding this, I noticed that gas accepts "psrldq" instead of the intel
mnemonic "psrlq", and a few other similar cases. Any particular reason
for this, Jan? I propose changing gas to use "psrlq" etc.
Alan Modra
--
Linuxcare
Index: include/opcode/i386.h
===================================================================
RCS file: /cvs/src/src/include/opcode/i386.h,v
retrieving revision 1.29
diff -u -p -r1.29 i386.h
--- i386.h 2001/03/19 11:28:20 1.29
+++ i386.h 2001/03/22 02:21:25
@@ -993,6 +993,8 @@ static const template i386_optab[] = {
{"paddw", 2, 0x660ffd,X,CpuSSE2,FP|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
{"paddd", 2, 0x0ffe, X, CpuMMX, FP|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
{"paddd", 2, 0x660ffe,X,CpuSSE2,FP|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
+{"paddq", 2, 0x0fd4, X, CpuMMX, FP|Modrm, { RegMMX|LLongMem, RegMMX, 0 } },
+{"paddq", 2, 0x660fd4,X,CpuSSE2,FP|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
{"paddsb", 2, 0x0fec, X, CpuMMX, FP|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
{"paddsb", 2, 0x660fec,X,CpuSSE2,FP|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
{"paddsw", 2, 0x0fed, X, CpuMMX, FP|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
@@ -1063,6 +1065,8 @@ static const template i386_optab[] = {
{"psubw", 2, 0x660ff9,X,CpuSSE2,FP|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
{"psubd", 2, 0x0ffa, X, CpuMMX, FP|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
{"psubd", 2, 0x660ffa,X,CpuSSE2,FP|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
+{"psubq", 2, 0x0ffb, X, CpuMMX, FP|Modrm, { RegMMX|LLongMem, RegMMX, 0 } },
+{"psubq", 2, 0x660ffb,X,CpuSSE2,FP|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
{"psubsb", 2, 0x0fe8, X, CpuMMX, FP|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
{"psubsb", 2, 0x660fe8,X,CpuSSE2,FP|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
{"psubsw", 2, 0x0fe9, X, CpuMMX, FP|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
Index: opcodes/i386-dis.c
===================================================================
RCS file: /cvs/src/src/opcodes/i386-dis.c,v
retrieving revision 1.16
diff -u -p -r1.16 i386-dis.c
--- i386-dis.c 2001/03/13 22:58:35 1.16
+++ i386-dis.c 2001/03/22 02:21:43
@@ -1854,7 +1854,7 @@ static const struct dis386 dis386_twobyt
{ "psrlw", MX, EM, XX },
{ "psrld", MX, EM, XX },
{ "psrlq", MX, EM, XX },
- { "(bad)", XX, XX, XX },
+ { "paddq", MX, EM, XX },
{ "pmullw", MX, EM, XX },
{ PREGRP21 },
{ "pmovmskb", Ev, MX, XX },
@@ -1898,7 +1898,7 @@ static const struct dis386 dis386_twobyt
{ "psubb", MX, EM, XX },
{ "psubw", MX, EM, XX },
{ "psubd", MX, EM, XX },
- { "(bad)", XX, XX, XX },
+ { "psubq", MX, EM, XX },
{ "paddb", MX, EM, XX },
{ "paddw", MX, EM, XX },
{ "paddd", MX, EM, XX },
@@ -2146,7 +2146,7 @@ static const struct dis386 dis386_twobyt
{ "psrlw", MX, EM, XX },
{ "psrld", MX, EM, XX },
{ "psrlq", MX, EM, XX },
- { "(bad)", XX, XX, XX },
+ { "paddq", MX, EM, XX },
{ "pmullw", MX, EM, XX },
{ PREGRP21 },
{ "pmovmskb", Ev, MX, XX },
@@ -2190,7 +2190,7 @@ static const struct dis386 dis386_twobyt
{ "psubb", MX, EM, XX },
{ "psubw", MX, EM, XX },
{ "psubd", MX, EM, XX },
- { "(bad)", XX, XX, XX },
+ { "psubq", MX, EM, XX },
{ "paddb", MX, EM, XX },
{ "paddw", MX, EM, XX },
{ "paddd", MX, EM, XX },
@@ -2236,9 +2236,9 @@ static const unsigned char twobyte_has_m
/* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
/* b0 */ 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1, /* bf */
/* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
- /* d0 */ 0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1, /* df */
+ /* d0 */ 0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1, /* df */
/* e0 */ 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1, /* ef */
- /* f0 */ 0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0 /* ff */
+ /* f0 */ 0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0 /* ff */
/* ------------------------------- */
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
};