KVM: x86: Introduce EM_ASM_2CL

Replace the FASTOP2CL instructions.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Sean Christopherson <seanjc@google.com>
Link: https://lkml.kernel.org/r/20250714103440.251039692@infradead.org
This commit is contained in:
Peter Zijlstra 2025-04-26 12:34:42 +02:00
parent 975e51783c
commit 67e944aff6

View File

@ -344,6 +344,15 @@ static int em_##op(struct x86_emulate_ctxt *ctxt) \
ON64(case 8: __EM_ASM_2(op##q, rax, rdx); break;) \
EM_ASM_END
/* 2-operand, using "a" (dst) and CL (src2) */
#define EM_ASM_2CL(op) \
EM_ASM_START(op) \
case 1: __EM_ASM_2(op##b, al, cl); break; \
case 2: __EM_ASM_2(op##w, ax, cl); break; \
case 4: __EM_ASM_2(op##l, eax, cl); break; \
ON64(case 8: __EM_ASM_2(op##q, rax, cl); break;) \
EM_ASM_END
/*
* fastop functions have a special calling convention:
*
@ -1080,13 +1089,13 @@ EM_ASM_1(neg);
EM_ASM_1(inc);
EM_ASM_1(dec);
FASTOP2CL(rol);
FASTOP2CL(ror);
FASTOP2CL(rcl);
FASTOP2CL(rcr);
FASTOP2CL(shl);
FASTOP2CL(shr);
FASTOP2CL(sar);
EM_ASM_2CL(rol);
EM_ASM_2CL(ror);
EM_ASM_2CL(rcl);
EM_ASM_2CL(rcr);
EM_ASM_2CL(shl);
EM_ASM_2CL(shr);
EM_ASM_2CL(sar);
EM_ASM_2W(bsf);
EM_ASM_2W(bsr);
@ -4079,14 +4088,14 @@ static const struct opcode group1A[] = {
};
static const struct opcode group2[] = {
F(DstMem | ModRM, em_rol),
F(DstMem | ModRM, em_ror),
F(DstMem | ModRM, em_rcl),
F(DstMem | ModRM, em_rcr),
F(DstMem | ModRM, em_shl),
F(DstMem | ModRM, em_shr),
F(DstMem | ModRM, em_shl),
F(DstMem | ModRM, em_sar),
I(DstMem | ModRM, em_rol),
I(DstMem | ModRM, em_ror),
I(DstMem | ModRM, em_rcl),
I(DstMem | ModRM, em_rcr),
I(DstMem | ModRM, em_shl),
I(DstMem | ModRM, em_shr),
I(DstMem | ModRM, em_shl),
I(DstMem | ModRM, em_sar),
};
static const struct opcode group3[] = {