VirtualBox

Changeset 106234 in vbox for trunk


Ignore:
Timestamp:
Oct 8, 2024 10:57:34 AM (6 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165023
Message:

ValidationKit/bootsectors: bugref:10658 SIMD FP testcase: [v]rcpss - zeroes.

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

Legend:

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

    r106184 r106234  
    631631
    632632;
     633;; [v]rcpps
     634;
     635EMIT_INSTR_PLUS_ICEBP       rcpps, XMM1, XMM2
     636EMIT_INSTR_PLUS_ICEBP       rcpps, XMM1, FSxBX
     637EMIT_INSTR_PLUS_ICEBP_C64   rcpps, XMM8, XMM9
     638EMIT_INSTR_PLUS_ICEBP_C64   rcpps, XMM8, FSxBX
     639
     640EMIT_INSTR_PLUS_ICEBP       vrcpps, XMM1, XMM2
     641EMIT_INSTR_PLUS_ICEBP       vrcpps, XMM1, FSxBX
     642EMIT_INSTR_PLUS_ICEBP_C64   vrcpps, XMM8, XMM9
     643EMIT_INSTR_PLUS_ICEBP_C64   vrcpps, XMM8, FSxBX
     644
     645EMIT_INSTR_PLUS_ICEBP       vrcpps, YMM1, YMM2
     646EMIT_INSTR_PLUS_ICEBP       vrcpps, YMM1, FSxBX
     647EMIT_INSTR_PLUS_ICEBP_C64   vrcpps, YMM8, YMM9
     648EMIT_INSTR_PLUS_ICEBP_C64   vrcpps, YMM8, FSxBX
     649
     650;
     651;; [v]rcpss
     652;
     653EMIT_INSTR_PLUS_ICEBP       rcpss, XMM1, XMM2
     654EMIT_INSTR_PLUS_ICEBP       rcpss, XMM1, FSxBX
     655
     656EMIT_INSTR_PLUS_ICEBP       vrcpss, XMM1,  XMM2,  XMM3
     657EMIT_INSTR_PLUS_ICEBP       vrcpss, XMM1,  XMM2,  FSxBX
     658EMIT_INSTR_PLUS_ICEBP_C64   vrcpss, XMM13, XMM14, XMM15
     659EMIT_INSTR_PLUS_ICEBP_C64   vrcpss, XMM13, XMM14, FSxBX
     660
     661;
    633662;; [v]sqrtps
    634663;
     
    666695EMIT_INSTR_PLUS_ICEBP_C64   vsqrtpd, YMM8, FSxBX
    667696
    668 ;
    669 ;; [v]rcpps
    670 ;
    671 EMIT_INSTR_PLUS_ICEBP       rcpps, XMM1, XMM2
    672 EMIT_INSTR_PLUS_ICEBP       rcpps, XMM1, FSxBX
    673 EMIT_INSTR_PLUS_ICEBP_C64   rcpps, XMM8, XMM9
    674 EMIT_INSTR_PLUS_ICEBP_C64   rcpps, XMM8, FSxBX
    675 
    676 EMIT_INSTR_PLUS_ICEBP       vrcpps, XMM1, XMM2
    677 EMIT_INSTR_PLUS_ICEBP       vrcpps, XMM1, FSxBX
    678 EMIT_INSTR_PLUS_ICEBP_C64   vrcpps, XMM8, XMM9
    679 EMIT_INSTR_PLUS_ICEBP_C64   vrcpps, XMM8, FSxBX
    680 
    681 EMIT_INSTR_PLUS_ICEBP       vrcpps, YMM1, YMM2
    682 EMIT_INSTR_PLUS_ICEBP       vrcpps, YMM1, FSxBX
    683 EMIT_INSTR_PLUS_ICEBP_C64   vrcpps, YMM8, YMM9
    684 EMIT_INSTR_PLUS_ICEBP_C64   vrcpps, YMM8, FSxBX
    685 
    686697%endif ; BS3_INSTANTIATING_CMN
    687698
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r106233 r106234  
    688688    { 0, 0,  0,  1,      1,       1,         1,   1,       0,        0,      0,      X86_XCPT_GP, X86_XCPT_DB }, /* #10 */
    689689    { 0, 0,  0,  1,      1,       1,         1,   1,       0,        1,      0,      X86_XCPT_GP, X86_XCPT_DB }, /* #11 */
     690    { 0, 0,  0,  1,      1,       1,         1,   1,       1,        1,      0,      X86_XCPT_DB, X86_XCPT_DB }, /* #12 */
     691    /* AMD only: */
     692    { 0, 0,  0,  1,      1,       1,         1,   1,       0,        0,      1,      X86_XCPT_DB, X86_XCPT_GP }, /* #13 */
     693    { 0, 0,  0,  1,      1,       1,         1,   1,       1,        1,      1,      X86_XCPT_AC, X86_XCPT_GP }, /* #14 */
     694};
     695
     696/** Exceptions type 5 (<16 byte memory arguments and not floating-point exceptions). */
     697static const BS3CPUINSTR4_CONFIG_T g_aXcptConfig5[] =
     698{
     699/*
     700 *   X87 SSE SSE SSE     AVX      SSE        AVX  AVX      SSE       AVX     AMD/SSE <-- applies to
     701 *                               +AVX       +AVX +AMD/SSE           +AMD/SSE
     702 *   CR0 CR0 CR0 CR4     CR4      CR4        XCR0 XCR0                       MXCSR
     703 *   MP, EM, TS, OSFXSR, OSXSAVE, OSXMMEXCPT SSE, AVX,     fAligned, AC/AM,  MM,     bXcptSse,    bXcptAvx */
     704    { 0, 0,  0,  1,      1,       1,         1,   1,       1,        0,      0,      X86_XCPT_DB, X86_XCPT_DB }, /* #0 */
     705    { 0, 0,  0,  1,      1,       0,         1,   1,       1,        0,      0,      X86_XCPT_DB, X86_XCPT_DB }, /* #1 */
     706    { 1, 0,  0,  1,      1,       1,         1,   1,       1,        0,      0,      X86_XCPT_DB, X86_XCPT_DB }, /* #2 */
     707    { 0, 1,  0,  1,      1,       1,         1,   1,       1,        0,      0,      X86_XCPT_UD, X86_XCPT_DB }, /* #3 */
     708    { 0, 0,  1,  1,      1,       1,         1,   1,       1,        0,      0,      X86_XCPT_NM, X86_XCPT_NM }, /* #4 */
     709    { 0, 1,  1,  1,      1,       1,         1,   1,       1,        0,      0,      X86_XCPT_UD, X86_XCPT_NM }, /* #5 */
     710    { 0, 0,  0,  0,      1,       1,         1,   1,       1,        0,      0,      X86_XCPT_UD, X86_XCPT_DB }, /* #6 */
     711    { 0, 0,  0,  1,      0,       1,         1,   1,       1,        0,      0,      X86_XCPT_DB, X86_XCPT_UD }, /* #7 */
     712    { 0, 0,  0,  1,      1,       1,         1,   0,       1,        0,      0,      X86_XCPT_DB, X86_XCPT_UD }, /* #8 */
     713    { 0, 0,  0,  1,      1,       1,         0,   0,       1,        0,      0,      X86_XCPT_DB, X86_XCPT_UD }, /* #9 */
     714    /* Memory misalignment and alignment checks: */
     715    { 0, 0,  0,  1,      1,       1,         1,   1,       0,        0,      0,      X86_XCPT_DB, X86_XCPT_DB }, /* #10 */
     716    { 0, 0,  0,  1,      1,       1,         1,   1,       0,        1,      0,      X86_XCPT_AC, X86_XCPT_AC }, /* #11 */
    690717    { 0, 0,  0,  1,      1,       1,         1,   1,       1,        1,      0,      X86_XCPT_DB, X86_XCPT_DB }, /* #12 */
    691718    /* AMD only: */
     
    1322713254
    1322813255/*
     13256 * [V]RCPSS.
     13257 */
     13258BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_rcpss(uint8_t bMode)
     13259{
     13260    static BS3CPUINSTR4_TEST1_VALUES_SS_T const s_aValues[] =
     13261    {
     13262    /*
     13263     * Zero.
     13264     */
     13265    /* 0*/{ { /*src1     */ { FP32_0(0),   FP32_RAND_x7_V7 } },
     13266            { /*src2     */ { FP32_0(0),   FP32_RAND_x7_V2 } },
     13267            { /* =>      */ { FP32_INF(0), FP32_RAND_x7_V2 } },
     13268              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     13269              /*128:out  */ X86_MXCSR_XCPT_MASK,
     13270              /*256:out  */ -1,
     13271              /*xcpt?    */ false, false },
     13272          { { /*src1     */ { FP32_0(1),   FP32_RAND_x7_V0 } },
     13273            { /*src2     */ { FP32_0(1),   FP32_RAND_x7_V1 } },
     13274            { /* =>      */ { FP32_INF(1), FP32_RAND_x7_V1 } },
     13275              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     13276              /*128:out  */ X86_MXCSR_XCPT_MASK,
     13277              /*256:out  */ -1,
     13278              /*xcpt?    */ false, false },
     13279          { { /*src1     */ { FP32_0(1),   FP32_RAND_x7_V2 } },
     13280            { /*src2     */ { FP32_0(1),   FP32_RAND_x7_V1 } },
     13281            { /* =>      */ { FP32_INF(1), FP32_RAND_x7_V1 } },
     13282              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     13283              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     13284              /*256:out  */ -1,
     13285              /*xcpt?    */ false, false },
     13286          { { /*src1     */ { FP32_0(1),   FP32_RAND_x7_V0 } },
     13287            { /*src2     */ { FP32_0(1),   FP32_RAND_x7_V3 } },
     13288            { /* =>      */ { FP32_INF(1), FP32_RAND_x7_V3 } },
     13289              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     13290              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     13291              /*256:out  */ -1,
     13292              /*xcpt?    */ false, false },
     13293          { { /*src1     */ { FP32_0(1),   FP32_RAND_x7_V0 } },
     13294            { /*src2     */ { FP32_0(1),   FP32_RAND_x7_V3 } },
     13295            { /* =>      */ { FP32_INF(1), FP32_RAND_x7_V3 } },
     13296              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     13297              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     13298              /*256:out  */ -1,
     13299              /*xcpt?    */ false, false },
     13300          { { /*src1     */ { FP32_0(0),   FP32_RAND_x7_V0 } },
     13301            { /*src2     */ { FP32_0(0),   FP32_RAND_x7_V3 } },
     13302            { /* =>      */ { FP32_INF(0), FP32_RAND_x7_V3 } },
     13303              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     13304              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     13305              /*256:out  */ -1,
     13306              /*xcpt?    */ false, false },
     13307    };
     13308
     13309#define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues
     13310    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     13311    {
     13312        { bs3CpuInstr4_rcpss_XMM1_XMM2_icebp_c16,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
     13313        { bs3CpuInstr4_rcpss_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
     13314
     13315        { bs3CpuInstr4_vrcpss_XMM1_XMM2_XMM3_icebp_c16,  X86_XCPT_AC, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     13316        { bs3CpuInstr4_vrcpss_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     13317    };
     13318    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     13319    {
     13320        { bs3CpuInstr4_rcpss_XMM1_XMM2_icebp_c32,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
     13321        { bs3CpuInstr4_rcpss_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
     13322
     13323        { bs3CpuInstr4_vrcpss_XMM1_XMM2_XMM3_icebp_c32,  X86_XCPT_AC, RM_REG, T_AVX_128, 1,  2, 3,   PASS_s_aValues },
     13324        { bs3CpuInstr4_vrcpss_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_AC, RM_MEM, T_AVX_128, 1,  2, 255, PASS_s_aValues },
     13325    };
     13326    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     13327    {
     13328        { bs3CpuInstr4_rcpss_XMM1_XMM2_icebp_c64,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
     13329        { bs3CpuInstr4_rcpss_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
     13330
     13331        { bs3CpuInstr4_vrcpss_XMM1_XMM2_XMM3_icebp_c64,  X86_XCPT_AC, RM_REG, T_AVX_128, 1,  2, 3,   PASS_s_aValues },
     13332        { bs3CpuInstr4_vrcpss_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 1,  2, 255, PASS_s_aValues },
     13333
     13334        { bs3CpuInstr4_vrcpss_XMM13_XMM14_XMM15_icebp_c64, X86_XCPT_AC, RM_REG, T_AVX_128, 13, 14, 15,  PASS_s_aValues },
     13335        { bs3CpuInstr4_vrcpss_XMM13_XMM14_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 13, 14, 255, PASS_s_aValues },
     13336    };
     13337#undef PASS_s_aValues
     13338
     13339    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     13340    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     13341    return bs3CpuInstr4_WorkerTestType1A(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     13342                                         g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5));
     13343}
     13344
     13345
     13346/*
    1322913347 * [V]SQRTPS.
    1323013348 */
     
    1382813946        { "[v]minsd",       bs3CpuInstr4_v_minsd,    0 },
    1382913947        { "[v]rcpps",       bs3CpuInstr4_v_rcpps,    0 },
     13948        { "[v]rcpss",       bs3CpuInstr4_v_rcpss,    0 },
    1383013949        { "[v]sqrtps",      bs3CpuInstr4_v_sqrtps,   0 },
    1383113950        { "[v]sqrtpd",      bs3CpuInstr4_v_sqrtpd,   0 },
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