On 9/29/26 09:50, Richard Henderson wrote:
On 9/28/26 13:16, Paolo Bonzini wrote:
On Thu, Sep 24, 2026 at 5:17 PM Richard Henderson
<[email protected]> wrote:
On 9/23/26 10:30, Paolo Bonzini wrote:
+ case X86_EVEX_APX:
+ case X86_EVEX_APX_cmp:
+ case X86_EVEX_APX_pp2:
+ case X86_EVEX_APX_zu:
+ /* Only reached through EVEX map 4. */
+ assert(!(s->prefix & PREFIX_VEX));
+ if (s->vex_l) {
+ goto illegal;
+ }
+ if ((s->prefix & PREFIX_EVEX) && !validate_evex_apx(s,
decode)) {
+ return false;
+ }
They're only reached by map4, so surely
assert(s->prefix & PREFIX_EVEX);
is more appropriate, and the subsequent test for evex moot.
No, validate_vex() is also invoked for non-VEX/EVEX instructions.
Of course. But how do you get X86_EVEX_APX* from non EVEX paths?
From decode_group* where it is shared between normal and EVEX paths.
For example decode_group1 (ALU operation with a memory and an immediate
operand) and can set X86_EVEX_APX_cmp, and decode_group{3,4_5} can set
X86_EVEX_APX.
Paolo