diff options
Diffstat (limited to 'opcodes')
-rw-r--r-- | opcodes/ChangeLog | 12 | ||||
-rw-r--r-- | opcodes/i386-dis.c | 31 |
2 files changed, 30 insertions, 13 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index f382a64..875ee2c 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,15 @@ +2010-01-28 H.J. Lu <hongjiu.lu@intel.com> + + * i386-dis.c (EXVexWdqScalar): New. + (vex_scalar_w_dq_mode): Likewise. + (prefix_table): Update entries for PREFIX_VEX_3899, + PREFIX_VEX_389B, PREFIX_VEX_389D, PREFIX_VEX_389F, + PREFIX_VEX_38A9, PREFIX_VEX_38AB, PREFIX_VEX_38AD, + PREFIX_VEX_38AF, PREFIX_VEX_38B9, PREFIX_VEX_38BB, + PREFIX_VEX_38BD and PREFIX_VEX_38BF. + (intel_operand_size): Handle vex_scalar_w_dq_mode. + (OP_EX): Likewise. + 2010-01-27 H.J. Lu <hongjiu.lu@intel.com> * i386-dis.c (XMScalar): New. diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index e02912d..a3e216e 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -354,6 +354,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define EXxmmq { OP_EX, xmmq_mode } #define EXymmq { OP_EX, ymmq_mode } #define EXVexWdq { OP_EX, vex_w_dq_mode } +#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode } #define MS { OP_MS, v_mode } #define XS { OP_XS, v_mode } #define EMCq { OP_EMC, q_mode } @@ -481,6 +482,8 @@ enum q_scalar_swap_mode, /* like vex_mode, ignore vector length. */ vex_scalar_mode, + /* like vex_w_dq_mode, ignore vector length. */ + vex_scalar_w_dq_mode, es_reg, cs_reg, @@ -4695,7 +4698,7 @@ static const struct dis386 prefix_table[][4] = { { { Bad_Opcode }, { Bad_Opcode }, - { "vfmadd132s%XW", { XM, Vex, EXVexWdq } }, + { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, /* PREFIX_VEX_389A */ @@ -4709,7 +4712,7 @@ static const struct dis386 prefix_table[][4] = { { { Bad_Opcode }, { Bad_Opcode }, - { "vfmsub132s%XW", { XM, Vex, EXVexWdq } }, + { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, /* PREFIX_VEX_389C */ @@ -4723,7 +4726,7 @@ static const struct dis386 prefix_table[][4] = { { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmadd132s%XW", { XM, Vex, EXVexWdq } }, + { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, /* PREFIX_VEX_389E */ @@ -4737,7 +4740,7 @@ static const struct dis386 prefix_table[][4] = { { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmsub132s%XW", { XM, Vex, EXVexWdq } }, + { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, /* PREFIX_VEX_38A6 */ @@ -4766,7 +4769,7 @@ static const struct dis386 prefix_table[][4] = { { { Bad_Opcode }, { Bad_Opcode }, - { "vfmadd213s%XW", { XM, Vex, EXVexWdq } }, + { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, /* PREFIX_VEX_38AA */ @@ -4780,7 +4783,7 @@ static const struct dis386 prefix_table[][4] = { { { Bad_Opcode }, { Bad_Opcode }, - { "vfmsub213s%XW", { XM, Vex, EXVexWdq } }, + { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, /* PREFIX_VEX_38AC */ @@ -4794,7 +4797,7 @@ static const struct dis386 prefix_table[][4] = { { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmadd213s%XW", { XM, Vex, EXVexWdq } }, + { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, /* PREFIX_VEX_38AE */ @@ -4808,7 +4811,7 @@ static const struct dis386 prefix_table[][4] = { { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmsub213s%XW", { XM, Vex, EXVexWdq } }, + { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, /* PREFIX_VEX_38B6 */ @@ -4836,7 +4839,7 @@ static const struct dis386 prefix_table[][4] = { { { Bad_Opcode }, { Bad_Opcode }, - { "vfmadd231s%XW", { XM, Vex, EXVexWdq } }, + { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, /* PREFIX_VEX_38BA */ @@ -4850,7 +4853,7 @@ static const struct dis386 prefix_table[][4] = { { { Bad_Opcode }, { Bad_Opcode }, - { "vfmsub231s%XW", { XM, Vex, EXVexWdq } }, + { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, /* PREFIX_VEX_38BC */ @@ -4864,7 +4867,7 @@ static const struct dis386 prefix_table[][4] = { { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmadd231s%XW", { XM, Vex, EXVexWdq } }, + { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, /* PREFIX_VEX_38BE */ @@ -4878,7 +4881,7 @@ static const struct dis386 prefix_table[][4] = { { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmsub231s%XW", { XM, Vex, EXVexWdq } }, + { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, /* PREFIX_VEX_38DB */ @@ -12776,6 +12779,7 @@ intel_operand_size (int bytemode, int sizeflag) oappend ("OWORD PTR "); break; case vex_w_dq_mode: + case vex_scalar_w_dq_mode: if (!need_vex) abort (); @@ -13969,7 +13973,8 @@ OP_EX (int bytemode, int sizeflag) && bytemode != d_scalar_mode && bytemode != d_scalar_swap_mode && bytemode != q_scalar_mode - && bytemode != q_scalar_swap_mode) + && bytemode != q_scalar_swap_mode + && bytemode != vex_scalar_w_dq_mode) { switch (vex.length) { |