VirtualBox

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


Ignore:
Timestamp:
Sep 5, 2024 10:15:09 AM (5 months ago)
Author:
vboxsync
Message:

ValidationKit/bootsectors: bugref:10658 SIMD FP testcase: [v]addsubpd (W.I.P)

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

Legend:

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

    r105925 r105977  
    409409
    410410;
    411 ;; [v]addsubpd
     411;; [v]addsubps
    412412;
    413413EMIT_INSTR_PLUS_ICEBP       addsubps, XMM1, XMM2
     
    426426EMIT_INSTR_PLUS_ICEBP_C64   vaddsubps, YMM13, YMM14, FSxBX
    427427
     428;
     429;; [v]addsubpd
     430;
     431EMIT_INSTR_PLUS_ICEBP       addsubpd, XMM1, XMM2
     432EMIT_INSTR_PLUS_ICEBP       addsubpd, XMM1, FSxBX
     433EMIT_INSTR_PLUS_ICEBP_C64   addsubpd, XMM8, XMM9
     434EMIT_INSTR_PLUS_ICEBP_C64   addsubpd, XMM8, FSxBX
     435
     436EMIT_INSTR_PLUS_ICEBP       vaddsubpd, XMM1, XMM2, XMM3
     437EMIT_INSTR_PLUS_ICEBP       vaddsubpd, XMM1, XMM2, FSxBX
     438EMIT_INSTR_PLUS_ICEBP_C64   vaddsubpd, XMM8, XMM9, XMM10
     439EMIT_INSTR_PLUS_ICEBP_C64   vaddsubpd, XMM8, XMM9, FSxBX
     440
     441EMIT_INSTR_PLUS_ICEBP       vaddsubpd, YMM1,  YMM2,  YMM3
     442EMIT_INSTR_PLUS_ICEBP       vaddsubpd, YMM1,  YMM2,  FSxBX
     443EMIT_INSTR_PLUS_ICEBP_C64   vaddsubpd, YMM13, YMM14, YMM15
     444EMIT_INSTR_PLUS_ICEBP_C64   vaddsubpd, YMM13, YMM14, FSxBX
     445
    428446%endif ; BS3_INSTANTIATING_CMN
    429447
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r105974 r105977  
    86538653
    86548654
     8655/*
     8656 * [V]ADDSUBPD.
     8657 */
     8658BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_addsubpd(uint8_t bMode)
     8659{
     8660    static BS3CPUINSTR4_TEST1_VALUES_PD_T const s_aValues[] =
     8661    {
     8662    /*
     8663     * Zero.
     8664     */
     8665    /* 0*/{ { /*src2     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     8666            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     8667            { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     8668              /*mxcsr:in */ 0,
     8669              /*128:out  */ 0,
     8670              /*256:out  */ 0,
     8671              /*xcpt?    */ false, false },
     8672         { { /*src2     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     8673           { /*src1     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     8674           { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     8675             /*mxcsr:in */ 0,
     8676             /*128:out  */ 0,
     8677             /*256:out  */ 0,
     8678             /*xcpt?    */ false, false },
     8679         { { /*src2     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     8680           { /*src1     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     8681           { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     8682             /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     8683             /*128:out  */ X86_MXCSR_RC_ZERO,
     8684             /*256:out  */ X86_MXCSR_RC_ZERO,
     8685             /*xcpt?    */ false, false },
     8686         { { /*src2     */ { FP64_0(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
     8687           { /*src1     */ { FP64_0(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
     8688           { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     8689             /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     8690             /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     8691             /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     8692             /*xcpt?    */ false, false },
     8693         { { /*src2     */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } },
     8694           { /*src1     */ { FP64_0(1), FP64_0(0), FP64_0(1), FP64_0(0) } },
     8695           { /* =>      */ { FP64_0(1), FP64_0(1), FP64_0(1), FP64_0(1) } },
     8696             /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8697             /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8698             /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8699             /*xcpt?    */ false, false },
     8700         { { /*src2     */ { FP64_0(1), FP64_0(0), FP64_0(1), FP64_0(0) } },
     8701           { /*src1     */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } },
     8702           { /* =>      */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } },
     8703             /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8704             /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8705             /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8706             /*xcpt?    */ false, false },
     8707         { { /*src2     */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } },
     8708           { /*src1     */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } },
     8709           { /* =>      */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } },
     8710             /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     8711             /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     8712             /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     8713             /*xcpt?    */ false, false },
     8714         { { /*src2     */ { FP64_0(1), FP64_0(1), FP64_0(1), FP64_0(1) } },
     8715           { /*src1     */ { FP64_0(1), FP64_0(1), FP64_0(1), FP64_0(1) } },
     8716           { /* =>      */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } },
     8717             /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     8718             /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     8719             /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     8720             /*xcpt?    */ false, false },
     8721         { { /*src2     */ { FP64_0(0), FP64_0(1), FP64_0(1), FP64_0(1) } },
     8722           { /*src1     */ { FP64_0(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
     8723           { /* =>      */ { FP64_0(1), FP64_0(1), FP64_0(0), FP64_0(1) } },
     8724             /*mxcsr:in */ X86_MXCSR_XCPT_FLAGS | X86_MXCSR_RC_DOWN,
     8725             /*128:out  */ X86_MXCSR_XCPT_FLAGS | X86_MXCSR_RC_DOWN,
     8726             /*256:out  */ X86_MXCSR_XCPT_FLAGS | X86_MXCSR_RC_DOWN,
     8727             /*xcpt?    */ false, false },
     8728         { { /*src2     */ { FP64_0(1), FP64_0(0), FP64_0(1), FP64_0(1) } },
     8729           { /*src1     */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } },
     8730           { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(1) } },
     8731             /*mxcsr:in */ X86_MXCSR_XCPT_FLAGS | X86_MXCSR_RC_ZERO,
     8732             /*128:out  */ X86_MXCSR_XCPT_FLAGS | X86_MXCSR_RC_ZERO,
     8733             /*256:out  */ X86_MXCSR_XCPT_FLAGS | X86_MXCSR_RC_ZERO,
     8734             /*xcpt?    */ false, false },
     8735         /** @todo Infinity; Overflow/Precision; Normals; Denormals; Invalids; Rounding; FZ
     8736          *        etc. */
     8737    };
     8738
     8739    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     8740    {
     8741        { bs3CpuInstr4_addsubpd_XMM1_XMM2_icebp_c16,  255, RM_REG, T_SSE3, 1, 1, 2,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8742        { bs3CpuInstr4_addsubpd_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE3, 1, 1, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8743
     8744        { bs3CpuInstr4_vaddsubpd_XMM1_XMM2_XMM3_icebp_c16,  255, RM_REG, T_AVX_128, 1, 2, 3,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8745        { bs3CpuInstr4_vaddsubpd_XMM1_XMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_128, 1, 2, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8746
     8747        { bs3CpuInstr4_vaddsubpd_YMM1_YMM2_YMM3_icebp_c16,  255, RM_REG, T_AVX_256, 1, 2, 3,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8748        { bs3CpuInstr4_vaddsubpd_YMM1_YMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_256, 1, 2, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8749    };
     8750    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     8751    {
     8752        { bs3CpuInstr4_addsubpd_XMM1_XMM2_icebp_c32,  255, RM_REG, T_SSE3, 1, 1, 2,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8753        { bs3CpuInstr4_addsubpd_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE3, 1, 1, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8754
     8755        { bs3CpuInstr4_vaddsubpd_XMM1_XMM2_XMM3_icebp_c32,  255, RM_REG, T_AVX_128, 1, 2, 3,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8756        { bs3CpuInstr4_vaddsubpd_XMM1_XMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_128, 1, 2, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8757
     8758        { bs3CpuInstr4_vaddsubpd_YMM1_YMM2_YMM3_icebp_c32,  255, RM_REG, T_AVX_256, 1, 2, 3,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8759        { bs3CpuInstr4_vaddsubpd_YMM1_YMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_256, 1, 2, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8760    };
     8761    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     8762    {
     8763        { bs3CpuInstr4_addsubpd_XMM1_XMM2_icebp_c64,  255, RM_REG, T_SSE3, 1, 1, 2,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8764        { bs3CpuInstr4_addsubpd_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE3, 1, 1, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8765
     8766        { bs3CpuInstr4_vaddsubpd_XMM1_XMM2_XMM3_icebp_c64,  255, RM_REG, T_AVX_128, 1, 2, 3,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8767        { bs3CpuInstr4_vaddsubpd_XMM1_XMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 1, 2, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8768
     8769        { bs3CpuInstr4_vaddsubpd_YMM1_YMM2_YMM3_icebp_c64,  255, RM_REG, T_AVX_256, 1, 2, 3,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8770        { bs3CpuInstr4_vaddsubpd_YMM1_YMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 1, 2, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8771
     8772        { bs3CpuInstr4_addsubpd_XMM8_XMM9_icebp_c64,  255, RM_REG, T_SSE3, 8, 8, 9,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8773        { bs3CpuInstr4_addsubpd_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_SSE3, 8, 8, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8774
     8775        { bs3CpuInstr4_vaddsubpd_XMM8_XMM9_XMM10_icebp_c64,   255, RM_REG, T_AVX_128, 8,  9,  10,  RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8776        { bs3CpuInstr4_vaddsubpd_XMM8_XMM9_FSxBX_icebp_c64,   255, RM_MEM, T_AVX_128, 8,  9,  255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8777        { bs3CpuInstr4_vaddsubpd_YMM13_YMM14_YMM15_icebp_c64, 255, RM_REG, T_AVX_256, 13, 14, 15,  RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8778        { bs3CpuInstr4_vaddsubpd_YMM13_YMM14_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 13, 14, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     8779    };
     8780
     8781    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     8782    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     8783    return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     8784                                        g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));
     8785}
     8786
     8787
    86558788/**
    86568789 * The 32-bit protected mode main function.
     
    86898822        { "[v]mulsd",       bs3CpuInstr4_v_mulsd,    0 },
    86908823        { "[v]addsubps",    bs3CpuInstr4_v_addsubps, 0 },
     8824        { "[v]addsubpd",    bs3CpuInstr4_v_addsubpd, 0 },
    86918825#endif
    86928826    };
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