Re: [PATCH RFC v1 12/20] KVM: x86: Support REX2-extended register index in the decoder
From: Chang S. Bae
Date: Thu Nov 13 2025 - 18:26:13 EST
On 11/11/2025 8:53 AM, Paolo Bonzini wrote:
Replying here for both patches 10 and 12, because I think you can merge them in one,
Done
I'd prefer to avoid bitfields.
You only need a single enum:
enum {
REX_B = 1,
REX_X = 2,
REX_R = 4,
REX_W = 8,
REX_M = 0x80,
};
for REX_W/REX_M you access them directly, while for RXB you go through a function:
static inline rex_get_rxb(u8 rex, u8 fld)
{
BUILD_BUG_ON(!__builtin_constant_p(fld));
BUILD_BUG_ON(fld != REX_B && fld != REX_X && fld != REX_R);
rex >>= ffs(fld) - 1; // bits 0+4
return (rex & 1) + (rex & 0x10 ? 8 : 0);
}
} else {
reg = (ctxt->b & 7) |
- (ctxt->rex.bits.b3 * BIT(3));
+ (ctxt->rex.bits.b3 * BIT(3)) |
+ (ctxt->rex.bits.b4 * BIT(4));
+ rex_get_rxb(ctxt->rex, REX_B);
and likewise everywhere else.
Neat! This looks much better. Thanks for the suggestion.