+2014-09-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/cdr.d: New file.
+ * gas/i386/cdr.s: Likewise.
+ * gas/i386/x86-64-cdr.d: Likewise.
+
+ * gas/i386/i386.exp: Run cdr and x86-64-cdr.
+
2014-09-16 Ilya Tocar <ilya.tocar@intel.com>
* gas/i386/avx512dq-rcig.s: New.
--- /dev/null
+#objdump: -dw
+#name: i386 control/debug register with ignored MOD field
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <start>:
+[ ]*[a-f0-9]+: 0f 22 1f mov %edi,%cr3
+[ ]*[a-f0-9]+: 0f 20 1f mov %cr3,%edi
+[ ]*[a-f0-9]+: 0f 21 1f mov %db3,%edi
+[ ]*[a-f0-9]+: 0f 23 1f mov %edi,%db3
+#pass
--- /dev/null
+ .text
+start:
+ .byte 0x0f
+ .byte 0x22
+ .byte 0x1f
+ .byte 0x0f
+ .byte 0x20
+ .byte 0x1f
+ .byte 0x0f
+ .byte 0x21
+ .byte 0x1f
+ .byte 0x0f
+ .byte 0x23
+ .byte 0x1f
run_dump_test "padlock"
run_dump_test "crx"
run_list_test "cr-err" ""
+ run_dump_test "cdr"
run_dump_test "svme"
run_dump_test "amdfam10"
run_dump_test "ssse3"
run_dump_test "x86-64-crx-suffix"
run_dump_test "x86-64-drx"
run_dump_test "x86-64-drx-suffix"
+ run_dump_test "x86-64-cdr"
run_dump_test "x86-64-ssse3"
run_dump_test "x86-64-rep"
run_dump_test "x86-64-rep-suffix"
--- /dev/null
+#objdump: -dw
+#name: x86-64 control/debug register with ignored MOD field
+#source: cdr.s
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <start>:
+[ ]*[a-f0-9]+: 0f 22 1f mov %rdi,%cr3
+[ ]*[a-f0-9]+: 0f 20 1f mov %cr3,%rdi
+[ ]*[a-f0-9]+: 0f 21 1f mov %db3,%rdi
+[ ]*[a-f0-9]+: 0f 23 1f mov %rdi,%db3
+#pass
+2014-09-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (MOD_0F20): Removed.
+ (MOD_0F21): Likewise.
+ (MOD_0F22): Likewise.
+ (MOD_0F23): Likewise.
+ (dis386_twobyte): Replace MOD_0F20, MOD_0F21, MOD_0F22 and
+ MOD_0F23 with "movZ".
+ (mod_table): Remove MOD_0F20, MOD_0F21, MOD_0F22 and MOD_0F23.
+ (OP_R): Check mod/rm byte and call OP_E_register.
+
2014-09-16 Kuan-Lin Chen <kuanlinchentw@gmail.com>
* nds32-asm.c (nds32_opcodes, operand_fields, keyword_im5_i,
MOD_0F1A_PREFIX_0,
MOD_0F1B_PREFIX_0,
MOD_0F1B_PREFIX_1,
- MOD_0F20,
- MOD_0F21,
- MOD_0F22,
- MOD_0F23,
MOD_0F24,
MOD_0F26,
MOD_0F2B_PREFIX_0,
{ "nopQ", { Ev } },
{ "nopQ", { Ev } },
/* 20 */
- { MOD_TABLE (MOD_0F20) },
- { MOD_TABLE (MOD_0F21) },
- { MOD_TABLE (MOD_0F22) },
- { MOD_TABLE (MOD_0F23) },
+ { "movZ", { Rm, Cm } },
+ { "movZ", { Rm, Dm } },
+ { "movZ", { Cm, Rm } },
+ { "movZ", { Dm, Rm } },
{ MOD_TABLE (MOD_0F24) },
{ Bad_Opcode },
{ MOD_TABLE (MOD_0F26) },
{ "nopQ", { Ev } },
},
{
- /* MOD_0F20 */
- { Bad_Opcode },
- { "movZ", { Rm, Cm } },
- },
- {
- /* MOD_0F21 */
- { Bad_Opcode },
- { "movZ", { Rm, Dm } },
- },
- {
- /* MOD_0F22 */
- { Bad_Opcode },
- { "movZ", { Cm, Rm } },
- },
- {
- /* MOD_0F23 */
- { Bad_Opcode },
- { "movZ", { Dm, Rm } },
- },
- {
/* MOD_0F24 */
{ Bad_Opcode },
{ "movL", { Rd, Td } },
static void
OP_R (int bytemode, int sizeflag)
{
- if (modrm.mod == 3)
- OP_E (bytemode, sizeflag);
- else
- BadOp ();
+ /* Skip mod/rm byte. */
+ MODRM_CHECK;
+ codep++;
+ OP_E_register (bytemode, sizeflag);
}
static void