From 0f17484fd34e888c8c7bab63a75eb9bc3d7c19cb Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Sat, 24 Mar 2001 06:29:16 +0000 Subject: Small tweaks to sse2 instructions. --- gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/i386/ssemmx2.d | 2 +- gas/testsuite/gas/i386/ssemmx2.s | 2 +- include/opcode/ChangeLog | 5 +++++ include/opcode/i386.h | 5 +++-- opcodes/ChangeLog | 13 +++++++++++++ opcodes/i386-dis.c | 34 +++++++++++++++++++++++++--------- 7 files changed, 53 insertions(+), 13 deletions(-) diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 3827347..ca58732 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2001-03-24 Alan Modra + + * gas/i386/ssemmx2.s: Change movntq to movntdq. + * gas/i386/ssemmx2.d: Matching change. + 2001-03-23 Hans-Peter Nilsson * gas/cris/pic-err-1.s, gas/cris/rd-pic-1.s, gas/cris/rd-pic-1.d: diff --git a/gas/testsuite/gas/i386/ssemmx2.d b/gas/testsuite/gas/i386/ssemmx2.d index 4891816..140b3c2 100644 --- a/gas/testsuite/gas/i386/ssemmx2.d +++ b/gas/testsuite/gas/i386/ssemmx2.d @@ -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 diff --git a/gas/testsuite/gas/i386/ssemmx2.s b/gas/testsuite/gas/i386/ssemmx2.s index bd3d5ea..3e3c79f 100644 --- a/gas/testsuite/gas/i386/ssemmx2.s +++ b/gas/testsuite/gas/i386/ssemmx2.s @@ -26,7 +26,7 @@ foo: pshufhw $0x4,0x0(%ebp),%xmm6 pshuflw $0x1,%xmm2,%xmm3 pshuflw $0x4,0x0(%ebp),%xmm6 - movntq %xmm2,(%eax) + movntdq %xmm2,(%eax) punpcklbw 0x90909090(%eax),%xmm2 punpcklwd 0x90909090(%eax),%xmm2 punpckldq 0x90909090(%eax),%xmm2 diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog index 7a949af..a82b6df 100644 --- a/include/opcode/ChangeLog +++ b/include/opcode/ChangeLog @@ -1,3 +1,8 @@ +2001-03-24 Alan Modra + + * i386.h (i386_optab): Correct entry for "movntdq". Add "punpcklqdq". + Add InvMem to first operand of "maskmovdqu". + 2001-03-22 Hans-Peter Nilsson * cris.h (ADD_PC_INCR_OPCODE): New macro. diff --git a/include/opcode/i386.h b/include/opcode/i386.h index 44d92ae..9deffcc 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 57af53c..fc06372 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,16 @@ +2001-03-24 Alan Modra + + * 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 ): XM operand, not MX. + (prefix_user_table): Cosmetic changes to "bad" entries. + 2001-03-23 Nick Clifton * mips-opc.c: Remove extraneous whitespace. diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 399d61c..61ec71e 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 }, }, }; -- cgit v1.1