Changeset 95449 in vbox for trunk/src/VBox
- Timestamp:
- Jun 30, 2022 8:24:25 AM (3 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
r95441 r95449 3604 3604 IEMIMPL_MEDIA_F2 pcmpeqw 3605 3605 IEMIMPL_MEDIA_F2 pcmpeqd 3606 IEMIMPL_MEDIA_F2 pcmpgtb 3607 IEMIMPL_MEDIA_F2 pcmpgtw 3608 IEMIMPL_MEDIA_F2 pcmpgtd 3606 3609 3607 3610 … … 3840 3843 IEMIMPL_MEDIA_F3 vpor 3841 3844 IEMIMPL_MEDIA_F3 vpxor 3842 3845 IEMIMPL_MEDIA_F3 vpcmpeqb 3846 IEMIMPL_MEDIA_F3 vpcmpeqw 3847 IEMIMPL_MEDIA_F3 vpcmpeqd 3848 IEMIMPL_MEDIA_F3 vpcmpgtb 3849 IEMIMPL_MEDIA_F3 vpcmpgtw 3850 IEMIMPL_MEDIA_F3 vpcmpgtd 3851 -
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r95441 r95449 7028 7028 #endif /* IEM_WITH_VEX */ 7029 7029 7030 #ifdef IEM_WITHOUT_ASSEMBLY7031 7032 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqb_u64,(PCX86FXSTATE pFpuState, uint64_t *pu64Dst, uint64_t const *pu64Src))7033 {7034 RT_NOREF(pFpuState, pu64Dst, pu64Src);7035 AssertReleaseFailed();7036 }7037 7038 7039 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqb_u128,(PCX86FXSTATE pFpuState, PRTUINT128U pu128Dst, PCRTUINT128U pu128Src))7040 {7041 RT_NOREF(pFpuState, pu128Dst, pu128Src);7042 AssertReleaseFailed();7043 }7044 7045 7046 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqw_u64,(PCX86FXSTATE pFpuState, uint64_t *pu64Dst, uint64_t const *pu64Src))7047 {7048 RT_NOREF(pFpuState, pu64Dst, pu64Src);7049 AssertReleaseFailed();7050 }7051 7052 7053 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqw_u128,(PCX86FXSTATE pFpuState, PRTUINT128U pu128Dst, PCRTUINT128U pu128Src))7054 {7055 RT_NOREF(pFpuState, pu128Dst, pu128Src);7056 AssertReleaseFailed();7057 }7058 7059 7060 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqd_u64,(PCX86FXSTATE pFpuState, uint64_t *pu64Dst, uint64_t const *pu64Src))7061 {7062 RT_NOREF(pFpuState, pu64Dst, pu64Src);7063 AssertReleaseFailed();7064 }7065 7066 7067 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqd_u128,(PCX86FXSTATE pFpuState, PRTUINT128U pu128Dst, PCRTUINT128U pu128Src))7068 {7069 RT_NOREF(pFpuState, pu128Dst, pu128Src);7070 AssertReleaseFailed();7071 }7072 7073 #endif /* IEM_WITHOUT_ASSEMBLY */7074 7075 7030 7076 7031 /* … … 7239 7194 7240 7195 /* 7196 * PCMPEQB / VPCMPEQB 7197 */ 7198 #ifdef IEM_WITHOUT_ASSEMBLY 7199 7200 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqb_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc)) 7201 { 7202 RT_NOREF(pFpuState); 7203 RTUINT64U uSrc1 = { *puDst }; 7204 RTUINT64U uSrc2 = { *puSrc }; 7205 RTUINT64U uDst; 7206 uDst.au8[0] = uSrc1.au8[0] == uSrc2.au8[0] ? 0xff : 0; 7207 uDst.au8[1] = uSrc1.au8[1] == uSrc2.au8[1] ? 0xff : 0; 7208 uDst.au8[2] = uSrc1.au8[2] == uSrc2.au8[2] ? 0xff : 0; 7209 uDst.au8[3] = uSrc1.au8[3] == uSrc2.au8[3] ? 0xff : 0; 7210 uDst.au8[4] = uSrc1.au8[4] == uSrc2.au8[4] ? 0xff : 0; 7211 uDst.au8[5] = uSrc1.au8[5] == uSrc2.au8[5] ? 0xff : 0; 7212 uDst.au8[6] = uSrc1.au8[6] == uSrc2.au8[6] ? 0xff : 0; 7213 uDst.au8[7] = uSrc1.au8[7] == uSrc2.au8[7] ? 0xff : 0; 7214 *puDst = uDst.u; 7215 } 7216 7217 7218 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqb_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)) 7219 { 7220 RT_NOREF(pFpuState); 7221 RTUINT128U uSrc1 = *puDst; 7222 puDst->au8[0] = uSrc1.au8[0] == puSrc->au8[0] ? UINT8_MAX : 0; 7223 puDst->au8[1] = uSrc1.au8[1] == puSrc->au8[1] ? UINT8_MAX : 0; 7224 puDst->au8[2] = uSrc1.au8[2] == puSrc->au8[2] ? UINT8_MAX : 0; 7225 puDst->au8[3] = uSrc1.au8[3] == puSrc->au8[3] ? UINT8_MAX : 0; 7226 puDst->au8[4] = uSrc1.au8[4] == puSrc->au8[4] ? UINT8_MAX : 0; 7227 puDst->au8[5] = uSrc1.au8[5] == puSrc->au8[5] ? UINT8_MAX : 0; 7228 puDst->au8[6] = uSrc1.au8[6] == puSrc->au8[6] ? UINT8_MAX : 0; 7229 puDst->au8[7] = uSrc1.au8[7] == puSrc->au8[7] ? UINT8_MAX : 0; 7230 puDst->au8[8] = uSrc1.au8[8] == puSrc->au8[8] ? UINT8_MAX : 0; 7231 puDst->au8[9] = uSrc1.au8[9] == puSrc->au8[9] ? UINT8_MAX : 0; 7232 puDst->au8[10] = uSrc1.au8[10] == puSrc->au8[10] ? UINT8_MAX : 0; 7233 puDst->au8[11] = uSrc1.au8[11] == puSrc->au8[11] ? UINT8_MAX : 0; 7234 puDst->au8[12] = uSrc1.au8[12] == puSrc->au8[12] ? UINT8_MAX : 0; 7235 puDst->au8[13] = uSrc1.au8[13] == puSrc->au8[13] ? UINT8_MAX : 0; 7236 puDst->au8[14] = uSrc1.au8[14] == puSrc->au8[14] ? UINT8_MAX : 0; 7237 puDst->au8[15] = uSrc1.au8[15] == puSrc->au8[15] ? UINT8_MAX : 0; 7238 } 7239 7240 #endif 7241 7242 IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpeqb_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst, 7243 PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 7244 { 7245 RT_NOREF(pExtState); 7246 puDst->au8[0] = puSrc1->au8[0] == puSrc2->au8[0] ? UINT8_MAX : 0; 7247 puDst->au8[1] = puSrc1->au8[1] == puSrc2->au8[1] ? UINT8_MAX : 0; 7248 puDst->au8[2] = puSrc1->au8[2] == puSrc2->au8[2] ? UINT8_MAX : 0; 7249 puDst->au8[3] = puSrc1->au8[3] == puSrc2->au8[3] ? UINT8_MAX : 0; 7250 puDst->au8[4] = puSrc1->au8[4] == puSrc2->au8[4] ? UINT8_MAX : 0; 7251 puDst->au8[5] = puSrc1->au8[5] == puSrc2->au8[5] ? UINT8_MAX : 0; 7252 puDst->au8[6] = puSrc1->au8[6] == puSrc2->au8[6] ? UINT8_MAX : 0; 7253 puDst->au8[7] = puSrc1->au8[7] == puSrc2->au8[7] ? UINT8_MAX : 0; 7254 puDst->au8[8] = puSrc1->au8[8] == puSrc2->au8[8] ? UINT8_MAX : 0; 7255 puDst->au8[9] = puSrc1->au8[9] == puSrc2->au8[9] ? UINT8_MAX : 0; 7256 puDst->au8[10] = puSrc1->au8[10] == puSrc2->au8[10] ? UINT8_MAX : 0; 7257 puDst->au8[11] = puSrc1->au8[11] == puSrc2->au8[11] ? UINT8_MAX : 0; 7258 puDst->au8[12] = puSrc1->au8[12] == puSrc2->au8[12] ? UINT8_MAX : 0; 7259 puDst->au8[13] = puSrc1->au8[13] == puSrc2->au8[13] ? UINT8_MAX : 0; 7260 puDst->au8[14] = puSrc1->au8[14] == puSrc2->au8[14] ? UINT8_MAX : 0; 7261 puDst->au8[15] = puSrc1->au8[15] == puSrc2->au8[15] ? UINT8_MAX : 0; 7262 } 7263 7264 IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpeqb_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst, 7265 PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 7266 { 7267 RT_NOREF(pExtState); 7268 puDst->au8[0] = puSrc1->au8[0] == puSrc2->au8[0] ? UINT8_MAX : 0; 7269 puDst->au8[1] = puSrc1->au8[1] == puSrc2->au8[1] ? UINT8_MAX : 0; 7270 puDst->au8[2] = puSrc1->au8[2] == puSrc2->au8[2] ? UINT8_MAX : 0; 7271 puDst->au8[3] = puSrc1->au8[3] == puSrc2->au8[3] ? UINT8_MAX : 0; 7272 puDst->au8[4] = puSrc1->au8[4] == puSrc2->au8[4] ? UINT8_MAX : 0; 7273 puDst->au8[5] = puSrc1->au8[5] == puSrc2->au8[5] ? UINT8_MAX : 0; 7274 puDst->au8[6] = puSrc1->au8[6] == puSrc2->au8[6] ? UINT8_MAX : 0; 7275 puDst->au8[7] = puSrc1->au8[7] == puSrc2->au8[7] ? UINT8_MAX : 0; 7276 puDst->au8[8] = puSrc1->au8[8] == puSrc2->au8[8] ? UINT8_MAX : 0; 7277 puDst->au8[9] = puSrc1->au8[9] == puSrc2->au8[9] ? UINT8_MAX : 0; 7278 puDst->au8[10] = puSrc1->au8[10] == puSrc2->au8[10] ? UINT8_MAX : 0; 7279 puDst->au8[11] = puSrc1->au8[11] == puSrc2->au8[11] ? UINT8_MAX : 0; 7280 puDst->au8[12] = puSrc1->au8[12] == puSrc2->au8[12] ? UINT8_MAX : 0; 7281 puDst->au8[13] = puSrc1->au8[13] == puSrc2->au8[13] ? UINT8_MAX : 0; 7282 puDst->au8[14] = puSrc1->au8[14] == puSrc2->au8[14] ? UINT8_MAX : 0; 7283 puDst->au8[15] = puSrc1->au8[15] == puSrc2->au8[15] ? UINT8_MAX : 0; 7284 puDst->au8[16] = puSrc1->au8[16] == puSrc2->au8[16] ? UINT8_MAX : 0; 7285 puDst->au8[17] = puSrc1->au8[17] == puSrc2->au8[17] ? UINT8_MAX : 0; 7286 puDst->au8[18] = puSrc1->au8[18] == puSrc2->au8[18] ? UINT8_MAX : 0; 7287 puDst->au8[19] = puSrc1->au8[19] == puSrc2->au8[19] ? UINT8_MAX : 0; 7288 puDst->au8[20] = puSrc1->au8[20] == puSrc2->au8[20] ? UINT8_MAX : 0; 7289 puDst->au8[21] = puSrc1->au8[21] == puSrc2->au8[21] ? UINT8_MAX : 0; 7290 puDst->au8[22] = puSrc1->au8[22] == puSrc2->au8[22] ? UINT8_MAX : 0; 7291 puDst->au8[23] = puSrc1->au8[23] == puSrc2->au8[23] ? UINT8_MAX : 0; 7292 puDst->au8[24] = puSrc1->au8[24] == puSrc2->au8[24] ? UINT8_MAX : 0; 7293 puDst->au8[25] = puSrc1->au8[25] == puSrc2->au8[25] ? UINT8_MAX : 0; 7294 puDst->au8[26] = puSrc1->au8[26] == puSrc2->au8[26] ? UINT8_MAX : 0; 7295 puDst->au8[27] = puSrc1->au8[27] == puSrc2->au8[27] ? UINT8_MAX : 0; 7296 puDst->au8[28] = puSrc1->au8[28] == puSrc2->au8[28] ? UINT8_MAX : 0; 7297 puDst->au8[29] = puSrc1->au8[29] == puSrc2->au8[29] ? UINT8_MAX : 0; 7298 puDst->au8[30] = puSrc1->au8[30] == puSrc2->au8[30] ? UINT8_MAX : 0; 7299 puDst->au8[31] = puSrc1->au8[31] == puSrc2->au8[31] ? UINT8_MAX : 0; 7300 } 7301 7302 7303 /* 7304 * PCMPEQW / VPCMPEQW 7305 */ 7306 #ifdef IEM_WITHOUT_ASSEMBLY 7307 7308 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqw_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc)) 7309 { 7310 RT_NOREF(pFpuState); 7311 RTUINT64U uSrc1 = { *puDst }; 7312 RTUINT64U uSrc2 = { *puSrc }; 7313 RTUINT64U uDst; 7314 uDst.au16[0] = uSrc1.au16[0] == uSrc2.au16[0] ? UINT16_MAX : 0; 7315 uDst.au16[1] = uSrc1.au16[1] == uSrc2.au16[1] ? UINT16_MAX : 0; 7316 uDst.au16[2] = uSrc1.au16[2] == uSrc2.au16[2] ? UINT16_MAX : 0; 7317 uDst.au16[3] = uSrc1.au16[3] == uSrc2.au16[3] ? UINT16_MAX : 0; 7318 *puDst = uDst.u; 7319 } 7320 7321 7322 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqw_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)) 7323 { 7324 RT_NOREF(pFpuState); 7325 RTUINT128U uSrc1 = *puDst; 7326 puDst->au16[0] = uSrc1.au16[0] == puSrc->au16[0] ? UINT16_MAX : 0; 7327 puDst->au16[1] = uSrc1.au16[1] == puSrc->au16[1] ? UINT16_MAX : 0; 7328 puDst->au16[2] = uSrc1.au16[2] == puSrc->au16[2] ? UINT16_MAX : 0; 7329 puDst->au16[3] = uSrc1.au16[3] == puSrc->au16[3] ? UINT16_MAX : 0; 7330 puDst->au16[4] = uSrc1.au16[4] == puSrc->au16[4] ? UINT16_MAX : 0; 7331 puDst->au16[5] = uSrc1.au16[5] == puSrc->au16[5] ? UINT16_MAX : 0; 7332 puDst->au16[6] = uSrc1.au16[6] == puSrc->au16[6] ? UINT16_MAX : 0; 7333 puDst->au16[7] = uSrc1.au16[7] == puSrc->au16[7] ? UINT16_MAX : 0; 7334 } 7335 7336 #endif 7337 7338 IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpeqw_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst, 7339 PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 7340 { 7341 RT_NOREF(pExtState); 7342 puDst->au16[0] = puSrc1->au16[0] == puSrc2->au16[0] ? UINT16_MAX : 0; 7343 puDst->au16[1] = puSrc1->au16[1] == puSrc2->au16[1] ? UINT16_MAX : 0; 7344 puDst->au16[2] = puSrc1->au16[2] == puSrc2->au16[2] ? UINT16_MAX : 0; 7345 puDst->au16[3] = puSrc1->au16[3] == puSrc2->au16[3] ? UINT16_MAX : 0; 7346 puDst->au16[4] = puSrc1->au16[4] == puSrc2->au16[4] ? UINT16_MAX : 0; 7347 puDst->au16[5] = puSrc1->au16[5] == puSrc2->au16[5] ? UINT16_MAX : 0; 7348 puDst->au16[6] = puSrc1->au16[6] == puSrc2->au16[6] ? UINT16_MAX : 0; 7349 puDst->au16[7] = puSrc1->au16[7] == puSrc2->au16[7] ? UINT16_MAX : 0; 7350 } 7351 7352 IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpeqw_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst, 7353 PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 7354 { 7355 RT_NOREF(pExtState); 7356 puDst->au16[0] = puSrc1->au16[0] == puSrc2->au16[0] ? UINT16_MAX : 0; 7357 puDst->au16[1] = puSrc1->au16[1] == puSrc2->au16[1] ? UINT16_MAX : 0; 7358 puDst->au16[2] = puSrc1->au16[2] == puSrc2->au16[2] ? UINT16_MAX : 0; 7359 puDst->au16[3] = puSrc1->au16[3] == puSrc2->au16[3] ? UINT16_MAX : 0; 7360 puDst->au16[4] = puSrc1->au16[4] == puSrc2->au16[4] ? UINT16_MAX : 0; 7361 puDst->au16[5] = puSrc1->au16[5] == puSrc2->au16[5] ? UINT16_MAX : 0; 7362 puDst->au16[6] = puSrc1->au16[6] == puSrc2->au16[6] ? UINT16_MAX : 0; 7363 puDst->au16[7] = puSrc1->au16[7] == puSrc2->au16[7] ? UINT16_MAX : 0; 7364 puDst->au16[8] = puSrc1->au16[8] == puSrc2->au16[8] ? UINT16_MAX : 0; 7365 puDst->au16[9] = puSrc1->au16[9] == puSrc2->au16[9] ? UINT16_MAX : 0; 7366 puDst->au16[10] = puSrc1->au16[10] == puSrc2->au16[10] ? UINT16_MAX : 0; 7367 puDst->au16[11] = puSrc1->au16[11] == puSrc2->au16[11] ? UINT16_MAX : 0; 7368 puDst->au16[12] = puSrc1->au16[12] == puSrc2->au16[12] ? UINT16_MAX : 0; 7369 puDst->au16[13] = puSrc1->au16[13] == puSrc2->au16[13] ? UINT16_MAX : 0; 7370 puDst->au16[14] = puSrc1->au16[14] == puSrc2->au16[14] ? UINT16_MAX : 0; 7371 puDst->au16[15] = puSrc1->au16[15] == puSrc2->au16[15] ? UINT16_MAX : 0; 7372 } 7373 7374 7375 /* 7376 * PCMPEQD / VPCMPEQD. 7377 */ 7378 #ifdef IEM_WITHOUT_ASSEMBLY 7379 7380 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqd_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc)) 7381 { 7382 RT_NOREF(pFpuState); 7383 RTUINT64U uSrc1 = { *puDst }; 7384 RTUINT64U uSrc2 = { *puSrc }; 7385 RTUINT64U uDst; 7386 uDst.au32[0] = uSrc1.au32[0] == uSrc2.au32[0] ? UINT32_MAX : 0; 7387 uDst.au32[1] = uSrc1.au32[1] == uSrc2.au32[1] ? UINT32_MAX : 0; 7388 *puDst = uDst.u; 7389 } 7390 7391 7392 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpeqd_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)) 7393 { 7394 RT_NOREF(pFpuState); 7395 RTUINT128U uSrc1 = *puDst; 7396 puDst->au32[0] = uSrc1.au32[0] == puSrc->au32[0] ? UINT32_MAX : 0; 7397 puDst->au32[1] = uSrc1.au32[1] == puSrc->au32[1] ? UINT32_MAX : 0; 7398 puDst->au32[2] = uSrc1.au32[2] == puSrc->au32[2] ? UINT32_MAX : 0; 7399 puDst->au32[3] = uSrc1.au32[3] == puSrc->au32[3] ? UINT32_MAX : 0; 7400 } 7401 7402 #endif /* IEM_WITHOUT_ASSEMBLY */ 7403 7404 IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpeqd_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst, 7405 PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 7406 { 7407 RT_NOREF(pExtState); 7408 puDst->au32[0] = puSrc1->au32[0] == puSrc2->au32[0] ? UINT32_MAX : 0; 7409 puDst->au32[1] = puSrc1->au32[1] == puSrc2->au32[1] ? UINT32_MAX : 0; 7410 puDst->au32[2] = puSrc1->au32[2] == puSrc2->au32[2] ? UINT32_MAX : 0; 7411 puDst->au32[3] = puSrc1->au32[3] == puSrc2->au32[3] ? UINT32_MAX : 0; 7412 } 7413 7414 IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpeqd_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst, 7415 PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 7416 { 7417 RT_NOREF(pExtState); 7418 puDst->au32[0] = puSrc1->au32[0] == puSrc2->au32[0] ? UINT32_MAX : 0; 7419 puDst->au32[1] = puSrc1->au32[1] == puSrc2->au32[1] ? UINT32_MAX : 0; 7420 puDst->au32[2] = puSrc1->au32[2] == puSrc2->au32[2] ? UINT32_MAX : 0; 7421 puDst->au32[3] = puSrc1->au32[3] == puSrc2->au32[3] ? UINT32_MAX : 0; 7422 puDst->au32[4] = puSrc1->au32[4] == puSrc2->au32[4] ? UINT32_MAX : 0; 7423 puDst->au32[5] = puSrc1->au32[5] == puSrc2->au32[5] ? UINT32_MAX : 0; 7424 puDst->au32[6] = puSrc1->au32[6] == puSrc2->au32[6] ? UINT32_MAX : 0; 7425 puDst->au32[7] = puSrc1->au32[7] == puSrc2->au32[7] ? UINT32_MAX : 0; 7426 } 7427 7428 7429 /* 7430 * PCMPGTB / VPCMPGTB 7431 */ 7432 #ifdef IEM_WITHOUT_ASSEMBLY 7433 7434 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpgtb_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc)) 7435 { 7436 RT_NOREF(pFpuState); 7437 RTUINT64U uSrc1 = { *puDst }; 7438 RTUINT64U uSrc2 = { *puSrc }; 7439 RTUINT64U uDst; 7440 uDst.au8[0] = uSrc1.ai8[0] > uSrc2.ai8[0] ? UINT8_MAX : 0; 7441 uDst.au8[1] = uSrc1.ai8[1] > uSrc2.ai8[1] ? UINT8_MAX : 0; 7442 uDst.au8[2] = uSrc1.ai8[2] > uSrc2.ai8[2] ? UINT8_MAX : 0; 7443 uDst.au8[3] = uSrc1.ai8[3] > uSrc2.ai8[3] ? UINT8_MAX : 0; 7444 uDst.au8[4] = uSrc1.ai8[4] > uSrc2.ai8[4] ? UINT8_MAX : 0; 7445 uDst.au8[5] = uSrc1.ai8[5] > uSrc2.ai8[5] ? UINT8_MAX : 0; 7446 uDst.au8[6] = uSrc1.ai8[6] > uSrc2.ai8[6] ? UINT8_MAX : 0; 7447 uDst.au8[7] = uSrc1.ai8[7] > uSrc2.ai8[7] ? UINT8_MAX : 0; 7448 *puDst = uDst.u; 7449 } 7450 7451 7452 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpgtb_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)) 7453 { 7454 RT_NOREF(pFpuState); 7455 RTUINT128U uSrc1 = *puDst; 7456 puDst->au8[0] = uSrc1.ai8[0] > puSrc->ai8[0] ? UINT8_MAX : 0; 7457 puDst->au8[1] = uSrc1.ai8[1] > puSrc->ai8[1] ? UINT8_MAX : 0; 7458 puDst->au8[2] = uSrc1.ai8[2] > puSrc->ai8[2] ? UINT8_MAX : 0; 7459 puDst->au8[3] = uSrc1.ai8[3] > puSrc->ai8[3] ? UINT8_MAX : 0; 7460 puDst->au8[4] = uSrc1.ai8[4] > puSrc->ai8[4] ? UINT8_MAX : 0; 7461 puDst->au8[5] = uSrc1.ai8[5] > puSrc->ai8[5] ? UINT8_MAX : 0; 7462 puDst->au8[6] = uSrc1.ai8[6] > puSrc->ai8[6] ? UINT8_MAX : 0; 7463 puDst->au8[7] = uSrc1.ai8[7] > puSrc->ai8[7] ? UINT8_MAX : 0; 7464 puDst->au8[8] = uSrc1.ai8[8] > puSrc->ai8[8] ? UINT8_MAX : 0; 7465 puDst->au8[9] = uSrc1.ai8[9] > puSrc->ai8[9] ? UINT8_MAX : 0; 7466 puDst->au8[10] = uSrc1.ai8[10] > puSrc->ai8[10] ? UINT8_MAX : 0; 7467 puDst->au8[11] = uSrc1.ai8[11] > puSrc->ai8[11] ? UINT8_MAX : 0; 7468 puDst->au8[12] = uSrc1.ai8[12] > puSrc->ai8[12] ? UINT8_MAX : 0; 7469 puDst->au8[13] = uSrc1.ai8[13] > puSrc->ai8[13] ? UINT8_MAX : 0; 7470 puDst->au8[14] = uSrc1.ai8[14] > puSrc->ai8[14] ? UINT8_MAX : 0; 7471 puDst->au8[15] = uSrc1.ai8[15] > puSrc->ai8[15] ? UINT8_MAX : 0; 7472 } 7473 7474 #endif 7475 7476 IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpgtb_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst, 7477 PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 7478 { 7479 RT_NOREF(pExtState); 7480 puDst->au8[0] = puSrc1->ai8[0] > puSrc2->ai8[0] ? UINT8_MAX : 0; 7481 puDst->au8[1] = puSrc1->ai8[1] > puSrc2->ai8[1] ? UINT8_MAX : 0; 7482 puDst->au8[2] = puSrc1->ai8[2] > puSrc2->ai8[2] ? UINT8_MAX : 0; 7483 puDst->au8[3] = puSrc1->ai8[3] > puSrc2->ai8[3] ? UINT8_MAX : 0; 7484 puDst->au8[4] = puSrc1->ai8[4] > puSrc2->ai8[4] ? UINT8_MAX : 0; 7485 puDst->au8[5] = puSrc1->ai8[5] > puSrc2->ai8[5] ? UINT8_MAX : 0; 7486 puDst->au8[6] = puSrc1->ai8[6] > puSrc2->ai8[6] ? UINT8_MAX : 0; 7487 puDst->au8[7] = puSrc1->ai8[7] > puSrc2->ai8[7] ? UINT8_MAX : 0; 7488 puDst->au8[8] = puSrc1->ai8[8] > puSrc2->ai8[8] ? UINT8_MAX : 0; 7489 puDst->au8[9] = puSrc1->ai8[9] > puSrc2->ai8[9] ? UINT8_MAX : 0; 7490 puDst->au8[10] = puSrc1->ai8[10] > puSrc2->ai8[10] ? UINT8_MAX : 0; 7491 puDst->au8[11] = puSrc1->ai8[11] > puSrc2->ai8[11] ? UINT8_MAX : 0; 7492 puDst->au8[12] = puSrc1->ai8[12] > puSrc2->ai8[12] ? UINT8_MAX : 0; 7493 puDst->au8[13] = puSrc1->ai8[13] > puSrc2->ai8[13] ? UINT8_MAX : 0; 7494 puDst->au8[14] = puSrc1->ai8[14] > puSrc2->ai8[14] ? UINT8_MAX : 0; 7495 puDst->au8[15] = puSrc1->ai8[15] > puSrc2->ai8[15] ? UINT8_MAX : 0; 7496 } 7497 7498 IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpgtb_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst, 7499 PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 7500 { 7501 RT_NOREF(pExtState); 7502 puDst->au8[0] = puSrc1->ai8[0] > puSrc2->ai8[0] ? UINT8_MAX : 0; 7503 puDst->au8[1] = puSrc1->ai8[1] > puSrc2->ai8[1] ? UINT8_MAX : 0; 7504 puDst->au8[2] = puSrc1->ai8[2] > puSrc2->ai8[2] ? UINT8_MAX : 0; 7505 puDst->au8[3] = puSrc1->ai8[3] > puSrc2->ai8[3] ? UINT8_MAX : 0; 7506 puDst->au8[4] = puSrc1->ai8[4] > puSrc2->ai8[4] ? UINT8_MAX : 0; 7507 puDst->au8[5] = puSrc1->ai8[5] > puSrc2->ai8[5] ? UINT8_MAX : 0; 7508 puDst->au8[6] = puSrc1->ai8[6] > puSrc2->ai8[6] ? UINT8_MAX : 0; 7509 puDst->au8[7] = puSrc1->ai8[7] > puSrc2->ai8[7] ? UINT8_MAX : 0; 7510 puDst->au8[8] = puSrc1->ai8[8] > puSrc2->ai8[8] ? UINT8_MAX : 0; 7511 puDst->au8[9] = puSrc1->ai8[9] > puSrc2->ai8[9] ? UINT8_MAX : 0; 7512 puDst->au8[10] = puSrc1->ai8[10] > puSrc2->ai8[10] ? UINT8_MAX : 0; 7513 puDst->au8[11] = puSrc1->ai8[11] > puSrc2->ai8[11] ? UINT8_MAX : 0; 7514 puDst->au8[12] = puSrc1->ai8[12] > puSrc2->ai8[12] ? UINT8_MAX : 0; 7515 puDst->au8[13] = puSrc1->ai8[13] > puSrc2->ai8[13] ? UINT8_MAX : 0; 7516 puDst->au8[14] = puSrc1->ai8[14] > puSrc2->ai8[14] ? UINT8_MAX : 0; 7517 puDst->au8[15] = puSrc1->ai8[15] > puSrc2->ai8[15] ? UINT8_MAX : 0; 7518 puDst->au8[16] = puSrc1->ai8[16] > puSrc2->ai8[16] ? UINT8_MAX : 0; 7519 puDst->au8[17] = puSrc1->ai8[17] > puSrc2->ai8[17] ? UINT8_MAX : 0; 7520 puDst->au8[18] = puSrc1->ai8[18] > puSrc2->ai8[18] ? UINT8_MAX : 0; 7521 puDst->au8[19] = puSrc1->ai8[19] > puSrc2->ai8[19] ? UINT8_MAX : 0; 7522 puDst->au8[20] = puSrc1->ai8[20] > puSrc2->ai8[20] ? UINT8_MAX : 0; 7523 puDst->au8[21] = puSrc1->ai8[21] > puSrc2->ai8[21] ? UINT8_MAX : 0; 7524 puDst->au8[22] = puSrc1->ai8[22] > puSrc2->ai8[22] ? UINT8_MAX : 0; 7525 puDst->au8[23] = puSrc1->ai8[23] > puSrc2->ai8[23] ? UINT8_MAX : 0; 7526 puDst->au8[24] = puSrc1->ai8[24] > puSrc2->ai8[24] ? UINT8_MAX : 0; 7527 puDst->au8[25] = puSrc1->ai8[25] > puSrc2->ai8[25] ? UINT8_MAX : 0; 7528 puDst->au8[26] = puSrc1->ai8[26] > puSrc2->ai8[26] ? UINT8_MAX : 0; 7529 puDst->au8[27] = puSrc1->ai8[27] > puSrc2->ai8[27] ? UINT8_MAX : 0; 7530 puDst->au8[28] = puSrc1->ai8[28] > puSrc2->ai8[28] ? UINT8_MAX : 0; 7531 puDst->au8[29] = puSrc1->ai8[29] > puSrc2->ai8[29] ? UINT8_MAX : 0; 7532 puDst->au8[30] = puSrc1->ai8[30] > puSrc2->ai8[30] ? UINT8_MAX : 0; 7533 puDst->au8[31] = puSrc1->ai8[31] > puSrc2->ai8[31] ? UINT8_MAX : 0; 7534 } 7535 7536 7537 /* 7538 * PCMPGTW / VPCMPGTW 7539 */ 7540 #ifdef IEM_WITHOUT_ASSEMBLY 7541 7542 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpgtw_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc)) 7543 { 7544 RT_NOREF(pFpuState); 7545 RTUINT64U uSrc1 = { *puDst }; 7546 RTUINT64U uSrc2 = { *puSrc }; 7547 RTUINT64U uDst; 7548 uDst.au16[0] = uSrc1.ai16[0] > uSrc2.ai16[0] ? UINT16_MAX : 0; 7549 uDst.au16[1] = uSrc1.ai16[1] > uSrc2.ai16[1] ? UINT16_MAX : 0; 7550 uDst.au16[2] = uSrc1.ai16[2] > uSrc2.ai16[2] ? UINT16_MAX : 0; 7551 uDst.au16[3] = uSrc1.ai16[3] > uSrc2.ai16[3] ? UINT16_MAX : 0; 7552 *puDst = uDst.u; 7553 } 7554 7555 7556 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpgtw_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)) 7557 { 7558 RT_NOREF(pFpuState); 7559 RTUINT128U uSrc1 = *puDst; 7560 puDst->au16[0] = uSrc1.ai16[0] > puSrc->ai16[0] ? UINT16_MAX : 0; 7561 puDst->au16[1] = uSrc1.ai16[1] > puSrc->ai16[1] ? UINT16_MAX : 0; 7562 puDst->au16[2] = uSrc1.ai16[2] > puSrc->ai16[2] ? UINT16_MAX : 0; 7563 puDst->au16[3] = uSrc1.ai16[3] > puSrc->ai16[3] ? UINT16_MAX : 0; 7564 puDst->au16[4] = uSrc1.ai16[4] > puSrc->ai16[4] ? UINT16_MAX : 0; 7565 puDst->au16[5] = uSrc1.ai16[5] > puSrc->ai16[5] ? UINT16_MAX : 0; 7566 puDst->au16[6] = uSrc1.ai16[6] > puSrc->ai16[6] ? UINT16_MAX : 0; 7567 puDst->au16[7] = uSrc1.ai16[7] > puSrc->ai16[7] ? UINT16_MAX : 0; 7568 } 7569 7570 #endif 7571 7572 IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpgtw_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst, 7573 PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 7574 { 7575 RT_NOREF(pExtState); 7576 puDst->au16[0] = puSrc1->ai16[0] > puSrc2->ai16[0] ? UINT16_MAX : 0; 7577 puDst->au16[1] = puSrc1->ai16[1] > puSrc2->ai16[1] ? UINT16_MAX : 0; 7578 puDst->au16[2] = puSrc1->ai16[2] > puSrc2->ai16[2] ? UINT16_MAX : 0; 7579 puDst->au16[3] = puSrc1->ai16[3] > puSrc2->ai16[3] ? UINT16_MAX : 0; 7580 puDst->au16[4] = puSrc1->ai16[4] > puSrc2->ai16[4] ? UINT16_MAX : 0; 7581 puDst->au16[5] = puSrc1->ai16[5] > puSrc2->ai16[5] ? UINT16_MAX : 0; 7582 puDst->au16[6] = puSrc1->ai16[6] > puSrc2->ai16[6] ? UINT16_MAX : 0; 7583 puDst->au16[7] = puSrc1->ai16[7] > puSrc2->ai16[7] ? UINT16_MAX : 0; 7584 } 7585 7586 IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpgtw_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst, 7587 PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 7588 { 7589 RT_NOREF(pExtState); 7590 puDst->au16[0] = puSrc1->ai16[0] > puSrc2->ai16[0] ? UINT16_MAX : 0; 7591 puDst->au16[1] = puSrc1->ai16[1] > puSrc2->ai16[1] ? UINT16_MAX : 0; 7592 puDst->au16[2] = puSrc1->ai16[2] > puSrc2->ai16[2] ? UINT16_MAX : 0; 7593 puDst->au16[3] = puSrc1->ai16[3] > puSrc2->ai16[3] ? UINT16_MAX : 0; 7594 puDst->au16[4] = puSrc1->ai16[4] > puSrc2->ai16[4] ? UINT16_MAX : 0; 7595 puDst->au16[5] = puSrc1->ai16[5] > puSrc2->ai16[5] ? UINT16_MAX : 0; 7596 puDst->au16[6] = puSrc1->ai16[6] > puSrc2->ai16[6] ? UINT16_MAX : 0; 7597 puDst->au16[7] = puSrc1->ai16[7] > puSrc2->ai16[7] ? UINT16_MAX : 0; 7598 puDst->au16[8] = puSrc1->ai16[8] > puSrc2->ai16[8] ? UINT16_MAX : 0; 7599 puDst->au16[9] = puSrc1->ai16[9] > puSrc2->ai16[9] ? UINT16_MAX : 0; 7600 puDst->au16[10] = puSrc1->ai16[10] > puSrc2->ai16[10] ? UINT16_MAX : 0; 7601 puDst->au16[11] = puSrc1->ai16[11] > puSrc2->ai16[11] ? UINT16_MAX : 0; 7602 puDst->au16[12] = puSrc1->ai16[12] > puSrc2->ai16[12] ? UINT16_MAX : 0; 7603 puDst->au16[13] = puSrc1->ai16[13] > puSrc2->ai16[13] ? UINT16_MAX : 0; 7604 puDst->au16[14] = puSrc1->ai16[14] > puSrc2->ai16[14] ? UINT16_MAX : 0; 7605 puDst->au16[15] = puSrc1->ai16[15] > puSrc2->ai16[15] ? UINT16_MAX : 0; 7606 } 7607 7608 7609 /* 7610 * PCMPGTD / VPCMPGTD. 7611 */ 7612 #ifdef IEM_WITHOUT_ASSEMBLY 7613 7614 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpgtd_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc)) 7615 { 7616 RT_NOREF(pFpuState); 7617 RTUINT64U uSrc1 = { *puDst }; 7618 RTUINT64U uSrc2 = { *puSrc }; 7619 RTUINT64U uDst; 7620 uDst.au32[0] = uSrc1.ai32[0] > uSrc2.ai32[0] ? UINT32_MAX : 0; 7621 uDst.au32[1] = uSrc1.ai32[1] > uSrc2.ai32[1] ? UINT32_MAX : 0; 7622 *puDst = uDst.u; 7623 } 7624 7625 7626 IEM_DECL_IMPL_DEF(void, iemAImpl_pcmpgtd_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)) 7627 { 7628 RT_NOREF(pFpuState); 7629 RTUINT128U uSrc1 = *puDst; 7630 puDst->au32[0] = uSrc1.ai32[0] > puSrc->ai32[0] ? UINT32_MAX : 0; 7631 puDst->au32[1] = uSrc1.ai32[1] > puSrc->ai32[1] ? UINT32_MAX : 0; 7632 puDst->au32[2] = uSrc1.ai32[2] > puSrc->ai32[2] ? UINT32_MAX : 0; 7633 puDst->au32[3] = uSrc1.ai32[3] > puSrc->ai32[3] ? UINT32_MAX : 0; 7634 } 7635 7636 #endif /* IEM_WITHOUT_ASSEMBLY */ 7637 7638 IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpgtd_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst, 7639 PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 7640 { 7641 RT_NOREF(pExtState); 7642 puDst->au32[0] = puSrc1->ai32[0] > puSrc2->ai32[0] ? UINT32_MAX : 0; 7643 puDst->au32[1] = puSrc1->ai32[1] > puSrc2->ai32[1] ? UINT32_MAX : 0; 7644 puDst->au32[2] = puSrc1->ai32[2] > puSrc2->ai32[2] ? UINT32_MAX : 0; 7645 puDst->au32[3] = puSrc1->ai32[3] > puSrc2->ai32[3] ? UINT32_MAX : 0; 7646 } 7647 7648 IEM_DECL_IMPL_DEF(void, iemAImpl_vpcmpgtd_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst, 7649 PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 7650 { 7651 RT_NOREF(pExtState); 7652 puDst->au32[0] = puSrc1->ai32[0] > puSrc2->ai32[0] ? UINT32_MAX : 0; 7653 puDst->au32[1] = puSrc1->ai32[1] > puSrc2->ai32[1] ? UINT32_MAX : 0; 7654 puDst->au32[2] = puSrc1->ai32[2] > puSrc2->ai32[2] ? UINT32_MAX : 0; 7655 puDst->au32[3] = puSrc1->ai32[3] > puSrc2->ai32[3] ? UINT32_MAX : 0; 7656 puDst->au32[4] = puSrc1->ai32[4] > puSrc2->ai32[4] ? UINT32_MAX : 0; 7657 puDst->au32[5] = puSrc1->ai32[5] > puSrc2->ai32[5] ? UINT32_MAX : 0; 7658 puDst->au32[6] = puSrc1->ai32[6] > puSrc2->ai32[6] ? UINT32_MAX : 0; 7659 puDst->au32[7] = puSrc1->ai32[7] > puSrc2->ai32[7] ? UINT32_MAX : 0; 7660 } 7661 7662 7663 /* 7241 7664 * 7242 7665 */ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsInterpretOnly.cpp
r95441 r95449 924 924 /** Function table for the PCMPEQD instruction */ 925 925 IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pcmpeqd = { iemAImpl_pcmpeqd_u64, iemAImpl_pcmpeqd_u128 }; 926 /** Function table for the PCMPGTB instruction */ 927 IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pcmpgtb = { iemAImpl_pcmpgtb_u64, iemAImpl_pcmpgtb_u128 }; 928 /** Function table for the PCMPGTW instruction */ 929 IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pcmpgtw = { iemAImpl_pcmpgtw_u64, iemAImpl_pcmpgtw_u128 }; 930 /** Function table for the PCMPGTD instruction */ 931 IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pcmpgtd = { iemAImpl_pcmpgtd_u64, iemAImpl_pcmpgtd_u128 }; 926 932 927 933 # ifndef IEM_WITHOUT_ASSEMBLY … … 934 940 /** Function table for the VPXOR instruction */ 935 941 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpxor = { iemAImpl_vpxor_u128, iemAImpl_vpxor_u256 }; 942 /** Function table for the VPCMPEQB instruction */ 943 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpeqb = { iemAImpl_vpcmpeqb_u128, iemAImpl_vpcmpeqb_u256 }; 944 /** Function table for the VPCMPEQW instruction */ 945 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpeqw = { iemAImpl_vpcmpeqw_u128, iemAImpl_vpcmpeqw_u256 }; 946 /** Function table for the VPCMPEQD instruction */ 947 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpeqd = { iemAImpl_vpcmpeqd_u128, iemAImpl_vpcmpeqd_u256 }; 948 /** Function table for the VPCMPGTB instruction */ 949 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpgtb = { iemAImpl_vpcmpgtb_u128, iemAImpl_vpcmpgtb_u256 }; 950 /** Function table for the VPCMPGTW instruction */ 951 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpgtw = { iemAImpl_vpcmpgtw_u128, iemAImpl_vpcmpgtw_u256 }; 952 /** Function table for the VPCMPGTD instruction */ 953 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpgtd = { iemAImpl_vpcmpgtd_u128, iemAImpl_vpcmpgtd_u256 }; 936 954 # endif 955 937 956 /** Function table for the VPAND instruction, software fallback. */ 938 957 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpand_fallback = { iemAImpl_vpand_u128_fallback, iemAImpl_vpand_u256_fallback }; … … 943 962 /** Function table for the VPXOR instruction, software fallback. */ 944 963 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpxor_fallback = { iemAImpl_vpxor_u128_fallback, iemAImpl_vpxor_u256_fallback }; 964 /** Function table for the VPCMPEQB instruction, software fallback. */ 965 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpeqb_fallback = { iemAImpl_vpcmpeqb_u128_fallback, iemAImpl_vpcmpeqb_u256_fallback }; 966 /** Function table for the VPCMPEQW instruction, software fallback. */ 967 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpeqw_fallback = { iemAImpl_vpcmpeqw_u128_fallback, iemAImpl_vpcmpeqw_u256_fallback }; 968 /** Function table for the VPCMPEQD instruction, software fallback. */ 969 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpeqd_fallback = { iemAImpl_vpcmpeqd_u128_fallback, iemAImpl_vpcmpeqd_u256_fallback }; 970 /** Function table for the VPCMPGTB instruction, software fallback. */ 971 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpgtb_fallback = { iemAImpl_vpcmpgtb_u128_fallback, iemAImpl_vpcmpgtb_u256_fallback }; 972 /** Function table for the VPCMPGTW instruction, software fallback. */ 973 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpgtw_fallback = { iemAImpl_vpcmpgtw_u128_fallback, iemAImpl_vpcmpgtw_u256_fallback }; 974 /** Function table for the VPCMPGTD instruction, software fallback. */ 975 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpcmpgtd_fallback = { iemAImpl_vpcmpgtd_u128_fallback, iemAImpl_vpcmpgtd_u256_fallback }; 945 976 946 977 #endif /* !TST_IEM_CHECK_MC */ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r95445 r95449 3355 3355 /* Opcode 0xf3 0x0f 0x63 - invalid */ 3356 3356 3357 3357 3358 /** Opcode 0x0f 0x64 - pcmpgtb Pq, Qq */ 3358 FNIEMOP_STUB(iemOp_pcmpgtb_Pq_Qq); 3359 FNIEMOP_DEF(iemOp_pcmpgtb_Pq_Qq) 3360 { 3361 IEMOP_MNEMONIC2(RM, PCMPGTB, pcmpgtb, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 3362 return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full, &g_iemAImpl_pcmpgtb); 3363 } 3364 3365 3359 3366 /** Opcode 0x66 0x0f 0x64 - pcmpgtb Vx, Wx */ 3360 FNIEMOP_STUB(iemOp_pcmpgtb_Vx_Wx); 3367 FNIEMOP_DEF(iemOp_pcmpgtb_Vx_Wx) 3368 { 3369 IEMOP_MNEMONIC2(RM, PCMPGTB, pcmpgtb, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 3370 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpgtb); 3371 } 3372 3373 3361 3374 /* Opcode 0xf3 0x0f 0x64 - invalid */ 3362 3375 3376 3363 3377 /** Opcode 0x0f 0x65 - pcmpgtw Pq, Qq */ 3364 FNIEMOP_STUB(iemOp_pcmpgtw_Pq_Qq); 3378 FNIEMOP_DEF(iemOp_pcmpgtw_Pq_Qq) 3379 { 3380 IEMOP_MNEMONIC2(RM, PCMPGTW, pcmpgtw, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 3381 return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full, &g_iemAImpl_pcmpgtw); 3382 } 3383 3384 3365 3385 /** Opcode 0x66 0x0f 0x65 - pcmpgtw Vx, Wx */ 3366 FNIEMOP_STUB(iemOp_pcmpgtw_Vx_Wx); 3386 FNIEMOP_DEF(iemOp_pcmpgtw_Vx_Wx) 3387 { 3388 IEMOP_MNEMONIC2(RM, PCMPGTW, pcmpgtw, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 3389 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpgtw); 3390 } 3391 3392 3367 3393 /* Opcode 0xf3 0x0f 0x65 - invalid */ 3368 3394 3395 3369 3396 /** Opcode 0x0f 0x66 - pcmpgtd Pq, Qq */ 3370 FNIEMOP_STUB(iemOp_pcmpgtd_Pq_Qq); 3397 FNIEMOP_DEF(iemOp_pcmpgtd_Pq_Qq) 3398 { 3399 IEMOP_MNEMONIC2(RM, PCMPGTD, pcmpgtd, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 3400 return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full, &g_iemAImpl_pcmpgtd); 3401 } 3402 3403 3371 3404 /** Opcode 0x66 0x0f 0x66 - pcmpgtd Vx, Wx */ 3372 FNIEMOP_STUB(iemOp_pcmpgtd_Vx_Wx); 3405 FNIEMOP_DEF(iemOp_pcmpgtd_Vx_Wx) 3406 { 3407 IEMOP_MNEMONIC2(RM, PCMPGTD, pcmpgtd, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 3408 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpgtd); 3409 } 3410 3411 3373 3412 /* Opcode 0xf3 0x0f 0x66 - invalid */ 3374 3413 … … 4313 4352 } 4314 4353 4354 4315 4355 /** Opcode 0x66 0x0f 0x74 - pcmpeqb Vx, Wx */ 4316 4356 FNIEMOP_DEF(iemOp_pcmpeqb_Vx_Wx) … … 4320 4360 } 4321 4361 4362 4322 4363 /* Opcode 0xf3 0x0f 0x74 - invalid */ 4323 4364 /* Opcode 0xf2 0x0f 0x74 - invalid */ … … 4331 4372 } 4332 4373 4374 4333 4375 /** Opcode 0x66 0x0f 0x75 - pcmpeqw Vx, Wx */ 4334 4376 FNIEMOP_DEF(iemOp_pcmpeqw_Vx_Wx) … … 4338 4380 } 4339 4381 4382 4340 4383 /* Opcode 0xf3 0x0f 0x75 - invalid */ 4341 4384 /* Opcode 0xf2 0x0f 0x75 - invalid */ … … 4349 4392 } 4350 4393 4394 4351 4395 /** Opcode 0x66 0x0f 0x76 - pcmpeqd Vx, Wx */ 4352 4396 FNIEMOP_DEF(iemOp_pcmpeqd_Vx_Wx) … … 4355 4399 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpeqd); 4356 4400 } 4401 4357 4402 4358 4403 /* Opcode 0xf3 0x0f 0x76 - invalid */ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r95441 r95449 2065 2065 2066 2066 /* Opcode VEX.0F 0x64 - invalid */ 2067 2068 2067 2069 /** Opcode VEX.66.0F 0x64 - vpcmpgtb Vx, Hx, Wx */ 2068 FNIEMOP_STUB(iemOp_vpcmpgtb_Vx_Hx_Wx); 2070 FNIEMOP_DEF(iemOp_vpcmpgtb_Vx_Hx_Wx) 2071 { 2072 IEMOP_MNEMONIC3(VEX_RVM, VPCMPGTB, vpcmpgtb, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); 2073 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 2074 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpcmpgtb, &g_iemAImpl_vpcmpgtb_fallback)); 2075 } 2076 2077 2069 2078 /* Opcode VEX.F3.0F 0x64 - invalid */ 2070 2079 2071 2080 /* Opcode VEX.0F 0x65 - invalid */ 2081 2082 2072 2083 /** Opcode VEX.66.0F 0x65 - vpcmpgtw Vx, Hx, Wx */ 2073 FNIEMOP_STUB(iemOp_vpcmpgtw_Vx_Hx_Wx); 2084 FNIEMOP_DEF(iemOp_vpcmpgtw_Vx_Hx_Wx) 2085 { 2086 IEMOP_MNEMONIC3(VEX_RVM, VPCMPGTW, vpcmpgtw, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); 2087 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 2088 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpcmpgtw, &g_iemAImpl_vpcmpgtw_fallback)); 2089 } 2090 2091 2074 2092 /* Opcode VEX.F3.0F 0x65 - invalid */ 2075 2093 2076 2094 /* Opcode VEX.0F 0x66 - invalid */ 2095 2096 2077 2097 /** Opcode VEX.66.0F 0x66 - vpcmpgtd Vx, Hx, Wx */ 2078 FNIEMOP_STUB(iemOp_vpcmpgtd_Vx_Hx_Wx); 2098 FNIEMOP_DEF(iemOp_vpcmpgtd_Vx_Hx_Wx) 2099 { 2100 IEMOP_MNEMONIC3(VEX_RVM, VPCMPGTD, vpcmpgtd, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); 2101 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 2102 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpcmpgtd, &g_iemAImpl_vpcmpgtd_fallback)); 2103 } 2104 2105 2079 2106 /* Opcode VEX.F3.0F 0x66 - invalid */ 2080 2107 … … 2770 2797 /* Opcode VEX.0F 0x74 - invalid */ 2771 2798 2799 2772 2800 /** Opcode VEX.66.0F 0x74 - vpcmpeqb Vx, Hx, Wx */ 2773 FNIEMOP_ STUB(iemOp_vpcmpeqb_Vx_Hx_Wx);2774 //FNIEMOP_DEF(iemOp_vpcmpeqb_Vx_Hx_Wx) 2775 //{ 2776 // IEMOP_MNEMONIC(vpcmpeqb, "vpcmpeqb"); 2777 // return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpeqb);2778 //}2801 FNIEMOP_DEF(iemOp_vpcmpeqb_Vx_Hx_Wx) 2802 { 2803 IEMOP_MNEMONIC3(VEX_RVM, VPCMPEQB, vpcmpeqb, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); 2804 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 2805 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpcmpeqb, &g_iemAImpl_vpcmpeqb_fallback)); 2806 } 2779 2807 2780 2808 /* Opcode VEX.F3.0F 0x74 - invalid */ … … 2784 2812 /* Opcode VEX.0F 0x75 - invalid */ 2785 2813 2814 2786 2815 /** Opcode VEX.66.0F 0x75 - vpcmpeqw Vx, Hx, Wx */ 2787 FNIEMOP_STUB(iemOp_vpcmpeqw_Vx_Hx_Wx); 2788 //FNIEMOP_DEF(iemOp_vpcmpeqw_Vx_Hx_Wx) 2789 //{ 2790 // IEMOP_MNEMONIC(vpcmpeqw, "vpcmpeqw"); 2791 // return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpeqw); 2792 //} 2816 FNIEMOP_DEF(iemOp_vpcmpeqw_Vx_Hx_Wx) 2817 { 2818 IEMOP_MNEMONIC3(VEX_RVM, VPCMPEQW, vpcmpeqw, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); 2819 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 2820 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpcmpeqw, &g_iemAImpl_vpcmpeqw_fallback)); 2821 } 2822 2793 2823 2794 2824 /* Opcode VEX.F3.0F 0x75 - invalid */ … … 2798 2828 /* Opcode VEX.0F 0x76 - invalid */ 2799 2829 2830 2800 2831 /** Opcode VEX.66.0F 0x76 - vpcmpeqd Vx, Hx, Wx */ 2801 FNIEMOP_STUB(iemOp_vpcmpeqd_Vx_Hx_Wx); 2802 //FNIEMOP_DEF(iemOp_vpcmpeqd_Vx_Hx_Wx) 2803 //{ 2804 // IEMOP_MNEMONIC(vpcmpeqd, "vpcmpeqd"); 2805 // return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pcmpeqd); 2806 //} 2832 FNIEMOP_DEF(iemOp_vpcmpeqd_Vx_Hx_Wx) 2833 { 2834 IEMOP_MNEMONIC3(VEX_RVM, VPCMPEQD, vpcmpeqd, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); 2835 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 2836 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpcmpeqd, &g_iemAImpl_vpcmpeqd_fallback)); 2837 } 2838 2807 2839 2808 2840 /* Opcode VEX.F3.0F 0x76 - invalid */ -
trunk/src/VBox/VMM/include/IEMInternal.h
r95441 r95449 1746 1746 FNIEMAIMPLMEDIAF2U64 iemAImpl_pand_u64, iemAImpl_pandn_u64, iemAImpl_por_u64, iemAImpl_pxor_u64; 1747 1747 FNIEMAIMPLMEDIAF2U64 iemAImpl_pcmpeqb_u64, iemAImpl_pcmpeqw_u64, iemAImpl_pcmpeqd_u64; 1748 FNIEMAIMPLMEDIAF2U64 iemAImpl_pcmpgtb_u64, iemAImpl_pcmpgtw_u64, iemAImpl_pcmpgtd_u64; 1749 1748 1750 FNIEMAIMPLMEDIAF2U128 iemAImpl_pand_u128, iemAImpl_pandn_u128, iemAImpl_por_u128, iemAImpl_pxor_u128; 1749 1751 FNIEMAIMPLMEDIAF2U128 iemAImpl_pcmpeqb_u128, iemAImpl_pcmpeqw_u128, iemAImpl_pcmpeqd_u128; 1750 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpand_u128, iemAImpl_vpand_u128_fallback; 1751 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpandn_u128, iemAImpl_vpandn_u128_fallback; 1752 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpor_u128, iemAImpl_vpor_u128_fallback; 1753 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpxor_u128, iemAImpl_vpxor_u128_fallback; 1754 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpand_u256, iemAImpl_vpand_u256_fallback; 1755 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpandn_u256, iemAImpl_vpandn_u256_fallback; 1756 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpor_u256, iemAImpl_vpor_u256_fallback; 1757 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpxor_u256, iemAImpl_vpxor_u256_fallback; 1752 FNIEMAIMPLMEDIAF2U128 iemAImpl_pcmpgtb_u128, iemAImpl_pcmpgtw_u128, iemAImpl_pcmpgtd_u128; 1753 1754 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpand_u128, iemAImpl_vpand_u128_fallback; 1755 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpandn_u128, iemAImpl_vpandn_u128_fallback; 1756 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpor_u128, iemAImpl_vpor_u128_fallback; 1757 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpxor_u128, iemAImpl_vpxor_u128_fallback; 1758 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpcmpeqb_u128, iemAImpl_vpcmpeqb_u128_fallback; 1759 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpcmpeqw_u128, iemAImpl_vpcmpeqw_u128_fallback; 1760 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpcmpeqd_u128, iemAImpl_vpcmpeqd_u128_fallback; 1761 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpcmpgtb_u128, iemAImpl_vpcmpgtb_u128_fallback; 1762 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpcmpgtw_u128, iemAImpl_vpcmpgtw_u128_fallback; 1763 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpcmpgtd_u128, iemAImpl_vpcmpgtd_u128_fallback; 1764 1765 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpand_u256, iemAImpl_vpand_u256_fallback; 1766 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpandn_u256, iemAImpl_vpandn_u256_fallback; 1767 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpor_u256, iemAImpl_vpor_u256_fallback; 1768 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpxor_u256, iemAImpl_vpxor_u256_fallback; 1769 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpcmpeqb_u256, iemAImpl_vpcmpeqb_u256_fallback; 1770 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpcmpeqw_u256, iemAImpl_vpcmpeqw_u256_fallback; 1771 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpcmpeqd_u256, iemAImpl_vpcmpeqd_u256_fallback; 1772 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpcmpgtb_u256, iemAImpl_vpcmpgtb_u256_fallback; 1773 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpcmpgtw_u256, iemAImpl_vpcmpgtw_u256_fallback; 1774 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpcmpgtd_u256, iemAImpl_vpcmpgtd_u256_fallback; 1758 1775 /** @} */ 1759 1776 -
trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp
r95441 r95449 235 235 IEMOPMEDIAF2 g_iemAImpl_pcmpeqw; 236 236 IEMOPMEDIAF2 g_iemAImpl_pcmpeqd; 237 IEMOPMEDIAF2 g_iemAImpl_pcmpgtb; 238 IEMOPMEDIAF2 g_iemAImpl_pcmpgtw; 239 IEMOPMEDIAF2 g_iemAImpl_pcmpgtd; 237 240 238 241 #undef IEMTARGETCPU_EFL_BEHAVIOR_SELECT
Note:
See TracChangeset
for help on using the changeset viewer.