This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 4/4] x86: fold certain AVX and AVX2 templates


On Fri, Dec 15, 2017 at 2:35 AM, Jan Beulich <JBeulich@suse.com> wrote:
> Just like for instructions in GPRs, there's no need to have separate
> templates for otherwise identical insns acting on XMM or YMM registers
> (or memory of the same size).
>
> gas/
> 2017-12-15  Jan Beulich  <jbeulich@suse.com>
>
>         * config/tc-i386.c (regymm, regzmm): Delete.
>         (operand_type_register_match). Extend comment. Also handle some
>         memory operands here. Extend to cover .regsimd.
>         (build_vex_prefix): Derive vector_length from actual operand
>         size.
>         (process_operands, build_modrm_byte): Use .regsimd.
>
> opcodes/
> 2017-12-15  Jan Beulich  <jbeulich@suse.com>
>
>         * i386-gen.c (operand_type_init): Delete OPERAND_TYPE_REGYMM and
>         OPERAND_TYPE_REGZMM entries.
>         * i386-opc.h (enum of opcode modifiers): Extend comment.
>         i386-opc.tbl (vaddpd, vaddps, vaddsubpd, vaddsubps, vandnpd,
>         vandnps, vandpd, vandps, vblendpd, vblendps, vblendvpd,
>         vblendvps, vbroadcastss, vcmpeq_ospd, vcmpeq_osps, vcmpeqpd,
>         vcmpeqps, vcmpeq_uqpd, vcmpeq_uqps, vcmpeq_uspd, vcmpeq_usps,
>         vcmpfalse_ospd, vcmpfalse_osps, vcmpfalsepd, vcmpfalseps,
>         vcmpge_oqpd, vcmpge_oqps, vcmpgepd, vcmpgeps, vcmpgt_oqpd,
>         vcmpgt_oqps, vcmpgtpd, vcmpgtps, vcmple_oqpd, vcmple_oqps,
>         vcmplepd, vcmpleps, vcmplt_oqpd, vcmplt_oqps, vcmpltpd,
>         vcmpltps, vcmpneq_oqpd, vcmpneq_oqps, vcmpneq_ospd,
>         vcmpneq_osps, vcmpneqpd, vcmpneqps, vcmpneq_uspd, vcmpneq_usps,
>         vcmpngepd, vcmpngeps, vcmpnge_uqpd, vcmpnge_uqps, vcmpngtpd,
>         vcmpngtps, vcmpngt_uqpd, vcmpngt_uqps, vcmpnlepd, vcmpnleps,
>         vcmpnle_uqpd, vcmpnle_uqps, vcmpnltpd, vcmpnltps, vcmpnlt_uqpd,
>         vcmpnlt_uqps, vcmpordpd, vcmpordps, vcmpord_spd, vcmpord_sps,
>         vcmppd, vcmpps, vcmptruepd, vcmptrueps, vcmptrue_uspd,
>         vcmptrue_usps, vcmpunordpd, vcmpunordps, vcmpunord_spd,
>         vcmpunord_sps, vcvtdq2ps, vcvtpd2dq, vcvtpd2ps, vcvtps2dq,
>         vcvttpd2dq, vcvttps2dq, vdivpd, vdivps, vdpps, vhaddpd, vhaddps,
>         vhsubpd, vhsubps, vlddqu, vmaskmovpd, vmaskmovps, vmaxpd,
>         vmaxps, vminpd, vminps, vmovapd, vmovaps, vmovdqa, vmovdqu,
>         vmovmskpd, vmovmskps, vmovntdq, vmovntpd, vmovntps, vmovshdup,
>         vmovsldup, vmovupd, vmovups, vmulpd, vmulps, vorpd, vorps,
>         vpermilpd, vpermilps, vptest, vrcpps, vroundpd, vroundps,
>         vrsqrtps, vshufpd, vshufps, vsqrtpd, vsqrtps, vsubpd, vsubps,
>         vtestpd, vtestps, vunpckhpd, vunpckhps, vunpcklpd, vunpcklps,
>         vxorpd, vxorps, vpblendd, vpbroadcastb, vpbroadcastd,
>         vpbroadcastw, vpbroadcastq, vpmaskmovd, vpmaskmovq, vpsllvd,
>         vpsllvq, vpsravd, vpsravq, vpsrlvd, vpsrlvq): Fold 128- and
>         256-bit forms. Use CheckRegSize instead of IgnoreSize where
>         appropriate. Drop Xmmword and Ymmword from the results where
>         possible.
>         * i386-tbl.h: Re-generate.
> ---
> For some yet to be understood reason folding the memory forms of
> vcvtpd2ps doesn't work (some Intel mode ymmword ptr forms produce
> 128-bit insns).

Integer extension instructions also take 2 register operands of different
sizes.  How are they handled?

> Similarly I didn't figure out yet the reason for an anomaly when the
> "unspecified" checks in operand_type_register_match() are missing: In
> that case I've observed errors on vaddsubp{s,d}, but not on e.g.
> vaddp{s,d} with identical operands.

Please open a bug with a testcase.

-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]