Changeset 106043 in vbox
- Timestamp:
- Sep 13, 2024 9:27:21 AM (7 months ago)
- svn:sync-xref-src-repo-rev:
- 164793
- Location:
- trunk/src/VBox/ValidationKit/bootsectors
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4-template.mac
r106017 r106043 422 422 423 423 ; 424 ;; [v]divsd 425 ; 426 EMIT_INSTR_PLUS_ICEBP divsd, XMM1, XMM2 427 EMIT_INSTR_PLUS_ICEBP divsd, XMM1, FSxBX 428 EMIT_INSTR_PLUS_ICEBP_C64 divsd, XMM8, XMM9 429 EMIT_INSTR_PLUS_ICEBP_C64 divsd, XMM8, FSxBX 430 431 EMIT_INSTR_PLUS_ICEBP vdivsd, XMM1, XMM2, XMM3 432 EMIT_INSTR_PLUS_ICEBP vdivsd, XMM1, XMM2, FSxBX 433 EMIT_INSTR_PLUS_ICEBP_C64 vdivsd, XMM8, XMM9, XMM10 434 EMIT_INSTR_PLUS_ICEBP_C64 vdivsd, XMM8, XMM9, FSxBX 435 436 ; 424 437 ;; [v]addsubps 425 438 ; -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32
r106041 r106043 7433 7433 7434 7434 /* 7435 * [V]DIVSD. 7436 */ 7437 BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_divsd(uint8_t bMode) 7438 { 7439 static BS3CPUINSTR4_TEST1_VALUES_SD_T const s_aValues[] = 7440 { 7441 /* 7442 * Zero. 7443 */ 7444 /* 0*/{ { /*src2 */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7445 { /*src1 */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7446 { /* => */ { FP64_QNAN(1), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7447 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7448 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE, 7449 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE, 7450 /*xcpt? */ false, false }, 7451 { { /*src2 */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7452 { /*src1 */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7453 { /* => */ { FP64_QNAN(1), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7454 /*mxcsr:in */ 0, 7455 /*128:out */ X86_MXCSR_IE, 7456 /*256:out */ X86_MXCSR_IE, 7457 /*xcpt? */ true, true }, 7458 { { /*src2 */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7459 { /*src1 */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7460 { /* => */ { FP64_QNAN(1), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7461 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 7462 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7463 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7464 /*xcpt? */ false, false }, 7465 { { /*src2 */ { FP64_0(0), FP64_NORM_V3(0), FP64_NORM_V2(0), FP64_0(0) } }, 7466 { /*src1 */ { FP64_0(0), FP64_0(1), FP64_0(1), FP64_NORM_V1(0) } }, 7467 { /* => */ { FP64_QNAN(1), FP64_0(1), FP64_0(1), FP64_NORM_V1(0) } }, 7468 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 7469 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE, 7470 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE, 7471 /*xcpt? */ false, false }, 7472 { { /*src2 */ { FP64_0(1), FP64_RAND_V3(0), FP64_RAND_V2(1), FP64_RAND_V1(1) } }, 7473 { /*src1 */ { FP64_0(1), FP64_RAND_V0(1), FP64_RAND_V1(1), FP64_RAND_V2(0) } }, 7474 { /* => */ { FP64_QNAN(1), FP64_RAND_V0(1), FP64_RAND_V1(1), FP64_RAND_V2(0) } }, 7475 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP, 7476 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE, 7477 /*256:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE, 7478 /*xcpt? */ true, true }, 7479 { { /*src2 */ { FP64_0(1), FP64_RAND_V0(0), FP64_RAND_V1(0), FP64_RAND_V2(1) } }, 7480 { /*src1 */ { FP64_0(0), FP64_RAND_V2(1), FP64_RAND_V3(0), FP64_RAND_V0(0) } }, 7481 { /* => */ { FP64_QNAN(1), FP64_RAND_V2(1), FP64_RAND_V3(0), FP64_RAND_V0(0) } }, 7482 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO, 7483 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7484 /*256:out */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7485 /*xcpt? */ true, true }, 7486 { { /*src2 */ { FP64_0(0), FP64_RAND_V0(0), FP64_RAND_V1(0), FP64_RAND_V2(1) } }, 7487 { /*src1 */ { FP64_0(1), FP64_RAND_V1(1), FP64_RAND_V2(0), FP64_RAND_V0(0) } }, 7488 { /* => */ { FP64_QNAN(1), FP64_RAND_V1(1), FP64_RAND_V2(0), FP64_RAND_V0(0) } }, 7489 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ, 7490 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE, 7491 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE, 7492 /*xcpt? */ false, false }, 7493 { { /*src2 */ { FP64_0(0), FP64_RAND_V0(0), FP64_RAND_V1(0), FP64_RAND_V2(1) } }, 7494 { /*src1 */ { FP64_1(0), FP64_RAND_V3(1), FP64_RAND_V2(0), FP64_RAND_V0(0) } }, 7495 { /* => */ { FP64_INF(0), FP64_RAND_V3(1), FP64_RAND_V2(0), FP64_RAND_V0(0) } }, 7496 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 7497 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_FSW_ZE, 7498 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_FSW_ZE, 7499 /*xcpt? */ false, false }, 7500 /* 7501 * Infinity. 7502 */ 7503 /* 8*/{ { /*src2 */ { FP64_INF(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7504 { /*src1 */ { FP64_1(1), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7505 { /* => */ { FP64_0(1), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7506 /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM, 7507 /*128:out */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM, 7508 /*256:out */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM, 7509 /*xcpt? */ false, false }, 7510 { { /*src2 */ { FP64_INF(1), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7511 { /*src1 */ { FP64_1(1), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7512 { /* => */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 7513 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7514 /*128:out */ X86_MXCSR_XCPT_MASK, 7515 /*256:out */ X86_MXCSR_XCPT_MASK, 7516 /*xcpt? */ false, false }, 7517 { { /*src2 */ { FP64_INF(0), FP64_RAND_V1(0), FP64_RAND_V2(0), FP64_RAND_V3(1) } }, 7518 { /*src1 */ { FP64_INF(0), FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V2(1) } }, 7519 { /* => */ { FP64_INF(0), FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V2(1) } }, 7520 /*mxcsr:in */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_DAZ | X86_MXCSR_FZ, 7521 /*128:out */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE, 7522 /*256:out */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE, 7523 /*xcpt? */ true, true }, 7524 { { /*src2 */ { FP64_INF(1), FP64_RAND_V3(0), FP64_RAND_V2(1), FP64_RAND_V1(1) } }, 7525 { /*src1 */ { FP64_INF(0), FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V0(0) } }, 7526 { /* => */ { FP64_QNAN(1), FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V0(0) } }, 7527 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 7528 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7529 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7530 /*xcpt? */ false, false }, 7531 { { /*src2 */ { FP64_1(0), FP64_RAND_V3(0), FP64_RAND_V2(1), FP64_RAND_V0(1) } }, 7532 { /*src1 */ { FP64_INF(0), FP64_RAND_V1(0), FP64_RAND_V2(0), FP64_RAND_V3(1) } }, 7533 { /* => */ { FP64_INF(0), FP64_RAND_V1(0), FP64_RAND_V2(0), FP64_RAND_V3(1) } }, 7534 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ, 7535 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ, 7536 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ, 7537 /*xcpt? */ false, false }, 7538 { { /*src2 */ { FP64_INF(0), FP64_INF(0), FP64_INF(1), FP64_INF(1) } }, 7539 { /*src1 */ { FP64_1(1), FP64_INF(1), FP64_INF(1), FP64_INF(0) } }, 7540 { /* => */ { FP64_0(1), FP64_INF(1), FP64_INF(0), FP64_INF(1) } }, 7541 /*mxcsr:in */ X86_MXCSR_FZ, 7542 /*128:out */ X86_MXCSR_FZ, 7543 /*256:out */ X86_MXCSR_FZ, 7544 /*xcpt? */ false, false }, 7545 { { /*src2 */ { FP64_INF(1), FP64_QNAN(0), FP64_SNAN(0), FP64_RAND_V0(0) } }, 7546 { /*src1 */ { FP64_INF(0), FP64_QNAN(0), FP64_SNAN(0), FP64_RAND_V0(0) } }, 7547 { /* => */ { FP64_QNAN(1), FP64_QNAN(0), FP64_SNAN(0), FP64_RAND_V0(0) } }, 7548 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 7549 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7550 /*256:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7551 /*xcpt? */ true, true }, 7552 /* 7553 * Normals. 7554 */ 7555 /*15*/{ { /*src2 */ { FP64_V(0, 0xe66f500000000, 0x40d)/*31131.828125*/, FP64_RAND_V1(0), FP64_RAND_V2(0), FP64_RAND_V3(1) } }, 7556 { /*src1 */ { FP64_V(0, 0xe66f500000000, 0x40d)/*31131.828125*/, FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V2(1) } }, 7557 { /* => */ { FP64_1(0), FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V2(1) } }, 7558 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7559 /*128:out */ X86_MXCSR_XCPT_MASK, 7560 /*256:out */ X86_MXCSR_XCPT_MASK, 7561 /*xcpt? */ false, false }, 7562 { { /*src2 */ { FP64_V(0, 0xaf00000000000, 0x406)/* 215.50*/, FP64_RAND_V2(0), FP64_RAND_V3(0), FP64_RAND_V2(1) } }, 7563 { /*src1 */ { FP64_V(0, 0xfb74e1d800000, 0x41a)/*266053390.75*/, FP64_RAND_V1(0), FP64_RAND_V1(1), FP64_RAND_V0(1) } }, 7564 { /* => */ { FP64_V(0, 0x2d69a80000000, 0x413)/* 1234586.50*/, FP64_RAND_V1(0), FP64_RAND_V1(1), FP64_RAND_V0(1) } }, 7565 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7566 /*128:out */ X86_MXCSR_XCPT_MASK, 7567 /*256:out */ X86_MXCSR_XCPT_MASK, 7568 /*xcpt? */ false, false }, 7569 { { /*src2 */ { FP64_V(1, 0x107526e749f80, 0x42b)/*-18723145413791.50*/, FP64_RAND_V3(0), FP64_RAND_V1(0), FP64_RAND_V1(1) } }, 7570 { /*src1 */ { FP64_V(0, 0x549270a11c760, 0x42c)/* 46807863534478.75*/, FP64_RAND_V0(0), FP64_RAND_V2(1), FP64_RAND_V2(1) } }, 7571 { /* => */ { FP64_V(1, 0x4000000000000, 0x400)/* -2.50*/, FP64_RAND_V0(0), FP64_RAND_V2(1), FP64_RAND_V2(1) } }, 7572 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7573 /*128:out */ X86_MXCSR_XCPT_MASK, 7574 /*256:out */ X86_MXCSR_XCPT_MASK, 7575 /*xcpt? */ false, false }, 7576 { { /*src2 */ { FP64_V(0, 0x6fee0e4bd0000, 0x420)/* 12345678999.62500*/, FP64_RAND_V3(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7577 { /*src1 */ { FP64_V(0, 0x3c30944926c00, 0x424)/*169753086244.84375*/, FP64_RAND_V2(0), FP64_RAND_V1(1), FP64_RAND_V3(1) } }, 7578 { /* => */ { FP64_V(0, 0xb800000000000, 0x402)/* 13.75000*/, FP64_RAND_V2(0), FP64_RAND_V1(1), FP64_RAND_V3(1) } }, 7579 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7580 /*128:out */ X86_MXCSR_XCPT_MASK, 7581 /*256:out */ X86_MXCSR_XCPT_MASK, 7582 /*xcpt? */ false, false }, 7583 { { /*src2 */ { FP64_NORM_MAX(1), FP64_RAND_V2(1), FP64_RAND_V2(1), FP64_RAND_V3(1) } }, 7584 { /*src1 */ { FP64_NORM_MAX(0), FP64_RAND_V1(1), FP64_RAND_V0(0), FP64_RAND_V2(0) } }, 7585 { /* => */ { FP64_1(1), FP64_RAND_V1(1), FP64_RAND_V0(0), FP64_RAND_V2(0) } }, 7586 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7587 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7588 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7589 /*xcpt? */ false, false }, 7590 { { /*src2 */ { FP64_V(0, 0xbcd80e0108cc0, 0x42e)/*244555555308646.00*/, FP64_RAND_V2(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7591 { /*src1 */ { FP64_V(0, 0x4da20a80c6990, 0x42e)/*183416666481484.50*/, FP64_RAND_V1(1), FP64_RAND_V2(1), FP64_RAND_V3(1) } }, 7592 { /* => */ { FP64_V(0, 0x8000000000000, 0x3fe)/* 0.75*/, FP64_RAND_V1(1), FP64_RAND_V2(1), FP64_RAND_V3(1) } }, 7593 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7594 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7595 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7596 /*xcpt? */ false, false }, 7597 { { /*src2 */ { FP64_V(1, 0x68b83b1ed4000, 0x41e)/*-3025935759.4140625*/, FP64_RAND_V0(0), FP64_RAND_V1(0), FP64_RAND_V2(1) } }, 7598 { /*src1 */ { FP64_V(0, 0x68b83b1ed4000, 0x41f)/* 6051871518.8281250*/, FP64_RAND_V2(0), FP64_RAND_V1(1), FP64_RAND_V3(1) } }, 7599 { /* => */ { FP64_V(1, 0, 0x400)/* -2.0000000*/, FP64_RAND_V2(0), FP64_RAND_V1(1), FP64_RAND_V3(1) } }, 7600 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7601 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7602 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7603 /*xcpt? */ false, false }, 7604 { { /*src2 */ { FP64_V(0, 0xb88e0395d49b0, 0x42d)/*121098765432102.75*/, FP64_RAND_V3(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7605 { /*src1 */ { FP64_V(0, 0x4a6a82b05f744, 0x42f)/*363296296296308.25*/, FP64_RAND_V1(1), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7606 { /* => */ { FP64_V(0, 0x8000000000000, 0x400)/* 3.00*/, FP64_RAND_V1(1), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7607 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7608 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7609 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7610 /*xcpt? */ false, false }, 7611 { { /*src2 */ { FP64_1(0), FP64_0(0), FP64_NORM_SAFE_INT_MIN(0), FP64_NORM_MAX(1) } }, 7612 { /*src1 */ { FP64_NORM_SAFE_INT_MAX(0), FP64_V(0, FP64_FRAC_NORM_MAX - 1, FP64_EXP_SAFE_INT_MAX), FP64_INF(1), FP64_NORM_SAFE_INT_MIN(1) } }, 7613 { /* => */ { FP64_NORM_SAFE_INT_MAX(0), FP64_V(0, FP64_FRAC_NORM_MAX - 1, FP64_EXP_SAFE_INT_MAX), FP64_INF(1), FP64_NORM_SAFE_INT_MIN(1) } }, 7614 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 7615 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 7616 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 7617 /*xcpt? */ false, false }, 7618 { { /*src2 */ { FP64_NORM_V0(0), FP64_NORM_V1(1), FP64_NORM_V2(0), FP64_NORM_V3(1) } }, 7619 { /*src1 */ { FP64_NORM_V0(0), FP64_SNAN(0), FP64_SNAN(1), FP64_QNAN(0) } }, 7620 { /* => */ { FP64_1(0), FP64_SNAN(0), FP64_SNAN(1), FP64_QNAN(0) } }, 7621 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7622 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7623 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 7624 /*xcpt? */ false, false }, 7625 /* 7626 * Denormals. 7627 */ 7628 /*25*/{ { /* UNMASKED: 0 / DENORM_MAX = 0 &&_DE */ 7629 /*src2 */ { FP64_DENORM_MAX(0), FP64_0(0), FP64_DENORM_MIN(0), FP64_0(0) } }, 7630 { /*src1 */ { FP64_0(0), FP64_DENORM_MIN(0), FP64_0(0), FP64_DENORM_MAX(0) } }, 7631 { /* => */ { FP64_0(0), FP64_DENORM_MIN(0), FP64_0(0), FP64_DENORM_MAX(0) } }, 7632 /*mxcsr:in */ 0, 7633 /*128:out */ X86_MXCSR_DE, 7634 /*256:out */ X86_MXCSR_DE, 7635 /*xcpt? */ true, true }, 7636 { { /* MASKED: 0 / DENORM_MAX = 0 &_DE */ 7637 /*src2 */ { FP64_DENORM_MAX(0), FP64_0(0), FP64_DENORM_MIN(0), FP64_0(0) } }, 7638 { /*src1 */ { FP64_0(0), FP64_DENORM_MIN(0), FP64_0(0), FP64_DENORM_MAX(0) } }, 7639 { /* => */ { FP64_0(0), FP64_DENORM_MIN(0), FP64_0(0), FP64_DENORM_MAX(0) } }, 7640 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7641 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE, 7642 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE, 7643 /*xcpt? */ false, false }, 7644 { { /* UNMASKED: DENORM_MAX / -0 = -INF &&_ZE */ 7645 /*src2 */ { FP64_0(1), FP64_0(0), FP64_DENORM_MIN(0), FP64_0(0) } }, 7646 { /*src1 */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_0(0), FP64_DENORM_MAX(0) } }, 7647 { /* => */ { FP64_INF(1), FP64_DENORM_MIN(0), FP64_0(0), FP64_DENORM_MAX(0) } }, 7648 /*mxcsr:in */ 0, 7649 /*128:out */ X86_MXCSR_ZE, 7650 /*256:out */ X86_MXCSR_ZE, 7651 /*xcpt? */ true, true }, 7652 { { /* MASKED: -DENORM_MAX / -0 = INF &_ZE */ 7653 /*src2 */ { FP64_0(1), FP64_0(0), FP64_DENORM_MIN(0), FP64_0(0) } }, 7654 { /*src1 */ { FP64_DENORM_MAX(1), FP64_DENORM_MIN(0), FP64_0(0), FP64_DENORM_MAX(0) } }, 7655 { /* => */ { FP64_INF(0), FP64_DENORM_MIN(0), FP64_0(0), FP64_DENORM_MAX(0) } }, 7656 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7657 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_ZE, 7658 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_ZE, 7659 /*xcpt? */ false, false }, 7660 { { /* MASKED: -DENORM_MAX / DENORM_MIN = (-huge) &_DE */ 7661 /*src2 */ { FP64_DENORM_MIN(0), FP64_0(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7662 { /*src1 */ { FP64_DENORM_MAX(1), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7663 { /* => */ { FP64_V(1, 0xffffffffffffe, 0x432)/*-4503599627370495.0*/, FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7664 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP, 7665 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP | X86_MXCSR_DE, 7666 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP | X86_MXCSR_DE, 7667 /*xcpt? */ false, false }, 7668 { { /* UNMASKED: -DENORM_MAX / -DENORM_MIN = (huge) &&_DE */ 7669 /*src2 */ { FP64_DENORM_MIN(1), FP64_0(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7670 { /*src1 */ { FP64_DENORM_MAX(1), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7671 { /* => */ { FP64_V(0, 0xffffffffffffe, 0x432)/*4503599627370495.0*/, FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7672 /*mxcsr:in */ X86_MXCSR_RC_UP, 7673 /*128:out */ X86_MXCSR_RC_UP | X86_MXCSR_DE, 7674 /*256:out */ X86_MXCSR_RC_UP | X86_MXCSR_DE, 7675 /*xcpt? */ true, true }, 7676 { { /* MASKED: -DENORM_MIN / DENORM_MAX = (-tiny) &_DE,_PE */ 7677 /*src2 */ { FP64_DENORM_MAX(0), FP64_0(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7678 { /*src1 */ { FP64_DENORM_MIN(1), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7679 { /* => */ { FP64_V(1, 0x0000000000001, 0x3cb)/*-22204460492503135739e-35*/, FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7680 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7681 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE, 7682 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE, 7683 /*xcpt? */ false, false }, 7684 { { /* MASKED: -0 / DENORM_MIN = -0 &_DE */ 7685 /*src2 */ { FP64_DENORM_MIN(0), FP64_0(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7686 { /*src1 */ { FP64_0(1), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7687 { /* => */ { FP64_0(1), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7688 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7689 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE, 7690 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE, 7691 /*xcpt? */ false, false }, 7692 { { /* MASKED: -0.25 / DENORM_MAX = (-HUGE) &_DE &_PE */ 7693 /*src2 */ { FP64_DENORM_MAX(0), FP64_0(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7694 { /*src1 */ { FP64_V(1, 0, 0x3fd)/*0.25*/, FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7695 { /* => */ { FP64_V(1, 1, 0x7fb)/*1.1XYZe307*/, FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7696 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7697 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE, 7698 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE, 7699 /*xcpt? */ false, false }, 7700 { { /* MASKED: 42.0 / DENORM_MIN = INF &_DE &_PE &_OE */ 7701 /*src2 */ { FP64_DENORM_MIN(0), FP64_0(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7702 { /*src1 */ { FP64_V(0, 0x5000000000000, 0x404)/*42.0*/, FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7703 { /* => */ { FP64_INF(0), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7704 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7705 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_OE, 7706 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_OE, 7707 /*xcpt? */ false, false }, 7708 { { /* ~OMASKED: 42.0 / DENORM_MIN = INF &_DE &&_OE */ 7709 /*src2 */ { FP64_DENORM_MIN(0), FP64_0(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7710 { /*src1 */ { FP64_V(0, 0x5000000000000, 0x404)/*42.0*/, FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7711 { /* => */ { FP64_INF(0), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7712 /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_OM, 7713 /*128:out */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_OM) | X86_MXCSR_DE | X86_MXCSR_OE, 7714 /*256:out */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_OM) | X86_MXCSR_DE | X86_MXCSR_OE, 7715 /*xcpt? */ true, true }, 7716 { { /* DAZ+MASK: 42.0 / DENORM_MIN = INF &_ZE */ 7717 /*src2 */ { FP64_DENORM_MIN(0), FP64_0(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7718 { /*src1 */ { FP64_V(0, 0x5000000000000, 0x404)/*42.0*/, FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7719 { /* => */ { FP64_INF(0), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7720 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ, 7721 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_ZE | X86_MXCSR_DAZ, 7722 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_ZE | X86_MXCSR_DAZ, 7723 /*xcpt? */ false, false }, 7724 { { /* MASKED: DENORM_MAX / -42.0 = -5e-310 &_DE &_PE &_UE */ 7725 /*src2 */ { FP64_V(1, 0x5000000000000, 0x404)/*-42.0*/, FP64_0(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7726 { /*src1 */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7727 { /* => */ { FP64_V(1, 0x618618618618, 0)/*-5.29XYZe-310*/, FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7728 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7729 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE, 7730 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE, 7731 /*xcpt? */ false, false }, 7732 #ifdef TODO_X86_MXCSR_PE /** @todo: THIS FAILS ON IEM: X86_MXCSR_PE not set in 128:out */ 7733 { { /* ~UMASKED: DENORM_MAX / 42.0 = 5e-310 &_DE &_PE &&_UE */ 7734 /*src2 */ { FP64_V(0, 0x5000000000000, 0x404)/*-42.0*/, FP64_0(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7735 { /*src1 */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7736 { /* => */ { FP64_V(0, 0x618618618618, 0)/*-5.29XYZe-310*/, FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7737 /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_UM, 7738 /*128:out */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_UM) | X86_MXCSR_PE | X86_MXCSR_DE | X86_MXCSR_UE, 7739 /*256:out */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_UM) | X86_MXCSR_PE | X86_MXCSR_DE | X86_MXCSR_UE, 7740 /*xcpt? */ true, true }, 7741 #endif /* TODO_X86_MXCSR_PE */ 7742 { { /* DAZ+MASK: DENORM_MAX / -42.0 = -0 &- */ 7743 /*src2 */ { FP64_V(1, 0x5000000000000, 0x404)/*-42.0*/, FP64_0(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7744 { /*src1 */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7745 { /* => */ { FP64_0(1), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7746 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ, 7747 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ, 7748 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ, 7749 /*xcpt? */ false, false }, 7750 { { /* DAZ+FZ+M: DENORM_MAX / -42.0 = -0 &- */ 7751 /*src2 */ { FP64_V(1, 0x5000000000000, 0x404)/*-42.0*/, FP64_0(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } }, 7752 { /*src1 */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7753 { /* => */ { FP64_0(1), FP64_DENORM_MIN(0), FP64_RAND_V1(1), FP64_RAND_V3(0) } }, 7754 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ, 7755 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ, 7756 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ, 7757 /*xcpt? */ false, false }, 7758 /** @todo: how to usefully test FZ, RC_{NEAREST,UP,DOWN,ZERO} ? */ 7759 7760 /* 7761 * Invalids. 7762 */ 7763 /*40*/ BS3CPUINSTR4_SD_INVALIDS 7764 /** @todo Underflow, Precision; Rounding; FZ etc. */ 7765 }; 7766 7767 #define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues 7768 static BS3CPUINSTR4_TEST1_T const s_aTests16[] = 7769 { 7770 { bs3CpuInstr4_divsd_XMM1_XMM2_icebp_c16, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues }, 7771 { bs3CpuInstr4_divsd_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues }, 7772 7773 { bs3CpuInstr4_vdivsd_XMM1_XMM2_XMM3_icebp_c16, 255, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues }, 7774 { bs3CpuInstr4_vdivsd_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues }, 7775 }; 7776 static BS3CPUINSTR4_TEST1_T const s_aTests32[] = 7777 { 7778 { bs3CpuInstr4_divsd_XMM1_XMM2_icebp_c32, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues }, 7779 { bs3CpuInstr4_divsd_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues }, 7780 7781 { bs3CpuInstr4_vdivsd_XMM1_XMM2_XMM3_icebp_c32, 255, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues }, 7782 { bs3CpuInstr4_vdivsd_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues }, 7783 }; 7784 static BS3CPUINSTR4_TEST1_T const s_aTests64[] = 7785 { 7786 { bs3CpuInstr4_divsd_XMM1_XMM2_icebp_c64, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues }, 7787 { bs3CpuInstr4_divsd_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues }, 7788 7789 { bs3CpuInstr4_vdivsd_XMM1_XMM2_XMM3_icebp_c64, 255, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues }, 7790 { bs3CpuInstr4_vdivsd_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues }, 7791 7792 { bs3CpuInstr4_divsd_XMM8_XMM9_icebp_c64, 255, RM_REG, T_SSE, 8, 8, 9, PASS_s_aValues }, 7793 { bs3CpuInstr4_divsd_XMM8_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_SSE, 8, 8, 255, PASS_s_aValues }, 7794 7795 { bs3CpuInstr4_vdivsd_XMM8_XMM9_XMM10_icebp_c64, 255, RM_REG, T_AVX_128, 8, 9, 10, PASS_s_aValues }, 7796 { bs3CpuInstr4_vdivsd_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 8, 9, 255, PASS_s_aValues }, 7797 }; 7798 #undef PASS_s_aValues 7799 7800 static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64); 7801 unsigned const iTest = BS3CPUINSTR4_TEST_MODES_INDEX(bMode); 7802 return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests, 7803 g_aXcptConfig3, RT_ELEMENTS(g_aXcptConfig3)); 7804 } 7805 7806 7807 /* 7435 7808 * [V]ADDSUBPS. 7436 7809 */ … … 8507 8880 { "[v]mulsd", bs3CpuInstr4_v_mulsd, 0 }, 8508 8881 { "[v]divss", bs3CpuInstr4_v_divss, 0 }, 8882 { "[v]divsd", bs3CpuInstr4_v_divsd, 0 }, 8509 8883 { "[v]addsubps", bs3CpuInstr4_v_addsubps, 0 }, 8510 8884 { "[v]addsubpd", bs3CpuInstr4_v_addsubpd, 0 },
Note:
See TracChangeset
for help on using the changeset viewer.