Before this patch, instructions MULX32rm and MULX64rm were missing a ReadAdvance for the implicit read of register EDX/RDX.
This patch fixes the issue, and it also adds a ReadAdvance for the implicit read of EFLAGS in ADCX/ADOX.
This patch also introduces a new SchedWrite for the MULX variants. By using those writes, we can get rid of most InstRW in the Zen models. The only exception is the Zen3 model, for which an InstRW is still required to override the RM variants of MULX.
Another minor advantage of using these new SchedWrites is that we can now correctly mark MULX as unsupported on models used by targets that don't feature BMI2.
While doing this minor refactoring, I noticed (and fixed) an inconsistency in the throughput numbers reported by zen1 models for MULX64. Specifically, the MULX64 variant didn't correctly declare resources, and it had an unrealistic throughput. That issue also affected the zen2 model (I suspect a copy-paste mistake; most definitions in zen2 seems copied straight from zen1 modulo a small rename of substring Zn to Zn2).
The new values now correctly match what is reported in the AMD SOG official document for family 17th.
its weird that the rm variant uses the Zn3Multiplier pipe for an extra cycle......