Changeset 96046 in vbox
- Timestamp:
- Aug 5, 2022 9:47:28 AM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 152845
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
r96034 r96046 3652 3652 IEMIMPL_MEDIA_F2 psignw, 1 3653 3653 IEMIMPL_MEDIA_F2 psignd, 1 3654 IEMIMPL_MEDIA_F2 phaddw, 1 3655 IEMIMPL_MEDIA_F2 phaddd, 1 3656 3654 3657 3655 3658 ;; … … 4190 4193 IEMIMPL_MEDIA_OPT_F3 vpsignw 4191 4194 IEMIMPL_MEDIA_OPT_F3 vpsignd 4195 IEMIMPL_MEDIA_OPT_F3 vphaddw 4196 IEMIMPL_MEDIA_OPT_F3 vphaddd 4192 4197 4193 4198 -
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r96036 r96046 12410 12410 12411 12411 /* 12412 * PHADDW / VPHADDW / PHADDD / VPHADDD 12413 */ 12414 IEM_DECL_IMPL_DEF(void, iemAImpl_phaddw_u64_fallback,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc)) 12415 { 12416 RTUINT64U uSrc1 = { *puDst }; 12417 RTUINT64U uSrc2 = { *puSrc }; 12418 RTUINT64U uDst = { 0 }; /* Shut up MSVC. */ 12419 12420 uDst.ai16[0] = uSrc1.ai16[0] + uSrc1.ai16[1]; 12421 uDst.ai16[1] = uSrc1.ai16[2] + uSrc1.ai16[3]; 12422 uDst.ai16[2] = uSrc2.ai16[0] + uSrc2.ai16[1]; 12423 uDst.ai16[3] = uSrc2.ai16[2] + uSrc2.ai16[3]; 12424 *puDst = uDst.u; 12425 RT_NOREF(pFpuState); 12426 } 12427 12428 12429 IEM_DECL_IMPL_DEF(void, iemAImpl_phaddw_u128_fallback,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)) 12430 { 12431 RTUINT128U uSrc1 = *puDst; 12432 12433 puDst->ai16[0] = uSrc1.ai16[0] + uSrc1.ai16[1]; 12434 puDst->ai16[1] = uSrc1.ai16[2] + uSrc1.ai16[3]; 12435 puDst->ai16[2] = uSrc1.ai16[4] + uSrc1.ai16[5]; 12436 puDst->ai16[3] = uSrc1.ai16[6] + uSrc1.ai16[7]; 12437 12438 puDst->ai16[4] = puSrc->ai16[0] + puSrc->ai16[1]; 12439 puDst->ai16[5] = puSrc->ai16[2] + puSrc->ai16[3]; 12440 puDst->ai16[6] = puSrc->ai16[4] + puSrc->ai16[5]; 12441 puDst->ai16[7] = puSrc->ai16[6] + puSrc->ai16[7]; 12442 RT_NOREF(pFpuState); 12443 } 12444 12445 12446 IEM_DECL_IMPL_DEF(void, iemAImpl_phaddd_u64_fallback,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc)) 12447 { 12448 RTUINT64U uSrc1 = { *puDst }; 12449 RTUINT64U uSrc2 = { *puSrc }; 12450 RTUINT64U uDst = { 0 }; /* Shut up MSVC. */ 12451 12452 uDst.ai32[0] = uSrc1.ai32[0] + uSrc1.ai32[1]; 12453 uDst.ai32[1] = uSrc2.ai32[0] + uSrc2.ai32[1]; 12454 *puDst = uDst.u; 12455 RT_NOREF(pFpuState); 12456 } 12457 12458 12459 IEM_DECL_IMPL_DEF(void, iemAImpl_phaddd_u128_fallback,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)) 12460 { 12461 RTUINT128U uSrc1 = *puDst; 12462 12463 puDst->ai32[0] = uSrc1.ai32[0] + uSrc1.ai32[1]; 12464 puDst->ai32[1] = uSrc1.ai32[2] + uSrc1.ai32[3]; 12465 12466 puDst->ai32[2] = puSrc->ai32[0] + puSrc->ai32[1]; 12467 puDst->ai32[3] = puSrc->ai32[2] + puSrc->ai32[3]; 12468 RT_NOREF(pFpuState); 12469 } 12470 12471 12472 IEM_DECL_IMPL_DEF(void, iemAImpl_vphaddw_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 12473 { 12474 RTUINT128U uDst = { 0 }; /* Shut up MSVC. */ /* puDst can be the same as one of the source operands. */ 12475 12476 uDst.ai16[0] = puSrc1->ai16[0] + puSrc1->ai16[1]; 12477 uDst.ai16[1] = puSrc1->ai16[2] + puSrc1->ai16[3]; 12478 uDst.ai16[2] = puSrc1->ai16[4] + puSrc1->ai16[5]; 12479 uDst.ai16[3] = puSrc1->ai16[6] + puSrc1->ai16[7]; 12480 12481 uDst.ai16[4] = puSrc2->ai16[0] + puSrc2->ai16[1]; 12482 uDst.ai16[5] = puSrc2->ai16[2] + puSrc2->ai16[3]; 12483 uDst.ai16[6] = puSrc2->ai16[4] + puSrc2->ai16[5]; 12484 uDst.ai16[7] = puSrc2->ai16[6] + puSrc2->ai16[7]; 12485 12486 puDst->au64[0] = uDst.au64[0]; 12487 puDst->au64[1] = uDst.au64[1]; 12488 } 12489 12490 12491 IEM_DECL_IMPL_DEF(void, iemAImpl_vphaddw_u256_fallback,(PRTUINT256U puDst, PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 12492 { 12493 RTUINT256U uDst = { 0 }; /* Shut up MSVC. */ /* puDst can be the same as one of the source operands. */ 12494 12495 uDst.ai16[ 0] = puSrc1->ai16[ 0] + puSrc1->ai16[ 1]; 12496 uDst.ai16[ 1] = puSrc1->ai16[ 2] + puSrc1->ai16[ 3]; 12497 uDst.ai16[ 2] = puSrc1->ai16[ 4] + puSrc1->ai16[ 5]; 12498 uDst.ai16[ 3] = puSrc1->ai16[ 6] + puSrc1->ai16[ 7]; 12499 uDst.ai16[ 4] = puSrc2->ai16[ 0] + puSrc2->ai16[ 1]; 12500 uDst.ai16[ 5] = puSrc2->ai16[ 2] + puSrc2->ai16[ 3]; 12501 uDst.ai16[ 6] = puSrc2->ai16[ 4] + puSrc2->ai16[ 5]; 12502 uDst.ai16[ 7] = puSrc2->ai16[ 6] + puSrc2->ai16[ 7]; 12503 12504 uDst.ai16[ 8] = puSrc1->ai16[ 8] + puSrc1->ai16[ 9]; 12505 uDst.ai16[ 9] = puSrc1->ai16[10] + puSrc1->ai16[11]; 12506 uDst.ai16[10] = puSrc1->ai16[12] + puSrc1->ai16[13]; 12507 uDst.ai16[11] = puSrc1->ai16[14] + puSrc1->ai16[15]; 12508 uDst.ai16[12] = puSrc2->ai16[ 8] + puSrc2->ai16[ 9]; 12509 uDst.ai16[13] = puSrc2->ai16[10] + puSrc2->ai16[11]; 12510 uDst.ai16[14] = puSrc2->ai16[12] + puSrc2->ai16[13]; 12511 uDst.ai16[15] = puSrc2->ai16[14] + puSrc2->ai16[15]; 12512 12513 puDst->au64[0] = uDst.au64[0]; 12514 puDst->au64[1] = uDst.au64[1]; 12515 puDst->au64[2] = uDst.au64[2]; 12516 puDst->au64[3] = uDst.au64[3]; 12517 } 12518 12519 12520 IEM_DECL_IMPL_DEF(void, iemAImpl_vphaddd_u128_fallback,(PRTUINT128U puDst, PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 12521 { 12522 RTUINT128U uDst = { 0 }; /* Shut up MSVC. */ /* puDst can be the same as one of the source operands. */ 12523 12524 uDst.ai32[0] = puSrc1->ai32[0] + puSrc1->ai32[1]; 12525 uDst.ai32[1] = puSrc1->ai32[2] + puSrc1->ai32[3]; 12526 12527 uDst.ai32[2] = puSrc2->ai32[0] + puSrc2->ai32[1]; 12528 uDst.ai32[3] = puSrc2->ai32[2] + puSrc2->ai32[3]; 12529 12530 puDst->au64[0] = uDst.au64[0]; 12531 puDst->au64[1] = uDst.au64[1]; 12532 } 12533 12534 12535 IEM_DECL_IMPL_DEF(void, iemAImpl_vphaddd_u256_fallback,(PRTUINT256U puDst, PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 12536 { 12537 RTUINT256U uDst = { 0 }; /* Shut up MSVC. */ /* puDst can be the same as one of the source operands. */ 12538 12539 uDst.ai32[0] = puSrc1->ai32[ 0] + puSrc1->ai32[ 1]; 12540 uDst.ai32[1] = puSrc1->ai32[ 2] + puSrc1->ai32[ 3]; 12541 uDst.ai32[2] = puSrc2->ai32[ 0] + puSrc2->ai32[ 1]; 12542 uDst.ai32[3] = puSrc2->ai32[ 2] + puSrc2->ai32[ 3]; 12543 12544 uDst.ai32[4] = puSrc1->ai32[ 4] + puSrc1->ai32[ 5]; 12545 uDst.ai32[5] = puSrc1->ai32[ 6] + puSrc1->ai32[ 7]; 12546 uDst.ai32[6] = puSrc2->ai32[ 4] + puSrc2->ai32[ 5]; 12547 uDst.ai32[7] = puSrc2->ai32[ 6] + puSrc2->ai32[ 7]; 12548 12549 puDst->au64[0] = uDst.au64[0]; 12550 puDst->au64[1] = uDst.au64[1]; 12551 puDst->au64[2] = uDst.au64[2]; 12552 puDst->au64[3] = uDst.au64[3]; 12553 } 12554 12555 12556 /* 12412 12557 * CRC32 (SEE 4.2). 12413 12558 */ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f38.cpp.h
r96034 r96046 278 278 279 279 /* Opcode 0x0f 0x38 0x01. */ 280 FNIEMOP_STUB(iemOp_phaddw_Pq_Qq); 280 FNIEMOP_DEF(iemOp_phaddw_Pq_Qq) 281 { 282 IEMOP_MNEMONIC2(RM, PHADDW, phaddw, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 283 return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex, 284 IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phaddw_u64,&iemAImpl_phaddw_u64_fallback), 285 IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3); 286 } 287 288 281 289 /** Opcode 0x66 0x0f 0x38 0x01. */ 282 FNIEMOP_STUB(iemOp_phaddw_Vx_Wx); 290 FNIEMOP_DEF(iemOp_phaddw_Vx_Wx) 291 { 292 IEMOP_MNEMONIC2(RM, PHADDW, phaddw, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 293 return FNIEMOP_CALL_1(iemOpCommonSsse3_FullFull_To_Full, 294 IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phaddw_u128, iemAImpl_phaddw_u128_fallback)); 295 296 } 297 298 283 299 /** Opcode 0x0f 0x38 0x02. */ 284 FNIEMOP_STUB(iemOp_phaddd_Pq_Qq); 300 FNIEMOP_DEF(iemOp_phaddd_Pq_Qq) 301 { 302 IEMOP_MNEMONIC2(RM, PHADDD, phaddd, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 303 return FNIEMOP_CALL_2(iemOpCommonMmx_FullFull_To_Full_Ex, 304 IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phaddd_u64,&iemAImpl_phaddd_u64_fallback), 305 IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSsse3); 306 } 307 308 285 309 /** Opcode 0x66 0x0f 0x38 0x02. */ 286 FNIEMOP_STUB(iemOp_phaddd_Vx_Wx); 310 FNIEMOP_DEF(iemOp_phaddd_Vx_Wx) 311 { 312 IEMOP_MNEMONIC2(RM, PHADDD, phaddd, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 313 return FNIEMOP_CALL_1(iemOpCommonSsse3_FullFull_To_Full, 314 IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_phaddd_u128, iemAImpl_phaddd_u128_fallback)); 315 316 } 317 318 287 319 /** Opcode 0x0f 0x38 0x03. */ 288 320 FNIEMOP_STUB(iemOp_phaddsw_Pq_Qq); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap2.cpp.h
r96034 r96046 37 37 38 38 /* Opcode VEX.0F38 0x01 - invalid. */ 39 40 39 41 /** Opcode VEX.66.0F38 0x01. */ 40 FNIEMOP_STUB(iemOp_vphaddw_Vx_Hx_Wx); 42 FNIEMOP_DEF(iemOp_vphaddw_Vx_Hx_Wx) 43 { 44 IEMOP_MNEMONIC3(VEX_RVM, VPHADDW, vphaddw, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); 45 IEMOPMEDIAOPTF3_INIT_VARS(vphaddw); 46 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx_Opt, IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &s_Host, &s_Fallback)); 47 } 48 49 41 50 /* Opcode VEX.0F38 0x02 - invalid. */ 51 52 42 53 /** Opcode VEX.66.0F38 0x02. */ 43 FNIEMOP_STUB(iemOp_vphaddd_Vx_Hx_Wx); 54 FNIEMOP_DEF(iemOp_vphaddd_Vx_Hx_Wx) 55 { 56 IEMOP_MNEMONIC3(VEX_RVM, VPHADDD, vphaddd, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); 57 IEMOPMEDIAOPTF3_INIT_VARS(vphaddd); 58 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx_Opt, IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &s_Host, &s_Fallback)); 59 } 60 61 44 62 /* Opcode VEX.0F38 0x03 - invalid. */ 45 63 /** Opcode VEX.66.0F38 0x03. */ -
trunk/src/VBox/VMM/include/IEMInternal.h
r96034 r96046 1787 1787 FNIEMAIMPLMEDIAF2U64 iemAImpl_psignw_u64, iemAImpl_psignw_u64_fallback; 1788 1788 FNIEMAIMPLMEDIAF2U64 iemAImpl_psignd_u64, iemAImpl_psignd_u64_fallback; 1789 FNIEMAIMPLMEDIAF2U64 iemAImpl_phaddw_u64, iemAImpl_phaddw_u64_fallback; 1790 FNIEMAIMPLMEDIAF2U64 iemAImpl_phaddd_u64, iemAImpl_phaddd_u64_fallback; 1789 1791 FNIEMAIMPLMEDIAOPTF2U64 iemAImpl_psllw_u64, iemAImpl_psrlw_u64, iemAImpl_psraw_u64; 1790 1792 FNIEMAIMPLMEDIAOPTF2U64 iemAImpl_pslld_u64, iemAImpl_psrld_u64, iemAImpl_psrad_u64; … … 1831 1833 FNIEMAIMPLMEDIAF2U128 iemAImpl_psignw_u128, iemAImpl_psignw_u128_fallback; 1832 1834 FNIEMAIMPLMEDIAF2U128 iemAImpl_psignd_u128, iemAImpl_psignd_u128_fallback; 1835 FNIEMAIMPLMEDIAF2U128 iemAImpl_phaddw_u128, iemAImpl_phaddw_u128_fallback; 1836 FNIEMAIMPLMEDIAF2U128 iemAImpl_phaddd_u128, iemAImpl_phaddd_u128_fallback; 1833 1837 FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_packsswb_u128, iemAImpl_packuswb_u128; 1834 1838 FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_packssdw_u128, iemAImpl_packusdw_u128; … … 1885 1889 FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpsignw_u128, iemAImpl_vpsignw_u128_fallback; 1886 1890 FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vpsignd_u128, iemAImpl_vpsignd_u128_fallback; 1891 FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vphaddw_u128, iemAImpl_vphaddw_u128_fallback; 1892 FNIEMAIMPLMEDIAOPTF3U128 iemAImpl_vphaddd_u128, iemAImpl_vphaddd_u128_fallback; 1887 1893 1888 1894 FNIEMAIMPLMEDIAOPTF2U128 iemAImpl_vpabsb_u128, iemAImpl_vpabsb_u128_fallback; … … 1936 1942 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpsignw_u256, iemAImpl_vpsignw_u256_fallback; 1937 1943 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vpsignd_u256, iemAImpl_vpsignd_u256_fallback; 1944 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vphaddw_u256, iemAImpl_vphaddw_u256_fallback; 1945 FNIEMAIMPLMEDIAOPTF3U256 iemAImpl_vphaddd_u256, iemAImpl_vphaddd_u256_fallback; 1938 1946 1939 1947 FNIEMAIMPLMEDIAOPTF2U256 iemAImpl_vpabsb_u256, iemAImpl_vpabsb_u256_fallback;
Note:
See TracChangeset
for help on using the changeset viewer.