Changeset 106102 in vbox for trunk/src/VBox
- Timestamp:
- Sep 20, 2024 1:31:45 AM (2 months 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
r106087 r106102 409 409 410 410 ; 411 ;; [v]divps 412 ; 413 EMIT_INSTR_PLUS_ICEBP divps, XMM1, XMM2 414 EMIT_INSTR_PLUS_ICEBP divps, XMM1, FSxBX 415 EMIT_INSTR_PLUS_ICEBP_C64 divps, XMM8, XMM9 416 EMIT_INSTR_PLUS_ICEBP_C64 divps, XMM8, FSxBX 417 418 EMIT_INSTR_PLUS_ICEBP vdivps, XMM1, XMM2, XMM3 419 EMIT_INSTR_PLUS_ICEBP vdivps, XMM1, XMM2, FSxBX 420 EMIT_INSTR_PLUS_ICEBP_C64 vdivps, XMM8, XMM9, XMM10 421 EMIT_INSTR_PLUS_ICEBP_C64 vdivps, XMM8, XMM9, FSxBX 422 423 EMIT_INSTR_PLUS_ICEBP vdivps, YMM1, YMM2, YMM3 424 EMIT_INSTR_PLUS_ICEBP vdivps, YMM1, YMM2, FSxBX 425 EMIT_INSTR_PLUS_ICEBP_C64 vdivps, YMM8, YMM9, YMM10 426 EMIT_INSTR_PLUS_ICEBP_C64 vdivps, YMM8, YMM9, FSxBX 427 428 ; 411 429 ;; [v]divss 412 430 ; … … 435 453 436 454 ; 437 ;; [v]divps438 ;439 EMIT_INSTR_PLUS_ICEBP divps, XMM1, XMM2440 EMIT_INSTR_PLUS_ICEBP divps, XMM1, FSxBX441 EMIT_INSTR_PLUS_ICEBP_C64 divps, XMM8, XMM9442 EMIT_INSTR_PLUS_ICEBP_C64 divps, XMM8, FSxBX443 444 EMIT_INSTR_PLUS_ICEBP vdivps, XMM1, XMM2, XMM3445 EMIT_INSTR_PLUS_ICEBP vdivps, XMM1, XMM2, FSxBX446 EMIT_INSTR_PLUS_ICEBP_C64 vdivps, XMM8, XMM9, XMM10447 EMIT_INSTR_PLUS_ICEBP_C64 vdivps, XMM8, XMM9, FSxBX448 449 EMIT_INSTR_PLUS_ICEBP vdivps, YMM1, YMM2, YMM3450 EMIT_INSTR_PLUS_ICEBP vdivps, YMM1, YMM2, FSxBX451 EMIT_INSTR_PLUS_ICEBP_C64 vdivps, YMM8, YMM9, YMM10452 EMIT_INSTR_PLUS_ICEBP_C64 vdivps, YMM8, YMM9, FSxBX453 454 ;455 455 ;; [v]addsubps 456 456 ; -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32
r106092 r106102 7584 7584 7585 7585 /* 7586 * [V]DIVPS. 7587 */ 7588 BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_divps(uint8_t bMode) 7589 { 7590 static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues[] = 7591 { 7592 /** @todo Improve port from mulps */ 7593 /* 7594 * Zero. 7595 */ 7596 /* 0*/{ { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 7597 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 7598 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7599 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7600 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE, 7601 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE, 7602 /*xcpt? */ false, false }, 7603 { { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 7604 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 7605 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7606 /*mxcsr:in */ 0, 7607 /*128:out */ X86_MXCSR_IE, 7608 /*256:out */ X86_MXCSR_IE, 7609 /*xcpt? */ true, true }, 7610 { { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 7611 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 7612 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7613 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP, 7614 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE, 7615 /*256:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE, 7616 /*xcpt? */ true, true }, 7617 { { /*src2 */ { FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1) } }, 7618 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 7619 { /* => */ { FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1) } }, 7620 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO, 7621 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7622 /*256:out */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7623 /*xcpt? */ true, true }, 7624 { { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1) } }, 7625 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 7626 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7627 /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 7628 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7629 /*256:out */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7630 /*xcpt? */ true, true }, 7631 { { /*src2 */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1) } }, 7632 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(0) } }, 7633 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7634 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO, 7635 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7636 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7637 /*xcpt? */ false, false }, 7638 { { /*src2 */ { FP32_NORM_V0(0), FP32_NORM_V1(1), FP32_0(0), FP32_NORM_V3(1), FP32_0(0), FP32_NORM_V1(1), FP32_NORM_V4(0), FP32_NORM_V3(0) } }, 7639 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1) } }, 7640 { /* => */ { FP32_0(0), FP32_0(0), FP32_QNAN(1), FP32_0(1), FP32_QNAN(1), FP32_0(1), FP32_0(0), FP32_0(1) } }, 7641 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 7642 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE, 7643 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE, 7644 /*xcpt? */ false, false }, 7645 /* 7646 * Infinity. 7647 */ 7648 /* 7*/{ { /*src2 */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 7649 { /*src1 */ { FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 7650 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7651 /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM, 7652 /*128:out */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_IE, 7653 /*256:out */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_IE, 7654 /*xcpt? */ true, true }, 7655 { { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 7656 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 7657 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7658 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7659 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE, 7660 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE, 7661 /*xcpt? */ false, false }, 7662 { { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(0), FP32_0(1), FP32_0(1), FP32_0(0) } }, 7663 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 7664 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7665 /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK, 7666 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_IE, 7667 /*256:out */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_IE, 7668 /*xcpt? */ false, false }, 7669 { { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(0) } }, 7670 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1) } }, 7671 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7672 /*mxcsr:in */ X86_MXCSR_FZ, 7673 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_IE, 7674 /*256:out */ X86_MXCSR_FZ | X86_MXCSR_IE, 7675 /*xcpt? */ true, true }, 7676 { { /*src2 */ { FP32_INF(0), FP32_INF(1), FP32_0(0), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_INF(1), FP32_INF(0) } }, 7677 { /*src1 */ { FP32_INF(1), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } }, 7678 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7679 /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 7680 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7681 /*256:out */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7682 /*xcpt? */ true, true }, 7683 { { /*src2 */ { FP32_INF(0), FP32_INF(1), FP32_QNAN(0), FP32_QNAN(1), FP32_INF(0), FP32_QNAN(1), FP32_QNAN(0), FP32_INF(1) } }, 7684 { /*src1 */ { FP32_QNAN(0), FP32_QNAN(0), FP32_INF(1), FP32_INF(1), FP32_QNAN(1), FP32_INF(0), FP32_INF(0), FP32_QNAN(1) } }, 7685 { /* => */ { FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(1) } }, 7686 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7687 /*128:out */ X86_MXCSR_XCPT_MASK, 7688 /*256:out */ X86_MXCSR_XCPT_MASK, 7689 /*xcpt? */ false, false }, 7690 { { /*src2 */ { FP32_INF(0), FP32_INF(1), FP32_QNAN(0), FP32_QNAN(1), FP32_INF(0), FP32_QNAN(1), FP32_QNAN(0), FP32_INF(1) } }, 7691 { /*src1 */ { FP32_QNAN(0), FP32_QNAN(0), FP32_INF(1), FP32_INF(1), FP32_QNAN(1), FP32_INF(0), FP32_INF(0), FP32_QNAN(1) } }, 7692 { /* => */ { FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(1) } }, 7693 /*mxcsr:in */ X86_MXCSR_DAZ, 7694 /*128:out */ X86_MXCSR_DAZ, 7695 /*256:out */ X86_MXCSR_DAZ, 7696 /*xcpt? */ false, false }, 7697 /* 7698 * Overflow, Precision. 7699 */ 7700 #ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE not set in 256:out */ 7701 /*--|14*/{ { /*src2 */ { FP32_1(0), FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1), FP32_2(0) } }, 7702 { /*src1 */ { FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0), FP32_NORM_MAX(0) } }, 7703 { /* => */ { FP32_0(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_2(0), FP32_NORM_MAX(0) } }, 7704 /*mxcsr:in */ 0, 7705 /*128:out */ 0, 7706 /*256:out */ X86_MXCSR_UE | X86_MXCSR_PE, 7707 /*xcpt? */ false, true }, 7708 #endif /* TODO_X86_MXCSR_PE */ 7709 /*14|15*/{ { /*src2 */ { FP32_V(0,0,0x7e)/*0.50*/, FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } }, 7710 { /*src1 */ { FP32_NORM_MAX(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(0) } }, 7711 { /* => */ { FP32_INF(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_V(1,0x200000,0), FP32_0(0) } }, 7712 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7713 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE, 7714 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE, 7715 /*xcpt? */ false, false }, 7716 #ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE not set in 256:out */ 7717 /*--|16*/{ { /*src2 */ { FP32_V(0,0,0x7e)/*0.50*/, FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } }, 7718 { /*src1 */ { FP32_NORM_MAX(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(0) } }, 7719 { /* => */ { FP32_INF(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_V(1,0x200000,0), FP32_0(0) } }, 7720 /*mxcsr:in */ 0, 7721 /*128:out */ X86_MXCSR_OE, 7722 /*256:out */ X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE, 7723 /*xcpt? */ true, true }, 7724 #endif /* TODO_X86_MXCSR_PE */ 7725 /*15|17*/{ { /*src2 */ { FP32_V(0,0,0x7e)/*0.50*/, FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } }, 7726 { /*src1 */ { FP32_NORM_MAX(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(0) } }, 7727 { /* => */ { FP32_INF(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_V(1,0x200000,0), FP32_0(0) } }, 7728 /*mxcsr:in */ X86_MXCSR_OM, 7729 /*128:out */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE, 7730 /*256:out */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE, 7731 /*xcpt? */ true, true }, 7732 { { /*src2 */ { FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_1(0), FP32_1(0), FP32_NORM_MAX(0), FP32_1(1), FP32_1(0), FP32_NORM_MIN(0) } }, 7733 { /*src1 */ { FP32_NORM_MIN(0), FP32_NORM_MAX(1), FP32_1(0), FP32_1(0), FP32_NORM_MIN(1), FP32_1(0), FP32_1(1), FP32_NORM_MAX(0) } }, 7734 { /* => */ { FP32_0(0), FP32_NORM_MAX(1), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(1), FP32_1(1), FP32_NORM_MAX(0) } }, 7735 /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO, 7736 /*128:out */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE, 7737 /*256:out */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE, 7738 /*xcpt? */ false, false }, 7739 { { /*src2 */ { FP32_NORM_MAX(0), FP32_NORM_MIN(1), FP32_NORM_V1(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MAX(0) } }, 7740 { /*src1 */ { FP32_INF(0), FP32_0(0), FP32_NORM_V1(0), FP32_INF(0), FP32_INF(0), FP32_0(1), FP32_0(1), FP32_INF(1) } }, 7741 { /* => */ { FP32_INF(0), FP32_0(1), FP32_1(0), FP32_INF(0), FP32_INF(1), FP32_0(1), FP32_0(0), FP32_INF(1) } }, 7742 /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM, 7743 /*128:out */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM, 7744 /*256:out */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM, 7745 /*xcpt? */ false, false }, 7746 { { /*src2 */ { FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_V3(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MAX(0) } }, 7747 { /*src1 */ { FP32_NORM_MAX(0), FP32_0(1), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_0(1), FP32_0(1), FP32_INF(1) } }, 7748 { /* => */ { FP32_1(0), FP32_0(1), FP32_0(0), FP32_1(0), FP32_1(1), FP32_0(1), FP32_0(0), FP32_INF(1) } }, 7749 /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 7750 /*128:out */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 7751 /*256:out */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 7752 /*xcpt? */ false, false }, 7753 { { /*src2 */ { FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_2(0), FP32_1(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MIN(1) } }, 7754 { /*src1 */ { FP32_0(0), FP32_NORM_MAX(0), FP32_INF(1), FP32_2(1), FP32_2(0), FP32_INF(1), FP32_NORM_MAX(0), FP32_0(0) } }, 7755 { /* => */ { FP32_0(1), FP32_1(0), FP32_INF(1), FP32_1(1), FP32_2(1), FP32_INF(1), FP32_1(0), FP32_0(1) } }, 7756 /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 7757 /*128:out */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 7758 /*256:out */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 7759 /*xcpt? */ false, false }, 7760 { { /*src2 */ { FP32_1(0), FP32_NORM_V2(1), FP32_1(1), FP32_NORM_V6(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } }, 7761 { /*src1 */ { FP32_NORM_V7(0), FP32_NORM_V2(0), FP32_NORM_V4(1), FP32_NORM_V6(1), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0) } }, 7762 { /* => */ { FP32_NORM_V7(0), FP32_1(1), FP32_NORM_V4(0), FP32_1(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(0) } }, 7763 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ, 7764 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ, 7765 /*256:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ, 7766 /*xcpt? */ false, false }, 7767 { { /*src2 */ { FP32_1(0), FP32_NORM_V2(1), FP32_1(1), FP32_NORM_V6(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } }, 7768 { /*src1 */ { FP32_NORM_V7(0), FP32_NORM_V2(0), FP32_NORM_V4(1), FP32_NORM_V6(1), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0) } }, 7769 { /* => */ { FP32_NORM_V7(0), FP32_1(1), FP32_NORM_V4(0), FP32_1(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(0) } }, 7770 /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ, 7771 /*128:out */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ, 7772 /*256:out */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ, 7773 /*xcpt? */ false, false }, 7774 /** @todo More Overflow/Precision. */ 7775 /* 7776 * Normals. 7777 */ 7778 /*22|24*/{ { /*src2 */ { FP32_V(0, 0x600000, 0x7f)/*1.7500*/, FP32_NORM_V0(0), FP32_NORM_V1(0), FP32_NORM_V2(1), FP32_1(1), FP32_1(0), FP32_1(1), FP32_NORM_V6(1) } }, 7779 { /*src1 */ { FP32_V(0, 0x600000, 0x7d)/*0.4375*/, FP32_NORM_V0(0), FP32_NORM_V1(1), FP32_0(1), FP32_NORM_V0(0), FP32_NORM_V3(0), FP32_NORM_V4(1), FP32_NORM_V6(1) } }, 7780 { /* => */ { FP32_V(0, 0, 0x7d)/*0.2500*/, FP32_1(0), FP32_1(1), FP32_0(0), FP32_NORM_V0(1), FP32_NORM_V3(0), FP32_NORM_V4(0), FP32_1(0) } }, 7781 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 7782 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 7783 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 7784 /*xcpt? */ false, false }, 7785 { { /*src2 */ { FP32_V(0, 0x61e000, 0x89)/* 1807*/, FP32_V(0, 0x61e000, 0x89)/* 1807*/, FP32_V(0, 0x4a30b8, 0x8f)/* 103521.4375*/, FP32_V(0, 0x1a5200, 0x8c)/* 9876.5*/, FP32_V(0, 0x23b6a0, 0x8e)/*41910.625000*/, FP32_V(0, 0x23b6a0, 0x8e)/*41910.625000*/, FP32_V(0, 0, 0x7d)/*0.2500*/, FP32_V(0, 0x504000, 0x8a)/* 3332*/ } }, 7786 { /*src1 */ { FP32_V(0, 0x37be78, 0x95)/*6020924*/, FP32_V(0, 0x37be78, 0x95)/*6020924*/, FP32_V(0, 0x30eaa1, 0x93)/*1449300.1250*/, FP32_V(1, 0x39f7d1, 0x96)/*-12187601.0*/, FP32_V(0, 0x23b6a0, 0x8b)/* 5238.828125*/, FP32_V(0, 0x23b6a0, 0x8b)/* 5238.828125*/, FP32_V(0, 0x600000, 0x7d)/*0.4375*/, FP32_V(1, 0x37be78, 0x95)/*-6020924*/ } }, 7787 { /* => */ { FP32_V(0, 0x504000, 0x8a)/* 3332*/, FP32_V(0, 0x504000, 0x8a)/* 3332*/, FP32_V(0, 0x600000, 0x82)/* 14.0000*/, FP32_V(1, 0x1a4000, 0x89)/* -1234.0*/, FP32_V(0, 0, 0x7c)/* 0.125000*/, FP32_V(0, 0, 0x7c)/* 0.125000*/, FP32_V(0, 0x600000, 0x7f)/*1.7500*/, FP32_V(1, 0x61e000, 0x89)/* -1807*/ } }, 7788 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7789 /*128:out */ X86_MXCSR_XCPT_MASK, 7790 /*256:out */ X86_MXCSR_XCPT_MASK, 7791 /*xcpt? */ false, false }, 7792 { { /*src2 */ { FP32_NORM_SAFE_INT_MAX(0), FP32_1(0), FP32_NORM_SAFE_INT_MAX(1), FP32_1(1), FP32_NORM_SAFE_INT_MIN(1), FP32_1(1), FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MAX(0) } }, 7793 { /*src1 */ { FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MAX(1), FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MIN(0), FP32_0(0), FP32_0(1) } }, 7794 { /* => */ { FP32_1(0), FP32_NORM_SAFE_INT_MIN(0), FP32_1(0), FP32_NORM_SAFE_INT_MAX(1), FP32_1(0), FP32_NORM_SAFE_INT_MIN(1), FP32_0(0), FP32_0(1) } }, 7795 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 7796 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 7797 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 7798 /*xcpt? */ false, false }, 7799 { { /*src2 */ { FP32_NORM_MAX(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(1), FP32_NORM_MIN(0), FP32_NORM_MIN(0), FP32_1(0), FP32_1(1) } }, 7800 { /*src1 */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MIN(0) } }, 7801 { /* => */ { FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_1(1), FP32_NORM_MIN(1), FP32_NORM_MIN(1) } }, 7802 /*mxcsr:in */ 0, 7803 /*128:out */ 0, 7804 /*256:out */ 0, 7805 /*xcpt? */ false, false }, 7806 /** @todo More Normals. */ 7807 /* 7808 * Denormals. 7809 */ 7810 /*26|28*/{ { /*src2 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } }, 7811 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } }, 7812 { /* => */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(0) } }, 7813 /*mxcsr:in */ 0, 7814 /*128:out */ X86_MXCSR_DE, 7815 /*256:out */ X86_MXCSR_DE | X86_MXCSR_ZE, 7816 /*xcpt? */ true, true }, 7817 { { /*src2 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } }, 7818 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } }, 7819 { /* => */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(0) } }, 7820 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7821 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE, 7822 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_ZE, 7823 /*xcpt? */ false, false }, 7824 { { /*src2 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_1(0), FP32_1(0), FP32_1(1), FP32_1(1) } }, 7825 { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0) } }, 7826 { /* => */ { FP32_1(0), FP32_1(1), FP32_1(0), FP32_1(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } }, 7827 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7828 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE, 7829 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE, 7830 /*xcpt? */ false, false }, 7831 { { /*src2 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } }, 7832 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } }, 7833 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7834 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ, 7835 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE, 7836 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE, 7837 /*xcpt? */ false, false }, 7838 { { /*src2 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_1(0), FP32_1(0), FP32_1(1), FP32_1(1) } }, 7839 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } }, 7840 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0) } }, 7841 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ, 7842 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE, 7843 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE, 7844 /*xcpt? */ false, false }, 7845 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } }, 7846 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } }, 7847 { /* => */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7848 /*mxcsr:in */ 0, 7849 /*128:out */ X86_MXCSR_DE, 7850 /*256:out */ X86_MXCSR_DE | X86_MXCSR_ZE, 7851 /*xcpt? */ true, true }, 7852 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } }, 7853 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } }, 7854 { /* => */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(0) } }, 7855 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7856 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE, 7857 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_ZE, 7858 /*xcpt? */ false, false }, 7859 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_1(0), FP32_1(0), FP32_1(1), FP32_1(1) } }, 7860 { /* => */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0) } }, 7861 { /*src1 */ { FP32_1(0), FP32_1(1), FP32_1(0), FP32_1(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } }, 7862 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 7863 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE, 7864 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE, 7865 /*xcpt? */ false, false }, 7866 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } }, 7867 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } }, 7868 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7869 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ, 7870 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE, 7871 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE, 7872 /*xcpt? */ false, false }, 7873 { { /*src2 */ { FP32_1(0), FP32_1(0), FP32_1(1), FP32_1(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1) } }, 7874 { /*src1 */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0) } }, 7875 { /* => */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7876 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ, 7877 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ, 7878 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE, 7879 /*xcpt? */ false, false }, 7880 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } }, 7881 { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } }, 7882 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7883 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP, 7884 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_IE, 7885 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_IE, 7886 /*xcpt? */ false, false }, 7887 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } }, 7888 { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } }, 7889 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7890 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN, 7891 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE, 7892 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE, 7893 /*xcpt? */ false, false }, 7894 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } }, 7895 { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } }, 7896 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7897 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO, 7898 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7899 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE, 7900 /*xcpt? */ false, false }, 7901 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } }, 7902 { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } }, 7903 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 7904 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ, 7905 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE, 7906 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE, 7907 /*xcpt? */ false, false }, 7908 /** @todo More Denormals. */ 7909 /* 7910 * Invalids. 7911 */ 7912 /*40|42*/ FP32_TABLE_D1_PS_INVALIDS 7913 /** @todo Underflow, Precision; Rounding; FZ etc. */ 7914 }; 7915 7916 #define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues 7917 static BS3CPUINSTR4_TEST1_T const s_aTests16[] = 7918 { 7919 { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c16, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues }, 7920 { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues }, 7921 7922 { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c16, 255, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues }, 7923 { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues }, 7924 7925 { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c16, 255, RM_REG, T_AVX_256, 1, 2, 3, PASS_s_aValues }, 7926 { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues }, 7927 }; 7928 static BS3CPUINSTR4_TEST1_T const s_aTests32[] = 7929 { 7930 { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c32, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues }, 7931 { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues }, 7932 7933 { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c32, 255, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues }, 7934 { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues }, 7935 7936 { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c32, 255, RM_REG, T_AVX_256, 1, 2, 3, PASS_s_aValues }, 7937 { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues }, 7938 }; 7939 static BS3CPUINSTR4_TEST1_T const s_aTests64[] = 7940 { 7941 { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c64, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues }, 7942 { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues }, 7943 7944 { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c64, 255, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues }, 7945 { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues }, 7946 7947 { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c64, 255, RM_REG, T_AVX_256, 1, 2, 3, PASS_s_aValues }, 7948 { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues }, 7949 7950 { bs3CpuInstr4_divps_XMM8_XMM9_icebp_c64, 255, RM_REG, T_SSE, 8, 8, 9, PASS_s_aValues }, 7951 { bs3CpuInstr4_divps_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 8, 8, 255, PASS_s_aValues }, 7952 7953 { bs3CpuInstr4_vdivps_XMM8_XMM9_XMM10_icebp_c64, 255, RM_REG, T_AVX_128, 8, 9, 10, PASS_s_aValues }, 7954 { bs3CpuInstr4_vdivps_XMM8_XMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 8, 9, 255, PASS_s_aValues }, 7955 { bs3CpuInstr4_vdivps_YMM8_YMM9_YMM10_icebp_c64, 255, RM_REG, T_AVX_256, 8, 9, 10, PASS_s_aValues }, 7956 { bs3CpuInstr4_vdivps_YMM8_YMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 8, 9, 255, PASS_s_aValues }, 7957 }; 7958 #undef PASS_s_aValues 7959 7960 static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64); 7961 unsigned const iTest = BS3CPUINSTR4_TEST_MODES_INDEX(bMode); 7962 return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests, 7963 g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2)); 7964 } 7965 7966 7967 /* 7586 7968 * [V]DIVSS. 7587 7969 */ … … 8237 8619 8238 8620 /* 8239 * [V]DIVPS.8240 */8241 BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_divps(uint8_t bMode)8242 {8243 static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues[] =8244 {8245 /** @todo Improve port from mulps */8246 /*8247 * Zero.8248 */8249 /* 0*/{ { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },8250 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },8251 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8252 /*mxcsr:in */ X86_MXCSR_XCPT_MASK,8253 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,8254 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,8255 /*xcpt? */ false, false },8256 { { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },8257 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },8258 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8259 /*mxcsr:in */ 0,8260 /*128:out */ X86_MXCSR_IE,8261 /*256:out */ X86_MXCSR_IE,8262 /*xcpt? */ true, true },8263 { { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },8264 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },8265 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8266 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,8267 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,8268 /*256:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,8269 /*xcpt? */ true, true },8270 { { /*src2 */ { FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1) } },8271 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },8272 { /* => */ { FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1) } },8273 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,8274 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,8275 /*256:out */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,8276 /*xcpt? */ true, true },8277 { { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1) } },8278 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },8279 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8280 /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,8281 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,8282 /*256:out */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,8283 /*xcpt? */ true, true },8284 { { /*src2 */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1) } },8285 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(0) } },8286 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8287 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,8288 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,8289 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,8290 /*xcpt? */ false, false },8291 { { /*src2 */ { FP32_NORM_V0(0), FP32_NORM_V1(1), FP32_0(0), FP32_NORM_V3(1), FP32_0(0), FP32_NORM_V1(1), FP32_NORM_V4(0), FP32_NORM_V3(0) } },8292 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1) } },8293 { /* => */ { FP32_0(0), FP32_0(0), FP32_QNAN(1), FP32_0(1), FP32_QNAN(1), FP32_0(1), FP32_0(0), FP32_0(1) } },8294 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,8295 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,8296 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,8297 /*xcpt? */ false, false },8298 /*8299 * Infinity.8300 */8301 /* 7*/{ { /*src2 */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },8302 { /*src1 */ { FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },8303 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8304 /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,8305 /*128:out */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_IE,8306 /*256:out */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_IE,8307 /*xcpt? */ true, true },8308 { { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },8309 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },8310 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8311 /*mxcsr:in */ X86_MXCSR_XCPT_MASK,8312 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,8313 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,8314 /*xcpt? */ false, false },8315 { { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(0), FP32_0(1), FP32_0(1), FP32_0(0) } },8316 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0) } },8317 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8318 /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK,8319 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,8320 /*256:out */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,8321 /*xcpt? */ false, false },8322 { { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(0) } },8323 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1) } },8324 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8325 /*mxcsr:in */ X86_MXCSR_FZ,8326 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_IE,8327 /*256:out */ X86_MXCSR_FZ | X86_MXCSR_IE,8328 /*xcpt? */ true, true },8329 { { /*src2 */ { FP32_INF(0), FP32_INF(1), FP32_0(0), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_INF(1), FP32_INF(0) } },8330 { /*src1 */ { FP32_INF(1), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } },8331 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8332 /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,8333 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,8334 /*256:out */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,8335 /*xcpt? */ true, true },8336 { { /*src2 */ { FP32_INF(0), FP32_INF(1), FP32_QNAN(0), FP32_QNAN(1), FP32_INF(0), FP32_QNAN(1), FP32_QNAN(0), FP32_INF(1) } },8337 { /*src1 */ { FP32_QNAN(0), FP32_QNAN(0), FP32_INF(1), FP32_INF(1), FP32_QNAN(1), FP32_INF(0), FP32_INF(0), FP32_QNAN(1) } },8338 { /* => */ { FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(1) } },8339 /*mxcsr:in */ X86_MXCSR_XCPT_MASK,8340 /*128:out */ X86_MXCSR_XCPT_MASK,8341 /*256:out */ X86_MXCSR_XCPT_MASK,8342 /*xcpt? */ false, false },8343 { { /*src2 */ { FP32_INF(0), FP32_INF(1), FP32_QNAN(0), FP32_QNAN(1), FP32_INF(0), FP32_QNAN(1), FP32_QNAN(0), FP32_INF(1) } },8344 { /*src1 */ { FP32_QNAN(0), FP32_QNAN(0), FP32_INF(1), FP32_INF(1), FP32_QNAN(1), FP32_INF(0), FP32_INF(0), FP32_QNAN(1) } },8345 { /* => */ { FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(1) } },8346 /*mxcsr:in */ X86_MXCSR_DAZ,8347 /*128:out */ X86_MXCSR_DAZ,8348 /*256:out */ X86_MXCSR_DAZ,8349 /*xcpt? */ false, false },8350 /*8351 * Overflow, Precision.8352 */8353 #ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE not set in 256:out */8354 /*--|14*/{ { /*src2 */ { FP32_1(0), FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1), FP32_2(0) } },8355 { /*src1 */ { FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0), FP32_NORM_MAX(0) } },8356 { /* => */ { FP32_0(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_2(0), FP32_NORM_MAX(0) } },8357 /*mxcsr:in */ 0,8358 /*128:out */ 0,8359 /*256:out */ X86_MXCSR_UE | X86_MXCSR_PE,8360 /*xcpt? */ false, true },8361 #endif /* TODO_X86_MXCSR_PE */8362 /*14|15*/{ { /*src2 */ { FP32_V(0,0,0x7e)/*0.50*/, FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },8363 { /*src1 */ { FP32_NORM_MAX(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(0) } },8364 { /* => */ { FP32_INF(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_V(1,0x200000,0), FP32_0(0) } },8365 /*mxcsr:in */ X86_MXCSR_XCPT_MASK,8366 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE,8367 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,8368 /*xcpt? */ false, false },8369 #ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE not set in 256:out */8370 /*--|16*/{ { /*src2 */ { FP32_V(0,0,0x7e)/*0.50*/, FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },8371 { /*src1 */ { FP32_NORM_MAX(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(0) } },8372 { /* => */ { FP32_INF(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_V(1,0x200000,0), FP32_0(0) } },8373 /*mxcsr:in */ 0,8374 /*128:out */ X86_MXCSR_OE,8375 /*256:out */ X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,8376 /*xcpt? */ true, true },8377 #endif /* TODO_X86_MXCSR_PE */8378 /*15|17*/{ { /*src2 */ { FP32_V(0,0,0x7e)/*0.50*/, FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },8379 { /*src1 */ { FP32_NORM_MAX(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(0) } },8380 { /* => */ { FP32_INF(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_V(1,0x200000,0), FP32_0(0) } },8381 /*mxcsr:in */ X86_MXCSR_OM,8382 /*128:out */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE,8383 /*256:out */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,8384 /*xcpt? */ true, true },8385 { { /*src2 */ { FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_1(0), FP32_1(0), FP32_NORM_MAX(0), FP32_1(1), FP32_1(0), FP32_NORM_MIN(0) } },8386 { /*src1 */ { FP32_NORM_MIN(0), FP32_NORM_MAX(1), FP32_1(0), FP32_1(0), FP32_NORM_MIN(1), FP32_1(0), FP32_1(1), FP32_NORM_MAX(0) } },8387 { /* => */ { FP32_0(0), FP32_NORM_MAX(1), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(1), FP32_1(1), FP32_NORM_MAX(0) } },8388 /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO,8389 /*128:out */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,8390 /*256:out */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,8391 /*xcpt? */ false, false },8392 { { /*src2 */ { FP32_NORM_MAX(0), FP32_NORM_MIN(1), FP32_NORM_V1(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MAX(0) } },8393 { /*src1 */ { FP32_INF(0), FP32_0(0), FP32_NORM_V1(0), FP32_INF(0), FP32_INF(0), FP32_0(1), FP32_0(1), FP32_INF(1) } },8394 { /* => */ { FP32_INF(0), FP32_0(1), FP32_1(0), FP32_INF(0), FP32_INF(1), FP32_0(1), FP32_0(0), FP32_INF(1) } },8395 /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,8396 /*128:out */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,8397 /*256:out */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,8398 /*xcpt? */ false, false },8399 { { /*src2 */ { FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_V3(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MAX(0) } },8400 { /*src1 */ { FP32_NORM_MAX(0), FP32_0(1), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_0(1), FP32_0(1), FP32_INF(1) } },8401 { /* => */ { FP32_1(0), FP32_0(1), FP32_0(0), FP32_1(0), FP32_1(1), FP32_0(1), FP32_0(0), FP32_INF(1) } },8402 /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,8403 /*128:out */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,8404 /*256:out */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,8405 /*xcpt? */ false, false },8406 { { /*src2 */ { FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_2(0), FP32_1(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MIN(1) } },8407 { /*src1 */ { FP32_0(0), FP32_NORM_MAX(0), FP32_INF(1), FP32_2(1), FP32_2(0), FP32_INF(1), FP32_NORM_MAX(0), FP32_0(0) } },8408 { /* => */ { FP32_0(1), FP32_1(0), FP32_INF(1), FP32_1(1), FP32_2(1), FP32_INF(1), FP32_1(0), FP32_0(1) } },8409 /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,8410 /*128:out */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,8411 /*256:out */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,8412 /*xcpt? */ false, false },8413 { { /*src2 */ { FP32_1(0), FP32_NORM_V2(1), FP32_1(1), FP32_NORM_V6(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },8414 { /*src1 */ { FP32_NORM_V7(0), FP32_NORM_V2(0), FP32_NORM_V4(1), FP32_NORM_V6(1), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0) } },8415 { /* => */ { FP32_NORM_V7(0), FP32_1(1), FP32_NORM_V4(0), FP32_1(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(0) } },8416 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ,8417 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ,8418 /*256:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ,8419 /*xcpt? */ false, false },8420 { { /*src2 */ { FP32_1(0), FP32_NORM_V2(1), FP32_1(1), FP32_NORM_V6(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },8421 { /*src1 */ { FP32_NORM_V7(0), FP32_NORM_V2(0), FP32_NORM_V4(1), FP32_NORM_V6(1), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0) } },8422 { /* => */ { FP32_NORM_V7(0), FP32_1(1), FP32_NORM_V4(0), FP32_1(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(0) } },8423 /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ,8424 /*128:out */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ,8425 /*256:out */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ,8426 /*xcpt? */ false, false },8427 /** @todo More Overflow/Precision. */8428 /*8429 * Normals.8430 */8431 /*22|24*/{ { /*src2 */ { FP32_V(0, 0x600000, 0x7f)/*1.7500*/, FP32_NORM_V0(0), FP32_NORM_V1(0), FP32_NORM_V2(1), FP32_1(1), FP32_1(0), FP32_1(1), FP32_NORM_V6(1) } },8432 { /*src1 */ { FP32_V(0, 0x600000, 0x7d)/*0.4375*/, FP32_NORM_V0(0), FP32_NORM_V1(1), FP32_0(1), FP32_NORM_V0(0), FP32_NORM_V3(0), FP32_NORM_V4(1), FP32_NORM_V6(1) } },8433 { /* => */ { FP32_V(0, 0, 0x7d)/*0.2500*/, FP32_1(0), FP32_1(1), FP32_0(0), FP32_NORM_V0(1), FP32_NORM_V3(0), FP32_NORM_V4(0), FP32_1(0) } },8434 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,8435 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,8436 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,8437 /*xcpt? */ false, false },8438 { { /*src2 */ { FP32_V(0, 0x61e000, 0x89)/* 1807*/, FP32_V(0, 0x61e000, 0x89)/* 1807*/, FP32_V(0, 0x4a30b8, 0x8f)/* 103521.4375*/, FP32_V(0, 0x1a5200, 0x8c)/* 9876.5*/, FP32_V(0, 0x23b6a0, 0x8e)/*41910.625000*/, FP32_V(0, 0x23b6a0, 0x8e)/*41910.625000*/, FP32_V(0, 0, 0x7d)/*0.2500*/, FP32_V(0, 0x504000, 0x8a)/* 3332*/ } },8439 { /*src1 */ { FP32_V(0, 0x37be78, 0x95)/*6020924*/, FP32_V(0, 0x37be78, 0x95)/*6020924*/, FP32_V(0, 0x30eaa1, 0x93)/*1449300.1250*/, FP32_V(1, 0x39f7d1, 0x96)/*-12187601.0*/, FP32_V(0, 0x23b6a0, 0x8b)/* 5238.828125*/, FP32_V(0, 0x23b6a0, 0x8b)/* 5238.828125*/, FP32_V(0, 0x600000, 0x7d)/*0.4375*/, FP32_V(1, 0x37be78, 0x95)/*-6020924*/ } },8440 { /* => */ { FP32_V(0, 0x504000, 0x8a)/* 3332*/, FP32_V(0, 0x504000, 0x8a)/* 3332*/, FP32_V(0, 0x600000, 0x82)/* 14.0000*/, FP32_V(1, 0x1a4000, 0x89)/* -1234.0*/, FP32_V(0, 0, 0x7c)/* 0.125000*/, FP32_V(0, 0, 0x7c)/* 0.125000*/, FP32_V(0, 0x600000, 0x7f)/*1.7500*/, FP32_V(1, 0x61e000, 0x89)/* -1807*/ } },8441 /*mxcsr:in */ X86_MXCSR_XCPT_MASK,8442 /*128:out */ X86_MXCSR_XCPT_MASK,8443 /*256:out */ X86_MXCSR_XCPT_MASK,8444 /*xcpt? */ false, false },8445 { { /*src2 */ { FP32_NORM_SAFE_INT_MAX(0), FP32_1(0), FP32_NORM_SAFE_INT_MAX(1), FP32_1(1), FP32_NORM_SAFE_INT_MIN(1), FP32_1(1), FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MAX(0) } },8446 { /*src1 */ { FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MAX(1), FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MIN(0), FP32_0(0), FP32_0(1) } },8447 { /* => */ { FP32_1(0), FP32_NORM_SAFE_INT_MIN(0), FP32_1(0), FP32_NORM_SAFE_INT_MAX(1), FP32_1(0), FP32_NORM_SAFE_INT_MIN(1), FP32_0(0), FP32_0(1) } },8448 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,8449 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,8450 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,8451 /*xcpt? */ false, false },8452 { { /*src2 */ { FP32_NORM_MAX(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(1), FP32_NORM_MIN(0), FP32_NORM_MIN(0), FP32_1(0), FP32_1(1) } },8453 { /*src1 */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MIN(0) } },8454 { /* => */ { FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_1(1), FP32_NORM_MIN(1), FP32_NORM_MIN(1) } },8455 /*mxcsr:in */ 0,8456 /*128:out */ 0,8457 /*256:out */ 0,8458 /*xcpt? */ false, false },8459 /** @todo More Normals. */8460 /*8461 * Denormals.8462 */8463 /*26|28*/{ { /*src2 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } },8464 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },8465 { /* => */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(0) } },8466 /*mxcsr:in */ 0,8467 /*128:out */ X86_MXCSR_DE,8468 /*256:out */ X86_MXCSR_DE | X86_MXCSR_ZE,8469 /*xcpt? */ true, true },8470 { { /*src2 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } },8471 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },8472 { /* => */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(0) } },8473 /*mxcsr:in */ X86_MXCSR_XCPT_MASK,8474 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,8475 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_ZE,8476 /*xcpt? */ false, false },8477 { { /*src2 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_1(0), FP32_1(0), FP32_1(1), FP32_1(1) } },8478 { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0) } },8479 { /* => */ { FP32_1(0), FP32_1(1), FP32_1(0), FP32_1(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },8480 /*mxcsr:in */ X86_MXCSR_XCPT_MASK,8481 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,8482 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,8483 /*xcpt? */ false, false },8484 { { /*src2 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } },8485 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },8486 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8487 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,8488 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,8489 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,8490 /*xcpt? */ false, false },8491 { { /*src2 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_1(0), FP32_1(0), FP32_1(1), FP32_1(1) } },8492 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },8493 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0) } },8494 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,8495 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,8496 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,8497 /*xcpt? */ false, false },8498 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } },8499 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } },8500 { /* => */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8501 /*mxcsr:in */ 0,8502 /*128:out */ X86_MXCSR_DE,8503 /*256:out */ X86_MXCSR_DE | X86_MXCSR_ZE,8504 /*xcpt? */ true, true },8505 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } },8506 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } },8507 { /* => */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(0) } },8508 /*mxcsr:in */ X86_MXCSR_XCPT_MASK,8509 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,8510 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_ZE,8511 /*xcpt? */ false, false },8512 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_1(0), FP32_1(0), FP32_1(1), FP32_1(1) } },8513 { /* => */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0) } },8514 { /*src1 */ { FP32_1(0), FP32_1(1), FP32_1(0), FP32_1(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } },8515 /*mxcsr:in */ X86_MXCSR_XCPT_MASK,8516 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,8517 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,8518 /*xcpt? */ false, false },8519 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } },8520 { /*src1 */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } },8521 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8522 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,8523 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,8524 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,8525 /*xcpt? */ false, false },8526 { { /*src2 */ { FP32_1(0), FP32_1(0), FP32_1(1), FP32_1(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1) } },8527 { /*src1 */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0) } },8528 { /* => */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8529 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,8530 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,8531 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,8532 /*xcpt? */ false, false },8533 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } },8534 { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } },8535 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8536 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP,8537 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,8538 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,8539 /*xcpt? */ false, false },8540 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } },8541 { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } },8542 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8543 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN,8544 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,8545 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,8546 /*xcpt? */ false, false },8547 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } },8548 { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } },8549 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8550 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,8551 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,8552 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,8553 /*xcpt? */ false, false },8554 { { /*src2 */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } },8555 { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } },8556 { /* => */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },8557 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ,8558 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE,8559 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE,8560 /*xcpt? */ false, false },8561 /** @todo More Denormals. */8562 /*8563 * Invalids.8564 */8565 /*40|42*/ FP32_TABLE_D1_PS_INVALIDS8566 /** @todo Underflow, Precision; Rounding; FZ etc. */8567 };8568 8569 #define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues8570 static BS3CPUINSTR4_TEST1_T const s_aTests16[] =8571 {8572 { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c16, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues },8573 { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },8574 8575 { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c16, 255, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues },8576 { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },8577 8578 { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c16, 255, RM_REG, T_AVX_256, 1, 2, 3, PASS_s_aValues },8579 { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },8580 };8581 static BS3CPUINSTR4_TEST1_T const s_aTests32[] =8582 {8583 { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c32, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues },8584 { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },8585 8586 { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c32, 255, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues },8587 { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },8588 8589 { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c32, 255, RM_REG, T_AVX_256, 1, 2, 3, PASS_s_aValues },8590 { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },8591 };8592 static BS3CPUINSTR4_TEST1_T const s_aTests64[] =8593 {8594 { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c64, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues },8595 { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },8596 8597 { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c64, 255, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues },8598 { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },8599 8600 { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c64, 255, RM_REG, T_AVX_256, 1, 2, 3, PASS_s_aValues },8601 { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },8602 8603 { bs3CpuInstr4_divps_XMM8_XMM9_icebp_c64, 255, RM_REG, T_SSE, 8, 8, 9, PASS_s_aValues },8604 { bs3CpuInstr4_divps_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 8, 8, 255, PASS_s_aValues },8605 8606 { bs3CpuInstr4_vdivps_XMM8_XMM9_XMM10_icebp_c64, 255, RM_REG, T_AVX_128, 8, 9, 10, PASS_s_aValues },8607 { bs3CpuInstr4_vdivps_XMM8_XMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 8, 9, 255, PASS_s_aValues },8608 { bs3CpuInstr4_vdivps_YMM8_YMM9_YMM10_icebp_c64, 255, RM_REG, T_AVX_256, 8, 9, 10, PASS_s_aValues },8609 { bs3CpuInstr4_vdivps_YMM8_YMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 8, 9, 255, PASS_s_aValues },8610 };8611 #undef PASS_s_aValues8612 8613 static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);8614 unsigned const iTest = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);8615 return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,8616 g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));8617 }8618 8619 8620 /*8621 8621 * [V]ADDSUBPS. 8622 8622 */
Note:
See TracChangeset
for help on using the changeset viewer.