summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2001-03-24 07:06:07 +0000
committerAlan Modra <amodra@bigpond.net.au>2001-03-24 07:06:07 +0000
commit022fd77963708593acd355ba4af18b9b7f08c179 (patch)
treea31d524bc704f8eb6c56e8b3ab274a5c0e0e623b
parentd0b31b1a47da218a2bd449d3aeb330684cf592c6 (diff)
downloadgdb-022fd77963708593acd355ba4af18b9b7f08c179.tar.gz
Small tweaks to sse2 instructions.
-rw-r--r--include/opcode/ChangeLog5
-rw-r--r--include/opcode/i386.h5
-rw-r--r--opcodes/ChangeLog13
-rw-r--r--opcodes/i386-dis.c34
4 files changed, 46 insertions, 11 deletions
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog
index e8311b6e083..6a5da3efe69 100644
--- a/include/opcode/ChangeLog
+++ b/include/opcode/ChangeLog
@@ -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 Alan Modra <alan@linuxcare.com.au>
* i386.h (i386_optab): Add paddq, psubq.
diff --git a/include/opcode/i386.h b/include/opcode/i386.h
index 44d92aeff87..9deffcc8a7c 100644
--- a/include/opcode/i386.h
+++ b/include/opcode/i386.h
@@ -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. */
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 8112f1e1734..f4ffd8a0e13 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -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-22 Alan Modra <alan@linuxcare.com.au>
* i386-dis.c (dis386_twobyte_att): Add entries for paddq, psubq.
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 399d61cb4df..61ec71e936c 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -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 },
},
};