Changeset 105977 in vbox for trunk/src/VBox/ValidationKit
- Timestamp:
- Sep 5, 2024 10:15:09 AM (5 months ago)
- 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 409 409 410 410 ; 411 ;; [v]addsubp d411 ;; [v]addsubps 412 412 ; 413 413 EMIT_INSTR_PLUS_ICEBP addsubps, XMM1, XMM2 … … 426 426 EMIT_INSTR_PLUS_ICEBP_C64 vaddsubps, YMM13, YMM14, FSxBX 427 427 428 ; 429 ;; [v]addsubpd 430 ; 431 EMIT_INSTR_PLUS_ICEBP addsubpd, XMM1, XMM2 432 EMIT_INSTR_PLUS_ICEBP addsubpd, XMM1, FSxBX 433 EMIT_INSTR_PLUS_ICEBP_C64 addsubpd, XMM8, XMM9 434 EMIT_INSTR_PLUS_ICEBP_C64 addsubpd, XMM8, FSxBX 435 436 EMIT_INSTR_PLUS_ICEBP vaddsubpd, XMM1, XMM2, XMM3 437 EMIT_INSTR_PLUS_ICEBP vaddsubpd, XMM1, XMM2, FSxBX 438 EMIT_INSTR_PLUS_ICEBP_C64 vaddsubpd, XMM8, XMM9, XMM10 439 EMIT_INSTR_PLUS_ICEBP_C64 vaddsubpd, XMM8, XMM9, FSxBX 440 441 EMIT_INSTR_PLUS_ICEBP vaddsubpd, YMM1, YMM2, YMM3 442 EMIT_INSTR_PLUS_ICEBP vaddsubpd, YMM1, YMM2, FSxBX 443 EMIT_INSTR_PLUS_ICEBP_C64 vaddsubpd, YMM13, YMM14, YMM15 444 EMIT_INSTR_PLUS_ICEBP_C64 vaddsubpd, YMM13, YMM14, FSxBX 445 428 446 %endif ; BS3_INSTANTIATING_CMN 429 447 -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32
r105974 r105977 8653 8653 8654 8654 8655 /* 8656 * [V]ADDSUBPD. 8657 */ 8658 BS3_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 8655 8788 /** 8656 8789 * The 32-bit protected mode main function. … … 8689 8822 { "[v]mulsd", bs3CpuInstr4_v_mulsd, 0 }, 8690 8823 { "[v]addsubps", bs3CpuInstr4_v_addsubps, 0 }, 8824 { "[v]addsubpd", bs3CpuInstr4_v_addsubpd, 0 }, 8691 8825 #endif 8692 8826 };
Note:
See TracChangeset
for help on using the changeset viewer.