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_2W

Replace the FASTOP2W instructions.

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

+28 -19
+28 -19
arch/x86/kvm/emulate.c
··· 335 335 ON64(case 8: __EM_ASM_2(op##q, rdx, rax); break;) \ 336 336 EM_ASM_END 337 337 338 + /* 2-operand, word only (no byte op) */ 339 + #define EM_ASM_2W(op) \ 340 + EM_ASM_START(op) \ 341 + case 1: break; \ 342 + case 2: __EM_ASM_2(op##w, ax, dx); break; \ 343 + case 4: __EM_ASM_2(op##l, eax, edx); break; \ 344 + ON64(case 8: __EM_ASM_2(op##q, rax, rdx); break;) \ 345 + EM_ASM_END 346 + 338 347 /* 339 348 * fastop functions have a special calling convention: 340 349 * ··· 1073 1064 FASTOP3WCL(shld); 1074 1065 FASTOP3WCL(shrd); 1075 1066 1076 - FASTOP2W(imul); 1067 + EM_ASM_2W(imul); 1077 1068 1078 1069 EM_ASM_1(not); 1079 1070 EM_ASM_1(neg); ··· 1088 1079 FASTOP2CL(shr); 1089 1080 FASTOP2CL(sar); 1090 1081 1091 - FASTOP2W(bsf); 1092 - FASTOP2W(bsr); 1093 - FASTOP2W(bt); 1094 - FASTOP2W(bts); 1095 - FASTOP2W(btr); 1096 - FASTOP2W(btc); 1082 + EM_ASM_2W(bsf); 1083 + EM_ASM_2W(bsr); 1084 + EM_ASM_2W(bt); 1085 + EM_ASM_2W(bts); 1086 + EM_ASM_2W(btr); 1087 + EM_ASM_2W(btc); 1097 1088 1098 1089 EM_ASM_2R(cmp, cmp_r); 1099 1090 ··· 1102 1093 /* If src is zero, do not writeback, but update flags */ 1103 1094 if (ctxt->src.val == 0) 1104 1095 ctxt->dst.type = OP_NONE; 1105 - return fastop(ctxt, em_bsf); 1096 + return em_bsf(ctxt); 1106 1097 } 1107 1098 1108 1099 static int em_bsr_c(struct x86_emulate_ctxt *ctxt) ··· 1110 1101 /* If src is zero, do not writeback, but update flags */ 1111 1102 if (ctxt->src.val == 0) 1112 1103 ctxt->dst.type = OP_NONE; 1113 - return fastop(ctxt, em_bsr); 1104 + return em_bsr(ctxt); 1114 1105 } 1115 1106 1116 1107 static __always_inline u8 test_cc(unsigned int condition, unsigned long flags) ··· 3230 3221 static int em_imul_3op(struct x86_emulate_ctxt *ctxt) 3231 3222 { 3232 3223 ctxt->dst.val = ctxt->src2.val; 3233 - return fastop(ctxt, em_imul); 3224 + return em_imul(ctxt); 3234 3225 } 3235 3226 3236 3227 static int em_cwd(struct x86_emulate_ctxt *ctxt) ··· 4144 4135 4145 4136 static const struct opcode group8[] = { 4146 4137 N, N, N, N, 4147 - F(DstMem | SrcImmByte | NoWrite, em_bt), 4148 - F(DstMem | SrcImmByte | Lock | PageTable, em_bts), 4149 - F(DstMem | SrcImmByte | Lock, em_btr), 4150 - F(DstMem | SrcImmByte | Lock | PageTable, em_btc), 4138 + I(DstMem | SrcImmByte | NoWrite, em_bt), 4139 + I(DstMem | SrcImmByte | Lock | PageTable, em_bts), 4140 + I(DstMem | SrcImmByte | Lock, em_btr), 4141 + I(DstMem | SrcImmByte | Lock | PageTable, em_btc), 4151 4142 }; 4152 4143 4153 4144 /* ··· 4468 4459 /* 0xA0 - 0xA7 */ 4469 4460 I(Stack | Src2FS, em_push_sreg), I(Stack | Src2FS, em_pop_sreg), 4470 4461 II(ImplicitOps, em_cpuid, cpuid), 4471 - F(DstMem | SrcReg | ModRM | BitOp | NoWrite, em_bt), 4462 + I(DstMem | SrcReg | ModRM | BitOp | NoWrite, em_bt), 4472 4463 F(DstMem | SrcReg | Src2ImmByte | ModRM, em_shld), 4473 4464 F(DstMem | SrcReg | Src2CL | ModRM, em_shld), N, N, 4474 4465 /* 0xA8 - 0xAF */ 4475 4466 I(Stack | Src2GS, em_push_sreg), I(Stack | Src2GS, em_pop_sreg), 4476 4467 II(EmulateOnUD | ImplicitOps, em_rsm, rsm), 4477 - F(DstMem | SrcReg | ModRM | BitOp | Lock | PageTable, em_bts), 4468 + I(DstMem | SrcReg | ModRM | BitOp | Lock | PageTable, em_bts), 4478 4469 F(DstMem | SrcReg | Src2ImmByte | ModRM, em_shrd), 4479 4470 F(DstMem | SrcReg | Src2CL | ModRM, em_shrd), 4480 - GD(0, &group15), F(DstReg | SrcMem | ModRM, em_imul), 4471 + GD(0, &group15), I(DstReg | SrcMem | ModRM, em_imul), 4481 4472 /* 0xB0 - 0xB7 */ 4482 4473 I2bv(DstMem | SrcReg | ModRM | Lock | PageTable | SrcWrite, em_cmpxchg), 4483 4474 I(DstReg | SrcMemFAddr | ModRM | Src2SS, em_lseg), 4484 - F(DstMem | SrcReg | ModRM | BitOp | Lock, em_btr), 4475 + I(DstMem | SrcReg | ModRM | BitOp | Lock, em_btr), 4485 4476 I(DstReg | SrcMemFAddr | ModRM | Src2FS, em_lseg), 4486 4477 I(DstReg | SrcMemFAddr | ModRM | Src2GS, em_lseg), 4487 4478 D(DstReg | SrcMem8 | ModRM | Mov), D(DstReg | SrcMem16 | ModRM | Mov), 4488 4479 /* 0xB8 - 0xBF */ 4489 4480 N, N, 4490 4481 G(BitOp, group8), 4491 - F(DstMem | SrcReg | ModRM | BitOp | Lock | PageTable, em_btc), 4482 + I(DstMem | SrcReg | ModRM | BitOp | Lock | PageTable, em_btc), 4492 4483 I(DstReg | SrcMem | ModRM, em_bsf_c), 4493 4484 I(DstReg | SrcMem | ModRM, em_bsr_c), 4494 4485 D(DstReg | SrcMem8 | ModRM | Mov), D(DstReg | SrcMem16 | ModRM | Mov),