Small tweaks to sse2 instructions.
authorAlan Modra <amodra@gmail.com>
Sat, 24 Mar 2001 06:29:16 +0000 (06:29 +0000)
committerAlan Modra <amodra@gmail.com>
Sat, 24 Mar 2001 06:29:16 +0000 (06:29 +0000)
gas/testsuite/ChangeLog
gas/testsuite/gas/i386/ssemmx2.d
gas/testsuite/gas/i386/ssemmx2.s
include/opcode/ChangeLog
include/opcode/i386.h
opcodes/ChangeLog
opcodes/i386-dis.c

index 3827347dbc5cb7d5dd55152dd8ddf4b9dcb0b893..ca58732ea3f249cc57dcf398ce7a2517003cea3e 100644 (file)
@@ -1,3 +1,8 @@
+2001-03-24  Alan Modra  <alan@linuxcare.com.au>
+
+       * gas/i386/ssemmx2.s: Change movntq to movntdq.
+       * gas/i386/ssemmx2.d: Matching change.
+
 2001-03-23  Hans-Peter Nilsson  <hp@axis.com>
 
        * gas/cris/pic-err-1.s, gas/cris/rd-pic-1.s, gas/cris/rd-pic-1.d:
index 48918165fd3fd4ff9709a69fd81eda9298dcec08..140b3c238570a5435f8afcbf0fa106a12268bc18 100644 (file)
@@ -33,7 +33,7 @@ Disassembly of section .text:
 [      ]+65:   f3 0f 70 75 00 04[      ]+pshufhw \$0x4,0x0\(%ebp\),%xmm6
 [      ]+6b:   f2 0f 70 da 01[         ]+pshuflw \$0x1,%xmm2,%xmm3
 [      ]+70:   f2 0f 70 75 00 04[      ]+pshuflw \$0x4,0x0\(%ebp\),%xmm6
-[      ]+76:   66 0f e7 10[    ]+movntq %xmm2,\(%eax\)
+[      ]+76:   66 0f e7 10[    ]+movntdq %xmm2,\(%eax\)
 [      ]+7a:   66 0f 60 90 90 90 90 90         punpcklbw 0x90909090\(%eax\),%xmm2
 [      ]+82:   66 0f 61 90 90 90 90 90         punpcklwd 0x90909090\(%eax\),%xmm2
 [      ]+8a:   66 0f 62 90 90 90 90 90         punpckldq 0x90909090\(%eax\),%xmm2
index bd3d5ea451848b9f40640396184db4bfdc280a52..3e3c79fa810a5dd00e31f499e1ad0056cb658e18 100644 (file)
@@ -26,7 +26,7 @@ foo:
        pshufhw         $0x4,0x0(%ebp),%xmm6
        pshuflw         $0x1,%xmm2,%xmm3
        pshuflw         $0x4,0x0(%ebp),%xmm6
-       movnt         %xmm2,(%eax)
+       movntdq         %xmm2,(%eax)
        punpcklbw       0x90909090(%eax),%xmm2
        punpcklwd       0x90909090(%eax),%xmm2
        punpckldq       0x90909090(%eax),%xmm2
index 7a949af1bca444ba3238346d84056fef9b425b3e..a82b6dfcec865b7b3e18a05a6c9dd422dd84508d 100644 (file)
@@ -1,3 +1,8 @@
+2001-03-24  Alan Modra  <alan@linuxcare.com.au>
+
+       * i386.h (i386_optab): Correct entry for "movntdq".  Add "punpcklqdq".
+       Add InvMem to first operand of "maskmovdqu".
+
 2001-03-22  Hans-Peter Nilsson  <hp@axis.com>
 
        * cris.h (ADD_PC_INCR_OPCODE): New macro.
index 44d92aeff8750f715038dcacb966a089b858762d..9deffcc8a7c3d8b1a804996118adf0d67f098246 100644 (file)
@@ -1140,7 +1140,7 @@ static const template i386_optab[] = {
 {"movmskps",  2, 0x0f50,    X, CpuSSE, FP|Modrm,       { RegXMM|InvMem, Reg32, 0 } },
 {"movntps",   2, 0x0f2b,    X, CpuSSE, FP|Modrm,       { RegXMM, LLongMem, 0 } },
 {"movntq",    2, 0x0fe7,    X, CpuSSE, FP|Modrm,       { RegMMX, LLongMem, 0 } },
-{"movntq",    2, 0x660fe7,  X, CpuSSE2,FP|Modrm,       { RegXMM, LLongMem, 0 } },
+{"movntdq",   2, 0x660fe7,  X, CpuSSE2,FP|Modrm,       { RegXMM, LLongMem, 0 } },
 {"movss",     2, 0xf30f10,  X, CpuSSE, FP|Modrm,       { RegXMM|WordMem, RegXMM, 0 } },
 {"movss",     2, 0xf30f11,  X, CpuSSE, FP|Modrm,       { RegXMM, RegXMM|WordMem, 0 } },
 {"movups",    2, 0x0f10,    X, CpuSSE, FP|Modrm,       { RegXMM|LLongMem, RegXMM, 0 } },
@@ -1262,7 +1262,7 @@ static const template i386_optab[] = {
 {"cvttsd2si", 2, 0xf20f2c,  X, CpuSSE2, lq_Suf|IgnoreSize|Modrm,{ RegXMM|WordMem, Reg32|Reg64, 0 } },
 {"cvttpd2dq", 2, 0x660fe6,  X, CpuSSE2, FP|Modrm,      { RegXMM|LLongMem, RegXMM, 0 } },
 {"cvttps2dq", 2, 0xf30f5b,  X, CpuSSE2, FP|Modrm,      { RegXMM|LLongMem, RegXMM, 0 } },
-{"maskmovdqu",2, 0x660ff7,  X, CpuSSE2, FP|Modrm,      { RegXMM, RegXMM, 0 } },
+{"maskmovdqu",2, 0x660ff7,  X, CpuSSE2, FP|Modrm,      { RegXMM|InvMem, RegXMM, 0 } },
 {"movdqa",    2, 0x660f6f,  X, CpuSSE2, FP|Modrm,      { RegXMM|LLongMem, RegXMM, 0 } },
 {"movdqa",    2, 0x660f7f,  X, CpuSSE2, FP|Modrm,      { RegXMM, RegXMM|LLongMem, 0 } },
 {"movdqu",    2, 0xf30f6f,  X, CpuSSE2, FP|Modrm,      { RegXMM|LLongMem, RegXMM, 0 } },
@@ -1277,6 +1277,7 @@ static const template i386_optab[] = {
 {"pslldq",    2, 0x660f73,  7, CpuSSE2, FP|Modrm,      { Imm8, RegXMM, 0 } },
 {"psrldq",    2, 0x660f73,  3, CpuSSE2, FP|Modrm,      { Imm8, RegXMM, 0 } },
 {"punpckhqdq",2, 0x660f6d,  X, CpuSSE2, FP|Modrm,      { RegXMM|LLongMem, RegXMM, 0 } },
+{"punpcklqdq",2, 0x660f6c,  X, CpuSSE2, FP|Modrm,      { RegXMM|LLongMem, RegXMM, 0 } },
 
 /* AMD 3DNow! instructions.  */
 
index 57af53c53ece4d1e17f307b5046b3096779c95bf..fc06372afaf65bab78f185bb94bf5d22f99cb4de 100644 (file)
@@ -1,3 +1,16 @@
+2001-03-24  Alan Modra  <alan@linuxcare.com.au>
+
+       * i386-dis.c (PREGRP25): Define.
+       (dis386_twobyte_att): Use here in place of "movntq" entry.
+       (dis386_twobyte_intel): Likewise.
+       (prefix_user_table): Add PREGRP25 entry for "movntq" and "movntdq".
+       (PREGRP26): Define.
+       (dis386_twobyte_att): Use here.
+       (dis386_twobyte_intel): Likewise.
+       (prefix_user_table): Add PREGRP26 entry for "punpcklqdq".
+       (prefix_user_table <maskmovdqu>): XM operand, not MX.
+       (prefix_user_table): Cosmetic changes to "bad" entries.
+
 2001-03-23  Nick Clifton  <nickc@redhat.com>
 
        * mips-opc.c: Remove extraneous whitespace.
index 399d61cb4df7f71df09f84cc86ca2ced64d9a073..61ec71e936cefc31d6470cd2b8bfa4e7f228ed7a 100644 (file)
@@ -409,6 +409,8 @@ static void BadOp PARAMS ((void));
 #define PREGRP22 NULL, NULL, 22, NULL, USE_PREFIX_USER_TABLE, NULL, 0
 #define PREGRP23 NULL, NULL, 23, NULL, USE_PREFIX_USER_TABLE, NULL, 0
 #define PREGRP24 NULL, NULL, 24, NULL, USE_PREFIX_USER_TABLE, NULL, 0
+#define PREGRP25 NULL, NULL, 25, NULL, USE_PREFIX_USER_TABLE, NULL, 0
+#define PREGRP26 NULL, NULL, 26, NULL, USE_PREFIX_USER_TABLE, NULL, 0
 
 #define FLOATCODE 50
 #define FLOAT NULL, NULL, FLOATCODE, NULL, 0, NULL, 0
@@ -1737,7 +1739,7 @@ static const struct dis386 dis386_twobyte_att[] = {
   { "punpckhwd", MX, EM, XX },
   { "punpckhdq", MX, EM, XX },
   { "packssdw", MX, EM, XX },
-  { "(bad)", XX, XX, XX },
+  { PREGRP26 },
   { PREGRP24 },
   { "movd", MX, Ed, XX },
   { PREGRP19 },
@@ -1875,7 +1877,7 @@ static const struct dis386 dis386_twobyte_att[] = {
   { "pmulhuw", MX, EM, XX },
   { "pmulhw", MX, EM, XX },
   { PREGRP15 },
-  { "movntq", Ev, MX, XX },
+  { PREGRP25 },
   /* e8 */
   { "psubsb", MX, EM, XX },
   { "psubsw", MX, EM, XX },
@@ -2029,7 +2031,7 @@ static const struct dis386 dis386_twobyte_intel[] = {
   { "punpckhwd", MX, EM, XX },
   { "punpckhdq", MX, EM, XX },
   { "packssdw", MX, EM, XX },
-  { "(bad)", XX, XX, XX },
+  { PREGRP26 },
   { PREGRP24 },
   { "movd", MX, Ed, XX },
   { PREGRP19 },
@@ -2167,7 +2169,7 @@ static const struct dis386 dis386_twobyte_intel[] = {
   { "pmulhuw", MX, EM, XX },
   { "pmulhw", MX, EM, XX },
   { PREGRP15 },
-  { "movntq", Ev, MX, XX },
+  { PREGRP25 },
   /* e8 */
   { "psubsb", MX, EM, XX },
   { "psubsw", MX, EM, XX },
@@ -2693,7 +2695,7 @@ static const struct dis386 prefix_user_table[][4] = {
   {
     { "maskmovq", MX, EM, XX },
     { "(bad)", XM, EX, XX },
-    { "maskmovdqu", MX, EX, XX },
+    { "maskmovdqu", XM, EX, XX },
     { "(bad)", XM, EX, XX },
   },
   /* PREGRP19 */
@@ -2729,14 +2731,28 @@ static const struct dis386 prefix_user_table[][4] = {
     { "movd", Ed, MX, XX },
     { "movq", Ed, XM, XX },
     { "movd", Ed, XM, XX },
-    { "(bad)", EX, XM, XX },
+    { "(bad)", Ed, XM, XX },
   },
   /* PREGRP24 */
   {
-    { "(bad)", EX, XM, XX },
-    { "(bad)", EX, XM, XX },
+    { "(bad)", MX, EX, XX },
+    { "(bad)", XM, EX, XX },
     { "punpckhqdq", XM, EX, XX },
-    { "(bad)", EX, XM, XX },
+    { "(bad)", XM, EX, XX },
+  },
+  /* PREGRP25 */
+  {
+  { "movntq", Ev, MX, XX },
+  { "(bad)", Ev, XM, XX },
+  { "movntdq", Ev, XM, XX },
+  { "(bad)", Ev, XM, XX },
+  },
+  /* PREGRP26 */
+  {
+    { "(bad)", MX, EX, XX },
+    { "(bad)", XM, EX, XX },
+    { "punpcklqdq", XM, EX, XX },
+    { "(bad)", XM, EX, XX },
   },
 };