This is the first half of Paul's series from last April, reorganized so that there is no need for YMM_ONLY and SHIFT == 2 does not appear yet. This means that it is independent of Paul's implementation of AVX decoding.
This generally uses loops that apply the same code for all of MMX/SSE/AVX, and in fact this series removes basically all uses of XMM_ONLY in the code. In some cases AVX needs special-casing for the two 128-bit lanes; this is done with a new macro LANE_WIDTH that is currently the same as the register width, but remains 16 for AVX registers. The full work, with the AVX parts rebased on top of these, is at branch i386-avx of https://gitlab.com/bonzini/qemu. The branch passes the tests that Paul had posted, while this reduced part passes the reduced SSE version. Paolo Supersedes: <20220826231204.201395-1-pbonz...@redhat.com> Based-on: <20220825164827.392942-1-pbonz...@redhat.com> v2->v3: convert remaining lane-based operations (hadd/hsub, psrldq) unify MMX and SSE hadd/hsub move code generation after illegal_op checks remove C++ comments v1->v2: get rid of XMM_ONLY do not special case PMULHRW (yet) remove dead macro for blend do not copy table entries on the stack remove AVXisms from sse_op_table rework extract more code from the AVX patches Paolo Bonzini (6): i386: do not use MOVL to move data between SSE registers i386: formatting fixes i386: check SSE table flags instead of hardcoding opcodes i386: isolate MMX code more i386: Add size suffix to vector FP helpers i386: do not cast gen_helper_* function pointers Paul Brook (17): i386: Add ZMM_OFFSET macro i386: Rework sse_op_table1 i386: Rework sse_op_table6/7 i386: Move 3DNOW decoder i386: Add CHECK_NO_VEX i386: Rewrite vector shift helper i386: Rewrite simple integer vector helpers i386: Misc integer AVX helper prep i386: Destructive vector helpers for AVX i386: Floating point arithmetic helper AVX prep i386: reimplement AVX comparison helpers i386: Dot product AVX helper prep i386: Destructive FP helpers for AVX i386: Misc AVX helper prep i386: Rewrite blendv helpers i386: AVX pclmulqdq prep i386: AVX+AES helpers prep target/i386/ops_sse.h | 1781 +++++++++++++++++----------------- target/i386/ops_sse_header.h | 68 +- target/i386/tcg/translate.c | 831 +++++++++------- 3 files changed, 1391 insertions(+), 1289 deletions(-) -- 2.37.1