VirtualBox

Ignore:
Timestamp:
Jun 6, 2024 9:03:25 AM (8 months ago)
Author:
vboxsync
Message:

ValidationKit/bootsectors: bugref:10658 SIMD FP testcase: Seperated expected MXCSR flags for 128-bit and 256-bit instructions.

File:
1 edited

Legend:

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

    r104852 r104860  
    220220
    221221/**
     222 * YMM packed single-precision floating-point register.
     223 * @todo move to x86.h?
     224 */
     225typedef union X86YMMFLOATPSREG
     226{
     227    /** Packed single-precision floating-point view. */
     228    RTFLOAT32U  ar32[8];
     229    /** 256-bit integer view. */
     230    RTUINT256U  ymm;
     231} X86YMMFLOATPSREG;
     232# ifndef VBOX_FOR_DTRACE_LIB
     233AssertCompileSize(X86YMMFLOATPSREG, 32);
     234AssertCompileSize(X86YMMFLOATPSREG, sizeof(X86YMMREG));
     235# endif
     236/** Pointer to a YMM packed single-precision floating-point register. */
     237typedef X86YMMFLOATPSREG BS3_FAR *PX86YMMFLOATPSREG;
     238/** Pointer to a const YMM single-precision packed floating-point register. */
     239typedef X86YMMFLOATPSREG const BS3_FAR *PCX86YMMFLOATPSREG;
     240
     241/**
    222242 * YMM packed double-precision floating-point register.
    223243 * @todo move to x86.h?
     
    232252# ifndef VBOX_FOR_DTRACE_LIB
    233253AssertCompileSize(X86YMMFLOATPDREG, 32);
     254AssertCompileSize(X86YMMFLOATPDREG, sizeof(X86YMMREG));
    234255# endif
    235256/** Pointer to a YMM packed floating-point register. */
     
    237258/** Pointer to a const YMM packed floating-point register. */
    238259typedef X86YMMFLOATPDREG const BS3_FAR *PCX86YMMFLOATPDREG;
    239 
    240 /**
    241  * YMM packed single-precision floating-point register.
    242  * @todo move to x86.h?
    243  */
    244 typedef union X86YMMFLOATPSREG
    245 {
    246     /** Packed single-precision floating-point view. */
    247     RTFLOAT32U  ar32[8];
    248     /** 256-bit integer view. */
    249     RTUINT256U  ymm;
    250 } X86YMMFLOATPSREG;
    251 # ifndef VBOX_FOR_DTRACE_LIB
    252 AssertCompileSize(X86YMMFLOATPSREG, 32);
    253 # endif
    254 /** Pointer to a YMM packed single-precision floating-point register. */
    255 typedef X86YMMFLOATPSREG BS3_FAR *PX86YMMFLOATPSREG;
    256 /** Pointer to a const YMM single-precision packed floating-point register. */
    257 typedef X86YMMFLOATPSREG const BS3_FAR *PCX86YMMFLOATPSREG;
    258260
    259261/**
     
    270272# ifndef VBOX_FOR_DTRACE_LIB
    271273AssertCompileSize(X86YMMFLOATSQREG, 32);
     274AssertCompileSize(X86YMMFLOATSQREG, sizeof(X86YMMREG));
    272275# endif
    273276/** Pointer to a YMM scalar quadruple-precision floating-point register. */
     
    790793typedef struct BS3CPUINSTR4_TEST1_VALUES_T
    791794{
    792     X86YMMREG           uSrc2;               /**< Second source operand. */
    793     X86YMMREG           uSrc1;               /**< uDstIn for SSE */
    794     X86YMMREG           uDstOut;             /**< Destination output. */
    795     uint32_t            fMxCsrMask;          /**< MXCSR exception mask to use. */
    796     bool                fDenormalsAreZero;   /**< Whether DAZ (Denormals-Are-Zero) is used. */
    797     bool                fFlushToZero;        /**< Whether Flush-To-Zero (FZ) is used. */
    798     uint32_t            fRoundingCtlMask;    /**< Rounding control mask (X86_MXCSR_RC_MASK) to use. */
    799     uint32_t            fExpectedMxCsrFlags; /**< Expected MXCSR exception flags. */
     795    X86YMMREG           uSrc2;                  /**< Second source operand. */
     796    X86YMMREG           uSrc1;                  /**< uDstIn for SSE */
     797    X86YMMREG           uDstOut;                /**< Destination output. */
     798    uint32_t            fMxCsrMask;             /**< MXCSR exception mask to use. */
     799    bool                fDenormalsAreZero;      /**< Whether DAZ (Denormals-Are-Zero) is used. */
     800    bool                fFlushToZero;           /**< Whether Flush-To-Zero (FZ) is used. */
     801    uint32_t            fRoundingCtlMask;       /**< Rounding control mask (X86_MXCSR_RC_MASK) to use. */
     802    uint32_t            f128ExpectedMxCsrFlags; /**< Expected MXCSR exception flags for 128-bit instruction. */
     803    uint32_t            f256ExpectedMxCsrFlags; /**< Expected MXCSR exception flags for 256-bit instructions. */
     804    uint32_t            fPad;
    800805} BS3CPUINSTR4_TEST1_VALUES_T;
    801806
     
    806811typedef struct BS3CPUINSTR4_TEST1_VALUES_PS_T
    807812{
    808     X86YMMFLOATPSREG    uSrc2;               /**< Second source operand. */
    809     X86YMMFLOATPSREG    uSrc1;               /**< uDstIn for SSE */
    810     X86YMMFLOATPSREG    uDstOut;             /**< Destination output. */
    811     uint32_t            fMxCsrMask;          /**< MXCSR exception mask to use. */
    812     bool                fDenormalsAreZero;   /**< Whether DAZ (Denormals-Are-Zero) is used. */
    813     bool                fFlushToZero;        /**< Whether Flush-To-Zero (FZ) is used. */
    814     uint32_t            fRoundingCtlMask;    /**< Rounding control mask (X86_MXCSR_RC_MASK) to use. */
    815     uint32_t            fExpectedMxCsrFlags; /**< Expected MXCSR exception flags. */
     813    X86YMMFLOATPSREG    uSrc2;                  /**< Second source operand. */
     814    X86YMMFLOATPSREG    uSrc1;                  /**< uDstIn for SSE */
     815    X86YMMFLOATPSREG    uDstOut;                /**< Destination output. */
     816    uint32_t            fMxCsrMask;             /**< MXCSR exception mask to use. */
     817    bool                fDenormalsAreZero;      /**< Whether DAZ (Denormals-Are-Zero) is used. */
     818    bool                fFlushToZero;           /**< Whether Flush-To-Zero (FZ) is used. */
     819    uint32_t            fRoundingCtlMask;       /**< Rounding control mask (X86_MXCSR_RC_MASK) to use. */
     820    uint32_t            f128ExpectedMxCsrFlags; /**< Expected MXCSR exception flags for 128-bit instruction. */
     821    uint32_t            f256ExpectedMxCsrFlags; /**< Expected MXCSR exception flags for 256-bit instructions. */
     822    uint32_t            fPad;
    816823} BS3CPUINSTR4_TEST1_VALUES_PS_T;
    817824AssertCompile(sizeof(BS3CPUINSTR4_TEST1_VALUES_PS_T) == sizeof(BS3CPUINSTR4_TEST1_VALUES_T));
    818 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, uSrc2,               BS3CPUINSTR4_TEST1_VALUES_T, uSrc2);
    819 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, uSrc1,               BS3CPUINSTR4_TEST1_VALUES_T, uSrc1);
    820 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, uDstOut,             BS3CPUINSTR4_TEST1_VALUES_T, uDstOut);
    821 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, fMxCsrMask,          BS3CPUINSTR4_TEST1_VALUES_T, fMxCsrMask);
    822 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, fDenormalsAreZero,   BS3CPUINSTR4_TEST1_VALUES_T, fDenormalsAreZero);
    823 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, fFlushToZero,        BS3CPUINSTR4_TEST1_VALUES_T, fFlushToZero);
    824 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, fRoundingCtlMask,    BS3CPUINSTR4_TEST1_VALUES_T, fRoundingCtlMask);
    825 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, fExpectedMxCsrFlags, BS3CPUINSTR4_TEST1_VALUES_T, fExpectedMxCsrFlags);
     825AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, uSrc2,                  BS3CPUINSTR4_TEST1_VALUES_T, uSrc2);
     826AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, uSrc1,                  BS3CPUINSTR4_TEST1_VALUES_T, uSrc1);
     827AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, uDstOut,                BS3CPUINSTR4_TEST1_VALUES_T, uDstOut);
     828AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, fMxCsrMask,             BS3CPUINSTR4_TEST1_VALUES_T, fMxCsrMask);
     829AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, fDenormalsAreZero,      BS3CPUINSTR4_TEST1_VALUES_T, fDenormalsAreZero);
     830AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, fFlushToZero,           BS3CPUINSTR4_TEST1_VALUES_T, fFlushToZero);
     831AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, fRoundingCtlMask,       BS3CPUINSTR4_TEST1_VALUES_T, fRoundingCtlMask);
     832AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, f128ExpectedMxCsrFlags, BS3CPUINSTR4_TEST1_VALUES_T, f128ExpectedMxCsrFlags);
     833AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PS_T, f256ExpectedMxCsrFlags, BS3CPUINSTR4_TEST1_VALUES_T, f256ExpectedMxCsrFlags);
    826834
    827835/*
     
    831839typedef struct BS3CPUINSTR4_TEST1_VALUES_PD_T
    832840{
    833     X86YMMFLOATPDREG    uSrc2;               /**< Second source operand. */
    834     X86YMMFLOATPDREG    uSrc1;               /**< uDstIn for SSE */
    835     X86YMMFLOATPDREG    uDstOut;             /**< Destination output. */
    836     uint32_t            fMxCsrMask;          /**< MXCSR exception mask to use. */
    837     bool                fDenormalsAreZero;   /**< Whether DAZ (Denormals-Are-Zero) is used. */
    838     bool                fFlushToZero;        /**< Whether Flush-To-Zero (FZ) is used. */
    839     uint32_t            fRoundingCtlMask;    /**< Rounding control mask (X86_MXCSR_RC_MASK) to use. */
    840     uint32_t            fExpectedMxCsrFlags; /**< Expected MXCSR exception flags. */
     841    X86YMMFLOATPDREG    uSrc2;                  /**< Second source operand. */
     842    X86YMMFLOATPDREG    uSrc1;                  /**< uDstIn for SSE */
     843    X86YMMFLOATPDREG    uDstOut;                /**< Destination output. */
     844    uint32_t            fMxCsrMask;             /**< MXCSR exception mask to use. */
     845    bool                fDenormalsAreZero;      /**< Whether DAZ (Denormals-Are-Zero) is used. */
     846    bool                fFlushToZero;           /**< Whether Flush-To-Zero (FZ) is used. */
     847    uint32_t            fRoundingCtlMask;       /**< Rounding control mask (X86_MXCSR_RC_MASK) to use. */
     848    uint32_t            f128ExpectedMxCsrFlags; /**< Expected MXCSR exception flags for 128-bit instruction. */
     849    uint32_t            f256ExpectedMxCsrFlags; /**< Expected MXCSR exception flags for 256-bit instructions. */
     850    uint32_t            fPad;
    841851} BS3CPUINSTR4_TEST1_VALUES_PD_T;
    842852AssertCompile(sizeof(BS3CPUINSTR4_TEST1_VALUES_PD_T) == sizeof(BS3CPUINSTR4_TEST1_VALUES_T));
    843 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, uSrc2,               BS3CPUINSTR4_TEST1_VALUES_T, uSrc2);
    844 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, uSrc1,               BS3CPUINSTR4_TEST1_VALUES_T, uSrc1);
    845 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, uDstOut,             BS3CPUINSTR4_TEST1_VALUES_T, uDstOut);
    846 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, fMxCsrMask,          BS3CPUINSTR4_TEST1_VALUES_T, fMxCsrMask);
    847 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, fDenormalsAreZero,   BS3CPUINSTR4_TEST1_VALUES_T, fDenormalsAreZero);
    848 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, fFlushToZero,        BS3CPUINSTR4_TEST1_VALUES_T, fFlushToZero);
    849 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, fRoundingCtlMask,    BS3CPUINSTR4_TEST1_VALUES_T, fRoundingCtlMask);
    850 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, fExpectedMxCsrFlags, BS3CPUINSTR4_TEST1_VALUES_T, fExpectedMxCsrFlags);
     853AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, uSrc2,                  BS3CPUINSTR4_TEST1_VALUES_T, uSrc2);
     854AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, uSrc1,                  BS3CPUINSTR4_TEST1_VALUES_T, uSrc1);
     855AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, uDstOut,                BS3CPUINSTR4_TEST1_VALUES_T, uDstOut);
     856AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, fMxCsrMask,             BS3CPUINSTR4_TEST1_VALUES_T, fMxCsrMask);
     857AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, fDenormalsAreZero,      BS3CPUINSTR4_TEST1_VALUES_T, fDenormalsAreZero);
     858AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, fFlushToZero,           BS3CPUINSTR4_TEST1_VALUES_T, fFlushToZero);
     859AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, fRoundingCtlMask,       BS3CPUINSTR4_TEST1_VALUES_T, fRoundingCtlMask);
     860AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, f128ExpectedMxCsrFlags, BS3CPUINSTR4_TEST1_VALUES_T, f128ExpectedMxCsrFlags);
     861AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_PD_T, f256ExpectedMxCsrFlags, BS3CPUINSTR4_TEST1_VALUES_T, f256ExpectedMxCsrFlags);
    851862
    852863/*
     
    856867typedef struct BS3CPUINSTR4_TEST1_VALUES_SQ_T
    857868{
    858     X86YMMFLOATSQREG    uSrc2;               /**< Second source operand. */
    859     X86YMMFLOATSQREG    uSrc1;               /**< uDstIn for SSE */
    860     X86YMMFLOATSQREG    uDstOut;             /**< Destination output. */
    861     uint32_t            fMxCsrMask;          /**< MXCSR exception mask to use. */
    862     bool                fDenormalsAreZero;   /**< Whether DAZ (Denormals-Are-Zero) is used. */
    863     bool                fFlushToZero;        /**< Whether Flush-To-Zero (FZ) is used. */
    864     uint32_t            fRoundingCtlMask;    /**< Rounding control mask (X86_MXCSR_RC_MASK) to use. */
    865     uint32_t            fExpectedMxCsrFlags; /**< Expected MXCSR exception flags. */
     869    X86YMMFLOATSQREG    uSrc2;                  /**< Second source operand. */
     870    X86YMMFLOATSQREG    uSrc1;                  /**< uDstIn for SSE */
     871    X86YMMFLOATSQREG    uDstOut;                /**< Destination output. */
     872    uint32_t            fMxCsrMask;             /**< MXCSR exception mask to use. */
     873    bool                fDenormalsAreZero;      /**< Whether DAZ (Denormals-Are-Zero) is used. */
     874    bool                fFlushToZero;           /**< Whether Flush-To-Zero (FZ) is used. */
     875    uint32_t            fRoundingCtlMask;       /**< Rounding control mask (X86_MXCSR_RC_MASK) to use. */
     876    uint32_t            f128ExpectedMxCsrFlags; /**< Expected MXCSR exception flags for 128-bit instruction. */
     877    uint32_t            f256ExpectedMxCsrFlags; /**< Expected MXCSR exception flags for 256-bit instructions. */
     878    uint32_t            fPad;
    866879} BS3CPUINSTR4_TEST1_VALUES_SQ_T;
    867880AssertCompile(sizeof(BS3CPUINSTR4_TEST1_VALUES_SQ_T) == sizeof(BS3CPUINSTR4_TEST1_VALUES_T));
    868 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, uSrc2,               BS3CPUINSTR4_TEST1_VALUES_T, uSrc2);
    869 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, uSrc1,               BS3CPUINSTR4_TEST1_VALUES_T, uSrc1);
    870 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, uDstOut,             BS3CPUINSTR4_TEST1_VALUES_T, uDstOut);
    871 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, fMxCsrMask,          BS3CPUINSTR4_TEST1_VALUES_T, fMxCsrMask);
    872 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, fDenormalsAreZero,   BS3CPUINSTR4_TEST1_VALUES_T, fDenormalsAreZero);
    873 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, fFlushToZero,        BS3CPUINSTR4_TEST1_VALUES_T, fFlushToZero);
    874 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, fRoundingCtlMask,    BS3CPUINSTR4_TEST1_VALUES_T, fRoundingCtlMask);
    875 AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, fExpectedMxCsrFlags, BS3CPUINSTR4_TEST1_VALUES_T, fExpectedMxCsrFlags);
     881AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, uSrc2,                  BS3CPUINSTR4_TEST1_VALUES_T, uSrc2);
     882AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, uSrc1,                  BS3CPUINSTR4_TEST1_VALUES_T, uSrc1);
     883AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, uDstOut,                BS3CPUINSTR4_TEST1_VALUES_T, uDstOut);
     884AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, fMxCsrMask,             BS3CPUINSTR4_TEST1_VALUES_T, fMxCsrMask);
     885AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, fDenormalsAreZero,      BS3CPUINSTR4_TEST1_VALUES_T, fDenormalsAreZero);
     886AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, fFlushToZero,           BS3CPUINSTR4_TEST1_VALUES_T, fFlushToZero);
     887AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, fRoundingCtlMask,       BS3CPUINSTR4_TEST1_VALUES_T, fRoundingCtlMask);
     888AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, f128ExpectedMxCsrFlags, BS3CPUINSTR4_TEST1_VALUES_T, f128ExpectedMxCsrFlags);
     889AssertCompileMembersSameSizeAndOffset(BS3CPUINSTR4_TEST1_VALUES_SQ_T, f256ExpectedMxCsrFlags, BS3CPUINSTR4_TEST1_VALUES_T, f256ExpectedMxCsrFlags);
    876890
    877891typedef struct BS3CPUINSTR4_TEST1_T
     
    930944    BS3CPUINSTR4_TEST1_T const BS3_FAR        *pTest   = pTestCtx->pTest;
    931945    BS3CPUINSTR4_TEST1_VALUES_T const BS3_FAR *pValues = &pTestCtx->pTest->paValues[pTestCtx->iVal];
    932     PBS3TRAPFRAME    pTrapFrame     = pTestCtx->pTrapFrame;
    933     PBS3REGCTX       pCtx           = pTestCtx->pCtx;
    934     PBS3EXTCTX       pExtCtx        = pTestCtx->pExtCtx;
    935     PBS3EXTCTX       pExtCtxOut     = pTestCtx->pExtCtxOut;
    936     uint8_t BS3_FAR *puMemOp        = pTestCtx->puMemOp;
    937     uint8_t BS3_FAR *puMemOpAlias   = pTestCtx->puMemOpAlias;
    938     uint8_t          cbMemOp        = pTestCtx->cbMemOp;
    939     uint8_t const    cbOperand      = pTestCtx->cbOperand;
    940     uint8_t const    cbInstr        = ((uint8_t const BS3_FAR *)(uintptr_t)pTestCtx->pTest->pfnWorker)[-1];
    941     uint8_t          bXcptExpect    = pTestCtx->bXcptExpect;
    942     uint8_t const    bFpXcpt        = pTestCtx->pConfig->fCr4OsXmmExcpt ? X86_XCPT_XF : X86_XCPT_UD;
    943     bool const       fFpFlagsExpect = RT_BOOL(  (pValues->fExpectedMxCsrFlags
    944                                               & (~pValues->fMxCsrMask >> X86_MXCSR_XCPT_MASK_SHIFT)) & X86_MXCSR_XCPT_FLAGS);
     946    PBS3TRAPFRAME    pTrapFrame          = pTestCtx->pTrapFrame;
     947    PBS3REGCTX       pCtx                = pTestCtx->pCtx;
     948    PBS3EXTCTX       pExtCtx             = pTestCtx->pExtCtx;
     949    PBS3EXTCTX       pExtCtxOut          = pTestCtx->pExtCtxOut;
     950    uint8_t BS3_FAR *puMemOp             = pTestCtx->puMemOp;
     951    uint8_t BS3_FAR *puMemOpAlias        = pTestCtx->puMemOpAlias;
     952    uint8_t          cbMemOp             = pTestCtx->cbMemOp;
     953    uint8_t const    cbOperand           = pTestCtx->cbOperand;
     954    uint8_t const    cbInstr             = ((uint8_t const BS3_FAR *)(uintptr_t)pTestCtx->pTest->pfnWorker)[-1];
     955    uint8_t          bXcptExpect         = pTestCtx->bXcptExpect;
     956    uint8_t const    bFpXcpt             = pTestCtx->pConfig->fCr4OsXmmExcpt ? X86_XCPT_XF : X86_XCPT_UD;
     957    uint32_t const   fExpectedMxCsrFlags = pTestCtx->cbOperand > 16 ? pValues->f256ExpectedMxCsrFlags
     958                                                                    : pValues->f128ExpectedMxCsrFlags;
     959    bool const       fFpFlagsExpect      = RT_BOOL(  (fExpectedMxCsrFlags
     960                                                   & (~pValues->fMxCsrMask >> X86_MXCSR_XCPT_MASK_SHIFT)) & X86_MXCSR_XCPT_FLAGS);
    945961    uint32_t         uMxCsr;
    946962    X86YMMREG        MemOpExpect;
     
    10431059#endif
    10441060    if (bXcptExpect == X86_XCPT_DB)
    1045         Bs3ExtCtxSetMxCsr(pExtCtx, (uMxCsr & ~X86_MXCSR_XCPT_FLAGS)
    1046                                  | (pValues->fExpectedMxCsrFlags & X86_MXCSR_XCPT_FLAGS));
     1061        Bs3ExtCtxSetMxCsr(pExtCtx, (uMxCsr              & ~X86_MXCSR_XCPT_FLAGS)
     1062                                 | (fExpectedMxCsrFlags & X86_MXCSR_XCPT_FLAGS));
    10471063    Bs3TestCheckExtCtx(pExtCtxOut, pExtCtx, 0 /*fFlags*/, pTestCtx->pszMode, pTestCtx->idTestStep);
    10481064
     
    10521068
    10531069        /* Check if the SIMD FP exception flags (or lack of) are as expected. */
    1054         if (fMxCsrXcptFlags != (pValues->fExpectedMxCsrFlags & X86_MXCSR_XCPT_FLAGS))
     1070        if (fMxCsrXcptFlags != (fExpectedMxCsrFlags & X86_MXCSR_XCPT_FLAGS))
    10551071        {
    10561072            char szGotBuf[BS3_FP_XCPT_NAMES_MAXLEN];
    10571073            char szExpectBuf[BS3_FP_XCPT_NAMES_MAXLEN];
    1058             bs3CpuInstr4GetXcptFlags(&szExpectBuf[0], sizeof(szExpectBuf), pValues->fExpectedMxCsrFlags);
     1074            bs3CpuInstr4GetXcptFlags(&szExpectBuf[0], sizeof(szExpectBuf), fExpectedMxCsrFlags);
    10591075            bs3CpuInstr4GetXcptFlags(&szGotBuf[0], sizeof(szGotBuf), fMxCsrXcptFlags);
    10601076            Bs3TestFailedF("Expected floating-point xcpt flags%s, got%s", szExpectBuf, szGotBuf);
     
    12071223                            uint16_t                 cErrors;
    12081224                            BS3CPUINSTR4_TEST1_CTX_T TestCtx;
     1225                            uint32_t const fExpectedMxCsrFlags = pTest->enmType >= T_128BITS
     1226                                                               ? pTest->paValues[iVal].f128ExpectedMxCsrFlags
     1227                                                               : pTest->paValues[iVal].f256ExpectedMxCsrFlags;
     1228
    12091229                            if (BS3_SKIPIT(bRing, iCfg, iTest, iVal, 0))
    12101230                                continue;
     
    12181238                            if (   !g_fMxCsrDazSupported
    12191239                                && pTest->paValues[iVal].fDenormalsAreZero
    1220                                 && (pTest->paValues[iVal].fExpectedMxCsrFlags & X86_MXCSR_DE))
     1240                                && (fExpectedMxCsrFlags & X86_MXCSR_DE))
    12211241                                continue;
    12221242
     
    12461266                            {
    12471267                                if (paConfigs[iCfg].fAligned)
    1248                                     Bs3TestFailedF("%s: ring-%d/cfg#%u/test#%u/value#%u failed (bXcptExpect=%u %s)",
     1268                                    Bs3TestFailedF("%s: ring-%d/cfg#%u/test#%u/value#%u failed (bXcptExpect=%u %s, %s %u-bit)",
    12491269                                                   Bs3GetModeName(bMode), bRing, iCfg, iTest, iVal,
    1250                                                    bXcptExpect, bs3CpuInstr4XcptName(bXcptExpect));
     1270                                                   bXcptExpect, bs3CpuInstr4XcptName(bXcptExpect), fSseInstr ? "SSE" : "AVX", cbOperand * 8);
    12511271                                else
    1252                                     Bs3TestFailedF("%s: ring-%d/cfg#%u/test#%u/value#%u failed (bXcptExpect=%u %s, puMemOp=%p, EFLAGS=%#RX32, CR0=%#RX32)",
     1272                                    Bs3TestFailedF("%s: ring-%d/cfg#%u/test#%u/value#%u failed (bXcptExpect=%u %s, puMemOp=%p, EFLAGS=%#RX32, CR0=%#RX32, %s %u-bit)",
    12531273                                                   Bs3GetModeName(bMode), bRing, iCfg, iTest, iVal,
    12541274                                                   bXcptExpect, bs3CpuInstr4XcptName(bXcptExpect), puMemOp,
    1255                                                    TrapFrame.Ctx.rflags.u32, TrapFrame.Ctx.cr0);
     1275                                                   TrapFrame.Ctx.rflags.u32, TrapFrame.Ctx.cr0, fSseInstr ? "SSE" : "AVX", cbOperand * 8);
    12561276                                Bs3TestPrintf("\n");
    12571277                            }
     
    12881308    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues[] =
    12891309    {
     1310    /*
     1311     * Zero.
     1312     */
    12901313    /* 0*/{ { /*src2     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0) } },
    12911314            { /*src1     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0) } },
     
    12931316              /*mask     */ X86_MXCSR_XCPT_MASK,
    12941317              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    1295               /*flags    */ 0 },
     1318              /*flags    */ 0, 0 },
    12961319    /* 1*/{ { /*src2     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0) } },
    12971320            { /*src1     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0) } },
     
    12991322              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    13001323              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    1301               /*flags    */ 0 },
    1302     /* 2*/{ { /*src2     */ { BS3_FP32_INF(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0)} },
    1303             { /*src1     */ { BS3_FP32_INF(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0)} },
    1304             { /* =>      */ { BS3_FP32_INF(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0)} },
     1324              /*flags    */ 0, 0 },
     1325    /* 2*/{ { /*src2     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0) } },
     1326            { /*src1     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0) } },
     1327            { /* =>      */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0) } },
     1328              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     1329              /*daz,fz,rc*/ 1, 1, X86_MXCSR_RC_UP,
     1330              /*flags    */ 0, 0 },
     1331    /* 3*/{ { /*src2     */ { BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1) } },
     1332            { /*src1     */ { BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1) } },
     1333            { /* =>      */ { BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1) } },
     1334              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     1335              /*daz,fz,rc*/ 1, 0, X86_MXCSR_RC_ZERO,
     1336              /*flags    */ 0, 0 },
     1337    /* 4*/{ { /*src2     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(1) } },
     1338            { /*src1     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(1) } },
     1339            { /* =>      */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(1) } },
     1340              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     1341              /*daz,fz,rc*/ 0, 1, X86_MXCSR_RC_ZERO,
     1342              /*flags    */ 0, 0 },
     1343    /* 5*/{ { /*src2     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1) } },
     1344            { /*src1     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1) } },
     1345            { /* =>      */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(1) } },
     1346              /*mask     */ X86_MXCSR_XCPT_MASK,
     1347              /*daz,fz,rc*/ 1, 1, X86_MXCSR_RC_DOWN,
     1348              /*flags    */ 0, 0 },
     1349    /*
     1350     * Infinity.
     1351     */
     1352    /* 6*/{ { /*src2     */ { BS3_FP32_INF(0),  BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0) } },
     1353            { /*src1     */ { BS3_FP32_INF(1),  BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0) } },
     1354            { /* =>      */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0) } },
    13051355              /*mask     */ ~X86_MXCSR_IM,
    13061356              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    1307               /*flags    */ X86_MXCSR_IE },
    1308     /* 3*/{ { /*src2     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_INF(1),  BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0)} },
    1309             { /*src1     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_INF(0),  BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0)} },
    1310             { /* =>      */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_QNAN(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0)} },
     1357              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
     1358    /* 7*/{ { /*src2     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_INF(1),  BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0) } },
     1359            { /*src1     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_INF(0),  BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0) } },
     1360            { /* =>      */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_QNAN(1), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0) } },
    13111361              /*mask     */ X86_MXCSR_XCPT_MASK,
    13121362              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    1313               /*flags    */ X86_MXCSR_IE },
     1363              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
     1364    /* 8*/{ { /*src2     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_INF(0),  BS3_FP32_ZERO(1), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0) } },
     1365            { /*src1     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_INF(1),  BS3_FP32_ZERO(1), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0) } },
     1366            { /* =>      */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_QNAN(1), BS3_FP32_ZERO(1), BS3_FP32_ZERO(1), BS3_FP32_ZERO(0) } },
     1367              /*mask     */ X86_MXCSR_XCPT_MASK,
     1368              /*daz,fz,rc*/ 0, 1, X86_MXCSR_RC_NEAREST,
     1369              /*flags    */ 0, X86_MXCSR_IE },
     1370    /* 9*/{ { /*src2     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_INF(0)  } },
     1371            { /*src1     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_INF(1)  } },
     1372            { /* =>      */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_QNAN(0) } },
     1373              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     1374              /*daz,fz,rc*/ 0, 1, X86_MXCSR_RC_NEAREST,
     1375              /*flags    */ 0, X86_MXCSR_IE },
     1376    /*10*/{ { /*src2     */ { BS3_FP32_INF(0), BS3_FP32_INF(1),  BS3_FP32_ZERO(0), BS3_FP32_INF(1),  BS3_FP32_ZERO(1), BS3_FP32_INF(1),  BS3_FP32_INF(1),  BS3_FP32_INF(0) } },
     1377            { /*src1     */ { BS3_FP32_INF(1), BS3_FP32_INF(0),  BS3_FP32_ZERO(1), BS3_FP32_INF(0),  BS3_FP32_ZERO(0), BS3_FP32_INF(0),  BS3_FP32_INF(0),  BS3_FP32_INF(1) } },
     1378            { /* =>      */ { BS3_FP32_INF(1), BS3_FP32_QNAN(1), BS3_FP32_ZERO(0), BS3_FP32_QNAN(1), BS3_FP32_ZERO(1), BS3_FP32_QNAN(1), BS3_FP32_QNAN(1), BS3_FP32_INF(1) } },
     1379              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     1380              /*daz,fz,rc*/ 0, 1, X86_MXCSR_RC_ZERO,
     1381              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
    13141382    };
    13151383
     
    13691437    {
    13701438    /*
    1371      * Zero.
     1439     * Zero (Positive and Negative).
    13721440     */
    13731441    /* 0*/{ { /*src2     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
     
    13761444              /*mask     */ X86_MXCSR_XCPT_MASK,
    13771445              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    1378               /*flags    */ 0 },
     1446              /*flags    */ 0, 0 },
    13791447    /* 1*/{ { /*src2     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    13801448            { /*src1     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
     
    13821450              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    13831451              /*daz,fz,rc*/ 0, 1, X86_MXCSR_RC_NEAREST,
    1384               /*flags    */ 0 },
    1385     /* 2*/{ { /*src2     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    1386             { /*src1     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    1387             { /* =>      */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
     1452              /*flags    */ 0, 0 },
     1453    /* 2*/{ { /*src2     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(1), BS3_FP64_ZERO(1), BS3_FP64_ZERO(0) } },
     1454            { /*src1     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(1), BS3_FP64_ZERO(1), BS3_FP64_ZERO(0) } },
     1455            { /* =>      */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(1), BS3_FP64_ZERO(1), BS3_FP64_ZERO(0) } },
    13881456              /*mask     */ X86_MXCSR_XCPT_MASK,
    13891457              /*daz,fz,rc*/ 1, 0, X86_MXCSR_RC_DOWN,
    1390               /*flags    */ 0 },
    1391     /* 3*/{ { /*src2     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    1392             { /*src1     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    1393             { /* =>      */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
     1458              /*flags    */ 0, 0 },
     1459    /* 3*/{ { /*src2     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(1), BS3_FP64_ZERO(1) } },
     1460            { /*src1     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(1), BS3_FP64_ZERO(1) } },
     1461            { /* =>      */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(1), BS3_FP64_ZERO(1) } },
    13941462              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    13951463              /*daz,fz,rc*/ 1, 1, X86_MXCSR_RC_UP,
    1396               /*flags    */ 0 },
    1397     /* 4*/{ { /*src2     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    1398             { /*src1     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    1399             { /* =>      */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
     1464              /*flags    */ 0, 0 },
     1465    /* 4*/{ { /*src2     */ { BS3_FP64_ZERO(1), BS3_FP64_ZERO(0), BS3_FP64_ZERO(1), BS3_FP64_ZERO(0) } },
     1466            { /*src1     */ { BS3_FP64_ZERO(1), BS3_FP64_ZERO(0), BS3_FP64_ZERO(1), BS3_FP64_ZERO(0) } },
     1467            { /* =>      */ { BS3_FP64_ZERO(1), BS3_FP64_ZERO(0), BS3_FP64_ZERO(1), BS3_FP64_ZERO(0) } },
    14001468              /*mask     */ X86_MXCSR_XCPT_MASK,
    14011469              /*daz,fz,rc*/ 1, 1, X86_MXCSR_RC_ZERO,
    1402               /*flags    */ 0 },
     1470              /*flags    */ 0, 0 },
    14031471    /*
    14041472     * Infinity.
     
    14091477              /*mask     */ ~X86_MXCSR_IM,
    14101478              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    1411               /*flags    */ X86_MXCSR_IE },
     1479              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
    14121480    /* 6*/{ { /*src2     */ { BS3_FP64_ZERO(0), BS3_FP64_INF(1), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    14131481            { /*src1     */ { BS3_FP64_ZERO(0), BS3_FP64_INF(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
     
    14151483              /*mask     */ ~X86_MXCSR_IM,
    14161484              /*daz,fz,rc*/ 0, 1, X86_MXCSR_RC_DOWN,
    1417               /*flags    */ X86_MXCSR_IE },
     1485              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
    14181486    /* 7*/{ { /*src2     */ { BS3_FP64_ZERO(0), BS3_FP64_INF(1), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    14191487            { /*src1     */ { BS3_FP64_ZERO(0), BS3_FP64_INF(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
     
    14211489              /*mask     */ ~X86_MXCSR_IM,
    14221490              /*daz,fz,rc*/ 1, 1, X86_MXCSR_RC_UP,
    1423               /*flags    */ X86_MXCSR_IE },
     1491              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
    14241492    /* 8*/{ { /*src2     */ { BS3_FP64_INF(0),  BS3_FP64_INF(1),  BS3_FP64_ZERO(0), BS3_FP64_INF(1) } },
    14251493            { /*src1     */ { BS3_FP64_INF(1),  BS3_FP64_INF(0),  BS3_FP64_ZERO(0), BS3_FP64_INF(0) } },
     
    14271495              /*mask     */ X86_MXCSR_XCPT_MASK,
    14281496              /*daz,fz,rc*/ 1, 0, X86_MXCSR_RC_ZERO,
    1429               /*flags    */ X86_MXCSR_IE },
     1497              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
    14301498    /*
    14311499     * Overflow, Precision.
     
    14361504              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    14371505              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    1438               /*flags    */ X86_MXCSR_OE },
     1506              /*flags    */ X86_MXCSR_OE, X86_MXCSR_OE },
    14391507    /*10*/{ { /*src2     */ { BS3_FP64_NORMAL_MAX(0), BS3_FP64_NORMAL_MAX(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    14401508            { /*src1     */ { BS3_FP64_NORMAL_MAX(0), BS3_FP64_NORMAL_MAX(1), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
     
    14421510              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    14431511              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    1444               /*flags    */ X86_MXCSR_OE },
     1512              /*flags    */ X86_MXCSR_OE, X86_MXCSR_OE },
    14451513    /*11*/{ { /*src2     */ { BS3_FP64_NORMAL_MAX(0), BS3_FP64_NORMAL_MIN(1), BS3_FP64_ZERO(0), BS3_FP64_NORMAL_MAX(0) } },
    14461514            { /*src1     */ { BS3_FP64_NORMAL_MAX(0), BS3_FP64_NORMAL_MIN(1), BS3_FP64_ZERO(0), BS3_FP64_NORMAL_MAX(0) } },
     
    14481516              /*mask     */ X86_MXCSR_OM | X86_MXCSR_PM,
    14491517              /*daz,fz,rc*/ 1, 1, X86_MXCSR_RC_NEAREST,
    1450               /*flags    */ X86_MXCSR_OE | X86_MXCSR_PE },
     1518              /*flags    */ X86_MXCSR_OE | X86_MXCSR_PE, X86_MXCSR_OE | X86_MXCSR_PE },
    14511519    /*12*/{ { /*src2     */ { BS3_FP64_NORMAL_MIN(1), BS3_FP64_NORMAL_MAX(0), BS3_FP64_NORMAL_MAX(0), BS3_FP64_ZERO(0) } },
    14521520            { /*src1     */ { BS3_FP64_NORMAL_MIN(1), BS3_FP64_NORMAL_MAX(0), BS3_FP64_NORMAL_MAX(1), BS3_FP64_ZERO(0) } },
     
    14541522              /*mask     */ X86_MXCSR_OM | X86_MXCSR_PM,
    14551523              /*daz,fz,rc*/ 1, 1, X86_MXCSR_RC_ZERO,
    1456               /*flags    */ X86_MXCSR_OE | X86_MXCSR_PE },
     1524              /*flags    */ X86_MXCSR_OE | X86_MXCSR_PE, X86_MXCSR_OE | X86_MXCSR_PE },
    14571525    /*13*/{ { /*src2     */ { BS3_FP64_NORMAL_MAX(0), BS3_FP64_NORMAL_MAX(1), BS3_FP64_NORMAL_MAX(1), BS3_FP64_NORMAL_MAX(0) } },
    14581526            { /*src1     */ { BS3_FP64_NORMAL_MAX(0), BS3_FP64_NORMAL_MAX(1), BS3_FP64_NORMAL_MAX(1), BS3_FP64_NORMAL_MAX(0) } },
     
    14601528              /*mask     */ X86_MXCSR_XCPT_MASK,
    14611529              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_ZERO,
    1462               /*flags    */ X86_MXCSR_OE | X86_MXCSR_PE },
     1530              /*flags    */ X86_MXCSR_OE | X86_MXCSR_PE, X86_MXCSR_OE | X86_MXCSR_PE },
    14631531    /*14*/{ { /*src2     */ { BS3_FP64_NORMAL_SAFE_INT_MIN(0),                                                           BS3_FP64_NORMAL_MAX(0), BS3_FP64_ZERO(0), BS3_FP64_NORMAL_SAFE_INT_MAX(1) } },
    14641532            { /*src1     */ { BS3_FP64_NORMAL_SAFE_INT_MAX(0),                                                           BS3_FP64_NORMAL_MAX(1), BS3_FP64_ZERO(0), BS3_FP64_NORMAL_SAFE_INT_MAX(1) } },
     
    14661534              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    14671535              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_ZERO,
    1468               /*flags    */ X86_MXCSR_PE },
     1536              /*flags    */ X86_MXCSR_PE, X86_MXCSR_PE },
    14691537    /*15*/{ { /*src2     */ { BS3_FP64_VAL(0, 0xc000000000000, 0x3ff)/* 1.75*/, BS3_FP64_NORMAL_MAX(0), BS3_FP64_ZERO(0), BS3_FP64_VAL(0, 0,               0x3fd)/*0.25*/ } },
    14701538            { /*src1     */ { BS3_FP64_VAL(1, 0,               0x07d)/*-0.25*/, BS3_FP64_NORMAL_MAX(1), BS3_FP64_ZERO(0), BS3_FP64_VAL(0, 0,               0x3fe)/*0.50*/ } },
     
    14721540              /*mask     */ X86_MXCSR_XCPT_MASK,
    14731541              /*daz,fz,rc*/ 1, 1, X86_MXCSR_RC_DOWN,
    1474               /*flags    */ X86_MXCSR_PE },
     1542              /*flags    */ X86_MXCSR_PE, X86_MXCSR_PE },
    14751543    /*
    14761544     * Normals.
     
    14811549              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    14821550              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    1483               /*flags    */ 0 },
     1551              /*flags    */ 0, 0 },
    14841552    /*17*/{ { /*src2     */ { BS3_FP64_VAL(0, 0,               0x409)/*1024*/, BS3_FP64_VAL(0, 0xb800000000000, 0x404)/*55*/, BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    14851553            { /*src1     */ { BS3_FP64_VAL(0, 0,               0x408)/* 512*/, BS3_FP64_VAL(0, 0xc000000000000, 0x401)/* 7*/, BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
     
    14871555              /*mask     */ X86_MXCSR_XCPT_MASK,
    14881556              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    1489               /*flags    */ 0 },
     1557              /*flags    */ 0, 0 },
    14901558    /*18*/{ { /*src2     */ { BS3_FP64_VAL(0, 0x26580b4800000, 0x41d)/* 1234567890*/, BS3_FP64_VAL(0, 0xd6f3458800000, 0x41c)/*987654321*/, BS3_FP64_ZERO(0), BS3_FP64_VAL(0, 0xcf0033a34f337, 0x432)/*4072598000007579.5*/ } },
    14911559            { /*src1     */ { BS3_FP64_VAL(1, 0x26580b4800000, 0x41d)/*-1234567890*/, BS3_FP64_VAL(1, 0x9000000000000, 0x405)/*     -100*/, BS3_FP64_ZERO(0), BS3_FP64_VAL(0, 0xd6eca42000000, 0x419)/*       123450000.5*/ } },
     
    14931561              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    14941562              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    1495               /*flags    */ 0 },
     1563              /*flags    */ 0, 0 },
    14961564    /*19*/{ { /*src2     */ { BS3_FP64_VAL(0, BS3_FP64_FRACTION_NORMAL_MAX - 1, BS3_FP64_EXP_BIAS + BS3_FP64_FRACTION_BITS), BS3_FP64_NORMAL_SAFE_INT_MAX(0),                                                               BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    14971565            { /*src1     */ { BS3_FP64_ONE(0),                                                                               BS3_FP64_ONE(1),                                                                               BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
     
    14991567              /*mask     */ X86_MXCSR_XCPT_MASK,
    15001568              /*daz,fz,rc*/ 1, 1, X86_MXCSR_RC_ZERO,
    1501               /*flags    */ 0 },
     1569              /*flags    */ 0, 0 },
    15021570    /*20*/{ { /*src2     */ { BS3_FP64_NORMAL_SAFE_INT_MAX(0),                                    BS3_FP64_ONE(1),                                                    BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    15031571            { /*src1     */ { BS3_FP64_ONE(0),                                                    BS3_FP64_NORMAL_SAFE_INT_MAX(1),                                    BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
     
    15051573              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    15061574              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    1507               /*flags    */ 0 },
     1575              /*flags    */ 0, 0 },
    15081576    /*21*/{ { /*src2     */ { BS3_FP64_NORMAL_SAFE_INT_MIN(0), BS3_FP64_ZERO(0),                BS3_FP64_NORMAL_SAFE_INT_MIN(0), BS3_FP64_NORMAL_SAFE_INT_MIN(0) } },
    15091577            { /*src1     */ { BS3_FP64_NORMAL_SAFE_INT_MIN(1), BS3_FP64_NORMAL_SAFE_INT_MIN(1), BS3_FP64_ZERO(0),                BS3_FP64_NORMAL_SAFE_INT_MIN(0) } },
     
    15111579              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    15121580              /*daz,fz,rc*/ 1, 1, X86_MXCSR_RC_ZERO,
    1513               /*flags    */ 0 },
     1581              /*flags    */ 0, 0 },
    15141582    /*22*/{ { /*src2     */ { BS3_FP64_VAL(0, 0xc122186c3cfd0, 0x42d)/*123456789876543.25*/, BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_NORMAL_SAFE_INT_MIN(1) } },
    15151583            { /*src1     */ { BS3_FP64_VAL(0, 0xb88e0395d49b0, 0x42d)/*121098765432102.75*/, BS3_FP64_ZERO(0), BS3_FP64_ZERO(0), BS3_FP64_NORMAL_SAFE_INT_MIN(1) } },
     
    15171585              /*mask     */ X86_MXCSR_XCPT_MASK,
    15181586              /*daz,fz,rc*/ 1, 1, X86_MXCSR_RC_DOWN,
    1519               /*flags    */ 0 },
     1587              /*flags    */ 0, 0 },
    15201588    /*
    15211589     * Denormals.
     
    15261594              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    15271595              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    1528               /*flags    */ X86_MXCSR_DE },
     1596              /*flags    */ X86_MXCSR_DE, X86_MXCSR_DE },
    15291597    /*24*/{ { /*src2     */ { BS3_FP64_ZERO(0), BS3_FP64_ZERO(0),         BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
    15301598            { /*src1     */ { BS3_FP64_ZERO(0), BS3_FP64_DENORMAL_MAX(0), BS3_FP64_ZERO(0), BS3_FP64_ZERO(0) } },
     
    15321600              /*mask     */ X86_MXCSR_XCPT_MASK,
    15331601              /*daz,fz,rc*/ 1, 0, X86_MXCSR_RC_NEAREST,
    1534               /*flags    */ 0 },
     1602              /*flags    */ 0, 0 },
    15351603    /*25*/{ { /*src2     */ { BS3_FP64_DENORMAL_MIN(0), BS3_FP64_DENORMAL_MIN(0), BS3_FP64_DENORMAL_MAX(0), BS3_FP64_DENORMAL_MAX(0) } },
    15361604            { /*src1     */ { BS3_FP64_DENORMAL_MAX(0), BS3_FP64_DENORMAL_MIN(0), BS3_FP64_DENORMAL_MAX(0), BS3_FP64_DENORMAL_MIN(0) } },
    1537             { /* =>      */ { BS3_FP64_ZERO(0),         BS3_FP64_DENORMAL_MIN(0),         BS3_FP64_ZERO(0),         BS3_FP64_ZERO(0) } },
     1605            { /* =>      */ { BS3_FP64_ZERO(0),         BS3_FP64_ZERO(0),         BS3_FP64_ZERO(0),         BS3_FP64_ZERO(0)        } },
    15381606              /*mask     */ X86_MXCSR_XCPT_MASK,
    15391607              /*daz,fz,rc*/ 1, 1, X86_MXCSR_RC_UP,
    1540               /*flags    */ 0 },
     1608              /*flags    */ 0, 0 },
     1609    /** @todo More denormals; Underflow, Precision; Rounding, FZ etc. */
    15411610    };
    15421611
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