Changeset 106769 in vbox
- Timestamp:
- Oct 29, 2024 12:57:26 PM (5 months ago)
- svn:sync-xref-src-repo-rev:
- 165657
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32
r106736 r106769 279 279 #define FP32_ROW_UNUSED FP32_1(0), FP32_RAND_x7_V0 280 280 #define FP32_x6_UNUSED FP32_RAND_x6_V7 281 #define FP32_x7_UNUSED FP32_RAND_x7_V7 281 282 282 283 … … 285 286 * of instructions which convert between types. 286 287 */ 288 #define INT32_INDEFINITE_C 0x80000000UL 289 #define INT64_INDEFINITE_C 0x8000000000000000ULL 290 287 291 #define FP32_INT_SIGN_PART(a_uInt32) ((((uint32_t)(a_uInt32)) >> 31) & 1) 288 292 #define FP32_INT_EXPN_PART(a_uInt32) ((((uint32_t)(a_uInt32)) >> 23) & 0xFF) … … 292 296 #define FP32_INT64(a_uInt64) FP32_INT((a_uInt64) & 0xFFFFFFFF), FP32_INT((a_uInt64) >> 32) 293 297 #define FP32_INT64_C(a_uInt64) FP32_INT64(UINT64_C(a_uInt64)) 298 #define FP32_INT_INDEFINITE FP32_INT(INT32_INDEFINITE_C) 299 #define FP32_INT64_INDEFINITE FP32_INT64(INT64_INDEFINITE_C) 294 300 295 301 #define FP64_INT_SIGN_PART(a_uInt64) ((((uint64_t)(a_uInt64)) >> 63) & 1) … … 300 306 #define FP64_INT32(a_uInt32_1, a_uInt32_2) FP64_INT(((uint64_t)(a_uInt32_1)) | (((uint64_t)(a_uInt32_2)) << 32)) 301 307 #define FP64_INT32_C(a_uInt32_1, a_uInt32_2) FP64_INT32(UINT32_C(a_uInt32_1), UINT32_C(a_uInt32_2)) 308 #define FP64_INT_INDEFINITE FP64_INT(INT64_INDEFINITE_C) 309 #define FP64_INT32_INDEFINITE(a_uInt32_2) FP64_INT32(INT32_INDEFINITE_C, a_uInt32_2) 302 310 303 311 /* … … 444 452 #define FP64_RAND_x3_V3 FP64_NORM_V1(0), FP64_INF(1), FP64_NORM_V0(1) 445 453 #define FP64_ROW_UNUSED FP64_1(0), FP64_RAND_x3_V0 454 #define FP64_x3_UNUSED FP64_RAND_x3_V1 446 455 447 456 … … 2853 2862 { 2854 2863 Bs3MemSet(puMemOpAlias, 0xcc, cbMemOp); 2855 //Bs3TestPrintf("memory operand (Dst); set %d bytes of dst to 0xCC\n", cbMemOp);2856 2864 if (fNonFpOK) 2857 2865 MemOpExpect.ymm = pValues->uDstOut.ymm; 2858 2866 else 2859 2867 Bs3MemSet(&MemOpExpect, 0xcc, sizeof(MemOpExpect)); 2860 //Bs3TestPrintf("success expected; set %d bytes of expect to YMM value\n", sizeof(MemOpExpect));2861 2868 } 2862 2869 … … 2870 2877 { 2871 2878 Bs3MemCpy(puMemOpAlias, &pValues->uSrc1, cbMemOp); 2872 //Bs3TestPrintf("memory operand (Src1); set %d bytes of src1 & expected to specified value\n", cbMemOp);2873 2879 if (pTest->iRegDst >= FSxDI) 2874 2880 BS3_ASSERT(fSseInstr); … … 2883 2889 BS3_ASSERT(pTest->iRegDst < FSxDI && pTest->iRegSrc1 < FSxDI); 2884 2890 Bs3MemCpy(puMemOpAlias, &pValues->uSrc2, cbMemOp); 2885 //Bs3TestPrintf("memory operand (Src2); set %d bytes of src2 & expected to specified value\n", cbMemOp);2886 2891 MemOpExpect.ymm = pValues->uSrc2.ymm; 2887 2892 } … … 2916 2921 cErrors = Bs3TestSubErrorCount(); 2917 2922 if (fNonFpOK && !fFpXcptExpected && pTest->iRegDst < FSxDI) 2918 {2919 //Bs3TestPrintf("after successful execution\n");2920 2923 Bs3ExtCtxSetReg(&pSetRegCtx, pTest->iRegDst, (void*)&pValues->uDstOut); 2921 }2922 2924 #if defined(DEBUG_aeichner) /** @todo Necessary kludge on a i7-1068NG7. */ 2923 2925 if ( pExtCtx->enmMethod == BS3EXTCTXMETHOD_XSAVE … … 16467 16469 /* 1*/{ { /* unused */ { FP32_ROW_UNUSED } }, 16468 16470 { /* src xmm */ { FP32_INF(1), FP32_INF(0), FP32_RAND_x6_V1 } }, 16469 { /* => mm */ { FP32_INT (INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED } },16471 { /* => mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED } }, 16470 16472 /*mxcsr:in */ 0, 16471 16473 /*128:out */ X86_MXCSR_IE, … … 16541 16543 /*11*/{ { /* unused */ { FP32_ROW_UNUSED } }, 16542 16544 { /* src xmm */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_RAND_x6_V2 } }, 16543 { /* => mm */ { FP32_INT (INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED } },16545 { /* => mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED } }, 16544 16546 /*mxcsr:in */ 0, 16545 16547 /*128:out */ X86_MXCSR_IE, … … 16550 16552 /*12*/{ { /* unused */ { FP32_ROW_UNUSED } }, 16551 16553 { /* src xmm */ { FP32_QNAN(0), FP32_QNAN(1), FP32_RAND_x6_V2 } }, 16552 { /* => mm */ { FP32_INT (INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED } },16554 { /* => mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED } }, 16553 16555 /*mxcsr:in */ 0, 16554 16556 /*128:out */ X86_MXCSR_IE, … … 16556 16558 { { /* unused */ { FP32_ROW_UNUSED } }, 16557 16559 { /* src xmm */ { FP32_SNAN(1), FP32_SNAN(0), FP32_RAND_x6_V2 } }, 16558 { /* => mm */ { FP32_INT (INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED } },16560 { /* => mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED } }, 16559 16561 /*mxcsr:in */ 0, 16560 16562 /*128:out */ X86_MXCSR_IE, … … 16608 16610 /* 1*/{ { /* unused */ { FP32_ROW_UNUSED } }, 16609 16611 { /* src xmm */ { FP32_INF(1), FP32_INF(0), FP32_RAND_x6_V1 } }, 16610 { /* => mm */ { FP32_INT (INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED } },16612 { /* => mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED } }, 16611 16613 /*mxcsr:in */ 0, 16612 16614 /*128:out */ X86_MXCSR_IE, … … 16682 16684 /*11*/{ { /* unused */ { FP32_ROW_UNUSED } }, 16683 16685 { /* src xmm */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_RAND_x6_V2 } }, 16684 { /* => mm */ { FP32_INT (INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED } },16686 { /* => mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED } }, 16685 16687 /*mxcsr:in */ 0, 16686 16688 /*128:out */ X86_MXCSR_IE, … … 16691 16693 /*12*/{ { /* unused */ { FP32_ROW_UNUSED } }, 16692 16694 { /* src xmm */ { FP32_QNAN(0), FP32_QNAN(1), FP32_RAND_x6_V2 } }, 16693 { /* => mm */ { FP32_INT (INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED } },16695 { /* => mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED } }, 16694 16696 /*mxcsr:in */ 0, 16695 16697 /*128:out */ X86_MXCSR_IE, … … 16697 16699 { { /* unused */ { FP32_ROW_UNUSED } }, 16698 16700 { /* src xmm */ { FP32_SNAN(1), FP32_SNAN(0), FP32_RAND_x6_V2 } }, 16699 { /* => mm */ { FP32_INT (INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED } },16701 { /* => mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED } }, 16700 16702 /*mxcsr:in */ 0, 16701 16703 /*128:out */ X86_MXCSR_IE, … … 16890 16892 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE, 16891 16893 /*256:out */ -1 }, 16892 16893 16894 { { /* src r64 */ { FP32_INT64_C(8526495043095935640), FP32_RAND_x6_V4 } }, 16894 16895 /*0x76543210FEDCBA98*/ … … 17016 17017 { bs3CpuInstr4_vcvtsi2ss_XMM8_XMM8_R8_icebp_c64, 255, RM_REG, T_AVX_128, XMM8, XMM8, R8, PASS_s_aValues64 }, 17017 17018 { bs3CpuInstr4_vcvtsi2ss_XMM8_XMM8_FSxBX_Q_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, XMM8, XMM8, FSxBX, PASS_s_aValues64 }, 17019 }; 17020 17021 static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64); 17022 unsigned const iTest = BS3CPUINSTR4_TEST_MODES_INDEX(bMode); 17023 return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests, 17024 g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5)); 17025 } 17026 17027 17028 /* 17029 * CVTSS2SI. 17030 */ 17031 BS3_DECL_FAR(uint8_t) bs3CpuInstr4_cvtss2si(uint8_t bMode) 17032 { 17033 static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues32[] = 17034 { 17035 /* 17036 * Zero. 17037 */ 17038 /* 0*/{ { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17039 { /* src xmm */ { FP32_0(0), FP32_RAND_x7_V1 } }, 17040 { /* => r32 */ { FP32_INT_C(0), FP32_x7_UNUSED } }, 17041 /*mxcsr:in */ 0, 17042 /*128:out */ 0, 17043 /*256:out */ -1 }, 17044 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17045 { /* src xmm */ { FP32_0(1), FP32_RAND_x7_V1 } }, 17046 { /* => r32 */ { FP32_INT_C(0), FP32_x7_UNUSED } }, 17047 /*mxcsr:in */ 0, 17048 /*128:out */ 0, 17049 /*256:out */ -1 }, 17050 /* 17051 * Infinity. 17052 */ 17053 /* 2*/{ { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17054 { /* src xmm */ { FP32_INF(1), FP32_RAND_x7_V1 } }, 17055 { /* => r32 */ { FP32_INT_INDEFINITE, FP32_x7_UNUSED } }, 17056 /*mxcsr:in */ 0, 17057 /*128:out */ X86_MXCSR_IE, 17058 /*256:out */ -1 }, 17059 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17060 { /* src xmm */ { FP32_INF(0), FP32_RAND_x7_V1 } }, 17061 { /* => r32 */ { FP32_INT_INDEFINITE, FP32_x7_UNUSED } }, 17062 /*mxcsr:in */ 0, 17063 /*128:out */ X86_MXCSR_IE, 17064 /*256:out */ -1 }, 17065 /* 17066 * Normals & Precision. 17067 */ 17068 /* 4*/{ { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17069 { /* src xmm */ { FP32_V(0,0x712000,0x8f), FP32_RAND_x7_V0 } }, 17070 { /* => r32 */ { FP32_INT_C(123456), FP32_x7_UNUSED } }, 17071 /*mxcsr:in */ 0, 17072 /*128:out */ 0, 17073 /*256:out */ -1 }, 17074 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17075 { /* src xmm */ { FP32_V(1,0x712000,0x8f), FP32_RAND_x7_V0 } }, 17076 { /* => r32 */ { FP32_INT_C(-123456), FP32_x7_UNUSED } }, 17077 /*mxcsr:in */ 0, 17078 /*128:out */ 0, 17079 /*256:out */ -1 }, 17080 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17081 { /* src xmm */ { FP32_V(0,0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } }, 17082 { /* => r32 */ { FP32_INT_C(123456), FP32_x7_UNUSED } }, 17083 /*mxcsr:in */ 0, 17084 /*128:out */ X86_MXCSR_PE, 17085 /*256:out */ -1 }, 17086 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17087 { /* src xmm */ { FP32_V(1,0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } }, 17088 { /* => r32 */ { FP32_INT_C(-123456), FP32_x7_UNUSED } }, 17089 /*mxcsr:in */ 0, 17090 /*128:out */ X86_MXCSR_PE, 17091 /*256:out */ -1 }, 17092 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17093 { /* src xmm */ { FP32_V(0,0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } }, 17094 { /* => r32 */ { FP32_INT_C(123456), FP32_x7_UNUSED } }, 17095 /*mxcsr:in */ X86_MXCSR_RC_DOWN, 17096 /*128:out */ X86_MXCSR_RC_DOWN | X86_MXCSR_PE, 17097 /*256:out */ -1 }, 17098 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17099 { /* src xmm */ { FP32_V(1,0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } }, 17100 { /* => r32 */ { FP32_INT_C(-123457), FP32_x7_UNUSED } }, 17101 /*mxcsr:in */ X86_MXCSR_RC_DOWN, 17102 /*128:out */ X86_MXCSR_RC_DOWN | X86_MXCSR_PE, 17103 /*256:out */ -1 }, 17104 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17105 { /* src xmm */ { FP32_V(0,0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } }, 17106 { /* => r32 */ { FP32_INT_C(123457), FP32_x7_UNUSED } }, 17107 /*mxcsr:in */ X86_MXCSR_RC_UP, 17108 /*128:out */ X86_MXCSR_RC_UP | X86_MXCSR_PE, 17109 /*256:out */ -1 }, 17110 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17111 { /* src xmm */ { FP32_V(1,0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } }, 17112 { /* => r32 */ { FP32_INT_C(-123456), FP32_x7_UNUSED } }, 17113 /*mxcsr:in */ X86_MXCSR_RC_UP, 17114 /*128:out */ X86_MXCSR_RC_UP | X86_MXCSR_PE, 17115 /*256:out */ -1 }, 17116 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17117 { /* src xmm */ { FP32_V(0,0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } }, 17118 { /* => r32 */ { FP32_INT_C(123456), FP32_x7_UNUSED } }, 17119 /*mxcsr:in */ X86_MXCSR_RC_ZERO, 17120 /*128:out */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE, 17121 /*256:out */ -1 }, 17122 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17123 { /* src xmm */ { FP32_V(1,0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } }, 17124 { /* => r32 */ { FP32_INT_C(-123456), FP32_x7_UNUSED } }, 17125 /*mxcsr:in */ X86_MXCSR_RC_ZERO, 17126 /*128:out */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE, 17127 /*256:out */ -1 }, 17128 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17129 { /* src xmm */ { FP32_V(1,0x766666,0x7e)/*-0.9*/, FP32_RAND_x7_V2 } }, 17130 { /* => r32 */ { FP32_INT_C(-1), FP32_x7_UNUSED } }, 17131 /*mxcsr:in */ X86_MXCSR_FZ, 17132 /*128:out */ X86_MXCSR_PE | X86_MXCSR_FZ, 17133 /*256:out */ -1 }, 17134 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17135 { /* src xmm */ { FP32_V(0,0x766666,0x7e)/*0.9*/, FP32_RAND_x7_V2 } }, 17136 { /* => r32 */ { FP32_INT_C(1), FP32_x7_UNUSED } }, 17137 /*mxcsr:in */ X86_MXCSR_FZ, 17138 /*128:out */ X86_MXCSR_PE | X86_MXCSR_FZ, 17139 /*256:out */ -1 }, 17140 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17141 { /* src xmm */ { FP32_NORM_SAFE_INT_MAX(1), FP32_RAND_x7_V2 } }, 17142 { /* => r32 */ { FP32_INT_C(-16777215), FP32_x7_UNUSED } }, 17143 /*mxcsr:in */ 0, 17144 /*128:out */ 0, 17145 /*256:out */ -1 }, 17146 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17147 { /* src xmm */ { FP32_NORM_SAFE_INT_MAX(0), FP32_RAND_x7_V2 } }, 17148 { /* => r32 */ { FP32_INT_C(16777215), FP32_x7_UNUSED } }, 17149 /*mxcsr:in */ 0, 17150 /*128:out */ 0, 17151 /*256:out */ -1 }, 17152 /* 17153 * Denormals. 17154 */ 17155 /*18*/{ { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17156 { /* src xmm */ { FP32_DENORM_MAX(0), FP32_RAND_x7_V2 } }, 17157 { /* => r32 */ { FP32_INT_C(0), FP32_x7_UNUSED } }, 17158 /*mxcsr:in */ 0, 17159 /*128:out */ X86_MXCSR_PE, 17160 /*256:out */ -1 }, 17161 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17162 { /* src xmm */ { FP32_DENORM_MIN(1), FP32_RAND_x7_V2 } }, 17163 { /* => r32 */ { FP32_INT_C(0), FP32_x7_UNUSED } }, 17164 /*mxcsr:in */ X86_MXCSR_DAZ, 17165 /*128:out */ X86_MXCSR_DAZ, 17166 /*256:out */ -1 }, 17167 /* 17168 * Overflow (Underflow not possible). 17169 */ 17170 /*20*/{ { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17171 { /* src xmm */ { FP32_NORM_MAX(0), FP32_RAND_x7_V2 } }, 17172 { /* => r32 */ { FP32_INT_INDEFINITE, FP32_x7_UNUSED } }, 17173 /*mxcsr:in */ 0, 17174 /*128:out */ X86_MXCSR_IE, 17175 /*256:out */ -1 }, 17176 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17177 { /* src xmm */ { FP32_NORM_MAX(1), FP32_RAND_x7_V2 } }, 17178 { /* => r32 */ { FP32_INT_INDEFINITE, FP32_x7_UNUSED } }, 17179 /*mxcsr:in */ 0, 17180 /*128:out */ X86_MXCSR_IE, 17181 /*256:out */ -1 }, 17182 /* 17183 * Invalids. 17184 */ 17185 /*22*/{ { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17186 { /* src xmm */ { FP32_QNAN(0), FP32_RAND_x7_V2 } }, 17187 { /* => r32 */ { FP32_INT_INDEFINITE, FP32_x7_UNUSED } }, 17188 /*mxcsr:in */ 0, 17189 /*128:out */ X86_MXCSR_IE, 17190 /*256:out */ -1 }, 17191 { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17192 { /* src xmm */ { FP32_SNAN(1), FP32_RAND_x7_V2 } }, 17193 { /* => r32 */ { FP32_INT_INDEFINITE, FP32_x7_UNUSED } }, 17194 /*mxcsr:in */ 0, 17195 /*128:out */ X86_MXCSR_IE, 17196 /*256:out */ -1 }, 17197 }; 17198 static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues64[] = 17199 { 17200 /* 17201 * Zero. 17202 */ 17203 /* 0*/{ { /* unused */ { FP32_ROW_UNUSED } }, 17204 { /* src xmm */ { FP32_0(0), FP32_RAND_x7_V1 } }, 17205 { /* => r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17206 /*mxcsr:in */ 0, 17207 /*128:out */ 0, 17208 /*256:out */ -1 }, 17209 { { /* unused */ { FP32_ROW_UNUSED } }, 17210 { /* src xmm */ { FP32_0(1), FP32_RAND_x7_V1 } }, 17211 { /* => r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17212 /*mxcsr:in */ 0, 17213 /*128:out */ 0, 17214 /*256:out */ -1 }, 17215 /* 17216 * Infinity. 17217 */ 17218 /* 2*/{ { /* unused */ { FP32_ROW_UNUSED } }, 17219 { /* src xmm */ { FP32_INF(1), FP32_RAND_x7_V1 } }, 17220 { /* => r64 */ { FP32_INT64_INDEFINITE, FP32_x6_UNUSED } }, 17221 /*mxcsr:in */ 0, 17222 /*128:out */ X86_MXCSR_IE, 17223 /*256:out */ -1 }, 17224 { { /* unused */ { FP32_ROW_UNUSED } }, 17225 { /* src xmm */ { FP32_INF(0), FP32_RAND_x7_V1 } }, 17226 { /* => r64 */ { FP32_INT64_INDEFINITE, FP32_x6_UNUSED } }, 17227 /*mxcsr:in */ 0, 17228 /*128:out */ X86_MXCSR_IE, 17229 /*256:out */ -1 }, 17230 /* 17231 * Normals & Precision. 17232 */ 17233 /* 4*/{ { /* unused */ { FP32_ROW_UNUSED } }, 17234 { /* src xmm */ { FP32_V(0, 0x712000,0x8f), FP32_RAND_x7_V0 } }, 17235 { /* => r64 */ { FP32_INT64_C(123456), FP32_x6_UNUSED } }, 17236 /*mxcsr:in */ 0, 17237 /*128:out */ 0, 17238 /*256:out */ -1 }, 17239 { { /* unused */ { FP32_ROW_UNUSED } }, 17240 { /* src xmm */ { FP32_V(1, 0x712000,0x8f), FP32_RAND_x7_V0 } }, 17241 { /* => r64 */ { FP32_INT64_C(-123456), FP32_x6_UNUSED } }, 17242 /*mxcsr:in */ 0, 17243 /*128:out */ 0, 17244 /*256:out */ -1 }, 17245 { { /* unused */ { FP32_ROW_UNUSED } }, 17246 { /* src xmm */ { FP32_V(0, 0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } }, 17247 { /* => r64 */ { FP32_INT64_C(123456), FP32_x6_UNUSED } }, 17248 /*mxcsr:in */ 0, 17249 /*128:out */ X86_MXCSR_PE, 17250 /*256:out */ -1 }, 17251 { { /* unused */ { FP32_ROW_UNUSED } }, 17252 { /* src xmm */ { FP32_V(1, 0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } }, 17253 { /* => r64 */ { FP32_INT64_C(-123456), FP32_x6_UNUSED } }, 17254 /*mxcsr:in */ 0, 17255 /*128:out */ X86_MXCSR_PE, 17256 /*256:out */ -1 }, 17257 { { /* unused */ { FP32_ROW_UNUSED } }, 17258 { /* src xmm */ { FP32_V(0, 0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } }, 17259 { /* => r64 */ { FP32_INT64_C(123456), FP32_x6_UNUSED } }, 17260 /*mxcsr:in */ X86_MXCSR_RC_DOWN, 17261 /*128:out */ X86_MXCSR_RC_DOWN | X86_MXCSR_PE, 17262 /*256:out */ -1 }, 17263 { { /* unused */ { FP32_ROW_UNUSED } }, 17264 { /* src xmm */ { FP32_V(1, 0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } }, 17265 { /* => r64 */ { FP32_INT64_C(-123457), FP32_x6_UNUSED } }, 17266 /*mxcsr:in */ X86_MXCSR_RC_DOWN, 17267 /*128:out */ X86_MXCSR_RC_DOWN | X86_MXCSR_PE, 17268 /*256:out */ -1 }, 17269 { { /* unused */ { FP32_ROW_UNUSED } }, 17270 { /* src xmm */ { FP32_V(0, 0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } }, 17271 { /* => r64 */ { FP32_INT64_C(123457), FP32_x6_UNUSED } }, 17272 /*mxcsr:in */ X86_MXCSR_RC_UP, 17273 /*128:out */ X86_MXCSR_RC_UP | X86_MXCSR_PE, 17274 /*256:out */ -1 }, 17275 { { /* unused */ { FP32_ROW_UNUSED } }, 17276 { /* src xmm */ { FP32_V(1, 0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } }, 17277 { /* => r64 */ { FP32_INT64_C(-123456), FP32_x6_UNUSED } }, 17278 /*mxcsr:in */ X86_MXCSR_RC_UP, 17279 /*128:out */ X86_MXCSR_RC_UP | X86_MXCSR_PE, 17280 /*256:out */ -1 }, 17281 { { /* unused */ { FP32_ROW_UNUSED } }, 17282 { /* src xmm */ { FP32_V(0, 0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } }, 17283 { /* => r64 */ { FP32_INT64_C(123456), FP32_x6_UNUSED } }, 17284 /*mxcsr:in */ X86_MXCSR_RC_ZERO, 17285 /*128:out */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE, 17286 /*256:out */ -1 }, 17287 { { /* unused */ { FP32_ROW_UNUSED } }, 17288 { /* src xmm */ { FP32_V(1, 0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } }, 17289 { /* => r64 */ { FP32_INT64_C(-123456), FP32_x6_UNUSED } }, 17290 /*mxcsr:in */ X86_MXCSR_RC_ZERO, 17291 /*128:out */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE, 17292 /*256:out */ -1 }, 17293 { { /* unused */ { FP32_ROW_UNUSED } }, 17294 { /* src xmm */ { FP32_V(1, 0x766666,0x7e)/*-0.9*/, FP32_RAND_x7_V2 } }, 17295 { /* => r64 */ { FP32_INT64_C(-1), FP32_x6_UNUSED } }, 17296 /*mxcsr:in */ X86_MXCSR_FZ, 17297 /*128:out */ X86_MXCSR_PE | X86_MXCSR_FZ, 17298 /*256:out */ -1 }, 17299 { { /* unused */ { FP32_ROW_UNUSED } }, 17300 { /* src xmm */ { FP32_V(0, 0x766666,0x7e)/*0.9*/, FP32_RAND_x7_V2 } }, 17301 { /* => r64 */ { FP32_INT64_C(1), FP32_x6_UNUSED } }, 17302 /*mxcsr:in */ X86_MXCSR_FZ, 17303 /*128:out */ X86_MXCSR_PE | X86_MXCSR_FZ, 17304 /*256:out */ -1 }, 17305 { { /* unused */ { FP32_ROW_UNUSED } }, 17306 { /* src xmm */ { FP32_NORM_SAFE_INT_MAX(1), FP32_RAND_x7_V2 } }, 17307 { /* => r64 */ { FP32_INT64_C(-16777215), FP32_x6_UNUSED } }, 17308 /*mxcsr:in */ 0, 17309 /*128:out */ 0, 17310 /*256:out */ -1 }, 17311 { { /* unused */ { FP32_ROW_UNUSED } }, 17312 { /* src xmm */ { FP32_NORM_SAFE_INT_MAX(0), FP32_RAND_x7_V2 } }, 17313 { /* => r64 */ { FP32_INT64_C(16777215), FP32_x6_UNUSED } }, 17314 /*mxcsr:in */ 0, 17315 /*128:out */ 0, 17316 /*256:out */ -1 }, 17317 /* 17318 * Denormals. 17319 */ 17320 /*18*/{ { /* unused */ { FP32_ROW_UNUSED } }, 17321 { /* src xmm */ { FP32_DENORM_MAX(0), FP32_RAND_x7_V2 } }, 17322 { /* => r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17323 /*mxcsr:in */ 0, 17324 /*128:out */ X86_MXCSR_PE, 17325 /*256:out */ -1 }, 17326 { { /* unused */ { FP32_ROW_UNUSED } }, 17327 { /* src xmm */ { FP32_DENORM_MIN(1), FP32_RAND_x7_V2 } }, 17328 { /* => r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED } }, 17329 /*mxcsr:in */ X86_MXCSR_DAZ, 17330 /*128:out */ X86_MXCSR_DAZ, 17331 /*256:out */ -1 }, 17332 /* 17333 * Overflow (Underflow not possible). 17334 */ 17335 /*20*/{ { /* unused */ { FP32_ROW_UNUSED } }, 17336 { /* src xmm */ { FP32_NORM_MAX(0), FP32_RAND_x7_V2 } }, 17337 { /* => r64 */ { FP32_INT64_INDEFINITE, FP32_x6_UNUSED } }, 17338 /*mxcsr:in */ 0, 17339 /*128:out */ X86_MXCSR_IE, 17340 /*256:out */ -1 }, 17341 { { /* unused */ { FP32_ROW_UNUSED } }, 17342 { /* src xmm */ { FP32_NORM_MAX(1), FP32_RAND_x7_V2 } }, 17343 { /* => r64 */ { FP32_INT64_INDEFINITE, FP32_x6_UNUSED } }, 17344 /*mxcsr:in */ 0, 17345 /*128:out */ X86_MXCSR_IE, 17346 /*256:out */ -1 }, 17347 /* 17348 * Invalids. 17349 */ 17350 /*22*/{ { /* unused */ { FP32_ROW_UNUSED } }, 17351 { /* src xmm */ { FP32_QNAN(0), FP32_RAND_x7_V2 } }, 17352 { /* => r64 */ { FP32_INT64_INDEFINITE, FP32_x6_UNUSED } }, 17353 /*mxcsr:in */ 0, 17354 /*128:out */ X86_MXCSR_IE, 17355 /*256:out */ -1 }, 17356 { { /* unused */ { FP32_ROW_UNUSED } }, 17357 { /* src xmm */ { FP32_SNAN(1), FP32_RAND_x7_V2 } }, 17358 { /* => r64 */ { FP32_INT64_INDEFINITE, FP32_x6_UNUSED } }, 17359 /*mxcsr:in */ 0, 17360 /*128:out */ X86_MXCSR_IE, 17361 /*256:out */ -1 }, 17362 }; 17363 17364 static BS3CPUINSTR4_TEST1_T const s_aTests16[] = 17365 { 17366 { bs3CpuInstr4_cvtss2si_EAX_XMM1_icebp_c16, 255, RM_REG, T_SSE, EAX, XMM1, NOREG, PASS_s_aValues32 }, 17367 { bs3CpuInstr4_cvtss2si_EAX_FSxBX_icebp_c16, 255, RM_MEM, T_SSE, EAX, FSxBX, NOREG, PASS_s_aValues32 }, 17368 17369 { bs3CpuInstr4_vcvtss2si_EAX_XMM1_icebp_c16, 255, RM_REG, T_AVX_128, EAX, XMM1, NOREG, PASS_s_aValues32 }, 17370 { bs3CpuInstr4_vcvtss2si_EAX_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_128, EAX, FSxBX, NOREG, PASS_s_aValues32 }, 17371 17372 { bs3CpuInstr4_vcvtss2si_RAX_XMM1_icebp_c16, BS3_XCPT_UD, RM_REG, T_AVX_128, RAX, XMM1, NOREG, PASS_s_aValues64 }, 17373 { bs3CpuInstr4_vcvtss2si_RAX_FSxBX_icebp_c16, BS3_XCPT_UD, RM_MEM, T_AVX_128, RAX, FSxBX, NOREG, PASS_s_aValues64 }, 17374 }; 17375 17376 static BS3CPUINSTR4_TEST1_T const s_aTests32[] = 17377 { 17378 { bs3CpuInstr4_cvtss2si_EAX_XMM1_icebp_c32, 255, RM_REG, T_SSE, EAX, XMM1, NOREG, PASS_s_aValues32 }, 17379 { bs3CpuInstr4_cvtss2si_EAX_FSxBX_icebp_c32, 255, RM_MEM, T_SSE, EAX, FSxBX, NOREG, PASS_s_aValues32 }, 17380 17381 { bs3CpuInstr4_vcvtss2si_EAX_XMM1_icebp_c32, 255, RM_REG, T_AVX_128, EAX, XMM1, NOREG, PASS_s_aValues32 }, 17382 { bs3CpuInstr4_vcvtss2si_EAX_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_128, EAX, FSxBX, NOREG, PASS_s_aValues32 }, 17383 17384 { bs3CpuInstr4_vcvtss2si_RAX_XMM1_icebp_c32, BS3_XCPT_UD, RM_REG, T_AVX_128, RAX, XMM1, NOREG, PASS_s_aValues64 }, 17385 { bs3CpuInstr4_vcvtss2si_RAX_FSxBX_icebp_c32, BS3_XCPT_UD, RM_MEM, T_AVX_128, RAX, FSxBX, NOREG, PASS_s_aValues64 }, 17386 }; 17387 static BS3CPUINSTR4_TEST1_T const s_aTests64[] = 17388 { 17389 { bs3CpuInstr4_cvtss2si_EAX_XMM1_icebp_c64, 255, RM_REG, T_SSE, EAX, XMM1, RAX, PASS_s_aValues32 }, 17390 { bs3CpuInstr4_cvtss2si_EAX_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, EAX, FSxBX, RAX, PASS_s_aValues32 }, 17391 17392 { bs3CpuInstr4_cvtss2si_R8D_XMM8_icebp_c64, 255, RM_REG, T_SSE, R8D, XMM8, R8, PASS_s_aValues32 }, 17393 { bs3CpuInstr4_cvtss2si_R8D_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, R8D, FSxBX, R8, PASS_s_aValues32 }, 17394 17395 { bs3CpuInstr4_vcvtss2si_EAX_XMM1_icebp_c64, 255, RM_REG, T_AVX_128, EAX, XMM1, RAX, PASS_s_aValues32 }, 17396 { bs3CpuInstr4_vcvtss2si_EAX_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, EAX, FSxBX, RAX, PASS_s_aValues32 }, 17397 17398 { bs3CpuInstr4_vcvtss2si_R8D_XMM8_icebp_c64, 255, RM_REG, T_AVX_128, R8D, XMM8, R8, PASS_s_aValues32 }, 17399 { bs3CpuInstr4_vcvtss2si_R8D_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, R8D, FSxBX, R8, PASS_s_aValues32 }, 17400 17401 { bs3CpuInstr4_cvtss2si_RAX_XMM1_icebp_c64, 255, RM_REG, T_SSE, RAX, XMM1, NOREG, PASS_s_aValues64 }, 17402 { bs3CpuInstr4_cvtss2si_RAX_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, RAX, FSxBX, NOREG, PASS_s_aValues64 }, 17403 17404 { bs3CpuInstr4_cvtss2si_R8_XMM8_icebp_c64, 255, RM_REG, T_SSE, R8, XMM8, NOREG, PASS_s_aValues64 }, 17405 { bs3CpuInstr4_cvtss2si_R8_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, R8, FSxBX, NOREG, PASS_s_aValues64 }, 17406 17407 { bs3CpuInstr4_vcvtss2si_RAX_XMM1_icebp_c64, 255, RM_REG, T_AVX_128, RAX, XMM1, NOREG, PASS_s_aValues64 }, 17408 { bs3CpuInstr4_vcvtss2si_RAX_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, RAX, FSxBX, NOREG, PASS_s_aValues64 }, 17409 17410 { bs3CpuInstr4_vcvtss2si_R8_XMM8_icebp_c64, 255, RM_REG, T_AVX_128, R8, XMM8, NOREG, PASS_s_aValues64 }, 17411 { bs3CpuInstr4_vcvtss2si_R8_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, R8, FSxBX, NOREG, PASS_s_aValues64 }, 17018 17412 }; 17019 17413 … … 17086 17480 { "cvttps2pi", bs3CpuInstr4_cvttps2pi, 0 }, 17087 17481 { "cvtsi2ss", bs3CpuInstr4_cvtsi2ss, 0 }, 17482 { "cvtss2si", bs3CpuInstr4_cvtss2si, 0 }, 17088 17483 #endif 17089 17484 };
Note:
See TracChangeset
for help on using the changeset viewer.