Changeset 103235 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Feb 7, 2024 1:38:33 AM (13 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r103220 r103235 8253 8253 8254 8254 8255 /** 8256 * @opcode 0xc1 8257 */ 8258 FNIEMOP_DEF(iemOp_Grp2_Ev_Ib) 8259 { 8260 IEMOP_HLP_MIN_186(); 8261 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 8262 8263 /* Need to use a body macro here since the EFLAGS behaviour differs between 8264 the shifts, rotates and rotate w/ carry. Sigh. */ 8255 /* Need to use a body macro here since the EFLAGS behaviour differs between 8256 the shifts, rotates and rotate w/ carry. Sigh. */ 8265 8257 #define GRP2_BODY_Ev_Ib(a_pImplExpr) \ 8266 8258 PCIEMOPSHIFTSIZES const pImpl = (a_pImplExpr); \ … … 8392 8384 } (void)0 8393 8385 8386 /** 8387 * @opmaps grp2_c1 8388 * @opcode /0 8389 * @opflclass rotate_count 8390 */ 8391 FNIEMOP_DEF_1(iemOp_grp2_rol_Ev_Ib, uint8_t, bRm) 8392 { 8393 IEMOP_MNEMONIC2(MI, ROL, rol, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8394 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rol_eflags)); 8395 } 8396 8397 8398 /** 8399 * @opmaps grp2_c1 8400 * @opcode /1 8401 * @opflclass rotate_count 8402 */ 8403 FNIEMOP_DEF_1(iemOp_grp2_ror_Ev_Ib, uint8_t, bRm) 8404 { 8405 IEMOP_MNEMONIC2(MI, ROR, ror, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8406 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_ror_eflags)); 8407 } 8408 8409 8410 /** 8411 * @opmaps grp2_c1 8412 * @opcode /2 8413 * @opflclass rotate_carry_count 8414 */ 8415 FNIEMOP_DEF_1(iemOp_grp2_rcl_Ev_Ib, uint8_t, bRm) 8416 { 8417 IEMOP_MNEMONIC2(MI, RCL, rcl, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8418 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rcl_eflags)); 8419 } 8420 8421 8422 /** 8423 * @opmaps grp2_c1 8424 * @opcode /3 8425 * @opflclass rotate_carry_count 8426 */ 8427 FNIEMOP_DEF_1(iemOp_grp2_rcr_Ev_Ib, uint8_t, bRm) 8428 { 8429 IEMOP_MNEMONIC2(MI, RCR, rcr, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8430 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rcr_eflags)); 8431 } 8432 8433 8434 /** 8435 * @opmaps grp2_c1 8436 * @opcode /4 8437 * @opflclass shift_count 8438 */ 8439 FNIEMOP_DEF_1(iemOp_grp2_shl_Ev_Ib, uint8_t, bRm) 8440 { 8441 IEMOP_MNEMONIC2(MI, SHL, shl, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8442 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_shl_eflags)); 8443 } 8444 8445 8446 /** 8447 * @opmaps grp2_c1 8448 * @opcode /5 8449 * @opflclass shift_count 8450 */ 8451 FNIEMOP_DEF_1(iemOp_grp2_shr_Ev_Ib, uint8_t, bRm) 8452 { 8453 IEMOP_MNEMONIC2(MI, SHR, shr, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8454 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_shr_eflags)); 8455 } 8456 8457 8458 /** 8459 * @opmaps grp2_c1 8460 * @opcode /7 8461 * @opflclass shift_count 8462 */ 8463 FNIEMOP_DEF_1(iemOp_grp2_sar_Ev_Ib, uint8_t, bRm) 8464 { 8465 IEMOP_MNEMONIC2(MI, SAR, sar, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8466 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_sar_eflags)); 8467 } 8468 8469 #undef GRP2_BODY_Ev_Ib 8470 8471 /** 8472 * @opcode 0xc1 8473 */ 8474 FNIEMOP_DEF(iemOp_Grp2_Ev_Ib) 8475 { 8476 IEMOP_HLP_MIN_186(); 8477 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 8478 8394 8479 switch (IEM_GET_MODRM_REG_8(bRm)) 8395 8480 { 8396 /** 8397 * @opdone 8398 * @opmaps grp2_c1 8399 * @opcode /0 8400 * @opflclass rotate_count 8401 */ 8402 case 0: 8403 { 8404 IEMOP_MNEMONIC2(MI, ROL, rol, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8405 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rol_eflags)); 8406 break; 8407 } 8408 /** 8409 * @opdone 8410 * @opmaps grp2_c1 8411 * @opcode /1 8412 * @opflclass rotate_count 8413 */ 8414 case 1: 8415 { 8416 IEMOP_MNEMONIC2(MI, ROR, ror, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8417 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_ror_eflags)); 8418 break; 8419 } 8420 /** 8421 * @opdone 8422 * @opmaps grp2_c1 8423 * @opcode /2 8424 * @opflclass rotate_carry_count 8425 */ 8426 case 2: 8427 { 8428 IEMOP_MNEMONIC2(MI, RCL, rcl, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8429 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rcl_eflags)); 8430 break; 8431 } 8432 /** 8433 * @opdone 8434 * @opmaps grp2_c1 8435 * @opcode /3 8436 * @opflclass rotate_carry_count 8437 */ 8438 case 3: 8439 { 8440 IEMOP_MNEMONIC2(MI, RCR, rcr, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8441 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rcr_eflags)); 8442 break; 8443 } 8444 /** 8445 * @opdone 8446 * @opmaps grp2_c1 8447 * @opcode /4 8448 * @opflclass shift_count 8449 */ 8450 case 4: 8451 { 8452 IEMOP_MNEMONIC2(MI, SHL, shl, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8453 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_shl_eflags)); 8454 break; 8455 } 8456 /** 8457 * @opdone 8458 * @opmaps grp2_c1 8459 * @opcode /5 8460 * @opflclass shift_count 8461 */ 8462 case 5: 8463 { 8464 IEMOP_MNEMONIC2(MI, SHR, shr, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8465 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_shr_eflags)); 8466 break; 8467 } 8468 /** 8469 * @opdone 8470 * @opmaps grp2_c1 8471 * @opcode /7 8472 * @opflclass shift_count 8473 */ 8474 case 7: 8475 { 8476 IEMOP_MNEMONIC2(MI, SAR, sar, Ev, Ib, DISOPTYPE_HARMLESS, 0); 8477 GRP2_BODY_Ev_Ib(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_sar_eflags)); 8478 break; 8479 } 8480 8481 case 0: return FNIEMOP_CALL_1(iemOp_grp2_rol_Ev_Ib, bRm); 8482 case 1: return FNIEMOP_CALL_1(iemOp_grp2_ror_Ev_Ib, bRm); 8483 case 2: return FNIEMOP_CALL_1(iemOp_grp2_rcl_Ev_Ib, bRm); 8484 case 3: return FNIEMOP_CALL_1(iemOp_grp2_rcr_Ev_Ib, bRm); 8485 case 4: return FNIEMOP_CALL_1(iemOp_grp2_shl_Ev_Ib, bRm); 8486 case 5: return FNIEMOP_CALL_1(iemOp_grp2_shr_Ev_Ib, bRm); 8487 case 7: return FNIEMOP_CALL_1(iemOp_grp2_sar_Ev_Ib, bRm); 8481 8488 case 6: IEMOP_RAISE_INVALID_OPCODE_RET(); 8482 8489 IEM_NOT_REACHED_DEFAULT_CASE_RET(); /* gcc maybe stupid */ 8483 8490 } 8484 #undef GRP2_BODY_Ev_Ib8485 8491 } 8486 8492 … … 9088 9094 9089 9095 9090 9091 /** 9092 * @opcode 0xd1 9093 */ 9094 FNIEMOP_DEF(iemOp_Grp2_Ev_1) 9095 { 9096 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 9097 9098 /* Need to use a body macro here since the EFLAGS behaviour differs between 9099 the shifts, rotates and rotate w/ carry. Sigh. */ 9096 /* Need to use a body macro here since the EFLAGS behaviour differs between 9097 the shifts, rotates and rotate w/ carry. Sigh. */ 9100 9098 #define GRP2_BODY_Ev_1(a_pImplExpr) \ 9101 9099 PCIEMOPSHIFTSIZES const pImpl = (a_pImplExpr); \ … … 9217 9215 } (void)0 9218 9216 9217 /** 9218 * @opmaps grp2_d1 9219 * @opcode /0 9220 * @opflclass rotate_1 9221 */ 9222 FNIEMOP_DEF_1(iemOp_grp2_rol_Ev_1, uint8_t, bRm) 9223 { 9224 IEMOP_MNEMONIC2(M1, ROL, rol, Ev, 1, DISOPTYPE_HARMLESS, 0); 9225 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rol_eflags)); 9226 } 9227 9228 9229 /** 9230 * @opmaps grp2_d1 9231 * @opcode /1 9232 * @opflclass rotate_1 9233 */ 9234 FNIEMOP_DEF_1(iemOp_grp2_ror_Ev_1, uint8_t, bRm) 9235 { 9236 IEMOP_MNEMONIC2(M1, ROR, ror, Ev, 1, DISOPTYPE_HARMLESS, 0); 9237 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_ror_eflags)); 9238 } 9239 9240 9241 /** 9242 * @opmaps grp2_d1 9243 * @opcode /2 9244 * @opflclass rotate_carry_1 9245 */ 9246 FNIEMOP_DEF_1(iemOp_grp2_rcl_Ev_1, uint8_t, bRm) 9247 { 9248 IEMOP_MNEMONIC2(M1, RCL, rcl, Ev, 1, DISOPTYPE_HARMLESS, 0); 9249 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rcl_eflags)); 9250 } 9251 9252 9253 /** 9254 * @opmaps grp2_d1 9255 * @opcode /3 9256 * @opflclass rotate_carry_1 9257 */ 9258 FNIEMOP_DEF_1(iemOp_grp2_rcr_Ev_1, uint8_t, bRm) 9259 { 9260 IEMOP_MNEMONIC2(M1, RCR, rcr, Ev, 1, DISOPTYPE_HARMLESS, 0); 9261 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rcr_eflags)); 9262 } 9263 9264 9265 /** 9266 * @opmaps grp2_d1 9267 * @opcode /4 9268 * @opflclass shift_1 9269 */ 9270 FNIEMOP_DEF_1(iemOp_grp2_shl_Ev_1, uint8_t, bRm) 9271 { 9272 IEMOP_MNEMONIC2(M1, SHL, shl, Ev, 1, DISOPTYPE_HARMLESS, 0); 9273 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_shl_eflags)); 9274 } 9275 9276 9277 /** 9278 * @opmaps grp2_d1 9279 * @opcode /5 9280 * @opflclass shift_1 9281 */ 9282 FNIEMOP_DEF_1(iemOp_grp2_shr_Ev_1, uint8_t, bRm) 9283 { 9284 IEMOP_MNEMONIC2(M1, SHR, shr, Ev, 1, DISOPTYPE_HARMLESS, 0); 9285 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_shr_eflags)); 9286 } 9287 9288 9289 /** 9290 * @opmaps grp2_d1 9291 * @opcode /7 9292 * @opflclass shift_1 9293 */ 9294 FNIEMOP_DEF_1(iemOp_grp2_sar_Ev_1, uint8_t, bRm) 9295 { 9296 IEMOP_MNEMONIC2(M1, SAR, sar, Ev, 1, DISOPTYPE_HARMLESS, 0); 9297 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_sar_eflags)); 9298 } 9299 9300 #undef GRP2_BODY_Ev_1 9301 9302 /** 9303 * @opcode 0xd1 9304 */ 9305 FNIEMOP_DEF(iemOp_Grp2_Ev_1) 9306 { 9307 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 9219 9308 switch (IEM_GET_MODRM_REG_8(bRm)) 9220 9309 { 9221 /** 9222 * @opdone 9223 * @opmaps grp2_d1 9224 * @opcode /0 9225 * @opflclass rotate_1 9226 */ 9227 case 0: 9228 { 9229 IEMOP_MNEMONIC2(M1, ROL, rol, Ev, 1, DISOPTYPE_HARMLESS, 0); 9230 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rol_eflags)); 9231 break; 9232 } 9233 /** 9234 * @opdone 9235 * @opmaps grp2_d1 9236 * @opcode /1 9237 * @opflclass rotate_1 9238 */ 9239 case 1: 9240 { 9241 IEMOP_MNEMONIC2(M1, ROR, ror, Ev, 1, DISOPTYPE_HARMLESS, 0); 9242 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_ror_eflags)); 9243 break; 9244 } 9245 /** 9246 * @opdone 9247 * @opmaps grp2_d1 9248 * @opcode /2 9249 * @opflclass rotate_carry_1 9250 */ 9251 case 2: 9252 { 9253 IEMOP_MNEMONIC2(M1, RCL, rcl, Ev, 1, DISOPTYPE_HARMLESS, 0); 9254 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rcl_eflags)); 9255 break; 9256 } 9257 /** 9258 * @opdone 9259 * @opmaps grp2_d1 9260 * @opcode /3 9261 * @opflclass rotate_carry_1 9262 */ 9263 case 3: 9264 { 9265 IEMOP_MNEMONIC2(M1, RCR, rcr, Ev, 1, DISOPTYPE_HARMLESS, 0); 9266 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rcr_eflags)); 9267 break; 9268 } 9269 /** 9270 * @opdone 9271 * @opmaps grp2_d1 9272 * @opcode /4 9273 * @opflclass shift_1 9274 */ 9275 case 4: 9276 { 9277 IEMOP_MNEMONIC2(M1, SHL, shl, Ev, 1, DISOPTYPE_HARMLESS, 0); 9278 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_shl_eflags)); 9279 break; 9280 } 9281 /** 9282 * @opdone 9283 * @opmaps grp2_d1 9284 * @opcode /5 9285 * @opflclass shift_1 9286 */ 9287 case 5: 9288 { 9289 IEMOP_MNEMONIC2(M1, SHR, shr, Ev, 1, DISOPTYPE_HARMLESS, 0); 9290 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_shr_eflags)); 9291 break; 9292 } 9293 /** 9294 * @opdone 9295 * @opmaps grp2_d1 9296 * @opcode /7 9297 * @opflclass shift_1 9298 */ 9299 case 7: 9300 { 9301 IEMOP_MNEMONIC2(M1, SAR, sar, Ev, 1, DISOPTYPE_HARMLESS, 0); 9302 GRP2_BODY_Ev_1(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_sar_eflags)); 9303 break; 9304 } 9305 /** @opdone */ 9310 case 0: return FNIEMOP_CALL_1(iemOp_grp2_rol_Ev_1, bRm); 9311 case 1: return FNIEMOP_CALL_1(iemOp_grp2_ror_Ev_1, bRm); 9312 case 2: return FNIEMOP_CALL_1(iemOp_grp2_rcl_Ev_1, bRm); 9313 case 3: return FNIEMOP_CALL_1(iemOp_grp2_rcr_Ev_1, bRm); 9314 case 4: return FNIEMOP_CALL_1(iemOp_grp2_shl_Ev_1, bRm); 9315 case 5: return FNIEMOP_CALL_1(iemOp_grp2_shr_Ev_1, bRm); 9316 case 7: return FNIEMOP_CALL_1(iemOp_grp2_sar_Ev_1, bRm); 9306 9317 case 6: IEMOP_RAISE_INVALID_OPCODE_RET(); 9307 9318 IEM_NOT_REACHED_DEFAULT_CASE_RET(); /* gcc maybe, well... */ 9308 9319 } 9309 #undef GRP2_BODY_Ev_19310 9320 } 9311 9321 … … 9454 9464 9455 9465 9456 /** 9457 * @opcode 0xd3 9458 */ 9459 FNIEMOP_DEF(iemOp_Grp2_Ev_CL) 9460 { 9461 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 9462 9463 /* Need to use a body macro here since the EFLAGS behaviour differs between 9464 the shifts, rotates and rotate w/ carry. Sigh. */ 9466 /* Need to use a body macro here since the EFLAGS behaviour differs between 9467 the shifts, rotates and rotate w/ carry. Sigh. */ 9465 9468 #define GRP2_BODY_Ev_CL(a_pImplExpr) \ 9466 9469 PCIEMOPSHIFTSIZES const pImpl = (a_pImplExpr); \ … … 9587 9590 } \ 9588 9591 } (void)0 9592 9593 9594 /** 9595 * @opmaps grp2_d0 9596 * @opcode /0 9597 * @opflclass rotate_count 9598 */ 9599 FNIEMOP_DEF_1(iemOp_grp2_rol_Ev_CL, uint8_t, bRm) 9600 { 9601 IEMOP_MNEMONIC2EX(rol_Ev_CL, "rol Ev,CL", M_CL, ROL, rol, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9602 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rol_eflags)); 9603 } 9604 9605 9606 /** 9607 * @opmaps grp2_d0 9608 * @opcode /1 9609 * @opflclass rotate_count 9610 */ 9611 FNIEMOP_DEF_1(iemOp_grp2_ror_Ev_CL, uint8_t, bRm) 9612 { 9613 IEMOP_MNEMONIC2EX(ror_Ev_CL, "ror Ev,CL", M_CL, ROR, ror, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9614 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_ror_eflags)); 9615 } 9616 9617 9618 /** 9619 * @opmaps grp2_d0 9620 * @opcode /2 9621 * @opflclass rotate_carry_count 9622 */ 9623 FNIEMOP_DEF_1(iemOp_grp2_rcl_Ev_CL, uint8_t, bRm) 9624 { 9625 IEMOP_MNEMONIC2EX(rcl_Ev_CL, "rcl Ev,CL", M_CL, RCL, rcl, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9626 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rcl_eflags)); 9627 } 9628 9629 9630 /** 9631 * @opmaps grp2_d0 9632 * @opcode /3 9633 * @opflclass rotate_carry_count 9634 */ 9635 FNIEMOP_DEF_1(iemOp_grp2_rcr_Ev_CL, uint8_t, bRm) 9636 { 9637 IEMOP_MNEMONIC2EX(rcr_Ev_CL, "rcr Ev,CL", M_CL, RCR, rcr, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9638 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rcr_eflags)); 9639 } 9640 9641 9642 /** 9643 * @opmaps grp2_d0 9644 * @opcode /4 9645 * @opflclass shift_count 9646 */ 9647 FNIEMOP_DEF_1(iemOp_grp2_shl_Ev_CL, uint8_t, bRm) 9648 { 9649 IEMOP_MNEMONIC2EX(shl_Ev_CL, "shl Ev,CL", M_CL, SHL, shl, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9650 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_shl_eflags)); 9651 } 9652 9653 9654 /** 9655 * @opmaps grp2_d0 9656 * @opcode /5 9657 * @opflclass shift_count 9658 */ 9659 FNIEMOP_DEF_1(iemOp_grp2_shr_Ev_CL, uint8_t, bRm) 9660 { 9661 IEMOP_MNEMONIC2EX(shr_Ev_CL, "shr Ev,CL", M_CL, SHR, shr, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9662 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_shr_eflags)); 9663 } 9664 9665 9666 /** 9667 * @opmaps grp2_d0 9668 * @opcode /7 9669 * @opflclass shift_count 9670 */ 9671 FNIEMOP_DEF_1(iemOp_grp2_sar_Ev_CL, uint8_t, bRm) 9672 { 9673 IEMOP_MNEMONIC2EX(sar_Ev_CL, "sar Ev,CL", M_CL, SAR, sar, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9674 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_sar_eflags)); 9675 } 9676 9677 #undef GRP2_BODY_Ev_CL 9678 9679 /** 9680 * @opcode 0xd3 9681 */ 9682 FNIEMOP_DEF(iemOp_Grp2_Ev_CL) 9683 { 9684 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 9589 9685 switch (IEM_GET_MODRM_REG_8(bRm)) 9590 9686 { 9591 /** 9592 * @opdone 9593 * @opmaps grp2_d0 9594 * @opcode /0 9595 * @opflclass rotate_count 9596 */ 9597 case 0: 9598 { 9599 IEMOP_MNEMONIC2EX(rol_Ev_CL, "rol Ev,CL", M_CL, ROL, rol, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9600 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rol_eflags)); 9601 break; 9602 } 9603 /** 9604 * @opdone 9605 * @opmaps grp2_d0 9606 * @opcode /1 9607 * @opflclass rotate_count 9608 */ 9609 case 1: 9610 { 9611 IEMOP_MNEMONIC2EX(ror_Ev_CL, "ror Ev,CL", M_CL, ROR, ror, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9612 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_ror_eflags)); 9613 break; 9614 } 9615 /** 9616 * @opdone 9617 * @opmaps grp2_d0 9618 * @opcode /2 9619 * @opflclass rotate_carry_count 9620 */ 9621 case 2: 9622 { 9623 IEMOP_MNEMONIC2EX(rcl_Ev_CL, "rcl Ev,CL", M_CL, RCL, rcl, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9624 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rcl_eflags)); 9625 break; 9626 } 9627 /** 9628 * @opdone 9629 * @opmaps grp2_d0 9630 * @opcode /3 9631 * @opflclass rotate_carry_count 9632 */ 9633 case 3: 9634 { 9635 IEMOP_MNEMONIC2EX(rcr_Ev_CL, "rcr Ev,CL", M_CL, RCR, rcr, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9636 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_rcr_eflags)); 9637 break; 9638 } 9639 /** 9640 * @opdone 9641 * @opmaps grp2_d0 9642 * @opcode /4 9643 * @opflclass shift_count 9644 */ 9645 case 4: 9646 { 9647 IEMOP_MNEMONIC2EX(shl_Ev_CL, "shl Ev,CL", M_CL, SHL, shl, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9648 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_shl_eflags)); 9649 break; 9650 } 9651 /** 9652 * @opdone 9653 * @opmaps grp2_d0 9654 * @opcode /5 9655 * @opflclass shift_count 9656 */ 9657 case 5: 9658 { 9659 IEMOP_MNEMONIC2EX(shr_Ev_CL, "shr Ev,CL", M_CL, SHR, shr, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9660 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_shr_eflags)); 9661 break; 9662 } 9663 /** 9664 * @opdone 9665 * @opmaps grp2_d0 9666 * @opcode /7 9667 * @opflclass shift_count 9668 */ 9669 case 7: 9670 { 9671 IEMOP_MNEMONIC2EX(sar_Ev_CL, "sar Ev,CL", M_CL, SAR, sar, Ev, REG_CL, DISOPTYPE_HARMLESS, 0); 9672 GRP2_BODY_Ev_CL(IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_sar_eflags)); 9673 break; 9674 } 9675 /** @opdone */ 9687 case 0: return FNIEMOP_CALL_1(iemOp_grp2_rol_Ev_CL, bRm); 9688 case 1: return FNIEMOP_CALL_1(iemOp_grp2_ror_Ev_CL, bRm); 9689 case 2: return FNIEMOP_CALL_1(iemOp_grp2_rcl_Ev_CL, bRm); 9690 case 3: return FNIEMOP_CALL_1(iemOp_grp2_rcr_Ev_CL, bRm); 9691 case 4: return FNIEMOP_CALL_1(iemOp_grp2_shl_Ev_CL, bRm); 9692 case 5: return FNIEMOP_CALL_1(iemOp_grp2_shr_Ev_CL, bRm); 9693 case 7: return FNIEMOP_CALL_1(iemOp_grp2_sar_Ev_CL, bRm); 9676 9694 case 6: IEMOP_RAISE_INVALID_OPCODE_RET(); 9677 9695 IEM_NOT_REACHED_DEFAULT_CASE_RET(); /* gcc maybe, well... */ 9678 9696 } 9679 #undef GRP2_BODY_Ev_CL9680 9697 } 9681 9698 … … 14319 14336 14320 14337 /** 14338 * @opmaps grp3_f7 14339 * @opcode /4 14340 * @opflclass multiply 14341 */ 14342 FNIEMOP_DEF_1(iemOp_grp3_mul_Ev, uint8_t, bRm) 14343 { 14344 IEMOP_MNEMONIC(mul_Ev, "mul Ev"); 14345 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF); 14346 IEMOP_BODY_GRP3_MUL_DIV_EV(bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_mul_eflags)); 14347 } 14348 14349 14350 /** 14351 * @opmaps grp3_f7 14352 * @opcode /5 14353 * @opflclass multiply 14354 */ 14355 FNIEMOP_DEF_1(iemOp_grp3_imul_Ev, uint8_t, bRm) 14356 { 14357 IEMOP_MNEMONIC(imul_Ev, "imul Ev"); 14358 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF); 14359 IEMOP_BODY_GRP3_MUL_DIV_EV(bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_eflags)); 14360 } 14361 14362 14363 /** 14364 * @opmaps grp3_f7 14365 * @opcode /6 14366 * @opflclass division 14367 */ 14368 FNIEMOP_DEF_1(iemOp_grp3_div_Ev, uint8_t, bRm) 14369 { 14370 IEMOP_MNEMONIC(div_Ev, "div Ev"); 14371 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_OF | X86_EFL_CF); 14372 IEMOP_BODY_GRP3_MUL_DIV_EV(bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_div_eflags)); 14373 } 14374 14375 14376 /** 14377 * @opmaps grp3_f7 14378 * @opcode /7 14379 * @opflclass division 14380 */ 14381 FNIEMOP_DEF_1(iemOp_grp3_idiv_Ev, uint8_t, bRm) 14382 { 14383 IEMOP_MNEMONIC(idiv_Ev, "idiv Ev"); 14384 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_OF | X86_EFL_CF); 14385 IEMOP_BODY_GRP3_MUL_DIV_EV(bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_idiv_eflags)); 14386 } 14387 14388 14389 /** 14321 14390 * @opcode 0xf7 14322 14391 */ … … 14326 14395 switch (IEM_GET_MODRM_REG_8(bRm)) 14327 14396 { 14328 case 0: 14329 return FNIEMOP_CALL_1(iemOp_grp3_test_Ev, bRm); 14330 case 1: 14331 return FNIEMOP_CALL_1(iemOp_grp3_test_Ev, bRm); 14332 case 2: 14333 return FNIEMOP_CALL_1(iemOp_grp3_not_Ev, bRm); 14334 case 3: 14335 return FNIEMOP_CALL_1(iemOp_grp3_neg_Ev, bRm); 14336 case 4: 14337 { 14338 /** 14339 * @opdone 14340 * @opmaps grp3_f7 14341 * @opcode /4 14342 * @opflclass multiply 14343 */ 14344 IEMOP_MNEMONIC(mul_Ev, "mul Ev"); 14345 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF); 14346 IEMOP_BODY_GRP3_MUL_DIV_EV(bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_mul_eflags)); 14347 break; 14348 } 14349 case 5: 14350 { 14351 /** 14352 * @opdone 14353 * @opmaps grp3_f7 14354 * @opcode /5 14355 * @opflclass multiply 14356 */ 14357 IEMOP_MNEMONIC(imul_Ev, "imul Ev"); 14358 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF); 14359 IEMOP_BODY_GRP3_MUL_DIV_EV(bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_eflags)); 14360 break; 14361 } 14362 case 6: 14363 { 14364 /** 14365 * @opdone 14366 * @opmaps grp3_f7 14367 * @opcode /6 14368 * @opflclass division 14369 */ 14370 IEMOP_MNEMONIC(div_Ev, "div Ev"); 14371 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_OF | X86_EFL_CF); 14372 IEMOP_BODY_GRP3_MUL_DIV_EV(bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_div_eflags)); 14373 break; 14374 } 14375 case 7: 14376 { 14377 /** 14378 * @opdone 14379 * @opmaps grp3_f7 14380 * @opcode /7 14381 * @opflclass division 14382 */ 14383 IEMOP_MNEMONIC(idiv_Ev, "idiv Ev"); 14384 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_OF | X86_EFL_CF); 14385 IEMOP_BODY_GRP3_MUL_DIV_EV(bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_idiv_eflags)); 14386 break; 14387 } 14397 case 0: return FNIEMOP_CALL_1(iemOp_grp3_test_Ev, bRm); 14398 case 1: return FNIEMOP_CALL_1(iemOp_grp3_test_Ev, bRm); 14399 case 2: return FNIEMOP_CALL_1(iemOp_grp3_not_Ev, bRm); 14400 case 3: return FNIEMOP_CALL_1(iemOp_grp3_neg_Ev, bRm); 14401 case 4: return FNIEMOP_CALL_1(iemOp_grp3_mul_Ev, bRm); 14402 case 5: return FNIEMOP_CALL_1(iemOp_grp3_imul_Ev, bRm); 14403 case 6: return FNIEMOP_CALL_1(iemOp_grp3_div_Ev, bRm); 14404 case 7: return FNIEMOP_CALL_1(iemOp_grp3_idiv_Ev, bRm); 14388 14405 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 14389 14406 }
Note:
See TracChangeset
for help on using the changeset viewer.