This is the mail archive of the binutils@sources.redhat.com 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]

Re: paddq and psubq??? Where are they?


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        */
 };


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