VirtualBox

Changeset 106115 in vbox for trunk


Ignore:
Timestamp:
Sep 23, 2024 9:50:40 AM (2 months ago)
Author:
vboxsync
Message:

ValidationKit/bootsectors: bugref:10658 SIMD FP testcase: [v]minps.

Location:
trunk/src/VBox/ValidationKit/bootsectors
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4-template.mac

    r106111 r106115  
    568568EMIT_INSTR_PLUS_ICEBP_C64   vmaxsd, XMM8, XMM9, FSxBX
    569569
     570;
     571;; [v]minps
     572;
     573EMIT_INSTR_PLUS_ICEBP       minps, XMM1, XMM2
     574EMIT_INSTR_PLUS_ICEBP       minps, XMM1, FSxBX
     575EMIT_INSTR_PLUS_ICEBP_C64   minps, XMM8, XMM9
     576EMIT_INSTR_PLUS_ICEBP_C64   minps, XMM8, FSxBX
     577
     578EMIT_INSTR_PLUS_ICEBP       vminps, XMM1, XMM2, XMM3
     579EMIT_INSTR_PLUS_ICEBP       vminps, XMM1, XMM2, FSxBX
     580EMIT_INSTR_PLUS_ICEBP_C64   vminps, XMM8, XMM9, XMM10
     581EMIT_INSTR_PLUS_ICEBP_C64   vminps, XMM8, XMM9, FSxBX
     582
     583EMIT_INSTR_PLUS_ICEBP       vminps, YMM1, YMM2, YMM3
     584EMIT_INSTR_PLUS_ICEBP       vminps, YMM1, YMM2, FSxBX
     585EMIT_INSTR_PLUS_ICEBP_C64   vminps, YMM8, YMM9, YMM10
     586EMIT_INSTR_PLUS_ICEBP_C64   vminps, YMM8, YMM9, FSxBX
    570587
    571588%endif ; BS3_INSTANTIATING_CMN
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r106111 r106115  
    48794879              /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
    48804880              /*xcpt?    */ true, true },
     4881#ifdef TODO_X86_MXCSR_PE_NATIVE
    48814882          { { /*src2     */ { FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_MAX(0), FP32_0(0), FP32_NORM_SAFE_INT_MAX(1), FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_MAX(0), FP32_0(0), FP32_NORM_SAFE_INT_MAX(1) } },
    48824883            { /*src1     */ { FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_MAX(1), FP32_0(0), FP32_NORM_SAFE_INT_MAX(1), FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_MAX(1), FP32_0(0), FP32_NORM_SAFE_INT_MAX(1) } },
     
    48864887              /*256:out  */ X86_MXCSR_RC_DOWN | X86_MXCSR_OE | X86_MXCSR_PE,
    48874888              /*xcpt?    */ true, true },
     4889#endif
    48884890    /*
    48894891     * Normals.
     
    66836685              /*256:out  */ X86_MXCSR_OE,
    66846686              /*xcpt?    */ false, true },
     6687#ifdef TODO_X86_MXCSR_PE
    66856688          { { /*src2     */ { FP32_NORM_MAX(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
    66866689            { /*src1     */ { FP32_NORM_MAX(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1),        FP32_1(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
     
    66906693              /*256:out  */ X86_MXCSR_OE | X86_MXCSR_PE,
    66916694              /*xcpt?    */ true, true },
     6695#endif
    66926696          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_1(1), FP32_0(0), FP32_NORM_MAX(0) } },
    66936697            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_1(1), FP32_0(1), FP32_NORM_MAX(0) } },
     
    67186722              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_OE | X86_MXCSR_UE | X86_MXCSR_PE,
    67196723              /*xcpt?    */ false, false },
     6724#ifdef TODO_X86_MXCSR_PE
    67206725          { { /*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) } },
    67216726            { /*src1     */ { FP32_NORM_V7(0), FP32_1(1),       FP32_NORM_V4(0), FP32_1(1),       FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
     
    67256730              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_OE | X86_MXCSR_PE,
    67266731              /*xcpt?    */ false, true },
     6732#endif
    67276733          { { /*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) } },
    67286734            { /*src1     */ { FP32_NORM_V7(0), FP32_1(1),       FP32_NORM_V4(0), FP32_1(1),       FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
     
    71447150              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE,
    71457151              /*xcpt?    */ false, false },
     7152#ifdef TODO_X86_MXCSR_PE
    71467153          { { /*src2     */ { FP64_NORM_V3(0), FP64_NORM_MAX(0), FP64_NORM_MAX(1), FP64_1(0)       } },
    71477154            { /*src1     */ { FP64_1(0),       FP64_NORM_MAX(0), FP64_NORM_MAX(1), FP64_NORM_V1(0) } },
     
    71517158              /*256:out  */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
    71527159              /*xcpt?    */ true, true },
     7160#endif
    71537161          { { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MIN(1), FP64_NORM_MIN(1),                                       FP64_NORM_MAX(0) } },
    71547162            { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MIN(1), FP64_NORM_MAX(1),                                       FP64_NORM_MAX(0) } },
     
    71587166              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_UE | X86_MXCSR_PE,
    71597167              /*xcpt?    */ false, false },
     7168#ifdef TODO_X86_MXCSR_PE
    71607169          { { /*src2     */ { FP64_NORM_V3(0), FP64_1(1),       FP64_NORM_MAX(1), FP64_NORM_MIN(0)                                       } },
    71617170            { /*src1     */ { FP64_1(0),       FP64_NORM_V2(1), FP64_NORM_MAX(1), FP64_NORM_MAX(1)                                       } },
     
    71657174              /*256:out  */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
    71667175              /*xcpt?    */ false, true },
     7176#endif
    71677177          { { /*src2     */ { FP64_NORM_SAFE_INT_MIN(0),                         FP64_NORM_MAX(0), FP64_NORM_SAFE_INT_MAX(1),                FP64_NORM_SAFE_INT_MIN(0)            } },
    71687178            { /*src1     */ { FP64_NORM_SAFE_INT_MAX(0),                         FP64_NORM_MAX(1), FP64_NORM_SAFE_INT_MAX(1),                FP64_NORM_SAFE_INT_MAX(0)            } },
     
    1021910229              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
    1022010230              /*xcpt?    */ false, false },
    10221           { { /*src2     */ { FP32_V(0, 0x5ca5b8, 0x93)/*1807543*/, FP32_V(0, 0x5c0000, 0x84)/*55*/, FP32_V(1, 0x2514d6, 0x93)/*-1352346.75*/, FP32_V(1, 0x5c0000, 0x84)/*-55*/, FP32_V(1, 0x2514d6, 0x93)/*1352346.75*/, FP32_V(1, 0x534000, 0x86)/*211.25*/, FP32_V(0, 0x74429f, 0x97)/*32015678*/, FP32_1(1) } },
    10222             { /*src1     */ { FP32_V(0, 0x1ea980, 0x8f)/*  81235*/, FP32_V(0, 0x600000, 0x81)/* 7*/, FP32_V(0, 0x7c9000, 0x88)/*    1010.25*/, FP32_V(0, 0x600000, 0x81)/*  7*/, FP32_V(0, 0x253468, 0x93)/*1353357.00*/, FP32_1(1),                           FP32_V(1, 0x712060, 0x92)/*- 987654*/, FP32_1(0) } },
    10223             { /* =>      */ { FP32_V(0, 0x5ca5b8, 0x93)/*1807543*/, FP32_V(0, 0x5c0000, 0x84)/*55*/, FP32_V(0, 0x7c9000, 0x88)/*    1010.25*/, FP32_V(0, 0x600000, 0x81)/*  7*/, FP32_V(0, 0x253468, 0x93)/*1353357.00*/, FP32_1(1),                           FP32_V(0, 0x74429f, 0x97)/*32015678*/, FP32_1(0) } },
     10231          { { /*src2     */ { FP32_V(0, 0x5ca5b8, 0x93)/*1807543*/, FP32_V(0, 0x5c0000, 0x84)/*55*/, FP32_V(1, 0x2514d6, 0x93)/*-1352346.75*/, FP32_V(1, 0x5c0000, 0x84)/*-55*/, FP32_V(1, 0x2514d6, 0x93)/*-1352346.75*/, FP32_V(1, 0x534000, 0x86)/*-211.25*/, FP32_V(0, 0x74429f, 0x97)/*32015678*/, FP32_1(1) } },
     10232            { /*src1     */ { FP32_V(0, 0x1ea980, 0x8f)/*  81235*/, FP32_V(0, 0x600000, 0x81)/* 7*/, FP32_V(0, 0x7c9000, 0x88)/*    1010.25*/, FP32_V(0, 0x600000, 0x81)/*  7*/, FP32_V(0, 0x253468, 0x93)/* 1353357.00*/, FP32_1(1),                            FP32_V(1, 0x712060, 0x92)/*- 987654*/, FP32_1(0) } },
     10233            { /* =>      */ { FP32_V(0, 0x5ca5b8, 0x93)/*1807543*/, FP32_V(0, 0x5c0000, 0x84)/*55*/, FP32_V(0, 0x7c9000, 0x88)/*    1010.25*/, FP32_V(0, 0x600000, 0x81)/*  7*/, FP32_V(0, 0x253468, 0x93)/* 1353357.00*/, FP32_1(1),                            FP32_V(0, 0x74429f, 0x97)/*32015678*/, FP32_1(0) } },
    1022410234              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
    1022510235              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
    1022610236              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
    1022710237              /*xcpt?    */ false, false },
    10228           { { /*src2     */ { FP32_V(0, 0x600000, 0x7e)/*      0.875*/, FP32_V(0, 0x3ce348, 0x90)/*193421.125*/, FP32_V(0, 0x6423f2, 0x92)/*934463.125*/, FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MIN(0), FP32_V(0, 0x16b43a, 0x93)/*1234567.25*/, FP32_V(0, 0x792318, 0x91)/*510232.75*/, FP32_V(0, 0x600000, 0x7e)/*0.875*/ } },
    10229             { /*src1     */ { FP32_V(0, 0x769b50, 0x92)/*1010101.000*/, FP32_V(0, 0x430ebc, 0x91)/*399477.875*/, FP32_V(0, 0x52e0b4, 0x92)/*863755.250*/, FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MAX(1), FP32_V(0, 0x00c6d3, 0x94)/*2109876.75*/, FP32_V(1, 0x316740, 0x8e)/*-45415.25*/, FP32_V(1, 0,        0x7d)/*0.250*/ } },
    10230             { /* =>      */ { FP32_V(0, 0x769b50, 0x92)/*1010101.000*/, FP32_V(0, 0x430ebc, 0x91)/*399477.875*/, FP32_V(0, 0x6423f2, 0x92)/*934463.125*/, FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MIN(0), FP32_V(0, 0x00c6d3, 0x94)/*2109876.75*/, FP32_V(0, 0x792318, 0x91)/*510232.75*/, FP32_V(0, 0x600000, 0x7e)/*0.875*/ } },
     10238          { { /*src2     */ { FP32_V(0, 0x600000, 0x7e)/*      0.875*/, FP32_V(0, 0x3ce348, 0x90)/*193421.125*/, FP32_V(0, 0x6423f2, 0x92)/*934463.125*/, FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MIN(0), FP32_V(0, 0x16b43a, 0x93)/*1234567.25*/, FP32_V(0, 0x792318, 0x91)/*510232.75*/, FP32_V(0, 0x600000, 0x7e)/* 0.875*/ } },
     10239            { /*src1     */ { FP32_V(0, 0x769b50, 0x92)/*1010101.000*/, FP32_V(0, 0x430ebc, 0x91)/*399477.875*/, FP32_V(0, 0x52e0b4, 0x92)/*863755.250*/, FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MAX(1), FP32_V(0, 0x00c6d3, 0x94)/*2109876.75*/, FP32_V(1, 0x316740, 0x8e)/*-45415.25*/, FP32_V(1, 0,        0x7d)/*-0.250*/ } },
     10240            { /* =>      */ { FP32_V(0, 0x769b50, 0x92)/*1010101.000*/, FP32_V(0, 0x430ebc, 0x91)/*399477.875*/, FP32_V(0, 0x6423f2, 0x92)/*934463.125*/, FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MIN(0), FP32_V(0, 0x00c6d3, 0x94)/*2109876.75*/, FP32_V(0, 0x792318, 0x91)/*510232.75*/, FP32_V(0, 0x600000, 0x7e)/* 0.875*/ } },
    1023110241              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
    1023210242              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     
    1099411004              /*256:out  */ X86_MXCSR_XCPT_MASK,
    1099511005              /*xcpt?    */ false, false },
    10996           { { /*src2     */ { FP32_V(0, 0x600000, 0x7e)/*0.875*/, FP32_RAND_V4(0), FP32_RAND_V5(0), FP32_RAND_V4(0), FP32_RAND_V3(0), FP32_RAND_V0(1), FP32_RAND_V2(1), FP32_RAND_V1(1) } },
    10997             { /*src1     */ { FP32_V(1, 0,        0x7d)/*0.250*/, FP32_RAND_V2(0), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V7(1), FP32_RAND_V5(1), FP32_RAND_V6(0), FP32_RAND_V7(1) } },
    10998             { /* =>      */ { FP32_V(0, 0x600000, 0x7e)/*0.875*/, FP32_RAND_V2(0), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V7(1), FP32_RAND_V5(1), FP32_RAND_V6(0), FP32_RAND_V7(1) } },
     11006          { { /*src2     */ { FP32_V(0, 0x600000, 0x7e)/* 0.875*/, FP32_RAND_V4(0), FP32_RAND_V5(0), FP32_RAND_V4(0), FP32_RAND_V3(0), FP32_RAND_V0(1), FP32_RAND_V2(1), FP32_RAND_V1(1) } },
     11007            { /*src1     */ { FP32_V(1, 0,        0x7d)/*-0.250*/, FP32_RAND_V2(0), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V7(1), FP32_RAND_V5(1), FP32_RAND_V6(0), FP32_RAND_V7(1) } },
     11008            { /* =>      */ { FP32_V(0, 0x600000, 0x7e)/* 0.875*/, FP32_RAND_V2(0), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V7(1), FP32_RAND_V5(1), FP32_RAND_V6(0), FP32_RAND_V7(1) } },
    1099911009              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
    1100011010              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     
    1157611586    return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    1157711587                                        g_aXcptConfig3, RT_ELEMENTS(g_aXcptConfig3));
     11588}
     11589
     11590
     11591/*
     11592 * [V]MINPS.
     11593 */
     11594BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_minps(uint8_t bMode)
     11595{
     11596    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues[] =
     11597    {
     11598    /*
     11599     * Zero.
     11600     */
     11601    /* 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) } },
     11602            { /*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) } },
     11603            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     11604              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     11605              /*128:out  */ X86_MXCSR_XCPT_MASK,
     11606              /*256:out  */ X86_MXCSR_XCPT_MASK,
     11607              /*xcpt?    */ false, false },
     11608          { { /*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) } },
     11609            { /*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) } },
     11610            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     11611              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11612              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11613              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11614              /*xcpt?    */ false, false },
     11615          { { /*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) } },
     11616            { /*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) } },
     11617            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     11618              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     11619              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     11620              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     11621              /*xcpt?    */ false, false },
     11622          { { /*src2     */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1) } },
     11623            { /*src1     */ { FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0) } },
     11624            { /* =>      */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1) } },
     11625              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     11626              /*128:out  */ X86_MXCSR_XCPT_MASK,
     11627              /*256:out  */ X86_MXCSR_XCPT_MASK,
     11628              /*xcpt?    */ false, false },
     11629          { { /*src2     */ { FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0) } },
     11630            { /*src1     */ { FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0) } },
     11631            { /* =>      */ { FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0) } },
     11632              /*mxcsr:in */ 0,
     11633              /*128:out  */ 0,
     11634              /*256:out  */ 0,
     11635              /*xcpt?    */ false, false },
     11636          { { /*src2     */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1) } },
     11637            { /*src1     */ { FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0) } },
     11638            { /* =>      */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1) } },
     11639              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     11640              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     11641              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     11642              /*xcpt?    */ false, false },
     11643          { { /*src2     */ { FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0) } },
     11644            { /*src1     */ { FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0) } },
     11645            { /* =>      */ { FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0) } },
     11646              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     11647              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     11648              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     11649              /*xcpt?    */ false, false },
     11650          { { /*src2     */ { FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0) } },
     11651            { /*src1     */ { FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0) } },
     11652            { /* =>      */ { FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0) } },
     11653              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     11654              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     11655              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     11656              /*xcpt?    */ false, false },
     11657          { { /*src2     */ { FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1) } },
     11658            { /*src1     */ { FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(0) } },
     11659            { /* =>      */ { FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1) } },
     11660              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     11661              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     11662              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     11663              /*xcpt?    */ false, false },
     11664    /*
     11665     * Infinity.
     11666     */
     11667    /*9 */{ { /*src2     */ { FP32_INF(0), FP32_0(0),   FP32_INF(1), FP32_0(1),   FP32_INF(1), FP32_0(0),   FP32_INF(1), FP32_0(0)   } },
     11668            { /*src1     */ { FP32_0(0),   FP32_INF(0), FP32_0(0),   FP32_INF(0), FP32_0(0),   FP32_INF(1), FP32_0(0),   FP32_INF(1) } },
     11669            { /* =>      */ { FP32_0(0),   FP32_0(0),   FP32_INF(1), FP32_0(1),   FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } },
     11670              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     11671              /*128:out  */ X86_MXCSR_XCPT_MASK,
     11672              /*256:out  */ X86_MXCSR_XCPT_MASK,
     11673              /*xcpt?    */ false, false },
     11674          { { /*src2     */ { FP32_INF(0), FP32_0(0),   FP32_INF(0), FP32_0(1),   FP32_INF(1), FP32_0(0),   FP32_INF(1), FP32_0(0)   } },
     11675            { /*src1     */ { FP32_0(0),   FP32_INF(1), FP32_0(1),   FP32_INF(1), FP32_0(0),   FP32_INF(1), FP32_0(0),   FP32_INF(1) } },
     11676            { /* =>      */ { FP32_0(0),   FP32_INF(1), FP32_0(1),   FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } },
     11677              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     11678              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     11679              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     11680              /*xcpt?    */ false, false },
     11681          { { /*src2     */ { FP32_INF(0), FP32_0(0),   FP32_INF(0), FP32_0(1),   FP32_INF(1), FP32_0(0),   FP32_INF(1), FP32_0(0)   } },
     11682            { /*src1     */ { FP32_0(0),   FP32_INF(0), FP32_0(1),   FP32_INF(0), FP32_0(0),   FP32_INF(1), FP32_0(0),   FP32_INF(1) } },
     11683            { /* =>      */ { FP32_0(0),   FP32_0(0),   FP32_0(1),   FP32_0(1),   FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } },
     11684              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     11685              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     11686              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     11687              /*xcpt?    */ false, false },
     11688          { { /*src2     */ { FP32_INF(0), FP32_0(0),   FP32_INF(0), FP32_0(1),   FP32_INF(1), FP32_0(0),   FP32_INF(1), FP32_0(0)   } },
     11689            { /*src1     */ { FP32_0(0),   FP32_INF(0), FP32_0(1),   FP32_INF(0), FP32_0(0),   FP32_INF(1), FP32_0(0),   FP32_INF(1) } },
     11690            { /* =>      */ { FP32_0(0),   FP32_0(0),   FP32_0(1),   FP32_0(1),   FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } },
     11691              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11692              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11693              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11694              /*xcpt?    */ false, false },
     11695          { { /*src2     */ { FP32_INF(0), FP32_0(0),   FP32_INF(0), FP32_0(1),   FP32_INF(1), FP32_0(0),   FP32_INF(1), FP32_0(0)   } },
     11696            { /*src1     */ { FP32_0(0),   FP32_INF(0), FP32_0(1),   FP32_INF(0), FP32_0(0),   FP32_INF(1), FP32_0(0),   FP32_INF(1) } },
     11697            { /* =>      */ { FP32_0(0),   FP32_0(0),   FP32_0(1),   FP32_0(1),   FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } },
     11698              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     11699              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     11700              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     11701              /*xcpt?    */ false, false },
     11702          { { /*src2     */ { FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(0) } },
     11703            { /*src1     */ { FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(0), FP32_INF(0) } },
     11704            { /* =>      */ { FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(0) } },
     11705              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     11706              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     11707              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     11708              /*xcpt?    */ false, false },
     11709          { { /*src2     */ { FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(0) } },
     11710            { /*src1     */ { FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(0), FP32_INF(0) } },
     11711            { /* =>      */ { FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(0) } },
     11712              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11713              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11714              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11715              /*xcpt?    */ false, false },
     11716          { { /*src2     */ { FP32_INF(0),     FP32_NORM_V1(0), FP32_INF(1),     FP32_NORM_V3(1), FP32_INF(1),     FP32_NORM_V5(0), FP32_INF(1),     FP32_NORM_V7(0) } },
     11717            { /*src1     */ { FP32_NORM_V0(0), FP32_INF(1),     FP32_NORM_V2(0), FP32_INF(1),     FP32_NORM_V4(1), FP32_INF(1),     FP32_NORM_V6(0), FP32_INF(0)     } },
     11718            { /* =>      */ { FP32_NORM_V0(0), FP32_INF(1),     FP32_INF(1),     FP32_INF(1),     FP32_INF(1),     FP32_INF(1),     FP32_INF(1),     FP32_NORM_V7(0) } },
     11719              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     11720              /*128:out  */ X86_MXCSR_XCPT_MASK,
     11721              /*256:out  */ X86_MXCSR_XCPT_MASK,
     11722              /*xcpt?    */ false, false },
     11723          { { /*src2     */ { FP32_INF(0),     FP32_NORM_V1(0), FP32_INF(1),     FP32_NORM_V3(1), FP32_INF(0),     FP32_NORM_V5(0), FP32_INF(1),     FP32_NORM_V7(0) } },
     11724            { /*src1     */ { FP32_NORM_V0(0), FP32_INF(1),     FP32_NORM_V2(0), FP32_INF(0),     FP32_NORM_V4(1), FP32_INF(1),     FP32_NORM_V6(0), FP32_INF(0)     } },
     11725            { /* =>      */ { FP32_NORM_V0(0), FP32_INF(1),     FP32_INF(1),     FP32_NORM_V3(1), FP32_NORM_V4(1), FP32_INF(1),     FP32_INF(1),     FP32_NORM_V7(0) } },
     11726              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     11727              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     11728              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     11729              /*xcpt?    */ false, false },
     11730          { { /*src2     */ { FP32_NORM_V7(0), FP32_INF(0),     FP32_NORM_V5(0), FP32_INF(0),     FP32_NORM_V3(0), FP32_INF(0),     FP32_NORM_V1(0), FP32_INF(0)     } },
     11731            { /*src1     */ { FP32_INF(1),     FP32_NORM_V6(1), FP32_INF(0),     FP32_NORM_V4(0), FP32_INF(0),     FP32_NORM_V2(1), FP32_INF(1),     FP32_NORM_V0(1) } },
     11732            { /* =>      */ { FP32_INF(1),     FP32_NORM_V6(1), FP32_NORM_V5(0), FP32_NORM_V4(0), FP32_NORM_V3(0), FP32_NORM_V2(1), FP32_INF(1),     FP32_NORM_V0(1) } },
     11733              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     11734              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     11735              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     11736              /*xcpt?    */ false, false },
     11737          { { /*src2     */ { FP32_NORM_V7(0), FP32_INF(0),     FP32_NORM_V5(1), FP32_INF(0),     FP32_NORM_V3(1), FP32_INF(0),     FP32_NORM_V1(1), FP32_INF(0)     } },
     11738            { /*src1     */ { FP32_INF(0),     FP32_NORM_V6(1), FP32_INF(0),     FP32_NORM_V4(1), FP32_INF(0),     FP32_NORM_V2(1), FP32_INF(0),     FP32_NORM_V0(1) } },
     11739            { /* =>      */ { FP32_NORM_V7(0), FP32_NORM_V6(1), FP32_NORM_V5(1), FP32_NORM_V4(1), FP32_NORM_V3(1), FP32_NORM_V2(1), FP32_NORM_V1(1), FP32_NORM_V0(1) } },
     11740              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11741              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11742              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11743              /*xcpt?    */ false, false },
     11744    /*
     11745     * Normals.
     11746     */
     11747    /*20*/{ { /*src2     */ { FP32_NORM_MAX(0), FP32_0(0),        FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_0(1),        FP32_NORM_MAX(1), FP32_NORM_MAX(1) } },
     11748            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_0(0),        FP32_0(0),        FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_0(1),        FP32_NORM_MAX(0) } },
     11749            { /* =>      */ { FP32_NORM_MAX(0), FP32_0(0),        FP32_0(0),        FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } },
     11750              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     11751              /*128:out  */ X86_MXCSR_XCPT_MASK,
     11752              /*256:out  */ X86_MXCSR_XCPT_MASK,
     11753              /*xcpt?    */ false, false },
     11754          { { /*src2     */ { FP32_NORM_MIN(0), FP32_0(0),        FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_0(1),        FP32_NORM_MIN(1), FP32_NORM_MIN(1) } },
     11755            { /*src1     */ { FP32_NORM_MIN(0), FP32_NORM_MIN(0), FP32_0(0),        FP32_0(0),        FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_0(1),        FP32_NORM_MIN(0) } },
     11756            { /* =>      */ { FP32_NORM_MIN(0), FP32_0(0),        FP32_0(0),        FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MIN(1) } },
     11757              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     11758              /*128:out  */ X86_MXCSR_XCPT_MASK,
     11759              /*256:out  */ X86_MXCSR_XCPT_MASK,
     11760              /*xcpt?    */ false, false },
     11761          { { /*src2     */ { FP32_NORM_MIN(0), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } },
     11762            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MIN(0), FP32_NORM_MIN(1) } },
     11763            { /* =>      */ { FP32_NORM_MIN(0), FP32_NORM_MAX(1), FP32_NORM_MIN(1), FP32_NORM_MAX(1), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } },
     11764              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     11765              /*128:out  */ X86_MXCSR_XCPT_MASK,
     11766              /*256:out  */ X86_MXCSR_XCPT_MASK,
     11767              /*xcpt?    */ false, false },
     11768          { { /*src2     */ { FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_SAFE_INT_MAX(1), FP32_NORM_SAFE_INT_MAX(1) } },
     11769            { /*src1     */ { FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_SAFE_INT_MAX(1), FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_SAFE_INT_MAX(1), FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MIN(1) } },
     11770            { /* =>      */ { FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MAX(1), FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MAX(1), FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MAX(1), FP32_NORM_SAFE_INT_MAX(1) } },
     11771              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     11772              /*128:out  */ X86_MXCSR_XCPT_MASK,
     11773              /*256:out  */ X86_MXCSR_XCPT_MASK,
     11774              /*xcpt?    */ false, false },
     11775          { { /*src2     */ { FP32_V(0, 0x600000, 0x7f)/* 1.75*/, FP32_V(0, 0, 0x7d)/*0.25*/, FP32_V(0, 0x600000, 0x7f)/* 1.75*/, FP32_V(0, 0, 0x7d)/*0.25*/, FP32_V(0, 0x600000, 0x7f)/* 1.75*/, FP32_V(0, 0, 0x7d)/* 0.25*/, FP32_V(0, 0x600000, 0x7f)/*1.75*/, FP32_V(1, 0, 0x7d)/*-0.25*/ } },
     11776            { /*src1     */ { FP32_V(1, 0,        0x7d)/*-0.25*/, FP32_V(0, 0, 0x7e)/*0.50*/, FP32_V(1, 0,        0x7d)/*-0.25*/, FP32_V(0, 0, 0x7e)/*0.50*/, FP32_V(1, 0x600000, 0x7f)/*-1.75*/, FP32_V(1, 0, 0x7e)/*-0.50*/, FP32_V(1, 0,        0x7d)/*0.25*/, FP32_V(1, 0, 0x7e)/*-0.50*/ } },
     11777            { /* =>      */ { FP32_V(1, 0,        0x7d)/*-0.25*/, FP32_V(0, 0, 0x7d)/*0.25*/, FP32_V(1, 0,        0x7d)/*-0.25*/, FP32_V(0, 0, 0x7d)/*0.25*/, FP32_V(1, 0x600000, 0x7f)/*-1.75*/, FP32_V(1, 0, 0x7e)/*-0.50*/, FP32_V(1, 0,        0x7d)/*0.25*/, FP32_V(1, 0, 0x7e)/*-0.50*/ } },
     11778              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     11779              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     11780              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     11781              /*xcpt?    */ false, false },
     11782          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_V1(0), FP32_NORM_V2(1), FP32_NORM_V3(1), FP32_NORM_V5(0), FP32_0(1),       FP32_NORM_V5(1), FP32_0(0)       } },
     11783            { /*src1     */ { FP32_NORM_V1(0),  FP32_NORM_V1(1), FP32_NORM_V2(0), FP32_NORM_V3(1), FP32_0(1),       FP32_NORM_V6(0), FP32_0(1),       FP32_NORM_V7(1) } },
     11784            { /* =>      */ { FP32_NORM_V1(0),  FP32_NORM_V1(1), FP32_NORM_V2(1), FP32_NORM_V3(1), FP32_0(1),       FP32_0(1),       FP32_NORM_V5(1), FP32_NORM_V7(1) } },
     11785              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     11786              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     11787              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     11788              /*xcpt?    */ false, false },
     11789          { { /*src2     */ { FP32_V(0, 0x5ca5b8, 0x93)/*1807543*/, FP32_V(0, 0x600000, 0x81)/* 7*/, FP32_V(0, 0x2514d6, 0x93)/*1352346.75*/, FP32_V(0, 0x5c0000, 0x84)/* 55*/, FP32_V(0, 0x2514d6, 0x93)/*1352346.75*/, FP32_V(1, 0x534000, 0x86)/*-211.25*/, FP32_V(0, 0x74429f, 0x97)/*32015678*/, FP32_1(1) } },
     11790            { /*src1     */ { FP32_V(0, 0x1ea980, 0x8f)/*  81235*/, FP32_V(0, 0x5c0000, 0x84)/*55*/, FP32_V(0, 0x7c9000, 0x88)/*   1010.25*/, FP32_V(1, 0x600000, 0x81)/* -7*/, FP32_V(0, 0x253468, 0x93)/*1353357.00*/, FP32_1(1),                            FP32_V(0, 0x712060, 0x92)/*  987654*/, FP32_1(0) } },
     11791            { /* =>      */ { FP32_V(0, 0x1ea980, 0x8f)/*  81235*/, FP32_V(0, 0x600000, 0x81)/* 7*/, FP32_V(0, 0x7c9000, 0x88)/*   1010.25*/, FP32_V(1, 0x600000, 0x81)/* -7*/, FP32_V(0, 0x2514d6, 0x93)/*1352346.75*/, FP32_V(1, 0x534000, 0x86)/*-211.25*/, FP32_V(0, 0x712060, 0x92)/*  987654*/, FP32_1(1) } },
     11792              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11793              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11794              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     11795              /*xcpt?    */ false, false },
     11796          { { /*src2     */ { FP32_V(0, 0x600000, 0x7e)/*      0.875*/, FP32_V(0, 0x3ce348, 0x90)/*193421.125*/, FP32_V(0, 0x6423f2, 0x92)/*934463.125*/, FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MIN(0), FP32_V(0, 0x16b43a, 0x93)/*1234567.25*/, FP32_V(0, 0x792318, 0x91)/*510232.75*/, FP32_V(0, 0x600000, 0x7e)/* 0.875*/ } },
     11797            { /*src1     */ { FP32_V(0, 0x769b50, 0x92)/*1010101.000*/, FP32_V(0, 0x430ebc, 0x91)/*399477.875*/, FP32_V(0, 0x52e0b4, 0x92)/*863755.250*/, FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MAX(1), FP32_V(0, 0x00c6d3, 0x94)/*2109876.75*/, FP32_V(1, 0x316740, 0x8e)/*-45415.25*/, FP32_V(1, 0,        0x7d)/*-0.250*/ } },
     11798            { /* =>      */ { FP32_V(0, 0x600000, 0x7e)/*      0.875*/, FP32_V(0, 0x3ce348, 0x90)/*193421.125*/, FP32_V(0, 0x52e0b4, 0x92)/*863755.250*/, FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MAX(1), FP32_V(0, 0x16b43a, 0x93)/*1234567.25*/, FP32_V(1, 0x316740, 0x8e)/*-45415.25*/, FP32_V(1, 0,        0x7d)/*-0.250*/ } },
     11799              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     11800              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     11801              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     11802              /*xcpt?    */ false, false },
     11803          { { /*src2     */ { FP32_V(0, 0x490fda, 0x80)/*3.1415926*/, FP32_V(0, 0x620b2e, 0x92)/*925874.9*/, FP32_V(0, 0x5dd520, 0x8e)/* 56789.125*/, FP32_V(1, 0x40e6b6, 0x8c)/*-12345.678*/, FP32_V(1, 0x490fda, 0x80)/*-3.1415926*/, FP32_V(1, 0x620b2e, 0x92)/*-925874.8*/, FP32_V(0, 0x5dd520, 0x8e)/*56789.125*/, FP32_V(0, 0x40e6b6, 0x8c)/*12345.678*/ } },
     11804            { /*src1     */ { FP32_V(0, 0x490fdb, 0x80)/*3.1415927*/, FP32_V(0, 0x620b2d, 0x92)/*925874.8*/, FP32_V(1, 0x5dd521, 0x8e)/*-56789.127*/, FP32_V(1, 0x40e6b7, 0x8c)/*-12345.679*/, FP32_V(1, 0x490fdb, 0x80)/*-3.1415927*/, FP32_V(0, 0x620b2d, 0x92)/* 925874.9*/, FP32_V(0, 0x5dd521, 0x8e)/*56789.127*/, FP32_V(0, 0x40e6b7, 0x8c)/*12345.679*/ } },
     11805            { /* =>      */ { FP32_V(0, 0x490fda, 0x80)/*3.1415926*/, FP32_V(0, 0x620b2d, 0x92)/*925874.8*/, FP32_V(1, 0x5dd521, 0x8e)/*-56789.127*/, FP32_V(1, 0x40e6b7, 0x8c)/*-12345.679*/, FP32_V(1, 0x490fdb, 0x80)/*-3.1415927*/, FP32_V(1, 0x620b2e, 0x92)/*-925874.8*/, FP32_V(0, 0x5dd520, 0x8e)/*56789.125*/, FP32_V(0, 0x40e6b6, 0x8c)/*12345.678*/ } },
     11806              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     11807              /*128:out  */ X86_MXCSR_XCPT_MASK,
     11808              /*256:out  */ X86_MXCSR_XCPT_MASK,
     11809              /*xcpt?    */ false, false },
     11810    /** @todo More Normals. */
     11811    /*
     11812     * Denormals.
     11813     */
     11814    /*29*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0)          } },
     11815            { /*src1     */ { FP32_0(0),          FP32_DENORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_DENORM_MAX(1) } },
     11816            { /* =>      */ { FP32_0(0),          FP32_DENORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_DENORM_MAX(1) } },
     11817              /*mxcsr:in */ 0,
     11818              /*128:out  */ X86_MXCSR_DE,
     11819              /*256:out  */ X86_MXCSR_DE,
     11820              /*xcpt?    */ true, true },
     11821          { { /*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) } },
     11822            { /*src1     */ { FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0) } },
     11823            { /* =>      */ { FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0) } },
     11824              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     11825              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     11826              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     11827              /*xcpt?    */ false, false },
     11828          { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0) } },
     11829            { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0) } },
     11830            { /* =>      */ { FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0)          } },
     11831              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP,
     11832              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP,
     11833              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP,
     11834              /*xcpt?    */ false, false },
     11835          { { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } },
     11836             { /*src1     */ { FP32_0(0),         FP32_0(0), FP32_0(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     11837             { /* =>      */ { FP32_0(0),         FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } },
     11838               /*mxcsr:in */ 0,
     11839               /*128:out  */ X86_MXCSR_DE,
     11840               /*256:out  */ X86_MXCSR_DE,
     11841               /*xcpt?    */ true, true },
     11842          { { /*src2     */ { FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_DENORM_MAX(1) } },
     11843            { /*src1     */ { FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0)          } },
     11844            { /* =>      */ { FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(1)          } },
     11845              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     11846              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     11847              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     11848              /*xcpt?    */ false, false },
     11849          { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0) } },
     11850            { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0) } },
     11851            { /* =>      */ { FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0)          } },
     11852              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     11853              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     11854              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     11855              /*xcpt?    */ false, false },
     11856    /** @todo More Denormals. */
     11857    /*35*/ FP32_TABLE_D9_PS_INVALIDS
     11858    };
     11859
     11860#define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues
     11861    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     11862    {
     11863        { bs3CpuInstr4_minps_XMM1_XMM2_icebp_c16,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
     11864        { bs3CpuInstr4_minps_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
     11865
     11866        { bs3CpuInstr4_vminps_XMM1_XMM2_XMM3_icebp_c16,  255, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     11867        { bs3CpuInstr4_vminps_XMM1_XMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     11868
     11869        { bs3CpuInstr4_vminps_YMM1_YMM2_YMM3_icebp_c16,  255, RM_REG, T_AVX_256, 1, 2, 3,   PASS_s_aValues },
     11870        { bs3CpuInstr4_vminps_YMM1_YMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },
     11871    };
     11872    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     11873    {
     11874        { bs3CpuInstr4_minps_XMM1_XMM2_icebp_c32,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
     11875        { bs3CpuInstr4_minps_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
     11876
     11877        { bs3CpuInstr4_vminps_XMM1_XMM2_XMM3_icebp_c32,  255, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     11878        { bs3CpuInstr4_vminps_XMM1_XMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     11879
     11880        { bs3CpuInstr4_vminps_YMM1_YMM2_YMM3_icebp_c32,  255, RM_REG, T_AVX_256, 1, 2, 3,   PASS_s_aValues },
     11881        { bs3CpuInstr4_vminps_YMM1_YMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },
     11882    };
     11883    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     11884    {
     11885        { bs3CpuInstr4_minps_XMM1_XMM2_icebp_c64,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
     11886        { bs3CpuInstr4_minps_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
     11887
     11888        { bs3CpuInstr4_vminps_XMM1_XMM2_XMM3_icebp_c64,  255, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     11889        { bs3CpuInstr4_vminps_XMM1_XMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     11890
     11891        { bs3CpuInstr4_vminps_YMM1_YMM2_YMM3_icebp_c64,  255, RM_REG, T_AVX_256, 1, 2, 3,   PASS_s_aValues },
     11892        { bs3CpuInstr4_vminps_YMM1_YMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },
     11893
     11894        { bs3CpuInstr4_minps_XMM8_XMM9_icebp_c64,  255, RM_REG, T_SSE, 8, 8, 9,   PASS_s_aValues },
     11895        { bs3CpuInstr4_minps_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 8, 8, 255, PASS_s_aValues },
     11896
     11897        { bs3CpuInstr4_vminps_XMM8_XMM9_XMM10_icebp_c64, 255, RM_REG, T_AVX_128, 8, 9, 10,  PASS_s_aValues },
     11898        { bs3CpuInstr4_vminps_XMM8_XMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 8, 9, 255, PASS_s_aValues },
     11899        { bs3CpuInstr4_vminps_YMM8_YMM9_YMM10_icebp_c64, 255, RM_REG, T_AVX_256, 8, 9, 10,  PASS_s_aValues },
     11900        { bs3CpuInstr4_vminps_YMM8_YMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 8, 9, 255, PASS_s_aValues },
     11901    };
     11902#undef PASS_s_aValues
     11903
     11904    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     11905    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     11906    return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     11907                                        g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));
    1157811908}
    1157911909
     
    1162411954        { "[v]maxss",       bs3CpuInstr4_v_maxss,    0 },
    1162511955        { "[v]maxsd",       bs3CpuInstr4_v_maxsd,    0 },
     11956        { "[v]minps",       bs3CpuInstr4_v_minps,    0 },
    1162611957#endif
    1162711958    };
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette