Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

KVM: x86: Introduce EM_ASM_1SRC2

Replace the FASTOP1SRC2*() instructions.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Sean Christopherson <seanjc@google.com>
Link: https://lkml.kernel.org/r/20250714103440.394654786@infradead.org

+26 -8
+26 -8
arch/x86/kvm/emulate.c
··· 317 317 ON64(case 8: __EM_ASM_1(op##q, rax); break;) \ 318 318 EM_ASM_END 319 319 320 + /* 1-operand, using "c" (src2) */ 321 + #define EM_ASM_1SRC2(op, name) \ 322 + EM_ASM_START(name) \ 323 + case 1: __EM_ASM_1(op##b, cl); break; \ 324 + case 2: __EM_ASM_1(op##w, cx); break; \ 325 + case 4: __EM_ASM_1(op##l, ecx); break; \ 326 + ON64(case 8: __EM_ASM_1(op##q, rcx); break;) \ 327 + EM_ASM_END 328 + 329 + /* 1-operand, using "c" (src2) with exception */ 330 + #define EM_ASM_1SRC2EX(op, name) \ 331 + EM_ASM_START(name) \ 332 + case 1: __EM_ASM_1_EX(op##b, cl); break; \ 333 + case 2: __EM_ASM_1_EX(op##w, cx); break; \ 334 + case 4: __EM_ASM_1_EX(op##l, ecx); break; \ 335 + ON64(case 8: __EM_ASM_1_EX(op##q, rcx); break;) \ 336 + EM_ASM_END 337 + 320 338 /* 2-operand, using "a" (dst), "d" (src) */ 321 339 #define EM_ASM_2(op) \ 322 340 EM_ASM_START(op) \ ··· 1092 1074 EM_ASM_2(test); 1093 1075 EM_ASM_2(xadd); 1094 1076 1095 - FASTOP1SRC2(mul, mul_ex); 1096 - FASTOP1SRC2(imul, imul_ex); 1097 - FASTOP1SRC2EX(div, div_ex); 1098 - FASTOP1SRC2EX(idiv, idiv_ex); 1077 + EM_ASM_1SRC2(mul, mul_ex); 1078 + EM_ASM_1SRC2(imul, imul_ex); 1079 + EM_ASM_1SRC2EX(div, div_ex); 1080 + EM_ASM_1SRC2EX(idiv, idiv_ex); 1099 1081 1100 1082 FASTOP3WCL(shld); 1101 1083 FASTOP3WCL(shrd); ··· 4121 4103 I(DstMem | SrcImm | NoWrite, em_test), 4122 4104 I(DstMem | SrcNone | Lock, em_not), 4123 4105 I(DstMem | SrcNone | Lock, em_neg), 4124 - F(DstXacc | Src2Mem, em_mul_ex), 4125 - F(DstXacc | Src2Mem, em_imul_ex), 4126 - F(DstXacc | Src2Mem, em_div_ex), 4127 - F(DstXacc | Src2Mem, em_idiv_ex), 4106 + I(DstXacc | Src2Mem, em_mul_ex), 4107 + I(DstXacc | Src2Mem, em_imul_ex), 4108 + I(DstXacc | Src2Mem, em_div_ex), 4109 + I(DstXacc | Src2Mem, em_idiv_ex), 4128 4110 }; 4129 4111 4130 4112 static const struct opcode group4[] = {