VirtualBox

Changeset 105397 in vbox for trunk/src/VBox/ValidationKit


Ignore:
Timestamp:
Jul 18, 2024 9:35:43 AM (9 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
164050
Message:

ValidationKit/bootsectors: bugref:10658 SIMD FP testcase: [v]addpd (IE).

File:
1 edited

Legend:

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

    r105396 r105397  
    199199 * Exponent - 11 bits, least significant bit MBZ.
    200200 */
    201 #define FP64_NORM_V0(a_Sign)                RTFLOAT64U_INIT_C(a_Sign, 0xacc01adec0de5, 0x30c)
    202 #define FP64_NORM_V1(a_Sign)                RTFLOAT64U_INIT_C(a_Sign, 0xf10a7ab1ec01a, 0x4bc)
    203 #define FP64_NORM_V2(a_Sign)                RTFLOAT64U_INIT_C(a_Sign, 0xca5cadea1b1ed, 0x3ae)
    204 #define FP64_NORM_V3(a_Sign)                RTFLOAT64U_INIT_C(a_Sign, 0xb5b5b5b5b5b5b, 0x7fe)
     201#define FP64_FRAC_V0                        0xacc01adec0de5
     202#define FP64_FRAC_V1                        0xf10a7ab1ec01a
     203#define FP64_FRAC_V2                        0xca5cadea1b1ed
     204#define FP64_FRAC_V3                        0xb5b5b5b5b5b5b
     205#define FP64_EXP_V0                         0x30c
     206#define FP64_EXP_V1                         0x4bc
     207#define FP64_EXP_V2                         0x3ae
     208#define FP64_EXP_V3                         0x7fe
     209AssertCompile(!(FP64_EXP_V0 & RT_BIT(0)));
     210AssertCompile(!(FP64_EXP_V1 & RT_BIT(0)));
     211AssertCompile(!(FP64_EXP_V2 & RT_BIT(0)));
     212AssertCompile(!(FP64_EXP_V3 & RT_BIT(0)));
     213#define FP64_NORM_V0(a_Sign)                RTFLOAT64U_INIT_C(a_Sign, FP64_FRAC_V0, FP64_EXP_V0)
     214#define FP64_NORM_V1(a_Sign)                RTFLOAT64U_INIT_C(a_Sign, FP64_FRAC_V1, FP64_EXP_V1)
     215#define FP64_NORM_V2(a_Sign)                RTFLOAT64U_INIT_C(a_Sign, FP64_FRAC_V2, FP64_EXP_V2)
     216#define FP64_NORM_V3(a_Sign)                RTFLOAT64U_INIT_C(a_Sign, FP64_FRAC_V3, FP64_EXP_V3)
    205217/* The maximum integer value (all 52 + 1 implied bit of the fraction part set) without losing precision. */
    206218#define FP64_NORM_SAFE_INT_MAX(a_Sign)      RTFLOAT64U_INIT_C(a_Sign, FP64_FRAC_NORM_MAX, FP64_EXP_SAFE_INT_MAX)
     
    19871999              /*flags    */ 0, 0 },
    19882000    /** @todo More denormals; Underflow, Precision; Rounding, FZ etc. */
     2001    /*
     2002     * Invalids.
     2003     */
     2004    /*27*/{ { /*src2     */ { FP64_QNAN(0), FP64_QNAN_V(0, FP64_FRAC_NORM_MAX), FP64_QNAN_V(0, FP64_FRAC_V0)       } },
     2005            { /*src1     */ { FP64_QNAN(0), FP64_QNAN_V(0, FP64_FRAC_NORM_MIN), FP64_QNAN_V(0, FP64_FRAC_NORM_MAX) } },
     2006            { /* =>      */ { FP64_QNAN(0), FP64_QNAN_V(0, FP64_FRAC_NORM_MIN), FP64_QNAN_V(0, FP64_FRAC_NORM_MAX) } },
     2007              /*mask     */ X86_MXCSR_XCPT_MASK,
     2008              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
     2009              /*flags    */ 0, 0 },
     2010          { { /*src2     */ { FP64_QNAN(0),      FP64_QNAN_V(0, FP64_FRAC_NORM_MAX), FP64_QNAN_V(0, FP64_FRAC_V0),      } },
     2011            { /*src1     */ { FP64_SNAN(0),      FP64_SNAN_V(0, FP64_FRAC_NORM_MIN), FP64_SNAN_V(0, FP64_FRAC_NORM_MAX) } },
     2012            { /* =>      */ { FP64_QNAN_V(0, 1), FP64_QNAN_V(0, 1),                  FP64_QNAN_V(0, FP64_FRAC_NORM_MAX) } },
     2013              /*mask     */ X86_MXCSR_XCPT_MASK,
     2014              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
     2015              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
     2016          { { /*src2     */ { FP64_SNAN(0), FP64_SNAN_V(0, FP64_FRAC_NORM_MIN), FP64_SNAN_V(0, FP64_FRAC_V0), FP64_SNAN_V(0, FP64_FRAC_V1) } },
     2017            { /*src1     */ { FP64_QNAN(0), FP64_QNAN_V(0, FP64_FRAC_NORM_MAX), FP64_QNAN_V(0, FP64_FRAC_V2), FP64_QNAN_V(0, FP64_FRAC_V3) } },
     2018            { /* =>      */ { FP64_QNAN(0), FP64_QNAN_V(0, FP64_FRAC_NORM_MAX), FP64_QNAN_V(0, FP64_FRAC_V2), FP64_QNAN_V(0, FP64_FRAC_V3) } },
     2019              /*mask     */ X86_MXCSR_XCPT_MASK,
     2020              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
     2021              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
     2022          { { /*src2     */ { FP64_SNAN(0),      FP64_SNAN_V(0, FP64_FRAC_NORM_MIN), FP64_SNAN_V(0, FP64_FRAC_V1), FP64_SNAN_V(0, FP64_FRAC_V2) } },
     2023            { /*src1     */ { FP64_SNAN(0),      FP64_SNAN_V(0, FP64_FRAC_NORM_MAX), FP64_SNAN_V(0, FP64_FRAC_V3), FP64_SNAN_V(0, FP64_FRAC_V0) } },
     2024            { /* =>      */ { FP64_QNAN_V(0, 1), FP64_QNAN_V(0, FP64_FRAC_NORM_MAX), FP64_QNAN_V(0, FP64_FRAC_V3), FP64_QNAN_V(0, FP64_FRAC_V0) } },
     2025              /*mask     */ X86_MXCSR_XCPT_MASK,
     2026              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
     2027              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
     2028          { { /*src2     */ { FP64_QNAN(0), FP64_QNAN_V(1, FP64_FRAC_NORM_MAX), FP64_NORM_V0(1),              FP64_QNAN_V(0, FP64_FRAC_V1) } },
     2029            { /*src1     */ { FP64_1(0),    FP64_1(1),                          FP64_QNAN_V(1, FP64_FRAC_V0), FP64_NORM_V2(1)              } },
     2030            { /* =>      */ { FP64_QNAN(0), FP64_QNAN_V(1, FP64_FRAC_NORM_MAX), FP64_QNAN_V(1, FP64_FRAC_V0), FP64_QNAN_V(0, FP64_FRAC_V1) } },
     2031              /*mask     */ X86_MXCSR_XCPT_MASK,
     2032              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
     2033              /*flags    */ 0, 0 },
     2034          { { /*src2     */ { FP64_SNAN(1),      FP64_SNAN_V(1, FP64_FRAC_NORM_MAX), FP64_NORM_V0(1),              FP64_SNAN_V(0, FP64_FRAC_V1) } },
     2035            { /*src1     */ { FP64_1(0),         FP64_1(0),                          FP64_SNAN_V(1, FP64_FRAC_V0), FP64_NORM_V2(1)              } },
     2036            { /* =>      */ { FP64_QNAN_V(1, 1), FP64_QNAN_V(1, FP64_FRAC_NORM_MAX), FP64_QNAN_V(1, FP64_FRAC_V0), FP64_QNAN_V(0, FP64_FRAC_V1) } },
     2037              /*mask     */ X86_MXCSR_XCPT_MASK,
     2038              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
     2039              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
     2040          { { /*src2     */ { FP64_QNAN(0), FP64_QNAN_V(0, FP64_FRAC_NORM_MAX), FP64_QNAN_V(0, FP64_FRAC_V0)       } },
     2041            { /*src1     */ { FP64_QNAN(0), FP64_QNAN_V(0, FP64_FRAC_NORM_MIN), FP64_QNAN_V(0, FP64_FRAC_NORM_MAX) } },
     2042            { /* =>      */ { FP64_QNAN(0), FP64_QNAN_V(0, FP64_FRAC_NORM_MIN), FP64_QNAN_V(0, FP64_FRAC_NORM_MAX) } },
     2043              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     2044              /*daz,fz,rc*/ 0, X86_MXCSR_FZ, X86_MXCSR_RC_DOWN,
     2045              /*flags    */ 0, 0 },
     2046          { { /*src2     */ { FP64_QNAN(0),      FP64_QNAN_V(0, FP64_FRAC_NORM_MAX), FP64_QNAN_V(0, FP64_FRAC_V0),       FP64_QNAN_V(0, FP32_FRAC_V1) } },
     2047            { /*src1     */ { FP64_SNAN(0),      FP64_SNAN_V(0, FP64_FRAC_NORM_MIN), FP64_SNAN_V(0, FP64_FRAC_NORM_MAX), FP64_SNAN_V(0, FP32_FRAC_V2) } },
     2048            { /* =>      */ { FP64_QNAN_V(0, 1), FP64_QNAN_V(0, 1),                  FP64_QNAN_V(0, FP64_FRAC_NORM_MAX), FP64_QNAN_V(0, FP32_FRAC_V2) } },
     2049              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     2050              /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
     2051              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
     2052          { { /*src2     */ { FP64_SNAN(0), FP64_SNAN_V(0, FP64_FRAC_NORM_MIN), FP64_SNAN_V(0, FP64_FRAC_V1), FP64_SNAN_V(0, FP64_FRAC_V1) } },
     2053            { /*src1     */ { FP64_QNAN(0), FP64_QNAN_V(0, FP64_FRAC_NORM_MAX), FP64_QNAN_V(0, FP64_FRAC_V3), FP64_QNAN_V(0, FP64_FRAC_V2) } },
     2054            { /* =>      */ { FP64_QNAN(0), FP64_QNAN_V(0, FP64_FRAC_NORM_MAX), FP64_QNAN_V(0, FP64_FRAC_V3), FP64_QNAN_V(0, FP64_FRAC_V2) } },
     2055              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     2056              /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
     2057              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
     2058          { { /*src2     */ { FP64_SNAN(0),      FP64_SNAN_V(0, FP64_FRAC_NORM_MIN), FP64_SNAN_V(0, FP64_FRAC_V1), FP64_SNAN_V(0, FP64_FRAC_V2) } },
     2059            { /*src1     */ { FP64_SNAN(0),      FP64_SNAN_V(0, FP64_FRAC_NORM_MAX), FP64_SNAN_V(0, FP64_FRAC_V0), FP64_SNAN_V(0, FP64_FRAC_V3) } },
     2060            { /* =>      */ { FP64_QNAN_V(0, 1), FP64_QNAN_V(0, FP64_FRAC_NORM_MAX), FP64_QNAN_V(0, FP64_FRAC_V0), FP64_QNAN_V(0, FP64_FRAC_V3) } },
     2061              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     2062              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_UP,
     2063              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
     2064          { { /*src2     */ { FP64_QNAN(0), FP64_QNAN_V(1, FP64_FRAC_NORM_MAX), FP64_NORM_V0(1),              FP64_QNAN_V(0, FP64_FRAC_V1) } },
     2065            { /*src1     */ { FP64_1(0),    FP64_1(1),                          FP64_QNAN_V(1, FP64_FRAC_V3), FP64_NORM_V2(1)              } },
     2066            { /* =>      */ { FP64_QNAN(0), FP64_QNAN_V(1, FP64_FRAC_NORM_MAX), FP64_QNAN_V(1, FP64_FRAC_V3), FP64_QNAN_V(0, FP64_FRAC_V1) } },
     2067              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     2068              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_DOWN,
     2069              /*flags    */ 0, 0 },
     2070          { { /*src2     */ { FP64_SNAN(1),      FP64_SNAN_V(1, FP64_FRAC_NORM_MAX), FP64_NORM_V0(1),              FP64_SNAN_V(0, FP64_FRAC_V2) } },
     2071            { /*src1     */ { FP64_1(0),         FP64_1(0),                          FP64_SNAN_V(1, FP64_FRAC_V3), FP64_NORM_V2(1)              } },
     2072            { /* =>      */ { FP64_QNAN_V(1, 1), FP64_QNAN_V(1, FP64_FRAC_NORM_MAX), FP64_QNAN_V(1, FP64_FRAC_V3), FP64_QNAN_V(0, FP64_FRAC_V2) } },
     2073              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     2074              /*daz,fz,rc*/ X86_MXCSR_DAZ, 0, X86_MXCSR_RC_ZERO,
     2075              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
    19892076    };
    19902077
Note: See TracChangeset for help on using the changeset viewer.

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