VirtualBox

Changeset 105684 in vbox for trunk


Ignore:
Timestamp:
Aug 15, 2024 11:33:35 AM (5 months ago)
Author:
vboxsync
Message:

ValidationKit/bootsectors: bugref:10658 SIMD FP testcase: [v]subsd (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

    r105632 r105684  
    298298
    299299;
     300;; [v]subsd
     301;
     302EMIT_INSTR_PLUS_ICEBP       subsd, XMM1, XMM2
     303EMIT_INSTR_PLUS_ICEBP       subsd, XMM1, FSxBX
     304EMIT_INSTR_PLUS_ICEBP_C64   subsd, XMM8, XMM9
     305EMIT_INSTR_PLUS_ICEBP_C64   subsd, XMM8, FSxBX
     306
     307EMIT_INSTR_PLUS_ICEBP       vsubsd, XMM1, XMM2, XMM3
     308EMIT_INSTR_PLUS_ICEBP       vsubsd, XMM1, XMM2, FSxBX
     309EMIT_INSTR_PLUS_ICEBP_C64   vsubsd, XMM8, XMM9, XMM10
     310EMIT_INSTR_PLUS_ICEBP_C64   vsubsd, XMM8, XMM9, FSxBX
     311
     312;
    300313;; [v]mulps
    301314;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r105650 r105684  
    50895089        { bs3CpuInstr4_subss_XMM8_XMM9_icebp_c64,  255,         RM_REG, T_SSE, 8, 8, 9,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
    50905090        { bs3CpuInstr4_subss_XMM8_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_SSE, 8, 8, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     5091    };
     5092
     5093    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     5094    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     5095    return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     5096                                        g_aXcptConfig3, RT_ELEMENTS(g_aXcptConfig3));
     5097}
     5098
     5099
     5100/*
     5101 * [V]SUBSD.
     5102 */
     5103BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_subsd(uint8_t bMode)
     5104{
     5105    static BS3CPUINSTR4_TEST1_VALUES_SD_T const s_aValues[] =
     5106    {
     5107    /*
     5108     * Zero.
     5109     */
     5110    /* 0*/{ { /*src2     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     5111            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     5112            { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     5113              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     5114              /*128:out  */ X86_MXCSR_XCPT_MASK,
     5115              /*256:out  */ X86_MXCSR_XCPT_MASK,
     5116              /*xcpt?    */ false, false },
     5117          { { /*src2     */ { FP64_0(0), FP64_RAND_V3(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     5118            { /*src1     */ { FP64_0(0), FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V2(1) } },
     5119            { /* =>      */ { FP64_0(0), FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V2(1) } },
     5120              /*mxcsr:in */ 0,
     5121              /*128:out  */ 0,
     5122              /*256:out  */ 0,
     5123              /*xcpt?    */ false, false },
     5124          { { /*src2     */ { FP64_0(0), FP64_RAND_V1(0), FP64_RAND_V2(0), FP64_RAND_V0(1) } },
     5125            { /*src1     */ { FP64_0(0), FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V2(1) } },
     5126            { /* =>      */ { FP64_0(0), FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V2(1) } },
     5127              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     5128              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     5129              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     5130              /*xcpt?    */ false, false },
     5131          { { /*src2     */ { FP64_0(1), FP64_RAND_V0(0), FP64_RAND_V1(0), FP64_RAND_V2(1) } },
     5132            { /*src1     */ { FP64_0(1), FP64_RAND_V3(1), FP64_RAND_V2(0), FP64_RAND_V0(0) } },
     5133            { /* =>      */ { FP64_0(0), FP64_RAND_V3(1), FP64_RAND_V2(0), FP64_RAND_V0(0) } },
     5134              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     5135              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     5136              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     5137              /*xcpt?    */ false, false },
     5138          { { /*src2     */ { FP64_0(0), FP64_RAND_V0(0), FP64_RAND_V1(0), FP64_RAND_V2(1) } },
     5139            { /*src1     */ { FP64_0(0), FP64_RAND_V3(1), FP64_RAND_V1(0), FP64_RAND_V0(0) } },
     5140            { /* =>      */ { FP64_0(0), FP64_RAND_V3(1), FP64_RAND_V1(0), FP64_RAND_V0(0) } },
     5141              /*mxcsr:in */ X86_MXCSR_FZ,
     5142              /*128:out  */ X86_MXCSR_FZ,
     5143              /*256:out  */ X86_MXCSR_FZ,
     5144              /*xcpt?    */ false, false },
     5145          { { /*src2     */ { FP64_0(0), FP64_RAND_V1(1), FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     5146            { /*src1     */ { FP64_0(0), FP64_RAND_V3(1), FP64_RAND_V0(0), FP64_RAND_V2(1) } },
     5147            { /* =>      */ { FP64_0(1), FP64_RAND_V3(1), FP64_RAND_V0(0), FP64_RAND_V1(1) } },
     5148              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN,
     5149              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN,
     5150              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN,
     5151              /*xcpt?    */ false, false },
     5152    /*
     5153     * Infinity.
     5154     */
     5155    /* 6*/{ { /*src2     */ { FP64_INF(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
     5156            { /*src1     */ { FP64_INF(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
     5157            { /* =>      */ { FP64_0(0),   FP64_0(0), FP64_0(0), FP64_0(0) } },
     5158              /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_ZM | X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,
     5159              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_ZM | X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_IE,
     5160              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_ZM | X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_IE,
     5161              /*xcpt?    */ true, true },
     5162          { { /*src2     */ { FP64_INF(1), FP64_RAND_V1(0), FP64_RAND_V2(0), FP32_RAND_V3(1) } },
     5163            { /*src1     */ { FP64_INF(1), FP64_RAND_V0(0), FP64_RAND_V1(1), FP32_RAND_V1(1) } },
     5164            { /* =>      */ { FP64_0(0),   FP64_RAND_V0(0), FP64_RAND_V1(1), FP32_RAND_V1(1) } },
     5165              /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_ZM | X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO,
     5166              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_ZM | X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     5167              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_ZM | X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     5168              /*xcpt?    */ true, true },
     5169          { { /*src2     */ { FP64_INF(1),  FP64_RAND_V3(1), FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     5170            { /*src1     */ { FP64_INF(1),  FP64_RAND_V1(1), FP64_RAND_V1(0), FP64_RAND_V0(1) } },
     5171            { /* =>      */ { FP64_QNAN(1), FP64_RAND_V1(1), FP64_RAND_V1(0), FP64_RAND_V0(1) } },
     5172              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     5173              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     5174              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     5175              /*xcpt?    */ false, false },
     5176          { { /*src2     */ { FP64_INF(1),  FP64_RAND_V0(0), FP64_RAND_V1(0), FP64_RAND_V2(1) } },
     5177            { /*src1     */ { FP64_INF(1),  FP64_RAND_V3(1), FP64_RAND_V2(0), FP64_RAND_V1(0) } },
     5178            { /* =>      */ { FP64_QNAN(1), FP64_RAND_V3(1), FP64_RAND_V2(0), FP64_RAND_V1(0) } },
     5179              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ,
     5180              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_IE,
     5181              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_IE,
     5182              /*xcpt?    */ false, false },
     5183          { { /*src2     */ { FP64_INF(1),  FP64_RAND_V0(0), FP64_RAND_V0(0), FP64_RAND_V0(1) } },
     5184            { /*src1     */ { FP64_INF(1),  FP64_RAND_V3(0), FP64_RAND_V2(1), FP64_RAND_V1(0) } },
     5185            { /* =>      */ { FP64_QNAN(0), FP64_RAND_V3(0), FP64_RAND_V2(1), FP64_RAND_V1(0) } },
     5186              /*mxcsr:in */ X86_MXCSR_FZ,
     5187              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_IE,
     5188              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_IE,
     5189              /*xcpt?    */ true, true },
     5190          { { /*src2     */ { FP64_INF(1),  FP64_0(0), FP64_0(0), FP64_RAND_V1(1) } },
     5191            { /*src1     */ { FP64_INF(1),  FP64_0(1), FP64_0(1), FP64_RAND_V1(1) } },
     5192            { /* =>      */ { FP64_QNAN(1), FP64_0(1), FP64_0(1), FP64_RAND_V1(1) } },
     5193              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     5194              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     5195              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     5196              /*xcpt?    */ true, true },
     5197          { { /*src2     */ { FP64_INF(0), FP64_0(0),       FP64_0(0), FP64_RAND_V1(1) } },
     5198            { /*src1     */ { FP64_INF(1), FP64_RAND_V3(0), FP64_RAND_V2(1), FP64_RAND_V1(0) } },
     5199            { /* =>      */ { FP64_INF(1), FP64_RAND_V3(0), FP64_RAND_V2(1), FP64_RAND_V1(0) } },
     5200              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     5201              /*128:out  */ X86_MXCSR_XCPT_MASK,
     5202              /*256:out  */ X86_MXCSR_XCPT_MASK,
     5203              /*xcpt?    */ false, false },
     5204          { { /*src2     */ { FP64_INF(1), FP64_RAND_V1(0), FP64_RAND_V3(0), FP64_RAND_V2(1) } },
     5205            { /*src1     */ { FP64_INF(0), FP64_RAND_V0(1), FP64_RAND_V2(1), FP64_RAND_V1(0) } },
     5206            { /* =>      */ { FP64_INF(0), FP64_RAND_V0(1), FP64_RAND_V2(1), FP64_RAND_V1(0) } },
     5207              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     5208              /*128:out  */ X86_MXCSR_XCPT_MASK,
     5209              /*256:out  */ X86_MXCSR_XCPT_MASK,
     5210              /*xcpt?    */ false, false },
     5211    /*
     5212     * Overflow, Precision.
     5213     */
     5214    /*14*/{ { /*src2     */ { FP64_NORM_MIN(1), FP64_RAND_V1(0), FP64_RAND_V3(0), FP64_RAND_V2(1) } },
     5215            { /*src1     */ { FP64_NORM_MAX(0), FP64_RAND_V0(1), FP64_RAND_V2(1), FP64_RAND_V1(0) } },
     5216            { /* =>      */ { FP64_0(0),        FP64_RAND_V0(1), FP64_RAND_V2(1), FP64_RAND_V1(0) } },
     5217              /*mxcsr:in */ 0,
     5218              /*128:out  */ X86_MXCSR_PE,
     5219              /*256:out  */ X86_MXCSR_PE,
     5220              /*xcpt?    */ true, true },
     5221          { { /*src2     */ { FP64_NORM_MIN(0), FP64_RAND_V0(0), FP64_RAND_V0(0), FP64_RAND_V3(1) } },
     5222            { /*src1     */ { FP64_NORM_MAX(0), FP64_RAND_V0(1), FP64_RAND_V1(1), FP64_RAND_V1(1) } },
     5223            { /* =>      */ { FP64_0(0),        FP64_RAND_V0(1), FP64_RAND_V1(1), FP64_RAND_V1(1) } },
     5224              /*mxcsr:in */ 0,
     5225              /*128:out  */ X86_MXCSR_PE,
     5226              /*256:out  */ X86_MXCSR_PE,
     5227              /*xcpt?    */ true, true },
     5228          { { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0), FP64_NORM_MAX(1), FP64_NORM_MAX(1) } },
     5229            { /*src1     */ { FP64_NORM_MAX(1), FP64_NORM_MAX(1), FP64_NORM_MAX(0), FP64_NORM_MAX(1) } },
     5230            { /* =>      */ { FP64_NORM_MAX(1), FP64_NORM_MAX(1), FP64_NORM_MAX(0), FP64_0(0)        } },
     5231              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO,
     5232              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     5233              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     5234              /*xcpt?    */ false, false },
     5235          { { /*src2     */ { FP64_NORM_MAX(0), FP64_0(0), FP64_0(0), FP64_NORM_MAX(0) } },
     5236            { /*src1     */ { FP64_NORM_MAX(1), FP64_0(0), FP64_0(0), FP64_NORM_MAX(1) } },
     5237            { /* =>      */ { FP64_INF(1),      FP64_0(0), FP64_0(0), FP64_INF(1)      } },
     5238              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_FZ,
     5239              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_OE | X86_MXCSR_PE,
     5240              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_OE | X86_MXCSR_PE,
     5241              /*xcpt?    */ false, false },
     5242          { { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MIN(1), FP64_V(1, 0, 2),  FP64_NORM_MIN(1) } },
     5243            { /*src1     */ { FP64_NORM_MAX(1), FP64_NORM_MAX(0), FP64_NORM_MIN(1), FP64_NORM_MIN(1) } },
     5244            { /* =>      */ { FP64_INF(1),      FP64_NORM_MAX(0), FP64_NORM_MIN(0), FP64_0(0)        } },
     5245              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_OM | X86_MXCSR_PM,
     5246              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE,
     5247              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE,
     5248              /*xcpt?    */ false, false },
     5249          { { /*src2     */ { FP64_NORM_MAX(1), FP64_RAND_V0(0), FP64_RAND_V0(0), FP64_RAND_V0(0) } },
     5250            { /*src1     */ { FP64_NORM_MAX(0), FP64_RAND_V1(1), FP64_RAND_V2(0), FP64_RAND_V1(0) } },
     5251            { /* =>      */ { FP64_NORM_MAX(0), FP64_RAND_V1(1), FP64_RAND_V2(0), FP64_RAND_V1(0) } },
     5252              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OM | X86_MXCSR_PM,
     5253              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE,
     5254              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE,
     5255              /*xcpt?    */ false, false },
     5256          { { /*src2     */ { FP64_0(0), FP64_0(0), FP64_NORM_MIN(0), FP64_NORM_MAX(0) } },
     5257            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_NORM_MIN(0), FP64_NORM_MAX(1) } },
     5258            { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(0),        FP64_NORM_MAX(1) } },
     5259              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     5260              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     5261              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     5262              /*xcpt?    */ false, false },
     5263          { { /*src2     */ { FP64_NORM_MIN(0), FP64_NORM_MIN(0), FP64_NORM_MIN(1), FP64_NORM_MIN(0) } },
     5264            { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0), FP64_NORM_MAX(1), FP64_NORM_MAX(0) } },
     5265            { /* =>      */ { FP64_0(0),        FP64_0(0),        FP64_0(0),        FP64_0(0)        } },
     5266              /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO,
     5267              /*128:out  */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     5268              /*256:out  */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     5269              /*xcpt?    */ true, true },
     5270          { { /*src2     */ { FP64_NORM_SAFE_INT_MIN(0), FP64_NORM_MAX(0), FP64_NORM_SAFE_INT_MAX(1), FP64_NORM_SAFE_INT_MAX(1) } },
     5271            { /*src1     */ { FP64_NORM_SAFE_INT_MAX(0), FP64_NORM_MAX(1), FP64_NORM_SAFE_INT_MAX(1), FP64_NORM_SAFE_INT_MAX(1) } },
     5272            { /* =>      */ { FP64_0(0),                 FP64_0(0),        FP64_0(0),                 FP64_0(0)                 } },
     5273              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     5274              /*128:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     5275              /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     5276              /*xcpt?    */ true, true },
     5277    /*
     5278     * Normals.
     5279     */
     5280    /*23*/{ { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_V1(1), FP64_NORM_MAX(0), FP64_NORM_V2(0) } },
     5281            { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_V1(1), FP64_NORM_MAX(1), FP64_NORM_V1(0) } },
     5282            { /* =>      */ { FP64_0(0),        FP64_NORM_V1(1), FP64_NORM_MAX(1), FP64_NORM_V1(0) } },
     5283              /*mxcsr:in */ 0,
     5284              /*128:out  */ 0,
     5285              /*256:out  */ 0,
     5286              /*xcpt?    */ false, false },
     5287          { { /*src2     */ { FP64_NORM_MIN(0), FP64_NORM_V2(1), FP64_RAND_V2(0), FP64_RAND_V3(0) } },
     5288            { /*src1     */ { FP64_NORM_MIN(0), FP64_NORM_V1(1), FP64_RAND_V0(0), FP64_RAND_V2(1) } },
     5289            { /* =>      */ { FP64_0(0),        FP64_NORM_V1(1), FP64_RAND_V0(0), FP64_RAND_V2(1) } },
     5290              /*mxcsr:in */ 0,
     5291              /*128:out  */ 0,
     5292              /*256:out  */ 0,
     5293              /*xcpt?    */ false, false },
     5294          { { /*src2     */ { FP64_V(0, 0,               0x409)/*1024*/, FP64_RAND_V3(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     5295            { /*src1     */ { FP64_V(0, 0x8000000000000, 0x409)/*1536*/, FP64_RAND_V2(1), FP64_RAND_V3(0), FP64_RAND_V1(0) } },
     5296            { /* =>      */ { FP64_V(0, 0,               0x408)/* 512*/, FP64_RAND_V2(1), FP64_RAND_V3(0), FP64_RAND_V1(0) } },
     5297              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     5298              /*128:out  */ X86_MXCSR_XCPT_MASK,
     5299              /*256:out  */ X86_MXCSR_XCPT_MASK,
     5300              /*xcpt?    */ false, false },
     5301          { { /*src2     */ { FP64_V(0, 0xc000000000000, 0x401)/* 7*/, FP64_RAND_V2(0), FP64_RAND_V2(0), FP64_RAND_V0(1) } },
     5302            { /*src1     */ { FP64_V(0, 0xf000000000000, 0x404)/*62*/, FP64_RAND_V0(1), FP64_RAND_V2(1), FP64_RAND_V1(1) } },
     5303            { /* =>      */ { FP64_V(0, 0xb800000000000, 0x404)/*55*/, FP64_RAND_V0(1), FP64_RAND_V2(1), FP64_RAND_V1(1) } },
     5304              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     5305              /*128:out  */ X86_MXCSR_XCPT_MASK,
     5306              /*256:out  */ X86_MXCSR_XCPT_MASK,
     5307              /*xcpt?    */ false, false },
     5308          { { /*src2     */ { FP64_V(0, 0x26580b4800000, 0x41d)/*1234567890*/, FP64_RAND_V3(0), FP64_RAND_V0(0), FP64_RAND_V1(1) } },
     5309            { /*src1     */ { FP64_V(0, 0x26580b4800000, 0x41d)/*1234567890*/, FP64_RAND_V3(1), FP64_RAND_V1(0), FP64_RAND_V2(0) } },
     5310            { /* =>      */ { FP64_0(0),                                       FP64_RAND_V3(1), FP64_RAND_V1(0), FP64_RAND_V2(0) } },
     5311              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     5312              /*128:out  */ X86_MXCSR_XCPT_MASK,
     5313              /*256:out  */ X86_MXCSR_XCPT_MASK,
     5314              /*xcpt?    */ false, false },
     5315          { { /*src2     */ { FP64_V(0, 0x9000000000000, 0x405)/*       100*/, FP64_RAND_V0(0), FP64_RAND_V1(0), FP64_RAND_V2(1) } },
     5316            { /*src1     */ { FP64_V(1, 0xd6f3426800000, 0x41c)/*-987654221*/, FP64_RAND_V3(0), FP64_RAND_V2(0), FP64_RAND_V1(0) } },
     5317            { /* =>      */ { FP64_V(1, 0xd6f3458800000, 0x41c)/*-987654321*/, FP64_RAND_V3(0), FP64_RAND_V2(0), FP64_RAND_V1(0) } },
     5318              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     5319              /*128:out  */ X86_MXCSR_XCPT_MASK,
     5320              /*256:out  */ X86_MXCSR_XCPT_MASK,
     5321              /*xcpt?    */ false, false },
     5322          { { /*src2     */ { FP64_V(0, 0xd6eca42000000, 0x419)/*       123450000.5*/, FP64_RAND_V0(0), FP64_RAND_V0(1), FP64_RAND_V0(1) } },
     5323            { /*src1     */ { FP64_V(0, 0xcf00348ec5858, 0x432)/*4072598123457580.0*/, FP64_RAND_V1(1), FP64_RAND_V1(0), FP64_RAND_V1(0) } },
     5324            { /* =>      */ { FP64_V(0, 0xcf0033a34f337, 0x432)/*4072598000007579.5*/, FP64_RAND_V1(1), FP64_RAND_V1(0), FP64_RAND_V1(0) } },
     5325              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     5326              /*128:out  */ X86_MXCSR_XCPT_MASK,
     5327              /*256:out  */ X86_MXCSR_XCPT_MASK,
     5328              /*xcpt?    */ false, false },
     5329          { { /*src2     */ { FP64_V(0, FP64_FRAC_NORM_MAX - 1, FP64_EXP_SAFE_INT_MAX), FP64_RAND_V1(0), FP64_RAND_V2(1), FP64_RAND_V1(1) } },
     5330            { /*src1     */ { FP64_NORM_SAFE_INT_MAX(0),                                FP64_RAND_V0(1), FP64_RAND_V3(1), FP64_RAND_V2(0) } },
     5331            { /* =>      */ { FP64_1(0),                                                FP64_RAND_V0(1), FP64_RAND_V3(1), FP64_RAND_V2(0) } },
     5332              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     5333              /*128:out  */ X86_MXCSR_XCPT_MASK,
     5334              /*256:out  */ X86_MXCSR_XCPT_MASK,
     5335              /*xcpt?    */ false, false },
     5336          { { /*src2     */ { FP64_1(0),                                                FP64_RAND_V3(0), FP64_RAND_V1(1), FP64_RAND_V2(1) } },
     5337            { /*src1     */ { FP64_NORM_SAFE_INT_MAX(0),                                FP64_RAND_V1(0), FP64_RAND_V0(0), FP64_RAND_V1(0) } },
     5338            { /* =>      */ { FP64_V(0, FP64_FRAC_NORM_MAX - 1, FP64_EXP_SAFE_INT_MAX), FP64_RAND_V1(0), FP64_RAND_V0(0), FP64_RAND_V1(0) } },
     5339              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_XCPT_MASK,
     5340              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_XCPT_MASK,
     5341              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_XCPT_MASK,
     5342              /*xcpt?    */ false, false },
     5343          { { /*src2     */ { FP64_NORM_SAFE_INT_MAX(1), FP64_RAND_V0(0), FP64_RAND_V0(1), FP64_RAND_V0(1) } },
     5344            { /*src1     */ { FP64_NORM_SAFE_INT_MAX(1), FP64_RAND_V1(1), FP64_RAND_V1(0), FP64_RAND_V1(0) } },
     5345            { /* =>      */ { FP64_0(0),                 FP64_RAND_V1(1), FP64_RAND_V1(0), FP64_RAND_V1(0) } },
     5346              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_XCPT_MASK,
     5347              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_XCPT_MASK,
     5348              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_XCPT_MASK,
     5349              /*xcpt?    */ false, false },
     5350          { { /*src2     */ { FP64_V(0, 0xc122186c3cfd0, 0x42d)/*123456789876543.25*/, FP64_RAND_V0(0), FP64_RAND_V0(1), FP64_RAND_V0(1) } },
     5351            { /*src1     */ { FP64_V(0, 0xbcd80e0108cc0, 0x42e)/*244555555308646.00*/, FP64_RAND_V1(1), FP64_RAND_V1(0), FP64_RAND_V1(0) } },
     5352            { /* =>      */ { FP64_V(0, 0xb88e0395d49b0, 0x42d)/*121098765432102.75*/, FP64_RAND_V1(1), FP64_RAND_V1(0), FP64_RAND_V1(0) } },
     5353              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_XCPT_MASK,
     5354              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_XCPT_MASK,
     5355              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_XCPT_MASK,
     5356              /*xcpt?    */ false, false },
     5357    /*
     5358     * Denormals.
     5359     */
     5360    /*34*/{ { /*src2     */ { FP64_DENORM_MAX(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     5361            { /*src1     */ { FP64_0(0),          FP64_0(0), FP64_0(0), FP64_0(0) } },
     5362            { /* =>      */ { FP64_0(0),          FP64_0(0), FP64_0(0), FP64_0(0) } },
     5363              /*mxcsr:in */ 0,
     5364              /*128:out  */ X86_MXCSR_DE,
     5365              /*256:out  */ X86_MXCSR_DE,
     5366              /*xcpt?    */ true, true },
     5367          { { /*src2     */ { FP64_0(0),          FP64_0(0), FP64_0(0), FP64_0(0) } },
     5368            { /*src1     */ { FP64_DENORM_MAX(0), FP64_0(0), FP64_0(1), FP64_0(0) } },
     5369            { /* =>      */ { FP64_0(0),          FP64_0(0), FP64_0(1), FP64_0(0) } },
     5370              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_XCPT_MASK,
     5371              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_XCPT_MASK,
     5372              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_XCPT_MASK,
     5373              /*xcpt?    */ false, false },
     5374          { { /*src2     */ { FP64_DENORM_MIN(0), FP64_RAND_V1(0), FP64_RAND_V0(0), FP64_RAND_V0(1) } },
     5375            { /*src1     */ { FP64_DENORM_MAX(0), FP64_RAND_V2(1), FP64_RAND_V3(0), FP64_RAND_V1(0) } },
     5376            { /* =>      */ { FP64_0(0),          FP64_RAND_V2(1), FP64_RAND_V3(0), FP64_RAND_V1(0) } },
     5377              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_XCPT_MASK,
     5378              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_XCPT_MASK,
     5379              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_XCPT_MASK,
     5380              /*xcpt?    */ false, false },
     5381          /** @todo More Denormals. */
     5382    /** @todo Invalids, Underflow, Precision; Rounding, FZ etc. */
     5383    };
     5384
     5385
     5386    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     5387    {
     5388        { bs3CpuInstr4_subsd_XMM1_XMM2_icebp_c16,  255, RM_REG, T_SSE, 1, 1, 2,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     5389        { bs3CpuInstr4_subsd_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE, 1, 1, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     5390
     5391        { bs3CpuInstr4_vsubsd_XMM1_XMM2_XMM3_icebp_c16,  255,         RM_REG, T_AVX_128, 1, 2, 3,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     5392        { bs3CpuInstr4_vsubsd_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 },
     5393    };
     5394    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     5395    {
     5396        { bs3CpuInstr4_subsd_XMM1_XMM2_icebp_c32,  255, RM_REG, T_SSE, 1, 1, 2,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     5397        { bs3CpuInstr4_subsd_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE, 1, 1, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     5398
     5399        { bs3CpuInstr4_vsubsd_XMM1_XMM2_XMM3_icebp_c32,  255,         RM_REG, T_AVX_128, 1, 2, 3,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     5400        { bs3CpuInstr4_vsubsd_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 },
     5401    };
     5402    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     5403    {
     5404        { bs3CpuInstr4_subsd_XMM1_XMM2_icebp_c64,  255, RM_REG, T_SSE, 1, 1, 2,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     5405        { bs3CpuInstr4_subsd_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 1, 1, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     5406
     5407        { bs3CpuInstr4_vsubsd_XMM1_XMM2_XMM3_icebp_c64,  255,         RM_REG, T_AVX_128, 1, 2, 3,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     5408        { bs3CpuInstr4_vsubsd_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 },
     5409
     5410        { bs3CpuInstr4_subsd_XMM8_XMM9_icebp_c64,  255,         RM_REG, T_SSE, 8, 8, 9,   RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
     5411        { bs3CpuInstr4_subsd_XMM8_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_SSE, 8, 8, 255, RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues },
    50915412    };
    50925413
     
    63106631        { "[v]subpd",       bs3CpuInstr4_v_subpd,  0 },
    63116632        { "[v]subss",       bs3CpuInstr4_v_subss,  0 },
     6633        { "[v]subsd",       bs3CpuInstr4_v_subsd,  0 },
    63126634        { "[v]mulps",       bs3CpuInstr4_v_mulps,  0 },
    63136635        { "[v]mulpd",       bs3CpuInstr4_v_mulpd,  0 },
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