Changeset 107238 in vbox for trunk/src/VBox/ValidationKit
- Timestamp:
- Dec 6, 2024 4:38:44 AM (6 weeks ago)
- Location:
- trunk/src/VBox/ValidationKit/bootsectors
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4-template.mac
r107231 r107238 1460 1460 EMIT_INSTR_PLUS_ICEBP_C64 vcmppd, YMM8, YMM8, FSxBX, 01fh ;; same-register 1461 1461 1462 ;; [v]cmpss 1463 ; 1464 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM2, 000h 1465 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM2, 001h 1466 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM2, 002h 1467 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM2, 003h 1468 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM2, 004h 1469 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM2, 005h 1470 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM2, 006h 1471 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM2, 007h 1472 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM2, 008h ;; reserved 1473 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM2, 011h ;; reserved 1474 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM2, 022h ;; reserved 1475 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM2, 043h ;; reserved 1476 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM2, 084h ;; reserved 1477 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM1, 000h ;; same-register 1478 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, XMM1, 006h ;; same-register 1479 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, FSxBX, 001h 1480 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, FSxBX, 004h 1481 EMIT_INSTR_PLUS_ICEBP cmpss, XMM1, FSxBX, 007h 1482 EMIT_INSTR_PLUS_ICEBP_C64 cmpss, XMM8, XMM9, 002h 1483 EMIT_INSTR_PLUS_ICEBP_C64 cmpss, XMM8, XMM8, 005h ;; same-register 1484 EMIT_INSTR_PLUS_ICEBP_C64 cmpss, XMM8, FSxBX, 003h 1485 1486 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 000h 1487 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 001h 1488 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 002h 1489 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 003h 1490 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 004h 1491 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 005h 1492 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 006h 1493 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 007h 1494 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 008h 1495 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 009h 1496 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 00ah 1497 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 00bh 1498 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 00ch 1499 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 00dh 1500 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 00eh 1501 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 00fh 1502 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 010h 1503 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 011h 1504 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 012h 1505 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 013h 1506 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 014h 1507 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 015h 1508 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 016h 1509 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 017h 1510 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 018h 1511 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 019h 1512 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 01ah 1513 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 01bh 1514 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 01ch 1515 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 01dh 1516 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 01eh 1517 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 01fh 1518 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 022h ;; reserved 1519 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM3, 044h ;; reserved 1520 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM1, XMM1, 005h ;; same-register 1521 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM1, XMM2, 00ah ;; same-register 1522 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM1, FSxBX, 00bh ;; same-register 1523 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM1, 00ch ;; same-register 1524 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, XMM2, 00eh ;; same-register 1525 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, FSxBX, 010h 1526 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, FSxBX, 011h 1527 EMIT_INSTR_PLUS_ICEBP vcmpss, XMM1, XMM2, FSxBX, 013h 1528 EMIT_INSTR_PLUS_ICEBP_C64 vcmpss, XMM8, XMM9, XMM10, 016h 1529 EMIT_INSTR_PLUS_ICEBP_C64 vcmpss, XMM8, XMM9, XMM10, 017h 1530 EMIT_INSTR_PLUS_ICEBP_C64 vcmpss, XMM8, XMM9, XMM10, 019h 1531 EMIT_INSTR_PLUS_ICEBP_C64 vcmpss, XMM8, XMM9, XMM9, 01ah ;; same-register 1532 EMIT_INSTR_PLUS_ICEBP_C64 vcmpss, XMM8, XMM9, XMM10, 0ddh ;; reserved 1533 EMIT_INSTR_PLUS_ICEBP_C64 vcmpss, XMM8, XMM9, FSxBX, 01dh 1534 EMIT_INSTR_PLUS_ICEBP_C64 vcmpss, XMM8, XMM8, FSxBX, 01fh ;; same-register 1535 1536 ; 1537 ;; [v]cmpsd 1538 ; 1539 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM2, 000h 1540 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM2, 001h 1541 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM2, 002h 1542 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM2, 003h 1543 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM2, 004h 1544 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM2, 005h 1545 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM2, 006h 1546 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM2, 007h 1547 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM2, 008h ;; reserved 1548 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM2, 011h ;; reserved 1549 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM2, 022h ;; reserved 1550 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM2, 043h ;; reserved 1551 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM2, 084h ;; reserved 1552 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM1, 000h ;; same-register 1553 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, XMM1, 006h ;; same-register 1554 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, FSxBX, 001h 1555 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, FSxBX, 004h 1556 EMIT_INSTR_PLUS_ICEBP cmpsd, XMM1, FSxBX, 007h 1557 EMIT_INSTR_PLUS_ICEBP_C64 cmpsd, XMM8, XMM9, 002h 1558 EMIT_INSTR_PLUS_ICEBP_C64 cmpsd, XMM8, XMM8, 005h ;; same-register 1559 EMIT_INSTR_PLUS_ICEBP_C64 cmpsd, XMM8, FSxBX, 003h 1560 1561 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 000h 1562 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 001h 1563 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 002h 1564 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 003h 1565 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 004h 1566 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 005h 1567 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 006h 1568 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 007h 1569 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 008h 1570 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 009h 1571 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 00ah 1572 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 00bh 1573 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 00ch 1574 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 00dh 1575 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 00eh 1576 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 00fh 1577 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 010h 1578 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 011h 1579 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 012h 1580 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 013h 1581 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 014h 1582 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 015h 1583 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 016h 1584 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 017h 1585 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 018h 1586 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 019h 1587 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 01ah 1588 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 01bh 1589 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 01ch 1590 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 01dh 1591 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 01eh 1592 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 01fh 1593 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 022h ;; reserved 1594 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM3, 044h ;; reserved 1595 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM1, XMM1, 005h ;; same-register 1596 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM1, XMM2, 00ah ;; same-register 1597 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM1, FSxBX, 00bh ;; same-register 1598 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM1, 00ch ;; same-register 1599 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, XMM2, 00eh ;; same-register 1600 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, FSxBX, 010h 1601 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, FSxBX, 011h 1602 EMIT_INSTR_PLUS_ICEBP vcmpsd, XMM1, XMM2, FSxBX, 013h 1603 EMIT_INSTR_PLUS_ICEBP_C64 vcmpsd, XMM8, XMM9, XMM10, 016h 1604 EMIT_INSTR_PLUS_ICEBP_C64 vcmpsd, XMM8, XMM9, XMM10, 017h 1605 EMIT_INSTR_PLUS_ICEBP_C64 vcmpsd, XMM8, XMM9, XMM10, 019h 1606 EMIT_INSTR_PLUS_ICEBP_C64 vcmpsd, XMM8, XMM9, XMM9, 01ah ;; same-register 1607 EMIT_INSTR_PLUS_ICEBP_C64 vcmpsd, XMM8, XMM9, XMM10, 0ddh ;; reserved 1608 EMIT_INSTR_PLUS_ICEBP_C64 vcmpsd, XMM8, XMM9, FSxBX, 01dh 1609 EMIT_INSTR_PLUS_ICEBP_C64 vcmpsd, XMM8, XMM8, FSxBX, 01fh ;; same-register 1610 1462 1611 ; 1463 1612 ;; cvtpi2ps -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32
r107231 r107238 19243 19243 static BS3CPUINSTR4_TEST1_T const s_aTests[] = 19244 19244 { 19245 { BS3_INSTR4_ALL(cmpps_XMM1_XMM1_000h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM1,0x00, PASS_TEST_ARRAY(s_aValuesSR) },19246 { BS3_INSTR4_ALL(cmpps_XMM1_XMM1_006h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM1,0x06, PASS_TEST_ARRAY(s_aValuesSR) },19245 { BS3_INSTR4_ALL(cmpps_XMM1_XMM1_000h), 255, RM_REG, T_SSE, XMM1, XMM1, NOREG, 0x00, PASS_TEST_ARRAY(s_aValuesSR) }, 19246 { BS3_INSTR4_ALL(cmpps_XMM1_XMM1_006h), 255, RM_REG, T_SSE, XMM1, XMM1, NOREG, 0x06, PASS_TEST_ARRAY(s_aValuesSR) }, 19247 19247 { BS3_INSTR4_ALL(cmpps_XMM1_XMM2_000h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x00, PASS_TEST_ARRAY(s_aValues) }, 19248 19248 { BS3_INSTR4_ALL(cmpps_XMM1_XMM2_001h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x01, PASS_TEST_ARRAY(s_aValues) }, … … 19261 19261 { BS3_INSTR4_ALL(cmpps_XMM1_FSxBX_004h), 255, RM_MEM, T_SSE, XMM1, XMM1, FSxBX, 0x04, PASS_TEST_ARRAY(s_aValues) }, 19262 19262 { BS3_INSTR4_ALL(cmpps_XMM1_FSxBX_007h), 255, RM_MEM, T_SSE, XMM1, XMM1, FSxBX, 0x07, PASS_TEST_ARRAY(s_aValues) }, 19263 { BS3_INSTR4_C64(cmpps_XMM8_XMM8_005h), 255, RM_REG, T_SSE, XMM8, XMM8, XMM8,0x05, PASS_TEST_ARRAY(s_aValuesSR) },19263 { BS3_INSTR4_C64(cmpps_XMM8_XMM8_005h), 255, RM_REG, T_SSE, XMM8, XMM8, NOREG, 0x05, PASS_TEST_ARRAY(s_aValuesSR) }, 19264 19264 { BS3_INSTR4_C64(cmpps_XMM8_XMM9_002h), 255, RM_REG, T_SSE, XMM8, XMM8, XMM9, 0x02, PASS_TEST_ARRAY(s_aValues) }, 19265 19265 { BS3_INSTR4_C64(cmpps_XMM8_FSxBX_003h), 255, RM_MEM, T_SSE, XMM8, XMM8, FSxBX, 0x03, PASS_TEST_ARRAY(s_aValues) }, 19266 19266 19267 19267 { BS3_INSTR4_ALL(vcmpps_XMM1_XMM1_FSxBX_00bh), 255, RM_MEM, T_AVX_128, XMM1, XMM1, FSxBX, 0x0b, PASS_TEST_ARRAY(s_aValues) }, 19268 { BS3_INSTR4_ALL(vcmpps_XMM1_XMM1_XMM1_005h), 255, RM_REG, T_AVX_128, XMM1, XMM1, XMM1,0x05, PASS_TEST_ARRAY(s_aValuesSR) },19268 { BS3_INSTR4_ALL(vcmpps_XMM1_XMM1_XMM1_005h), 255, RM_REG, T_AVX_128, XMM1, XMM1, NOREG, 0x05, PASS_TEST_ARRAY(s_aValuesSR) }, 19269 19269 { BS3_INSTR4_ALL(vcmpps_XMM1_XMM1_XMM2_00ah), 255, RM_REG, T_AVX_128, XMM1, XMM1, XMM2, 0x0a, PASS_TEST_ARRAY(s_aValues) }, 19270 19270 { BS3_INSTR4_ALL(vcmpps_XMM1_XMM2_FSxBX_010h), 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, 0x10, PASS_TEST_ARRAY(s_aValues) }, … … 19272 19272 { BS3_INSTR4_ALL(vcmpps_XMM1_XMM2_FSxBX_013h), 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, 0x13, PASS_TEST_ARRAY(s_aValues) }, 19273 19273 { BS3_INSTR4_ALL(vcmpps_XMM1_XMM2_XMM1_00ch), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM1, 0x0c, PASS_TEST_ARRAY(s_aValues) }, 19274 { BS3_INSTR4_ALL(vcmpps_XMM1_XMM2_XMM2_00eh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM2,0x0e, PASS_TEST_ARRAY(s_aValuesSR) },19274 { BS3_INSTR4_ALL(vcmpps_XMM1_XMM2_XMM2_00eh), 255, RM_REG, T_AVX_128, XMM1, XMM2, NOREG, 0x0e, PASS_TEST_ARRAY(s_aValuesSR) }, 19275 19275 { BS3_INSTR4_ALL(vcmpps_XMM1_XMM2_XMM3_000h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x00, PASS_TEST_ARRAY(s_aValues) }, 19276 19276 { BS3_INSTR4_ALL(vcmpps_XMM1_XMM2_XMM3_001h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x01, PASS_TEST_ARRAY(s_aValues) }, … … 19309 19309 { BS3_INSTR4_C64(vcmpps_XMM8_XMM8_FSxBX_01fh), 255, RM_MEM, T_AVX_128, XMM8, XMM8, FSxBX, 0x1f, PASS_TEST_ARRAY(s_aValues) }, 19310 19310 { BS3_INSTR4_C64(vcmpps_XMM8_XMM9_FSxBX_01dh), 255, RM_MEM, T_AVX_128, XMM8, XMM9, FSxBX, 0x1d, PASS_TEST_ARRAY(s_aValues) }, 19311 { BS3_INSTR4_C64(vcmpps_XMM8_XMM9_XMM9_01ah), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM9,0x1a, PASS_TEST_ARRAY(s_aValuesSR) },19311 { BS3_INSTR4_C64(vcmpps_XMM8_XMM9_XMM9_01ah), 255, RM_REG, T_AVX_128, XMM8, XMM9, NOREG, 0x1a, PASS_TEST_ARRAY(s_aValuesSR) }, 19312 19312 { BS3_INSTR4_C64(vcmpps_XMM8_XMM9_XMM10_016h), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, 0x16, PASS_TEST_ARRAY(s_aValues) }, 19313 19313 { BS3_INSTR4_C64(vcmpps_XMM8_XMM9_XMM10_017h), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, 0x17, PASS_TEST_ARRAY(s_aValues) }, … … 19316 19316 19317 19317 { BS3_INSTR4_ALL(vcmpps_YMM1_YMM1_FSxBX_00bh), 255, RM_MEM, T_AVX_256, YMM1, YMM1, FSxBX, 0x0b, PASS_TEST_ARRAY(s_aValues) }, 19318 { BS3_INSTR4_ALL(vcmpps_YMM1_YMM1_YMM1_005h), 255, RM_REG, T_AVX_256, YMM1, YMM1, YMM1,0x05, PASS_TEST_ARRAY(s_aValuesSR) },19318 { BS3_INSTR4_ALL(vcmpps_YMM1_YMM1_YMM1_005h), 255, RM_REG, T_AVX_256, YMM1, YMM1, NOREG, 0x05, PASS_TEST_ARRAY(s_aValuesSR) }, 19319 19319 { BS3_INSTR4_ALL(vcmpps_YMM1_YMM1_YMM2_00ah), 255, RM_REG, T_AVX_256, YMM1, YMM1, YMM2, 0x0a, PASS_TEST_ARRAY(s_aValues) }, 19320 19320 { BS3_INSTR4_ALL(vcmpps_YMM1_YMM2_FSxBX_010h), 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, 0x10, PASS_TEST_ARRAY(s_aValues) }, … … 19322 19322 { BS3_INSTR4_ALL(vcmpps_YMM1_YMM2_FSxBX_013h), 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, 0x13, PASS_TEST_ARRAY(s_aValues) }, 19323 19323 { BS3_INSTR4_ALL(vcmpps_YMM1_YMM2_YMM1_00ch), 255, RM_REG, T_AVX_256, YMM1, YMM1, YMM2, 0x0c, PASS_TEST_ARRAY(s_aValues) }, 19324 { BS3_INSTR4_ALL(vcmpps_YMM1_YMM2_YMM2_00eh), 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM2,0x0e, PASS_TEST_ARRAY(s_aValuesSR) },19324 { BS3_INSTR4_ALL(vcmpps_YMM1_YMM2_YMM2_00eh), 255, RM_REG, T_AVX_256, YMM1, YMM2, NOREG, 0x0e, PASS_TEST_ARRAY(s_aValuesSR) }, 19325 19325 { BS3_INSTR4_ALL(vcmpps_YMM1_YMM2_YMM3_000h), 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3, 0x00, PASS_TEST_ARRAY(s_aValues) }, 19326 19326 { BS3_INSTR4_ALL(vcmpps_YMM1_YMM2_YMM3_001h), 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3, 0x01, PASS_TEST_ARRAY(s_aValues) }, … … 19359 19359 { BS3_INSTR4_C64(vcmpps_YMM8_YMM8_FSxBX_01fh), 255, RM_MEM, T_AVX_256, YMM8, YMM8, FSxBX, 0x1f, PASS_TEST_ARRAY(s_aValues) }, 19360 19360 { BS3_INSTR4_C64(vcmpps_YMM8_YMM9_FSxBX_01dh), 255, RM_MEM, T_AVX_256, YMM8, YMM9, FSxBX, 0x1d, PASS_TEST_ARRAY(s_aValues) }, 19361 { BS3_INSTR4_C64(vcmpps_YMM8_YMM9_YMM9_01ah), 255, RM_REG, T_AVX_256, YMM8, YMM9, YMM9,0x1a, PASS_TEST_ARRAY(s_aValuesSR) },19361 { BS3_INSTR4_C64(vcmpps_YMM8_YMM9_YMM9_01ah), 255, RM_REG, T_AVX_256, YMM8, YMM9, NOREG, 0x1a, PASS_TEST_ARRAY(s_aValuesSR) }, 19362 19362 { BS3_INSTR4_C64(vcmpps_YMM8_YMM9_YMM10_016h), 255, RM_REG, T_AVX_256, YMM8, YMM9, YMM10, 0x16, PASS_TEST_ARRAY(s_aValues) }, 19363 19363 { BS3_INSTR4_C64(vcmpps_YMM8_YMM9_YMM10_017h), 255, RM_REG, T_AVX_256, YMM8, YMM9, YMM10, 0x17, PASS_TEST_ARRAY(s_aValues) }, … … 19604 19604 static BS3CPUINSTR4_TEST1_T const s_aTests[] = 19605 19605 { 19606 { BS3_INSTR4_ALL(cmppd_XMM1_XMM1_000h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM1,0x00, PASS_TEST_ARRAY(s_aValuesSR) },19607 { BS3_INSTR4_ALL(cmppd_XMM1_XMM1_006h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM1,0x06, PASS_TEST_ARRAY(s_aValuesSR) },19606 { BS3_INSTR4_ALL(cmppd_XMM1_XMM1_000h), 255, RM_REG, T_SSE2, XMM1, XMM1, NOREG, 0x00, PASS_TEST_ARRAY(s_aValuesSR) }, 19607 { BS3_INSTR4_ALL(cmppd_XMM1_XMM1_006h), 255, RM_REG, T_SSE2, XMM1, XMM1, NOREG, 0x06, PASS_TEST_ARRAY(s_aValuesSR) }, 19608 19608 { BS3_INSTR4_ALL(cmppd_XMM1_XMM2_000h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x00, PASS_TEST_ARRAY(s_aValues) }, 19609 19609 { BS3_INSTR4_ALL(cmppd_XMM1_XMM2_001h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x01, PASS_TEST_ARRAY(s_aValues) }, … … 19622 19622 { BS3_INSTR4_ALL(cmppd_XMM1_FSxBX_004h), 255, RM_MEM, T_SSE2, XMM1, XMM1, FSxBX, 0x04, PASS_TEST_ARRAY(s_aValues) }, 19623 19623 { BS3_INSTR4_ALL(cmppd_XMM1_FSxBX_007h), 255, RM_MEM, T_SSE2, XMM1, XMM1, FSxBX, 0x07, PASS_TEST_ARRAY(s_aValues) }, 19624 { BS3_INSTR4_C64(cmppd_XMM8_XMM8_005h), 255, RM_REG, T_SSE2, XMM8, XMM8, XMM8,0x05, PASS_TEST_ARRAY(s_aValuesSR) },19624 { BS3_INSTR4_C64(cmppd_XMM8_XMM8_005h), 255, RM_REG, T_SSE2, XMM8, XMM8, NOREG, 0x05, PASS_TEST_ARRAY(s_aValuesSR) }, 19625 19625 { BS3_INSTR4_C64(cmppd_XMM8_XMM9_002h), 255, RM_REG, T_SSE2, XMM8, XMM8, XMM9, 0x02, PASS_TEST_ARRAY(s_aValues) }, 19626 19626 { BS3_INSTR4_C64(cmppd_XMM8_FSxBX_003h), 255, RM_MEM, T_SSE2, XMM8, XMM8, FSxBX, 0x03, PASS_TEST_ARRAY(s_aValues) }, 19627 19627 19628 19628 { BS3_INSTR4_ALL(vcmppd_XMM1_XMM1_FSxBX_00bh), 255, RM_MEM, T_AVX_128, XMM1, XMM1, FSxBX, 0x0b, PASS_TEST_ARRAY(s_aValues) }, 19629 { BS3_INSTR4_ALL(vcmppd_XMM1_XMM1_XMM1_005h), 255, RM_REG, T_AVX_128, XMM1, XMM1, XMM1,0x05, PASS_TEST_ARRAY(s_aValuesSR) },19629 { BS3_INSTR4_ALL(vcmppd_XMM1_XMM1_XMM1_005h), 255, RM_REG, T_AVX_128, XMM1, XMM1, NOREG, 0x05, PASS_TEST_ARRAY(s_aValuesSR) }, 19630 19630 { BS3_INSTR4_ALL(vcmppd_XMM1_XMM1_XMM2_00ah), 255, RM_REG, T_AVX_128, XMM1, XMM1, XMM2, 0x0a, PASS_TEST_ARRAY(s_aValues) }, 19631 19631 { BS3_INSTR4_ALL(vcmppd_XMM1_XMM2_FSxBX_010h), 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, 0x10, PASS_TEST_ARRAY(s_aValues) }, … … 19633 19633 { BS3_INSTR4_ALL(vcmppd_XMM1_XMM2_FSxBX_013h), 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, 0x13, PASS_TEST_ARRAY(s_aValues) }, 19634 19634 { BS3_INSTR4_ALL(vcmppd_XMM1_XMM2_XMM1_00ch), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM1, 0x0c, PASS_TEST_ARRAY(s_aValues) }, 19635 { BS3_INSTR4_ALL(vcmppd_XMM1_XMM2_XMM2_00eh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM2,0x0e, PASS_TEST_ARRAY(s_aValuesSR) },19635 { BS3_INSTR4_ALL(vcmppd_XMM1_XMM2_XMM2_00eh), 255, RM_REG, T_AVX_128, XMM1, XMM2, NOREG, 0x0e, PASS_TEST_ARRAY(s_aValuesSR) }, 19636 19636 { BS3_INSTR4_ALL(vcmppd_XMM1_XMM2_XMM3_000h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x00, PASS_TEST_ARRAY(s_aValues) }, 19637 19637 { BS3_INSTR4_ALL(vcmppd_XMM1_XMM2_XMM3_001h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x01, PASS_TEST_ARRAY(s_aValues) }, … … 19670 19670 { BS3_INSTR4_C64(vcmppd_XMM8_XMM8_FSxBX_01fh), 255, RM_MEM, T_AVX_128, XMM8, XMM8, FSxBX, 0x1f, PASS_TEST_ARRAY(s_aValues) }, 19671 19671 { BS3_INSTR4_C64(vcmppd_XMM8_XMM9_FSxBX_01dh), 255, RM_MEM, T_AVX_128, XMM8, XMM9, FSxBX, 0x1d, PASS_TEST_ARRAY(s_aValues) }, 19672 { BS3_INSTR4_C64(vcmppd_XMM8_XMM9_XMM9_01ah), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM9,0x1a, PASS_TEST_ARRAY(s_aValuesSR) },19672 { BS3_INSTR4_C64(vcmppd_XMM8_XMM9_XMM9_01ah), 255, RM_REG, T_AVX_128, XMM8, XMM9, NOREG, 0x1a, PASS_TEST_ARRAY(s_aValuesSR) }, 19673 19673 { BS3_INSTR4_C64(vcmppd_XMM8_XMM9_XMM10_016h), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, 0x16, PASS_TEST_ARRAY(s_aValues) }, 19674 19674 { BS3_INSTR4_C64(vcmppd_XMM8_XMM9_XMM10_017h), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, 0x17, PASS_TEST_ARRAY(s_aValues) }, … … 19677 19677 19678 19678 { BS3_INSTR4_ALL(vcmppd_YMM1_YMM1_FSxBX_00bh), 255, RM_MEM, T_AVX_256, YMM1, YMM1, FSxBX, 0x0b, PASS_TEST_ARRAY(s_aValues) }, 19679 { BS3_INSTR4_ALL(vcmppd_YMM1_YMM1_YMM1_005h), 255, RM_REG, T_AVX_256, YMM1, YMM1, YMM1,0x05, PASS_TEST_ARRAY(s_aValuesSR) },19679 { BS3_INSTR4_ALL(vcmppd_YMM1_YMM1_YMM1_005h), 255, RM_REG, T_AVX_256, YMM1, YMM1, NOREG, 0x05, PASS_TEST_ARRAY(s_aValuesSR) }, 19680 19680 { BS3_INSTR4_ALL(vcmppd_YMM1_YMM1_YMM2_00ah), 255, RM_REG, T_AVX_256, YMM1, YMM1, YMM2, 0x0a, PASS_TEST_ARRAY(s_aValues) }, 19681 19681 { BS3_INSTR4_ALL(vcmppd_YMM1_YMM2_FSxBX_010h), 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, 0x10, PASS_TEST_ARRAY(s_aValues) }, … … 19683 19683 { BS3_INSTR4_ALL(vcmppd_YMM1_YMM2_FSxBX_013h), 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, 0x13, PASS_TEST_ARRAY(s_aValues) }, 19684 19684 { BS3_INSTR4_ALL(vcmppd_YMM1_YMM2_YMM1_00ch), 255, RM_REG, T_AVX_256, YMM1, YMM1, YMM2, 0x0c, PASS_TEST_ARRAY(s_aValues) }, 19685 { BS3_INSTR4_ALL(vcmppd_YMM1_YMM2_YMM2_00eh), 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM2,0x0e, PASS_TEST_ARRAY(s_aValuesSR) },19685 { BS3_INSTR4_ALL(vcmppd_YMM1_YMM2_YMM2_00eh), 255, RM_REG, T_AVX_256, YMM1, YMM2, NOREG, 0x0e, PASS_TEST_ARRAY(s_aValuesSR) }, 19686 19686 { BS3_INSTR4_ALL(vcmppd_YMM1_YMM2_YMM3_000h), 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3, 0x00, PASS_TEST_ARRAY(s_aValues) }, 19687 19687 { BS3_INSTR4_ALL(vcmppd_YMM1_YMM2_YMM3_001h), 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3, 0x01, PASS_TEST_ARRAY(s_aValues) }, … … 19720 19720 { BS3_INSTR4_C64(vcmppd_YMM8_YMM8_FSxBX_01fh), 255, RM_MEM, T_AVX_256, YMM8, YMM8, FSxBX, 0x1f, PASS_TEST_ARRAY(s_aValues) }, 19721 19721 { BS3_INSTR4_C64(vcmppd_YMM8_YMM9_FSxBX_01dh), 255, RM_MEM, T_AVX_256, YMM8, YMM9, FSxBX, 0x1d, PASS_TEST_ARRAY(s_aValues) }, 19722 { BS3_INSTR4_C64(vcmppd_YMM8_YMM9_YMM9_01ah), 255, RM_REG, T_AVX_256, YMM8, YMM9, YMM9,0x1a, PASS_TEST_ARRAY(s_aValuesSR) },19722 { BS3_INSTR4_C64(vcmppd_YMM8_YMM9_YMM9_01ah), 255, RM_REG, T_AVX_256, YMM8, YMM9, NOREG, 0x1a, PASS_TEST_ARRAY(s_aValuesSR) }, 19723 19723 { BS3_INSTR4_C64(vcmppd_YMM8_YMM9_YMM10_016h), 255, RM_REG, T_AVX_256, YMM8, YMM9, YMM10, 0x16, PASS_TEST_ARRAY(s_aValues) }, 19724 19724 { BS3_INSTR4_C64(vcmppd_YMM8_YMM9_YMM10_017h), 255, RM_REG, T_AVX_256, YMM8, YMM9, YMM10, 0x17, PASS_TEST_ARRAY(s_aValues) }, … … 19728 19728 19729 19729 return bs3CpuInstr4_WorkerTestType1_P(bMode, PASS_ARRAY(s_aTests), PASS_ARRAY(g_aXcptConfig2), bs3CpuInstr4_WorkerTestType1_Provider_cmppd); 19730 } 19731 19732 19733 typedef struct BS3CPUINSTR4_CMPSS_VALUES_T 19734 { 19735 RTFLOAT32U uSrc2; 19736 RTFLOAT32U uSrc1; 19737 uint8_t uDst; /**< Result value, encoded as a CMP_XX_T comparison predicate */ 19738 uint16_t uMxCsr; /**< MXCSR to set prior to executing the instruction. */ 19739 uint16_t u128ExpectedMxCsr; /**< Expected MXCSR for a 128-bit instruction. */ 19740 } BS3CPUINSTR4_CMPSS_VALUES_T; 19741 19742 static DECLCALLBACK(PBS3CPUINSTR4_TEST1_VALUES_T) bs3CpuInstr4_WorkerTestType1_Provider_cmpss(void *paValues, const unsigned cValues, const unsigned iVal, uint8_t uExtra) 19743 { 19744 static BS3CPUINSTR4_TEST1_VALUES_SS_T sValues; 19745 BS3CPUINSTR4_CMPSS_VALUES_T *psValuesIn = &((BS3CPUINSTR4_CMPSS_VALUES_T *)paValues)[iVal]; 19746 unsigned iCnt; 19747 uint8_t uPredicate; 19748 uint8_t uCmpResult; 19749 bool fSignaling; 19750 19751 BS3_ASSERT(uExtra < 32); 19752 uPredicate = g_aCmpPredicate[uExtra] & CMP_ORDERING_MASK; 19753 fSignaling = (g_aCmpPredicate[uExtra] & CMP_IE_T) == CMP_IE_T; 19754 19755 sValues.uSrc1.ymm.au32[0] = psValuesIn->uSrc1.u; 19756 sValues.uSrc2.ymm.au32[0] = psValuesIn->uSrc2.u; 19757 sValues.u128ExpectedMxCsr = psValuesIn->u128ExpectedMxCsr; 19758 uCmpResult = psValuesIn->uDst; 19759 if (uCmpResult == CMP_IE_T || (uCmpResult == CMP_UN_T && fSignaling)) 19760 sValues.u128ExpectedMxCsr |= X86_MXCSR_IE; 19761 if (uCmpResult == CMP_IE_T) uCmpResult = CMP_UN_T; 19762 sValues.uDstOut.ymm.au32[0] = (uCmpResult & uPredicate) ? 0xFFFFFFFF : 0; 19763 19764 for (iCnt = 1; iCnt < RT_ELEMENTS(sValues.uSrc1.ymm.au32) / 2; iCnt++) 19765 { 19766 sValues.uSrc1.ymm.au32[iCnt] = bs3CpuInstrX_SimpleRand(); 19767 sValues.uSrc2.ymm.au32[iCnt] = bs3CpuInstrX_SimpleRand(); 19768 sValues.uDstOut.ymm.au32[iCnt] = sValues.uSrc1.ymm.au32[iCnt]; 19769 } 19770 sValues.uMxCsr = psValuesIn->uMxCsr; 19771 sValues.afEflOut = 0; 19772 return (PBS3CPUINSTR4_TEST1_VALUES_T)&sValues; 19773 } 19774 19775 /* 19776 * [V]CMPSS. 19777 */ 19778 BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_cmpss(uint8_t bMode) 19779 { 19780 static BS3CPUINSTR4_CMPSS_VALUES_T const s_aValues[] = 19781 { 19782 /*src2*/ /*src1*/ /* => */ /*mxcsr:in*/ /*128:out*/ 19783 /* Zero. */ 19784 /* 0*/{ FP32_0(0), FP32_0(0), CMP_EQ_T, 0, 0 }, 19785 { FP32_0(0), FP32_0(1), CMP_EQ_T, X86_MXCSR_RC_NEAREST, X86_MXCSR_RC_NEAREST }, 19786 { FP32_0(1), FP32_0(0), CMP_EQ_T, X86_MXCSR_RC_DOWN, X86_MXCSR_RC_DOWN }, 19787 { FP32_0(1), FP32_0(1), CMP_EQ_T, X86_MXCSR_RC_UP, X86_MXCSR_RC_UP }, 19788 /* Infinity. */ 19789 /* 4*/{ FP32_INF(0), FP32_INF(0), CMP_EQ_T, 0, 0 }, 19790 { FP32_INF(0), FP32_INF(1), CMP_GT_T, X86_MXCSR_RC_ZERO, X86_MXCSR_RC_ZERO }, 19791 { FP32_INF(1), FP32_INF(1), CMP_EQ_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 19792 { FP32_INF(1), FP32_INF(0), CMP_LT_T, X86_MXCSR_RC_UP, X86_MXCSR_RC_UP }, 19793 { FP32_INF(0), FP32_0(0), CMP_GT_T, X86_MXCSR_RC_NEAREST, X86_MXCSR_RC_NEAREST }, 19794 { FP32_INF(1), FP32_0(1), CMP_LT_T, X86_MXCSR_RC_ZERO, X86_MXCSR_RC_ZERO }, 19795 /* Normals. */ 19796 /*10*/{ FP32_2(0), FP32_2(0), CMP_EQ_T, X86_MXCSR_RC_NEAREST, X86_MXCSR_RC_NEAREST }, 19797 { FP32_2(0), FP32_2(1), CMP_GT_T, X86_MXCSR_FZ, X86_MXCSR_FZ }, 19798 { FP32_2(1), FP32_2(0), CMP_LT_T, X86_MXCSR_RC_UP, X86_MXCSR_RC_UP }, 19799 { FP32_0(0), FP32_2(1), CMP_GT_T, X86_MXCSR_RC_DOWN, X86_MXCSR_RC_DOWN }, 19800 { FP32_NORM_V0(0), FP32_NORM_V0(0), CMP_EQ_T, X86_MXCSR_RC_UP, X86_MXCSR_RC_UP }, 19801 { FP32_NORM_V1(0), FP32_NORM_V2(0), CMP_GT_T, X86_MXCSR_RC_DOWN, X86_MXCSR_RC_DOWN }, 19802 { FP32_NORM_V2(1), FP32_NORM_V1(1), CMP_GT_T, X86_MXCSR_RC_NEAREST, X86_MXCSR_RC_NEAREST }, 19803 { FP32_RAND_V1(0), FP32_RAND_V2(0), CMP_LT_T, X86_MXCSR_RC_UP, X86_MXCSR_RC_UP }, 19804 { FP32_RAND_V2(1), FP32_RAND_V1(1), CMP_LT_T, X86_MXCSR_RC_DOWN, X86_MXCSR_RC_DOWN }, 19805 { FP32_0_5(0), FP32_0_5(0), CMP_EQ_T, X86_MXCSR_RC_ZERO, X86_MXCSR_RC_ZERO }, 19806 { FP32_0_5(0), FP32_0_5_DN(0), CMP_GT_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 19807 { FP32_0_5(0), FP32_0_5_UP(0), CMP_LT_T, X86_MXCSR_FZ, X86_MXCSR_FZ }, 19808 { FP32_0_5(1), FP32_0_5(1), CMP_EQ_T, X86_MXCSR_RC_NEAREST, X86_MXCSR_RC_NEAREST }, 19809 { FP32_0_5(1), FP32_0_5_DN(1), CMP_LT_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 19810 { FP32_0_5(1), FP32_0_5_UP(1), CMP_GT_T, X86_MXCSR_RC_ZERO, X86_MXCSR_RC_ZERO }, 19811 /* Denormals. */ 19812 /*25*/{ FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), CMP_EQ_T, 0, X86_MXCSR_DE }, 19813 { FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), CMP_LT_T, 0, X86_MXCSR_DE }, 19814 { FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), CMP_GT_T, 0, X86_MXCSR_DE }, 19815 { FP32_DENORM_MAX(0), FP32_0(0), CMP_GT_T, 0, X86_MXCSR_DE }, 19816 { FP32_0(1), FP32_DENORM_MIN(0), CMP_LT_T, 0, X86_MXCSR_DE }, 19817 { FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), CMP_EQ_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 19818 { FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), CMP_EQ_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 19819 { FP32_0(0), FP32_DENORM_MAX(0), CMP_EQ_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 19820 /* Invalids. */ 19821 /*33*/{ FP32_QNAN(0), FP32_0(1), CMP_UN_T, 0, 0 }, 19822 { FP32_INF(1), FP32_QNAN(1), CMP_UN_T, X86_MXCSR_RC_ZERO, X86_MXCSR_RC_ZERO }, 19823 { FP32_SNAN_V1(0), FP32_NORM_V2(0), CMP_IE_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 19824 { FP32_RAND_V3(1), FP32_SNAN_V3(1), CMP_IE_T, X86_MXCSR_RC_DOWN, X86_MXCSR_RC_DOWN }, 19825 { FP32_DENORM_MAX(0), FP32_QNAN_V1(1), CMP_UN_T, 0, 0 }, 19826 { FP32_SNAN_V2(0), FP32_DENORM_MIN(1), CMP_IE_T, 0, 0 }, 19827 /* Precision, Overflow, Underflow not possible. */ 19828 }; 19829 static BS3CPUINSTR4_CMPSS_VALUES_T const s_aValuesSR[] = 19830 { 19831 /* Zero. */ 19832 /* 0*/{ FP32_0(0), FP32_0(0), CMP_EQ_T, 0, 0 }, 19833 /* Infinity. */ 19834 /* 1*/{ FP32_INF(0), FP32_INF(0), CMP_EQ_T, 0, 0 }, 19835 /* Normals. */ 19836 /* 2*/{ FP32_2(0), FP32_2(0), CMP_EQ_T, 0, 0 }, 19837 /* Denormals. */ 19838 /* 4*/{ FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), CMP_EQ_T, 0, X86_MXCSR_DE }, 19839 /* Invalids. */ 19840 /* 5*/{ FP32_QNAN(0), FP32_QNAN(0), CMP_UN_T, 0, 0 }, 19841 { FP32_SNAN(0), FP32_SNAN(0), CMP_IE_T, 0, 0 }, 19842 /* Precision, Overflow, Underflow not possible. */ 19843 }; 19844 19845 static BS3CPUINSTR4_TEST1_T const s_aTests[] = 19846 { 19847 { BS3_INSTR4_ALL(cmpss_XMM1_XMM1_000h), 255, RM_REG, T_SSE, XMM1, XMM1, NOREG, 0x00, PASS_TEST_ARRAY(s_aValuesSR) }, 19848 { BS3_INSTR4_ALL(cmpss_XMM1_XMM1_006h), 255, RM_REG, T_SSE, XMM1, XMM1, NOREG, 0x06, PASS_TEST_ARRAY(s_aValuesSR) }, 19849 { BS3_INSTR4_ALL(cmpss_XMM1_XMM2_000h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x00, PASS_TEST_ARRAY(s_aValues) }, 19850 { BS3_INSTR4_ALL(cmpss_XMM1_XMM2_001h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x01, PASS_TEST_ARRAY(s_aValues) }, 19851 { BS3_INSTR4_ALL(cmpss_XMM1_XMM2_002h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x02, PASS_TEST_ARRAY(s_aValues) }, 19852 { BS3_INSTR4_ALL(cmpss_XMM1_XMM2_003h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x03, PASS_TEST_ARRAY(s_aValues) }, 19853 { BS3_INSTR4_ALL(cmpss_XMM1_XMM2_004h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x04, PASS_TEST_ARRAY(s_aValues) }, 19854 { BS3_INSTR4_ALL(cmpss_XMM1_XMM2_005h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x05, PASS_TEST_ARRAY(s_aValues) }, 19855 { BS3_INSTR4_ALL(cmpss_XMM1_XMM2_006h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x06, PASS_TEST_ARRAY(s_aValues) }, 19856 { BS3_INSTR4_ALL(cmpss_XMM1_XMM2_007h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x07, PASS_TEST_ARRAY(s_aValues) }, 19857 { BS3_INSTR4_ALL(cmpss_XMM1_XMM2_008h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x00, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 19858 { BS3_INSTR4_ALL(cmpss_XMM1_XMM2_011h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x01, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 19859 { BS3_INSTR4_ALL(cmpss_XMM1_XMM2_022h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x02, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 19860 { BS3_INSTR4_ALL(cmpss_XMM1_XMM2_043h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x03, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 19861 { BS3_INSTR4_ALL(cmpss_XMM1_XMM2_084h), 255, RM_REG, T_SSE, XMM1, XMM1, XMM2, 0x04, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 19862 { BS3_INSTR4_ALL(cmpss_XMM1_FSxBX_001h), 255, RM_MEM32, T_SSE, XMM1, XMM1, FSxBX, 0x01, PASS_TEST_ARRAY(s_aValues) }, 19863 { BS3_INSTR4_ALL(cmpss_XMM1_FSxBX_004h), 255, RM_MEM32, T_SSE, XMM1, XMM1, FSxBX, 0x04, PASS_TEST_ARRAY(s_aValues) }, 19864 { BS3_INSTR4_ALL(cmpss_XMM1_FSxBX_007h), 255, RM_MEM32, T_SSE, XMM1, XMM1, FSxBX, 0x07, PASS_TEST_ARRAY(s_aValues) }, 19865 { BS3_INSTR4_C64(cmpss_XMM8_XMM8_005h), 255, RM_REG, T_SSE, XMM8, XMM8, NOREG, 0x05, PASS_TEST_ARRAY(s_aValuesSR) }, 19866 { BS3_INSTR4_C64(cmpss_XMM8_XMM9_002h), 255, RM_REG, T_SSE, XMM8, XMM8, XMM9, 0x02, PASS_TEST_ARRAY(s_aValues) }, 19867 { BS3_INSTR4_C64(cmpss_XMM8_FSxBX_003h), 255, RM_MEM32, T_SSE, XMM8, XMM8, FSxBX, 0x03, PASS_TEST_ARRAY(s_aValues) }, 19868 19869 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM1_FSxBX_00bh), 255, RM_MEM32, T_AVX_128, XMM1, XMM1, FSxBX, 0x0b, PASS_TEST_ARRAY(s_aValues) }, 19870 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM1_XMM1_005h), 255, RM_REG, T_AVX_128, XMM1, XMM1, NOREG, 0x05, PASS_TEST_ARRAY(s_aValuesSR) }, 19871 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM1_XMM2_00ah), 255, RM_REG, T_AVX_128, XMM1, XMM1, XMM2, 0x0a, PASS_TEST_ARRAY(s_aValues) }, 19872 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_FSxBX_010h), 255, RM_MEM32, T_AVX_128, XMM1, XMM2, FSxBX, 0x10, PASS_TEST_ARRAY(s_aValues) }, 19873 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_FSxBX_011h), 255, RM_MEM32, T_AVX_128, XMM1, XMM2, FSxBX, 0x11, PASS_TEST_ARRAY(s_aValues) }, 19874 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_FSxBX_013h), 255, RM_MEM32, T_AVX_128, XMM1, XMM2, FSxBX, 0x13, PASS_TEST_ARRAY(s_aValues) }, 19875 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM1_00ch), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM1, 0x0c, PASS_TEST_ARRAY(s_aValues) }, 19876 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM2_00eh), 255, RM_REG, T_AVX_128, XMM1, XMM2, NOREG, 0x0e, PASS_TEST_ARRAY(s_aValuesSR) }, 19877 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_000h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x00, PASS_TEST_ARRAY(s_aValues) }, 19878 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_001h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x01, PASS_TEST_ARRAY(s_aValues) }, 19879 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_002h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x02, PASS_TEST_ARRAY(s_aValues) }, 19880 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_003h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x03, PASS_TEST_ARRAY(s_aValues) }, 19881 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_004h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x04, PASS_TEST_ARRAY(s_aValues) }, 19882 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_005h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x05, PASS_TEST_ARRAY(s_aValues) }, 19883 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_006h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x06, PASS_TEST_ARRAY(s_aValues) }, 19884 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_007h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x07, PASS_TEST_ARRAY(s_aValues) }, 19885 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_008h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x08, PASS_TEST_ARRAY(s_aValues) }, 19886 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_009h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x09, PASS_TEST_ARRAY(s_aValues) }, 19887 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_00ah), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x0a, PASS_TEST_ARRAY(s_aValues) }, 19888 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_00bh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x0b, PASS_TEST_ARRAY(s_aValues) }, 19889 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_00ch), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x0c, PASS_TEST_ARRAY(s_aValues) }, 19890 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_00dh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x0d, PASS_TEST_ARRAY(s_aValues) }, 19891 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_00eh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x0e, PASS_TEST_ARRAY(s_aValues) }, 19892 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_00fh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x0f, PASS_TEST_ARRAY(s_aValues) }, 19893 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_010h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x10, PASS_TEST_ARRAY(s_aValues) }, 19894 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_011h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x11, PASS_TEST_ARRAY(s_aValues) }, 19895 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_012h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x12, PASS_TEST_ARRAY(s_aValues) }, 19896 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_013h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x13, PASS_TEST_ARRAY(s_aValues) }, 19897 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_014h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x14, PASS_TEST_ARRAY(s_aValues) }, 19898 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_015h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x15, PASS_TEST_ARRAY(s_aValues) }, 19899 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_016h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x16, PASS_TEST_ARRAY(s_aValues) }, 19900 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_017h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x17, PASS_TEST_ARRAY(s_aValues) }, 19901 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_018h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x18, PASS_TEST_ARRAY(s_aValues) }, 19902 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_019h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x19, PASS_TEST_ARRAY(s_aValues) }, 19903 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_01ah), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x1a, PASS_TEST_ARRAY(s_aValues) }, 19904 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_01bh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x1b, PASS_TEST_ARRAY(s_aValues) }, 19905 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_01ch), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x1c, PASS_TEST_ARRAY(s_aValues) }, 19906 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_01dh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x1d, PASS_TEST_ARRAY(s_aValues) }, 19907 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_01eh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x1e, PASS_TEST_ARRAY(s_aValues) }, 19908 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_01fh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x1f, PASS_TEST_ARRAY(s_aValues) }, 19909 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_022h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x02, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 19910 { BS3_INSTR4_ALL(vcmpss_XMM1_XMM2_XMM3_044h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x04, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 19911 { BS3_INSTR4_C64(vcmpss_XMM8_XMM8_FSxBX_01fh), 255, RM_MEM32, T_AVX_128, XMM8, XMM8, FSxBX, 0x1f, PASS_TEST_ARRAY(s_aValues) }, 19912 { BS3_INSTR4_C64(vcmpss_XMM8_XMM9_FSxBX_01dh), 255, RM_MEM32, T_AVX_128, XMM8, XMM9, FSxBX, 0x1d, PASS_TEST_ARRAY(s_aValues) }, 19913 { BS3_INSTR4_C64(vcmpss_XMM8_XMM9_XMM9_01ah), 255, RM_REG, T_AVX_128, XMM8, XMM9, NOREG, 0x1a, PASS_TEST_ARRAY(s_aValuesSR) }, 19914 { BS3_INSTR4_C64(vcmpss_XMM8_XMM9_XMM10_016h), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, 0x16, PASS_TEST_ARRAY(s_aValues) }, 19915 { BS3_INSTR4_C64(vcmpss_XMM8_XMM9_XMM10_017h), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, 0x17, PASS_TEST_ARRAY(s_aValues) }, 19916 { BS3_INSTR4_C64(vcmpss_XMM8_XMM9_XMM10_019h), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, 0x19, PASS_TEST_ARRAY(s_aValues) }, 19917 { BS3_INSTR4_C64(vcmpss_XMM8_XMM9_XMM10_0ddh), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, 0x1d, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 19918 }; 19919 19920 return bs3CpuInstr4_WorkerTestType1_P(bMode, PASS_ARRAY(s_aTests), PASS_ARRAY(g_aXcptConfig3), bs3CpuInstr4_WorkerTestType1_Provider_cmpss); 19921 } 19922 19923 19924 typedef struct BS3CPUINSTR4_CMPSD_VALUES_T 19925 { 19926 RTFLOAT64U uSrc2; 19927 RTFLOAT64U uSrc1; 19928 uint8_t uDst; /**< Result value, encoded as a CMP_XX_T comparison predicate */ 19929 uint16_t uMxCsr; /**< MXCSR to set prior to executing the instruction. */ 19930 uint16_t u128ExpectedMxCsr; /**< Expected MXCSR for a 128-bit instruction. */ 19931 } BS3CPUINSTR4_CMPSD_VALUES_T; 19932 19933 static DECLCALLBACK(PBS3CPUINSTR4_TEST1_VALUES_T) bs3CpuInstr4_WorkerTestType1_Provider_cmpsd(void *paValues, const unsigned cValues, const unsigned iVal, uint8_t uExtra) 19934 { 19935 static BS3CPUINSTR4_TEST1_VALUES_SD_T sValues; 19936 BS3CPUINSTR4_CMPSD_VALUES_T *psValuesIn = &((BS3CPUINSTR4_CMPSD_VALUES_T *)paValues)[iVal]; 19937 unsigned iCnt; 19938 uint8_t uPredicate; 19939 uint8_t uCmpResult; 19940 bool fSignaling; 19941 19942 BS3_ASSERT(uExtra < 32); 19943 uPredicate = g_aCmpPredicate[uExtra] & CMP_ORDERING_MASK; 19944 fSignaling = (g_aCmpPredicate[uExtra] & CMP_IE_T) == CMP_IE_T; 19945 19946 sValues.uSrc1.ymm.au64[0] = psValuesIn->uSrc1.u; 19947 sValues.uSrc2.ymm.au64[0] = psValuesIn->uSrc2.u; 19948 sValues.u128ExpectedMxCsr = psValuesIn->u128ExpectedMxCsr; 19949 uCmpResult = psValuesIn->uDst; 19950 if (uCmpResult == CMP_IE_T || (uCmpResult == CMP_UN_T && fSignaling)) 19951 sValues.u128ExpectedMxCsr |= X86_MXCSR_IE; 19952 if (uCmpResult == CMP_IE_T) uCmpResult = CMP_UN_T; 19953 sValues.uDstOut.ymm.au64[0] = (uCmpResult & uPredicate) ? 0xFFFFFFFFFFFFFFFFull : 0; 19954 for (iCnt = 2; iCnt < RT_ELEMENTS(sValues.uSrc1.ymm.au32) / 2; iCnt++) 19955 { 19956 sValues.uSrc1.ymm.au32[iCnt] = bs3CpuInstrX_SimpleRand(); 19957 sValues.uSrc2.ymm.au32[iCnt] = bs3CpuInstrX_SimpleRand(); 19958 sValues.uDstOut.ymm.au32[iCnt] = sValues.uSrc1.ymm.au32[iCnt]; 19959 } 19960 sValues.uMxCsr = psValuesIn->uMxCsr; 19961 sValues.afEflOut = 0; 19962 return (PBS3CPUINSTR4_TEST1_VALUES_T)&sValues; 19963 } 19964 19965 /* 19966 * [V]CMPSD. 19967 */ 19968 BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_cmpsd(uint8_t bMode) 19969 { 19970 static BS3CPUINSTR4_CMPSD_VALUES_T const s_aValues[] = 19971 { 19972 /*src2*/ /*src1*/ /* => */ /*mxcsr:in*/ /*128:out*/ 19973 /* Zero. */ 19974 /* 0*/{ FP64_0(0), FP64_0(0), CMP_EQ_T, 0, 0 }, 19975 { FP64_0(0), FP64_0(1), CMP_EQ_T, X86_MXCSR_RC_NEAREST, X86_MXCSR_RC_NEAREST }, 19976 { FP64_0(1), FP64_0(0), CMP_EQ_T, X86_MXCSR_RC_DOWN, X86_MXCSR_RC_DOWN }, 19977 { FP64_0(1), FP64_0(1), CMP_EQ_T, X86_MXCSR_RC_UP, X86_MXCSR_RC_UP }, 19978 /* Infinity. */ 19979 /* 4*/{ FP64_INF(0), FP64_INF(0), CMP_EQ_T, 0, 0 }, 19980 { FP64_INF(0), FP64_INF(1), CMP_GT_T, X86_MXCSR_RC_ZERO, X86_MXCSR_RC_ZERO }, 19981 { FP64_INF(1), FP64_INF(1), CMP_EQ_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 19982 { FP64_INF(1), FP64_INF(0), CMP_LT_T, X86_MXCSR_RC_UP, X86_MXCSR_RC_UP }, 19983 { FP64_INF(0), FP64_0(0), CMP_GT_T, X86_MXCSR_RC_NEAREST, X86_MXCSR_RC_NEAREST }, 19984 { FP64_INF(1), FP64_0(1), CMP_LT_T, X86_MXCSR_RC_ZERO, X86_MXCSR_RC_ZERO }, 19985 /* Normals. */ 19986 /*10*/{ FP64_2(0), FP64_2(0), CMP_EQ_T, X86_MXCSR_RC_NEAREST, X86_MXCSR_RC_NEAREST }, 19987 { FP64_2(0), FP64_2(1), CMP_GT_T, X86_MXCSR_FZ, X86_MXCSR_FZ }, 19988 { FP64_2(1), FP64_2(0), CMP_LT_T, X86_MXCSR_RC_UP, X86_MXCSR_RC_UP }, 19989 { FP64_0(0), FP64_2(1), CMP_GT_T, X86_MXCSR_RC_DOWN, X86_MXCSR_RC_DOWN }, 19990 { FP64_NORM_V0(0), FP64_NORM_V0(0), CMP_EQ_T, X86_MXCSR_RC_UP, X86_MXCSR_RC_UP }, 19991 { FP64_NORM_V1(0), FP64_NORM_V2(0), CMP_LT_T, X86_MXCSR_RC_DOWN, X86_MXCSR_RC_DOWN }, 19992 { FP64_NORM_V2(1), FP64_NORM_V1(1), CMP_LT_T, X86_MXCSR_RC_NEAREST, X86_MXCSR_RC_NEAREST }, 19993 { FP64_RAND_V1(0), FP64_RAND_V2(0), CMP_GT_T, X86_MXCSR_RC_UP, X86_MXCSR_RC_UP }, 19994 { FP64_RAND_V2(1), FP64_RAND_V1(1), CMP_GT_T, X86_MXCSR_RC_DOWN, X86_MXCSR_RC_DOWN }, 19995 { FP64_0_5(0), FP64_0_5(0), CMP_EQ_T, X86_MXCSR_RC_ZERO, X86_MXCSR_RC_ZERO }, 19996 { FP64_0_5(0), FP64_0_5_DN(0), CMP_GT_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 19997 { FP64_0_5(0), FP64_0_5_UP(0), CMP_LT_T, X86_MXCSR_FZ, X86_MXCSR_FZ }, 19998 { FP64_0_5(1), FP64_0_5(1), CMP_EQ_T, X86_MXCSR_RC_NEAREST, X86_MXCSR_RC_NEAREST }, 19999 { FP64_0_5(1), FP64_0_5_DN(1), CMP_LT_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 20000 { FP64_0_5(1), FP64_0_5_UP(1), CMP_GT_T, X86_MXCSR_RC_ZERO, X86_MXCSR_RC_ZERO }, 20001 /* Denormals. */ 20002 /*25*/{ FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), CMP_EQ_T, 0, X86_MXCSR_DE }, 20003 { FP64_DENORM_MAX(1), FP64_DENORM_MAX(0), CMP_LT_T, 0, X86_MXCSR_DE }, 20004 { FP64_DENORM_MIN(0), FP64_DENORM_MIN(1), CMP_GT_T, 0, X86_MXCSR_DE }, 20005 { FP64_DENORM_MAX(0), FP64_0(0), CMP_GT_T, 0, X86_MXCSR_DE }, 20006 { FP64_0(1), FP64_DENORM_MIN(0), CMP_LT_T, 0, X86_MXCSR_DE }, 20007 { FP64_DENORM_MAX(1), FP64_DENORM_MAX(0), CMP_EQ_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 20008 { FP64_DENORM_MIN(0), FP64_DENORM_MAX(1), CMP_EQ_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 20009 { FP64_0(0), FP64_DENORM_MAX(0), CMP_EQ_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 20010 /* Invalids. */ 20011 /*33*/{ FP64_QNAN(0), FP64_0(1), CMP_UN_T, 0, 0 }, 20012 { FP64_INF(1), FP64_QNAN(1), CMP_UN_T, X86_MXCSR_RC_ZERO, X86_MXCSR_RC_ZERO }, 20013 { FP64_SNAN_V1(0), FP64_NORM_V2(0), CMP_IE_T, X86_MXCSR_DAZ, X86_MXCSR_DAZ }, 20014 { FP64_RAND_V3(1), FP64_SNAN_V3(1), CMP_IE_T, X86_MXCSR_RC_DOWN, X86_MXCSR_RC_DOWN }, 20015 { FP64_DENORM_MAX(0), FP64_QNAN_V1(1), CMP_UN_T, 0, 0 }, 20016 { FP64_SNAN_V2(0), FP64_DENORM_MIN(1), CMP_IE_T, 0, 0 }, 20017 /* Precision, Overflow, Underflow not possible. */ 20018 }; 20019 static BS3CPUINSTR4_CMPSD_VALUES_T const s_aValuesSR[] = 20020 { 20021 /* Zero. */ 20022 /* 0*/{ FP64_0(0), FP64_0(0), CMP_EQ_T, 0, 0 }, 20023 /* Infinity. */ 20024 /* 1*/{ FP64_INF(0), FP64_INF(0), CMP_EQ_T, 0, 0 }, 20025 /* Normals. */ 20026 /* 2*/{ FP64_2(0), FP64_2(0), CMP_EQ_T, 0, 0 }, 20027 /* Denormals. */ 20028 /* 4*/{ FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), CMP_EQ_T, 0, X86_MXCSR_DE }, 20029 /* Invalids. */ 20030 /* 5*/{ FP64_QNAN(0), FP64_QNAN(0), CMP_UN_T, 0, 0 }, 20031 { FP64_SNAN(0), FP64_SNAN(0), CMP_IE_T, 0, 0 }, 20032 /* Precision, Overflow, Underflow not possible. */ 20033 }; 20034 20035 static BS3CPUINSTR4_TEST1_T const s_aTests[] = 20036 { 20037 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM1_000h), 255, RM_REG, T_SSE2, XMM1, XMM1, NOREG, 0x00, PASS_TEST_ARRAY(s_aValuesSR) }, 20038 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM1_006h), 255, RM_REG, T_SSE2, XMM1, XMM1, NOREG, 0x06, PASS_TEST_ARRAY(s_aValuesSR) }, 20039 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM2_000h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x00, PASS_TEST_ARRAY(s_aValues) }, 20040 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM2_001h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x01, PASS_TEST_ARRAY(s_aValues) }, 20041 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM2_002h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x02, PASS_TEST_ARRAY(s_aValues) }, 20042 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM2_003h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x03, PASS_TEST_ARRAY(s_aValues) }, 20043 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM2_004h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x04, PASS_TEST_ARRAY(s_aValues) }, 20044 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM2_005h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x05, PASS_TEST_ARRAY(s_aValues) }, 20045 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM2_006h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x06, PASS_TEST_ARRAY(s_aValues) }, 20046 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM2_007h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x07, PASS_TEST_ARRAY(s_aValues) }, 20047 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM2_008h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x00, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 20048 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM2_011h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x01, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 20049 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM2_022h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x02, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 20050 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM2_043h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x03, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 20051 { BS3_INSTR4_ALL(cmpsd_XMM1_XMM2_084h), 255, RM_REG, T_SSE2, XMM1, XMM1, XMM2, 0x04, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 20052 { BS3_INSTR4_ALL(cmpsd_XMM1_FSxBX_001h), 255, RM_MEM64, T_SSE2, XMM1, XMM1, FSxBX, 0x01, PASS_TEST_ARRAY(s_aValues) }, 20053 { BS3_INSTR4_ALL(cmpsd_XMM1_FSxBX_004h), 255, RM_MEM64, T_SSE2, XMM1, XMM1, FSxBX, 0x04, PASS_TEST_ARRAY(s_aValues) }, 20054 { BS3_INSTR4_ALL(cmpsd_XMM1_FSxBX_007h), 255, RM_MEM64, T_SSE2, XMM1, XMM1, FSxBX, 0x07, PASS_TEST_ARRAY(s_aValues) }, 20055 { BS3_INSTR4_C64(cmpsd_XMM8_XMM8_005h), 255, RM_REG, T_SSE2, XMM8, XMM8, NOREG, 0x05, PASS_TEST_ARRAY(s_aValuesSR) }, 20056 { BS3_INSTR4_C64(cmpsd_XMM8_XMM9_002h), 255, RM_REG, T_SSE2, XMM8, XMM8, XMM9, 0x02, PASS_TEST_ARRAY(s_aValues) }, 20057 { BS3_INSTR4_C64(cmpsd_XMM8_FSxBX_003h), 255, RM_MEM64, T_SSE2, XMM8, XMM8, FSxBX, 0x03, PASS_TEST_ARRAY(s_aValues) }, 20058 20059 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM1_FSxBX_00bh), 255, RM_MEM64, T_AVX_128, XMM1, XMM1, FSxBX, 0x0b, PASS_TEST_ARRAY(s_aValues) }, 20060 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM1_XMM1_005h), 255, RM_REG, T_AVX_128, XMM1, XMM1, NOREG, 0x05, PASS_TEST_ARRAY(s_aValuesSR) }, 20061 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM1_XMM2_00ah), 255, RM_REG, T_AVX_128, XMM1, XMM1, XMM2, 0x0a, PASS_TEST_ARRAY(s_aValues) }, 20062 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_FSxBX_010h), 255, RM_MEM64, T_AVX_128, XMM1, XMM2, FSxBX, 0x10, PASS_TEST_ARRAY(s_aValues) }, 20063 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_FSxBX_011h), 255, RM_MEM64, T_AVX_128, XMM1, XMM2, FSxBX, 0x11, PASS_TEST_ARRAY(s_aValues) }, 20064 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_FSxBX_013h), 255, RM_MEM64, T_AVX_128, XMM1, XMM2, FSxBX, 0x13, PASS_TEST_ARRAY(s_aValues) }, 20065 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM1_00ch), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM1, 0x0c, PASS_TEST_ARRAY(s_aValues) }, 20066 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM2_00eh), 255, RM_REG, T_AVX_128, XMM1, XMM2, NOREG, 0x0e, PASS_TEST_ARRAY(s_aValuesSR) }, 20067 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_000h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x00, PASS_TEST_ARRAY(s_aValues) }, 20068 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_001h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x01, PASS_TEST_ARRAY(s_aValues) }, 20069 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_002h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x02, PASS_TEST_ARRAY(s_aValues) }, 20070 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_003h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x03, PASS_TEST_ARRAY(s_aValues) }, 20071 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_004h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x04, PASS_TEST_ARRAY(s_aValues) }, 20072 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_005h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x05, PASS_TEST_ARRAY(s_aValues) }, 20073 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_006h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x06, PASS_TEST_ARRAY(s_aValues) }, 20074 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_007h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x07, PASS_TEST_ARRAY(s_aValues) }, 20075 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_008h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x08, PASS_TEST_ARRAY(s_aValues) }, 20076 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_009h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x09, PASS_TEST_ARRAY(s_aValues) }, 20077 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_00ah), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x0a, PASS_TEST_ARRAY(s_aValues) }, 20078 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_00bh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x0b, PASS_TEST_ARRAY(s_aValues) }, 20079 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_00ch), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x0c, PASS_TEST_ARRAY(s_aValues) }, 20080 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_00dh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x0d, PASS_TEST_ARRAY(s_aValues) }, 20081 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_00eh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x0e, PASS_TEST_ARRAY(s_aValues) }, 20082 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_00fh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x0f, PASS_TEST_ARRAY(s_aValues) }, 20083 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_010h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x10, PASS_TEST_ARRAY(s_aValues) }, 20084 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_011h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x11, PASS_TEST_ARRAY(s_aValues) }, 20085 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_012h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x12, PASS_TEST_ARRAY(s_aValues) }, 20086 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_013h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x13, PASS_TEST_ARRAY(s_aValues) }, 20087 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_014h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x14, PASS_TEST_ARRAY(s_aValues) }, 20088 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_015h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x15, PASS_TEST_ARRAY(s_aValues) }, 20089 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_016h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x16, PASS_TEST_ARRAY(s_aValues) }, 20090 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_017h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x17, PASS_TEST_ARRAY(s_aValues) }, 20091 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_018h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x18, PASS_TEST_ARRAY(s_aValues) }, 20092 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_019h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x19, PASS_TEST_ARRAY(s_aValues) }, 20093 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_01ah), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x1a, PASS_TEST_ARRAY(s_aValues) }, 20094 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_01bh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x1b, PASS_TEST_ARRAY(s_aValues) }, 20095 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_01ch), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x1c, PASS_TEST_ARRAY(s_aValues) }, 20096 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_01dh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x1d, PASS_TEST_ARRAY(s_aValues) }, 20097 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_01eh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x1e, PASS_TEST_ARRAY(s_aValues) }, 20098 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_01fh), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x1f, PASS_TEST_ARRAY(s_aValues) }, 20099 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_022h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x02, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 20100 { BS3_INSTR4_ALL(vcmpsd_XMM1_XMM2_XMM3_044h), 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, 0x04, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 20101 { BS3_INSTR4_C64(vcmpsd_XMM8_XMM8_FSxBX_01fh), 255, RM_MEM64, T_AVX_128, XMM8, XMM8, FSxBX, 0x1f, PASS_TEST_ARRAY(s_aValues) }, 20102 { BS3_INSTR4_C64(vcmpsd_XMM8_XMM9_FSxBX_01dh), 255, RM_MEM64, T_AVX_128, XMM8, XMM9, FSxBX, 0x1d, PASS_TEST_ARRAY(s_aValues) }, 20103 { BS3_INSTR4_C64(vcmpsd_XMM8_XMM9_XMM9_01ah), 255, RM_REG, T_AVX_128, XMM8, XMM9, NOREG, 0x1a, PASS_TEST_ARRAY(s_aValuesSR) }, 20104 { BS3_INSTR4_C64(vcmpsd_XMM8_XMM9_XMM10_016h), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, 0x16, PASS_TEST_ARRAY(s_aValues) }, 20105 { BS3_INSTR4_C64(vcmpsd_XMM8_XMM9_XMM10_017h), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, 0x17, PASS_TEST_ARRAY(s_aValues) }, 20106 { BS3_INSTR4_C64(vcmpsd_XMM8_XMM9_XMM10_019h), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, 0x19, PASS_TEST_ARRAY(s_aValues) }, 20107 { BS3_INSTR4_C64(vcmpsd_XMM8_XMM9_XMM10_0ddh), 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, 0x1d, PASS_TEST_ARRAY(s_aValues) }, /* reserved */ 20108 }; 20109 20110 return bs3CpuInstr4_WorkerTestType1_P(bMode, PASS_ARRAY(s_aTests), PASS_ARRAY(g_aXcptConfig3), bs3CpuInstr4_WorkerTestType1_Provider_cmpsd); 19730 20111 } 19731 20112 … … 24508 24889 { "[v]cmpps", bs3CpuInstr4_v_cmpps, 0 }, 24509 24890 { "[v]cmppd", bs3CpuInstr4_v_cmppd, 0 }, 24891 { "[v]cmpss", bs3CpuInstr4_v_cmpss, 0 }, 24892 { "[v]cmpsd", bs3CpuInstr4_v_cmpsd, 0 }, 24510 24893 { "[v]comiss", bs3CpuInstr4_v_comiss, 0 }, 24511 24894 { "[v]ucomiss", bs3CpuInstr4_v_ucomiss, 0 },
Note:
See TracChangeset
for help on using the changeset viewer.