VirtualBox

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


Ignore:
Timestamp:
Jul 16, 2024 7:43:59 AM (7 months ago)
Author:
vboxsync
Message:

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

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

Legend:

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

    r105287 r105334  
    302302EMIT_INSTR_PLUS_ICEBP_C64   vmulpd, YMM8, YMM9, FSxBX
    303303
     304;
     305;; [v]mulss
     306;
     307EMIT_INSTR_PLUS_ICEBP       mulss, XMM1, XMM2
     308EMIT_INSTR_PLUS_ICEBP       mulss, XMM1, FSxBX
     309EMIT_INSTR_PLUS_ICEBP_C64   mulss, XMM8, XMM9
     310EMIT_INSTR_PLUS_ICEBP_C64   mulss, XMM8, FSxBX
     311
     312EMIT_INSTR_PLUS_ICEBP       vmulss, XMM1, XMM2, XMM3
     313EMIT_INSTR_PLUS_ICEBP       vmulss, XMM1, XMM2, FSxBX
     314EMIT_INSTR_PLUS_ICEBP_C64   vmulss, XMM8, XMM9, XMM10
     315EMIT_INSTR_PLUS_ICEBP_C64   vmulss, XMM8, XMM9, FSxBX
     316
    304317%endif ; BS3_INSTANTIATING_CMN
    305318
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r105323 r105334  
    37073707              /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_DOWN,
    37083708              /*flags    */ X86_MXCSR_OE | X86_MXCSR_PE, X86_MXCSR_OE | X86_MXCSR_PE },
     3709    /** @todo Underflow, Precision; Rounding, FZ etc. */
    37093710    };
    37103711
     
    37533754    return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    37543755                                        g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));
     3756}
     3757
     3758
     3759/*
     3760 * [V]MULSS.
     3761 */
     3762BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_mulss(uint8_t bMode)
     3763{
     3764    static BS3CPUINSTR4_TEST1_VALUES_SS_T const s_aValues[] =
     3765    {
     3766    /*
     3767     * Zero.
     3768     */
     3769    /* 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) } },
     3770            { /*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) } },
     3771            { /* =>      */ { 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) } },
     3772              /*mask     */ X86_MXCSR_XCPT_MASK,
     3773              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
     3774              /*flags    */ 0, 0 },
     3775          { { /*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) } },
     3776            { /*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) } },
     3777            { /* =>      */ { 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) } },
     3778              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     3779              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
     3780              /*flags    */ 0, 0 },
     3781          { { /*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) } },
     3782            { /*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) } },
     3783            { /* =>      */ { 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) } },
     3784              /*mask     */ X86_MXCSR_XCPT_MASK,
     3785              /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
     3786              /*flags    */ 0, 0 },
     3787          { { /*src2     */ { BS3_FP32_ZERO(0), BS3_FP32_NORMAL_VAL_7(0), BS3_FP32_NORMAL_VAL_6(0), BS3_FP32_ZERO(0),         BS3_FP32_ZERO(1),         BS3_FP32_NORMAL_VAL_3(0), BS3_FP32_ZERO(0),         BS3_FP32_ZERO(0)         } },
     3788            { /*src1     */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(1),         BS3_FP32_ZERO(1),         BS3_FP32_NORMAL_VAL_2(0), BS3_FP32_NORMAL_VAL_3(1), BS3_FP32_ZERO(0),         BS3_FP32_NORMAL_VAL_6(0), BS3_FP32_NORMAL_VAL_2(0) } },
     3789            { /* =>      */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(1),         BS3_FP32_ZERO(1),         BS3_FP32_NORMAL_VAL_2(0), BS3_FP32_NORMAL_VAL_3(0), BS3_FP32_ZERO(0),         BS3_FP32_NORMAL_VAL_6(0), BS3_FP32_NORMAL_VAL_2(0) } },
     3790              /*mask     */ X86_MXCSR_XCPT_MASK,
     3791              /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_DOWN,
     3792              /*flags    */ 0, 0 },
     3793          { { /*src2     */ { BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_RAND_VAL_6(0), BS3_FP32_RAND_VAL_5(1), BS3_FP32_RAND_VAL_4(1), BS3_FP32_RAND_VAL_3(0), BS3_FP32_RAND_VAL_2(1), BS3_FP32_RAND_VAL_1(1) } },
     3794            { /*src1     */ { BS3_FP32_ZERO(1), BS3_FP32_ZERO(0), BS3_FP32_RAND_VAL_1(0), BS3_FP32_RAND_VAL_2(1), BS3_FP32_RAND_VAL_3(0), BS3_FP32_RAND_VAL_4(1), BS3_FP32_RAND_VAL_5(1), BS3_FP32_RAND_VAL_6(0) } },
     3795            { /* =>      */ { BS3_FP32_ZERO(0), BS3_FP32_ZERO(0), BS3_FP32_RAND_VAL_1(0), BS3_FP32_RAND_VAL_2(1), BS3_FP32_RAND_VAL_3(0), BS3_FP32_RAND_VAL_4(1), BS3_FP32_RAND_VAL_5(1), BS3_FP32_RAND_VAL_6(0) } },
     3796              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     3797              /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_UP,
     3798              /*flags    */ 0, 0 },
     3799          { { /*src2     */ { BS3_FP32_ZERO(1), BS3_FP32_RAND_VAL_0(0), BS3_FP32_RAND_VAL_1(0), BS3_FP32_RAND_VAL_2(1), BS3_FP32_RAND_VAL_3(1), BS3_FP32_RAND_VAL_4(0), BS3_FP32_RAND_VAL_5(1), BS3_FP32_RAND_VAL_6(1) } },
     3800            { /*src1     */ { BS3_FP32_ZERO(0), BS3_FP32_RAND_VAL_7(1), BS3_FP32_RAND_VAL_6(0), BS3_FP32_RAND_VAL_5(0), BS3_FP32_RAND_VAL_4(1), BS3_FP32_RAND_VAL_3(0), BS3_FP32_RAND_VAL_2(0), BS3_FP32_RAND_VAL_1(1) } },
     3801            { /* =>      */ { BS3_FP32_ZERO(1), BS3_FP32_RAND_VAL_7(1), BS3_FP32_RAND_VAL_6(0), BS3_FP32_RAND_VAL_5(0), BS3_FP32_RAND_VAL_4(1), BS3_FP32_RAND_VAL_3(0), BS3_FP32_RAND_VAL_2(0), BS3_FP32_RAND_VAL_1(1) } },
     3802              /*mask     */ ~X86_MXCSR_XCPT_MASK,
     3803              /*daz,fz,rc*/ X86_MXCSR_DAZ, 0, X86_MXCSR_RC_ZERO,
     3804              /*flags    */ 0, 0 },
     3805          { { /*src2     */ { BS3_FP32_ZERO(0), BS3_FP32_RAND_VAL_0(0), BS3_FP32_RAND_VAL_1(0), BS3_FP32_RAND_VAL_2(1), BS3_FP32_RAND_VAL_3(1), BS3_FP32_RAND_VAL_4(0), BS3_FP32_RAND_VAL_5(1), BS3_FP32_RAND_VAL_6(1) } },
     3806            { /*src1     */ { BS3_FP32_ZERO(1), BS3_FP32_RAND_VAL_6(1), BS3_FP32_RAND_VAL_3(0), BS3_FP32_RAND_VAL_0(0), BS3_FP32_RAND_VAL_1(1), BS3_FP32_RAND_VAL_3(0), BS3_FP32_RAND_VAL_0(0), BS3_FP32_RAND_VAL_3(1) } },
     3807            { /* =>      */ { BS3_FP32_ZERO(1), BS3_FP32_RAND_VAL_6(1), BS3_FP32_RAND_VAL_3(0), BS3_FP32_RAND_VAL_0(0), BS3_FP32_RAND_VAL_1(1), BS3_FP32_RAND_VAL_3(0), BS3_FP32_RAND_VAL_0(0), BS3_FP32_RAND_VAL_3(1) } },
     3808              /*mask     */ X86_MXCSR_XCPT_MASK,
     3809              /*daz,fz,rc*/ X86_MXCSR_DAZ, 0, X86_MXCSR_RC_NEAREST,
     3810              /*flags    */ 0, 0 },
     3811    };
     3812
     3813    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     3814    {
     3815        { bs3CpuInstr4_mulss_XMM1_XMM2_icebp_c16,  255, RM_REG, T_SSE, 1, 1, 2,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3816        { bs3CpuInstr4_mulss_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE, 1, 1, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3817
     3818        { bs3CpuInstr4_vmulss_XMM1_XMM2_XMM3_icebp_c16,  255,         RM_REG, T_AVX_128, 1, 2, 3,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3819        { bs3CpuInstr4_vmulss_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3820    };
     3821    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     3822    {
     3823        { bs3CpuInstr4_mulss_XMM1_XMM2_icebp_c32,  255, RM_REG, T_SSE, 1, 1, 2,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3824        { bs3CpuInstr4_mulss_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE, 1, 1, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3825
     3826        { bs3CpuInstr4_vmulss_XMM1_XMM2_XMM3_icebp_c32,  255,         RM_REG, T_AVX_128, 1, 2, 3,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3827        { bs3CpuInstr4_vmulss_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3828    };
     3829    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     3830    {
     3831        { bs3CpuInstr4_mulss_XMM1_XMM2_icebp_c64,  255, RM_REG, T_SSE, 1, 1, 2,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3832        { bs3CpuInstr4_mulss_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 1, 1, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3833
     3834        { bs3CpuInstr4_vmulss_XMM1_XMM2_XMM3_icebp_c64,  255,         RM_REG, T_AVX_128, 1, 2, 3,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3835        { bs3CpuInstr4_vmulss_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3836
     3837        { bs3CpuInstr4_mulss_XMM8_XMM9_icebp_c64,  255,         RM_REG, T_SSE, 8, 8, 9,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3838        { bs3CpuInstr4_mulss_XMM8_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_SSE, 8, 8, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     3839    };
     3840
     3841    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     3842    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     3843    return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     3844                                        g_aXcptConfig3, RT_ELEMENTS(g_aXcptConfig3));
    37553845}
    37563846
     
    37843874        { "[v]mulps",       bs3CpuInstr4_v_mulps,  0 },
    37853875        { "[v]mulpd",       bs3CpuInstr4_v_mulpd,  0 },
     3876        { "[v]mulss",       bs3CpuInstr4_v_mulss,  0 },
    37863877#endif
    37873878    };
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