diff options
author | Ilya Tocar <ilya.tocar@intel.com> | 2014-07-18 14:59:54 +0400 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2014-07-22 10:23:40 -0700 |
commit | b28d1bda54728d10ae189a323c343b6d76f94b8e (patch) | |
tree | ef86cf68b866cdf2df5f404221c7cefb9d155e71 /opcodes/i386-dis.c | |
parent | 50d13ae760ccae7ba30244985397240dfb67a431 (diff) | |
download | gdb-b28d1bda54728d10ae189a323c343b6d76f94b8e.zip gdb-b28d1bda54728d10ae189a323c343b6d76f94b8e.tar.gz gdb-b28d1bda54728d10ae189a323c343b6d76f94b8e.tar.bz2 |
Add support for AVX512VL. Add AVX512VL versions of AVX512F instructions.
gas/
* config/tc-i386.c (cpu_arch): Add .avx512vl, CPU_AVX512VL_FLAGS.
(build_vex_prefix): Don't abort on VEX.W.
(check_VecOperands): Support BROADCAST_1TO4 and BROADCAST_1TO2.
(check_VecOperations): Ditto.
* doc/c-i386.texi: Document avx512vl/.avx512vl.
gas/testsuite/
* gas/i386/avx512f_vl-intel.d: New.
* gas/i386/avx512f_vl-opts-intel.d: New.
* gas/i386/avx512f_vl-opts.d: New.
* gas/i386/avx512f_vl-opts.s: New.
* gas/i386/avx512f_vl-wig.s: New.
* gas/i386/avx512f_vl-wig1-intel.d: New.
* gas/i386/avx512f_vl-wig1.d: New.
* gas/i386/avx512f_vl.d: New.
* gas/i386/avx512f_vl.s: New.
* gas/i386/i386.exp: Run new AVX-512 tests.
* gas/i386/x86-64-avx512f_vl-intel.d: New.
* gas/i386/x86-64-avx512f_vl-opts-intel.d: New.
* gas/i386/x86-64-avx512f_vl-opts.d: New.
* gas/i386/x86-64-avx512f_vl-opts.s: New.
* gas/i386/x86-64-avx512f_vl-wig.s: New.
* gas/i386/x86-64-avx512f_vl-wig1-intel.d: New.
* gas/i386/x86-64-avx512f_vl-wig1.d: New.
* gas/i386/x86-64-avx512f_vl.d: New.
* gas/i386/x86-64-avx512f_vl.s: New.
opcodes/
* i386-dis.c (intel_operand_size): Support 128/256 length in
vex_vsib_q_w_dq_mode.
(OP_E_memory): Add ymmq_mode handling, handle new broadcast.
* i386-gen.c (cpu_flag_init): Add CPU_AVX512VL_FLAGS.
(cpu_flags): Add CpuAVX512VL.
* i386-init.h: Regenerated.
* i386-opc.h (CpuAVX512VL): New.
(i386_cpu_flags): Add cpuavx512vl.
(BROADCAST_1TO4, BROADCAST_1TO2): Define.
* i386-opc.tbl: Add AVX512VL instructions.
* i386-tbl.h: Regenerate.
Diffstat (limited to 'opcodes/i386-dis.c')
-rw-r--r-- | opcodes/i386-dis.c | 70 |
1 files changed, 63 insertions, 7 deletions
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 24406f3..e9d8cb1 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -14114,17 +14114,41 @@ intel_operand_size (int bytemode, int sizeflag) } else { - if (vex.length != 512) - abort (); - oappend ("ZMMWORD PTR "); + switch (vex.length) + { + case 128: + oappend ("XMMWORD PTR "); + break; + case 256: + oappend ("YMMWORD PTR "); + break; + case 512: + oappend ("ZMMWORD PTR "); + break; + default: + abort (); + } } break; case vex_vsib_q_w_d_mode: case vex_vsib_d_w_d_mode: - if (!need_vex || !vex.evex || vex.length != 512) + if (!need_vex || !vex.evex) abort (); - oappend ("YMMWORD PTR "); + switch (vex.length) + { + case 128: + oappend ("QWORD PTR "); + break; + case 256: + oappend ("XMMWORD PTR "); + break; + case 512: + oappend ("YMMWORD PTR "); + break; + default: + abort (); + } break; case mask_mode: @@ -14324,6 +14348,8 @@ OP_E_memory (int bytemode, int sizeflag) shift -= 2; else if (bytemode == xmmdw_mode) shift -= 3; + else if (bytemode == ymmq_mode && vex.length == 128) + shift -= 1; } else shift = 0; @@ -14621,9 +14647,39 @@ OP_E_memory (int bytemode, int sizeflag) || bytemode == evex_half_bcst_xmmq_mode)) { if (vex.w || bytemode == evex_half_bcst_xmmq_mode) - oappend ("{1to8}"); + { + switch (vex.length) + { + case 128: + oappend ("{1to2}"); + break; + case 256: + oappend ("{1to4}"); + break; + case 512: + oappend ("{1to8}"); + break; + default: + abort (); + } + } else - oappend ("{1to16}"); + { + switch (vex.length) + { + case 128: + oappend ("{1to4}"); + break; + case 256: + oappend ("{1to8}"); + break; + case 512: + oappend ("{1to16}"); + break; + default: + abort (); + } + } } } |