x86: fold SSE2AVX and their base MMX/SSE templates
authorJan Beulich <jbeulich@suse.com>
Mon, 29 Mar 2021 10:05:25 +0000 (12:05 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 29 Mar 2021 10:05:25 +0000 (12:05 +0200)
commit5cdaf100252746303a09e904b37aafea4153d12c
treeec5fa99f97833721df5c3437c37ca7840f2ae655
parent73e45eb208585e672945078b28fc8381c6f6ba5f
x86: fold SSE2AVX and their base MMX/SSE templates

This way not only the overall (source) table size shrinks by quite a
bit and the risk of related templates going out of sync with one another
gets lowered, but also (dis)similarities between neighboring templates
become easier to spot.

Note that for certain SSE2AVX templates this results in benign attribute
changes:
- LDMXCSR and STMXCSR: NoAVX gets set,
- MOVMSKPS, PMOVMSKB, PEXTR{B,W} (register destination), and PINSR{B,W}
  (register source): IgnoreSize and NoRex64 get set,
- CVT{DQ,PS}2PD, CVTSD2SS, MOVMSKPD, MOVDDUP, PMOV{S,Z}X{BW,WD,DQ}, and
  ROUNDSD: NoRex64 gets set,
- CVTSS2SD, INSERTPS, PEXTRW (memory destination), PINSRW (memory
  source), and PMOV{S,Z}X{BD,WQ,BQ}: IgnoreSize gets set.
Similarly the "normal" (non-SSE2AVX)
- non-64-bit CVTS{I,S}2SD forms get NoRex64 set,
- CMP{EQ,ORD,NEQ,UNORD}{P,S}{S,D} forms get C set,
all again in a benign way.

The remaining differences in the generated table are due to re-ordering
of entries in the course of being folded into templates.
opcodes/ChangeLog
opcodes/i386-gen.c
opcodes/i386-opc.tbl
opcodes/i386-tbl.h