Changeset 106285 in vbox
- Timestamp:
- Oct 10, 2024 10:35:00 AM (6 months ago)
- svn:sync-xref-src-repo-rev:
- 165086
- Location:
- trunk/src/VBox/ValidationKit/bootsectors
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4-template.mac
r106252 r106285 696 696 EMIT_INSTR_PLUS_ICEBP_C64 vsqrtpd, YMM8, YMM9 697 697 EMIT_INSTR_PLUS_ICEBP_C64 vsqrtpd, YMM8, FSxBX 698 ; 699 ;; [v]sqrtss 700 ; 701 EMIT_INSTR_PLUS_ICEBP sqrtss, XMM1, XMM2 702 EMIT_INSTR_PLUS_ICEBP sqrtss, XMM1, FSxBX 703 EMIT_INSTR_PLUS_ICEBP_C64 sqrtss, XMM8, XMM9 704 EMIT_INSTR_PLUS_ICEBP_C64 sqrtss, XMM8, FSxBX 705 706 EMIT_INSTR_PLUS_ICEBP vsqrtss, XMM1, XMM2, XMM3 707 EMIT_INSTR_PLUS_ICEBP vsqrtss, XMM1, XMM2, FSxBX 708 EMIT_INSTR_PLUS_ICEBP_C64 vsqrtss, XMM8, XMM9, XMM10 709 EMIT_INSTR_PLUS_ICEBP_C64 vsqrtss, XMM8, XMM9, FSxBX 710 711 EMIT_INSTR_PLUS_ICEBP sqrtss, XMM1, XMM1 712 EMIT_INSTR_PLUS_ICEBP vsqrtss, XMM1, XMM1, XMM1 713 EMIT_INSTR_PLUS_ICEBP vsqrtss, XMM1, XMM1, XMM2 714 EMIT_INSTR_PLUS_ICEBP vsqrtss, XMM1, XMM2, XMM2 715 EMIT_INSTR_PLUS_ICEBP vsqrtss, XMM1, XMM1, FSxBX 698 716 699 717 %endif ; BS3_INSTANTIATING_CMN -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32
r106284 r106285 14159 14159 14160 14160 14161 /* 14162 * [V]SQRTSS. 14163 */ 14164 BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_sqrtss(uint8_t bMode) 14165 { 14166 static BS3CPUINSTR4_TEST1_VALUES_SS_T const s_aValues[] = 14167 { 14168 /* 14169 * Zero. 14170 */ 14171 /* 0*/{ { /*src1 */ { FP32_0(0), FP32_RAND_x7_V7 } }, 14172 { /*src2 */ { FP32_RAND_V2(0), FP32_RAND_x7_V2 } }, 14173 { /* => */ { FP32_0(0), FP32_RAND_x7_V2 } }, 14174 /*mxcsr:in */ 0, 14175 /*128:out */ 0, 14176 /*256:out */ -1 }, 14177 { { /*src1 */ { FP32_0(1), FP32_RAND_x7_V0 } }, 14178 { /*src2 */ { FP32_RAND_V3(1), FP32_RAND_x7_V1 } }, 14179 { /* => */ { FP32_0(1), FP32_RAND_x7_V1 } }, 14180 /*mxcsr:in */ 0, 14181 /*128:out */ 0, 14182 /*256:out */ -1 }, 14183 { { /*src1 */ { FP32_0(1), FP32_RAND_x7_V2 } }, 14184 { /*src2 */ { FP32_RAND_V5(0), FP32_RAND_x7_V1 } }, 14185 { /* => */ { FP32_0(1), FP32_RAND_x7_V1 } }, 14186 /*mxcsr:in */ X86_MXCSR_RC_ZERO, 14187 /*128:out */ X86_MXCSR_RC_ZERO, 14188 /*256:out */ -1 }, 14189 { { /*src1 */ { FP32_0(1), FP32_RAND_x7_V0 } }, 14190 { /*src2 */ { FP32_SNAN(0), FP32_RAND_x7_V3 } }, 14191 { /* => */ { FP32_0(1), FP32_RAND_x7_V3 } }, 14192 /*mxcsr:in */ X86_MXCSR_RC_UP, 14193 /*128:out */ X86_MXCSR_RC_UP, 14194 /*256:out */ -1 }, 14195 { { /*src1 */ { FP32_0(1), FP32_RAND_x7_V0 } }, 14196 { /*src2 */ { FP32_QNAN(1), FP32_RAND_x7_V3 } }, 14197 { /* => */ { FP32_0(1), FP32_RAND_x7_V3 } }, 14198 /*mxcsr:in */ X86_MXCSR_RC_DOWN, 14199 /*128:out */ X86_MXCSR_RC_DOWN, 14200 /*256:out */ -1 }, 14201 { { /*src1 */ { FP32_0(0), FP32_RAND_x7_V0 } }, 14202 { /*src2 */ { FP32_RAND_V0(1), FP32_RAND_x7_V3 } }, 14203 { /* => */ { FP32_0(0), FP32_RAND_x7_V3 } }, 14204 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ, 14205 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ, 14206 /*256:out */ -1 }, 14207 /* 14208 * Infinity. 14209 */ 14210 /* 6*/{ { /*src1 */ { FP32_INF(0), FP32_RAND_x7_V1 } }, 14211 { /*src2 */ { FP32_RAND_V2(0), FP32_RAND_x7_V0 } }, 14212 { /* => */ { FP32_INF(0), FP32_RAND_x7_V0 } }, 14213 /*mxcsr:in */ 0, 14214 /*128:out */ 0, 14215 /*256:out */ -1 }, 14216 { { /*src1 */ { FP32_INF(0), FP32_RAND_x7_V3 } }, 14217 { /*src2 */ { FP32_2(1), FP32_RAND_x7_V1 } }, 14218 { /* => */ { FP32_INF(0), FP32_RAND_x7_V1 } }, 14219 /*mxcsr:in */ X86_MXCSR_RC_ZERO, 14220 /*128:out */ X86_MXCSR_RC_ZERO, 14221 /*256:out */ -1 }, 14222 { { /*src1 */ { FP32_INF(0), FP32_RAND_x7_V5 } }, 14223 { /*src2 */ { FP32_RAND_V2(0), FP32_RAND_x7_V3 } }, 14224 { /* => */ { FP32_INF(0), FP32_RAND_x7_V3 } }, 14225 /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 14226 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 14227 /*256:out */ -1 }, 14228 { { /*src1 */ { FP32_INF(0), FP32_RAND_x7_V6 } }, 14229 { /*src2 */ { FP32_SNAN(0), FP32_RAND_x7_V0 } }, 14230 { /* => */ { FP32_INF(0), FP32_RAND_x7_V0 } }, 14231 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_UP, 14232 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_RC_UP, 14233 /*256:out */ -1 }, 14234 { { /*src1 */ { FP32_INF(1), FP32_RAND_x7_V6 } }, 14235 { /*src2 */ { FP32_RAND_V2(0), FP32_RAND_x7_V2 } }, 14236 { /* => */ { FP32_QNAN(1), FP32_RAND_x7_V2 } }, 14237 /*mxcsr:in */ 0, 14238 /*128:out */ X86_MXCSR_IE, 14239 /*256:out */ -1 }, 14240 { { /*src1 */ { FP32_INF(1), FP32_RAND_x7_V5 } }, 14241 { /*src2 */ { FP32_RAND_V2(0), FP32_RAND_x7_V1 } }, 14242 { /* => */ { FP32_QNAN(1), FP32_RAND_x7_V1 } }, 14243 /*mxcsr:in */ X86_MXCSR_RC_ZERO, 14244 /*128:out */ X86_MXCSR_IE | X86_MXCSR_RC_ZERO, 14245 /*256:out */ -1 }, 14246 { { /*src1 */ { FP32_INF(1), FP32_RAND_x7_V6 } }, 14247 { /*src2 */ { FP32_QNAN(0), FP32_RAND_x7_V2 } }, 14248 { /* => */ { FP32_QNAN(1), FP32_RAND_x7_V2 } }, 14249 /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 14250 /*128:out */ X86_MXCSR_IE | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 14251 /*256:out */ -1 }, 14252 { { /*src1 */ { FP32_INF(1), FP32_RAND_x7_V3 } }, 14253 { /*src2 */ { FP32_RAND_V4(0), FP32_RAND_x7_V1 } }, 14254 { /* => */ { FP32_QNAN(1), FP32_RAND_x7_V1 } }, 14255 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_UP, 14256 /*128:out */ X86_MXCSR_IE | X86_MXCSR_DAZ | X86_MXCSR_RC_UP, 14257 /*256:out */ -1 }, 14258 /* 14259 * Normals & Precision (Overflow, Underflow not possible). 14260 */ 14261 /*14*/{ { /*src1 */ { FP32_NORM_V0(0), FP32_RAND_x7_V3 } }, 14262 { /*src2 */ { FP32_NORM_V4(0), FP32_RAND_x7_V0 } }, 14263 { /* => */ { FP32_V(0,0x1ccf5c,0x40)/*sqrt(FP32_NORM_V0)*/, FP32_RAND_x7_V0 } }, 14264 /*mxcsr:in */ 0, 14265 /*128:out */ X86_MXCSR_PE, 14266 /*256:out */ -1 }, 14267 { { /*src1 */ { FP32_NORM_V2(0), FP32_RAND_x7_V6 } }, 14268 { /*src2 */ { FP32_1(1), FP32_RAND_x7_V3 } }, 14269 { /* => */ { FP32_V(0,0x3455c7,0x7e)/*sqrt(FP32_NORM_V2)*/, FP32_RAND_x7_V3 } }, 14270 /*mxcsr:in */ X86_MXCSR_FZ, 14271 /*128:out */ X86_MXCSR_PE | X86_MXCSR_FZ, 14272 /*256:out */ -1 }, 14273 { { /*src1 */ { FP32_NORM_V3(0), FP32_0_x7(0) } }, 14274 { /*src2 */ { FP32_NORM_SAFE_INT_MIN(0), FP32_RAND_x7_V1 } }, 14275 { /* => */ { FP32_V(0,0x27905f,0xbe)/*sqrt(FP32_NORM_V3)*/, FP32_RAND_x7_V1 } }, 14276 /*mxcsr:in */ X86_MXCSR_DAZ, 14277 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_PE, 14278 /*256:out */ -1 }, 14279 { { /*src1 */ { FP32_NORM_MAX(0), FP32_RAND_x7_V4 } }, 14280 { /*src2 */ { FP32_NORM_MAX(1), FP32_RAND_x7_V2 } }, 14281 { /* => */ { FP32_V(0,0x7fffff,0xbe)/*sqrt(FP32_NORM_MAX)*/, FP32_RAND_x7_V2 } }, 14282 /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_DAZ, 14283 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_DAZ | X86_MXCSR_PE, 14284 /*256:out */ -1 }, 14285 { { /*src1 */ { FP32_NORM_MIN(0), FP32_RAND_x7_V7 } }, 14286 { /*src2 */ { FP32_INF(1), FP32_RAND_x7_V6 } }, 14287 { /* => */ { FP32_V(0,0x0,0x40)/*sqrt(FP32_NORM_MIN)*/, FP32_RAND_x7_V6 } }, 14288 /*mxcsr:in */ 0, 14289 /*128:out */ 0, 14290 /*256:out */ -1 }, 14291 { { /*src1 */ { FP32_NORM_SAFE_INT_MAX(0), FP32_RAND_x7_V2 } }, 14292 { /*src2 */ { FP32_RAND_V1(1), FP32_RAND_x7_V5 } }, 14293 { /* => */ { FP32_V(0,0x7fffff,0x8a)/*sqrt(FP32_NORM_SAFE_INT_MAX)*/, FP32_RAND_x7_V5 } }, 14294 /*mxcsr:in */ 0, 14295 /*128:out */ X86_MXCSR_PE, 14296 /*256:out */ -1 }, 14297 { { /*src1 */ { FP32_NORM_SAFE_INT_MIN(0), FP32_RAND_x7_V5 } }, 14298 { /*src2 */ { FP32_RAND_V0(0), FP32_RAND_x7_V7 } }, 14299 { /* => */ { FP32_V(0,0x0,0x40)/*sqrt(FP32_NORM_SAFE_INT_MIN)*/, FP32_RAND_x7_V7 } }, 14300 /*mxcsr:in */ 0, 14301 /*128:out */ 0, 14302 /*256:out */ -1 }, 14303 { { /*src1 */ { FP32_V(0,0x0,0x87)/*256.0*/, FP32_RAND_x7_V0 } }, 14304 { /*src2 */ { FP32_2(0), FP32_RAND_x7_V4 } }, 14305 { /* => */ { FP32_V(0,0x0,0x83)/*16.0*/, FP32_RAND_x7_V4 } }, 14306 /*mxcsr:in */ X86_MXCSR_RC_ZERO, 14307 /*128:out */ X86_MXCSR_RC_ZERO, 14308 /*256:out */ -1 }, 14309 { { /*src1 */ { FP32_V(0,0x0,0x87)/*256.0*/, FP32_RAND_x7_V3 } }, 14310 { /*src2 */ { FP32_DENORM_V3(0), FP32_RAND_x7_V4 } }, 14311 { /* => */ { FP32_V(0,0x0,0x83)/*16.0*/, FP32_RAND_x7_V4 } }, 14312 /*mxcsr:in */ X86_MXCSR_RC_UP, 14313 /*128:out */ X86_MXCSR_RC_UP, 14314 /*256:out */ -1 }, 14315 { { /*src1 */ { FP32_V(0,0x40000,0x88)/*528.0*/, FP32_RAND_x7_V6 } }, 14316 { /*src2 */ { FP32_NORM_SAFE_INT_MAX(1), FP32_RAND_x7_V7 } }, 14317 { /* => */ { FP32_V(0,0x37d375,0x83)/*sqrt(528)*/, FP32_RAND_x7_V7 } }, 14318 /*mxcsr:in */ 0, 14319 /*128:out */ X86_MXCSR_PE, 14320 /*256:out */ -1 }, 14321 { { /*src1 */ { FP32_V(0,0x40000,0x88)/*528.0*/, FP32_RAND_x7_V1 } }, 14322 { /*src2 */ { FP32_NORM_V7(0), FP32_RAND_x7_V5 } }, 14323 { /* => */ { FP32_V(0,0x37d376,0x83)/*sqrt(528)[UP]*/, FP32_RAND_x7_V5 } }, 14324 /*mxcsr:in */ X86_MXCSR_RC_UP, 14325 /*128:out */ X86_MXCSR_PE | X86_MXCSR_RC_UP, 14326 /*256:out */ -1 }, 14327 { { /*src1 */ { FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, FP32_RAND_x7_V4 } }, 14328 { /*src2 */ { FP32_0(0), FP32_RAND_x7_V6 } }, 14329 { /* => */ { FP32_V(0,0x5fffff,0x7d)/*7/16-*/, FP32_RAND_x7_V6 } }, 14330 /*mxcsr:in */ X86_MXCSR_RC_DOWN, 14331 /*128:out */ X86_MXCSR_PE | X86_MXCSR_RC_DOWN, 14332 /*256:out */ -1 }, 14333 { { /*src1 */ { FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, FP32_RAND_x7_V7 } }, 14334 { /*src2 */ { FP32_SNAN_V0(1), FP32_RAND_x7_V2 } }, 14335 { /* => */ { FP32_V(0,0x600000,0x7d)/*7/16[UP]*/, FP32_RAND_x7_V2 } }, 14336 /*mxcsr:in */ X86_MXCSR_RC_UP, 14337 /*128:out */ X86_MXCSR_PE | X86_MXCSR_RC_UP, 14338 /*256:out */ -1 }, 14339 { { /*src1 */ { FP32_V(0,0x440000,0x7c)/*(7/16)^2*/, FP32_RAND_x7_V2 } }, 14340 { /*src2 */ { FP32_DENORM_MIN(1), FP32_RAND_x7_V1 } }, 14341 { /* => */ { FP32_V(0,0x600000,0x7d)/*7/16*/, FP32_RAND_x7_V1 } }, 14342 /*mxcsr:in */ 0, 14343 /*128:out */ 0, 14344 /*256:out */ -1 }, 14345 { { /*src1 */ { FP32_V(0,0x44000,0x88)/*529.0*/, FP32_RAND_x7_V5 } }, 14346 { /*src2 */ { FP32_RAND_V7(0), FP32_RAND_x7_V3 } }, 14347 { /* => */ { FP32_V(0,0x380000,0x83)/*23.0*/, FP32_RAND_x7_V3 } }, 14348 /*mxcsr:in */ 0, 14349 /*128:out */ 0, 14350 /*256:out */ -1 }, 14351 { { /*src1 */ { FP32_V(0,0x6f4840,0x8c)/*123.75^2*/, FP32_0_x7(1) } }, 14352 { /*src2 */ { FP32_SNAN_V4(1), FP32_RAND_x7_V0 } }, 14353 { /* => */ { FP32_V(0,0x778000,0x85)/*123.75*/, FP32_RAND_x7_V0 } }, 14354 /*mxcsr:in */ 0, 14355 /*128:out */ 0, 14356 /*256:out */ -1 }, 14357 { { /*src1 */ { FP32_V(0,0x6f4841,0x8c)/*123.75^2+epsilon*/, FP32_RAND_x7_V3 } }, 14358 { /*src2 */ { FP32_QNAN_V2(0), FP32_RAND_x7_V0 } }, 14359 { /* => */ { FP32_V(0,0x778000,0x85)/*123.75[ZERO=DOWN]*/, FP32_RAND_x7_V0 } }, 14360 /*mxcsr:in */ X86_MXCSR_RC_DOWN, 14361 /*128:out */ X86_MXCSR_PE | X86_MXCSR_RC_DOWN, 14362 /*256:out */ -1 }, 14363 { { /*src1 */ { FP32_V(0,0x6f4841,0x8c)/*123.75^2+epsilon*/, FP32_RAND_x7_V6 } }, 14364 { /*src2 */ { FP32_QNAN_V6(1), FP32_RAND_x7_V3 } }, 14365 { /* => */ { FP32_V(0,0x778001,0x85)/*123.75+*/, FP32_RAND_x7_V3 } }, 14366 /*mxcsr:in */ 0, 14367 /*128:out */ X86_MXCSR_PE, 14368 /*256:out */ -1 }, 14369 { { /*src1 */ { FP32_V(0,0x8000,0x87)/*257.0*/, FP32_RAND_x7_V1 } }, 14370 { /*src2 */ { FP32_DENORM_V5(1), FP32_0_x7(0) } }, 14371 { /* => */ { FP32_V(0,0x3ff0,0x83)/*sqrt(257)*/, FP32_0_x7(0) } }, 14372 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_NEAREST, 14373 /*128:out */ X86_MXCSR_PE | X86_MXCSR_DAZ | X86_MXCSR_RC_NEAREST, 14374 /*256:out */ -1 }, 14375 { { /*src1 */ { FP32_V(0,0x8000,0x87)/*257.0*/, FP32_RAND_x7_V4 } }, 14376 { /*src2 */ { FP32_NORM_V0(0), FP32_RAND_x7_V2 } }, 14377 { /* => */ { FP32_V(0,0x3ff1,0x83)/*sqrt(257)[UP]*/, FP32_RAND_x7_V2 } }, 14378 /*mxcsr:in */ X86_MXCSR_RC_UP, 14379 /*128:out */ X86_MXCSR_PE | X86_MXCSR_RC_UP, 14380 /*256:out */ -1 }, 14381 { { /*src1 */ { FP32_V(1,0x8000,0x87)/*-257.0*/, FP32_RAND_x7_V3 } }, 14382 { /*src2 */ { FP32_NORM_V3(0), FP32_RAND_x7_V6 } }, 14383 { /* => */ { FP32_QNAN(1), FP32_RAND_x7_V6 } }, 14384 /*mxcsr:in */ 0, 14385 /*128:out */ X86_MXCSR_IE, 14386 /*256:out */ -1 }, 14387 /* 14388 * Denormals. 14389 */ 14390 /*35*/{ { /*src1 */ { FP32_DENORM_MAX(0), FP32_RAND_x7_V1 } }, 14391 { /*src2 */ { FP32_NORM_V5(0), FP32_RAND_x7_V2 } }, 14392 { /* => */ { FP32_V(0,0x7fffff,0x3f), FP32_RAND_x7_V2 } }, 14393 /*mxcsr:in */ 0, 14394 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE, 14395 /*256:out */ -1 }, 14396 { { /*src1 */ { FP32_DENORM_MAX(0), FP32_RAND_x7_V2 } }, 14397 { /*src2 */ { FP32_DENORM_MIN(1), FP32_RAND_x7_V3 } }, 14398 { /* => */ { FP32_V(0,0x7ffffe,0x3f), FP32_RAND_x7_V3 } }, 14399 /*mxcsr:in */ X86_MXCSR_RC_DOWN, 14400 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_RC_DOWN, 14401 /*256:out */ -1 }, 14402 { { /*src1 */ { FP32_DENORM_MIN(0), FP32_RAND_x7_V3 } }, 14403 { /*src2 */ { FP32_RAND_V1(0), FP32_RAND_x7_V7 } }, 14404 { /* => */ { FP32_V(0,0x3504f3,0x34), FP32_RAND_x7_V7 } }, 14405 /*mxcsr:in */ X86_MXCSR_FZ, 14406 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_FZ, 14407 /*256:out */ -1 }, 14408 { { /*src1 */ { FP32_DENORM_MIN(0), FP32_RAND_x7_V6 } }, 14409 { /*src2 */ { FP32_NORM_V6(1), FP32_RAND_x7_V5 } }, 14410 { /* => */ { FP32_V(0,0x3504f4,0x34), FP32_RAND_x7_V5 } }, 14411 /*mxcsr:in */ X86_MXCSR_RC_UP, 14412 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_RC_UP, 14413 /*256:out */ -1 }, 14414 { { /*src1 */ { FP32_DENORM_V1(0), FP32_RAND_x7_V2 } }, 14415 { /*src2 */ { FP32_NORM_V1(0), FP32_0_x7(1) } }, 14416 { /* => */ { FP32_V(0,0x6f887c,0x3f), FP32_0_x7(1) } }, 14417 /*mxcsr:in */ 0, 14418 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE, 14419 /*256:out */ -1 }, 14420 { { /*src1 */ { FP32_DENORM_V4(0), FP32_0_x7(0) } }, 14421 { /*src2 */ { FP32_RAND_V4(1), FP32_RAND_x7_V4 } }, 14422 { /* => */ { FP32_V(0,0x393731,0x3e), FP32_RAND_x7_V4 } }, 14423 /*mxcsr:in */ X86_MXCSR_FZ, 14424 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_FZ, 14425 /*256:out */ -1 }, 14426 { { /*src1 */ { FP32_DENORM_V5(0), FP32_RAND_x7_V7 } }, 14427 { /*src2 */ { FP32_SNAN_V7(1), FP32_RAND_x7_V0 } }, 14428 { /* => */ { FP32_V(0,0x34ff4b,0x3a), FP32_RAND_x7_V0 } }, 14429 /*mxcsr:in */ 0, 14430 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE, 14431 /*256:out */ -1 }, 14432 { { /*src1 */ { FP32_DENORM_V2(0), FP32_RAND_x7_V5 } }, 14433 { /*src2 */ { FP32_NORM_V3(0), FP32_RAND_x7_V7 } }, 14434 { /* => */ { FP32_0(0), FP32_RAND_x7_V7 } }, 14435 /*mxcsr:in */ X86_MXCSR_DAZ, 14436 /*128:out */ X86_MXCSR_DAZ, 14437 /*256:out */ -1 }, 14438 { { /*src1 */ { FP32_DENORM_V3(1), FP32_RAND_x7_V4 } }, 14439 { /*src2 */ { FP32_QNAN_V4(0), FP32_RAND_x7_V3 } }, 14440 { /* => */ { FP32_0(1), FP32_RAND_x7_V3 } }, 14441 /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_DAZ, 14442 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_DAZ, 14443 /*256:out */ -1 }, 14444 /** @todo Invalids. */ 14445 /*44*/ /* FP64_TABLE_D10_SS_INVALIDS */ 14446 }; 14447 #define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues 14448 14449 /* Sanity-check subset for 'same register' instruction variants */ 14450 static BS3CPUINSTR4_TEST1_VALUES_SS_T const s_aValuesSR[] = 14451 { 14452 /* 14453 * Zero. 14454 */ 14455 /* 0*/{ { /*src1 */ { FP32_0(0), FP32_RAND_x7_V7 } }, 14456 { /*src2 */ { FP32_0(0), FP32_RAND_x7_V7 } }, 14457 { /* => */ { FP32_0(0), FP32_RAND_x7_V7 } }, 14458 /*mxcsr:in */ 0, 14459 /*128:out */ 0, 14460 /*256:out */ -1 }, 14461 { { /*src1 */ { FP32_0(1), FP32_RAND_x7_V0 } }, 14462 { /*src2 */ { FP32_0(1), FP32_RAND_x7_V0 } }, 14463 { /* => */ { FP32_0(1), FP32_RAND_x7_V0 } }, 14464 /*mxcsr:in */ 0, 14465 /*128:out */ 0, 14466 /*256:out */ -1 }, 14467 /* 14468 * Infinity. 14469 */ 14470 /* 2*/{ { /*src1 */ { FP32_INF(0), FP32_RAND_x7_V1 } }, 14471 { /*src2 */ { FP32_INF(0), FP32_RAND_x7_V1 } }, 14472 { /* => */ { FP32_INF(0), FP32_RAND_x7_V1 } }, 14473 /*mxcsr:in */ 0, 14474 /*128:out */ 0, 14475 /*256:out */ -1 }, 14476 { { /*src1 */ { FP32_INF(1), FP32_RAND_x7_V6 } }, 14477 { /*src2 */ { FP32_INF(1), FP32_RAND_x7_V6 } }, 14478 { /* => */ { FP32_QNAN(1), FP32_RAND_x7_V6 } }, 14479 /*mxcsr:in */ 0, 14480 /*128:out */ X86_MXCSR_IE, 14481 /*256:out */ -1 }, 14482 /* 14483 * Normals & Precision (Overflow, Underflow not possible). 14484 */ 14485 /* 4*/{ { /*src1 */ { FP32_NORM_V0(0), FP32_RAND_x7_V3 } }, 14486 { /*src2 */ { FP32_NORM_V0(0), FP32_RAND_x7_V3 } }, 14487 { /* => */ { FP32_V(0,0x1ccf5c,0x40)/*sqrt(FP32_NORM_V0)*/, FP32_RAND_x7_V3 } }, 14488 /*mxcsr:in */ 0, 14489 /*128:out */ X86_MXCSR_PE, 14490 /*256:out */ -1 }, 14491 { { /*src1 */ { FP32_NORM_MIN(0), FP32_RAND_x7_V7 } }, 14492 { /*src2 */ { FP32_NORM_MIN(0), FP32_RAND_x7_V7 } }, 14493 { /* => */ { FP32_V(0,0x0,0x40)/*sqrt(FP32_NORM_MIN)*/, FP32_RAND_x7_V7 } }, 14494 /*mxcsr:in */ 0, 14495 /*128:out */ 0, 14496 /*256:out */ -1 }, 14497 { { /*src1 */ { FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, FP32_RAND_x7_V4 } }, 14498 { /*src2 */ { FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, FP32_RAND_x7_V4 } }, 14499 { /* => */ { FP32_V(0,0x5fffff,0x7d)/*7/16-*/, FP32_RAND_x7_V4 } }, 14500 /*mxcsr:in */ X86_MXCSR_RC_DOWN, 14501 /*128:out */ X86_MXCSR_PE | X86_MXCSR_RC_DOWN, 14502 /*256:out */ -1 }, 14503 { { /*src1 */ { FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, FP32_RAND_x7_V2 } }, 14504 { /*src2 */ { FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, FP32_RAND_x7_V2 } }, 14505 { /* => */ { FP32_V(0,0x600000,0x7d)/*7/16[UP]*/, FP32_RAND_x7_V2 } }, 14506 /*mxcsr:in */ X86_MXCSR_RC_UP, 14507 /*128:out */ X86_MXCSR_PE | X86_MXCSR_RC_UP, 14508 /*256:out */ -1 }, 14509 /* 14510 * Denormals. 14511 */ 14512 /* 8*/{ { /*src1 */ { FP32_DENORM_MAX(0), FP32_RAND_x7_V1 } }, 14513 { /*src2 */ { FP32_DENORM_MAX(0), FP32_RAND_x7_V1 } }, 14514 { /* => */ { FP32_V(0,0x7fffff,0x3f), FP32_RAND_x7_V1 } }, 14515 /*mxcsr:in */ 0, 14516 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE, 14517 /*256:out */ -1 }, 14518 { { /*src1 */ { FP32_DENORM_MIN(0), FP32_RAND_x7_V3 } }, 14519 { /*src2 */ { FP32_DENORM_MIN(1), FP32_RAND_x7_V3 } }, 14520 { /* => */ { FP32_V(0,0x3504f3,0x34), FP32_RAND_x7_V3 } }, 14521 /*mxcsr:in */ X86_MXCSR_FZ, 14522 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_FZ, 14523 /*256:out */ -1 }, 14524 { { /*src1 */ { FP32_DENORM_V3(1), FP32_RAND_x7_V4 } }, 14525 { /*src2 */ { FP32_DENORM_V3(1), FP32_RAND_x7_V4 } }, 14526 { /* => */ { FP32_0(1), FP32_RAND_x7_V4 } }, 14527 /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_DAZ, 14528 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_DAZ, 14529 /*256:out */ -1 }, 14530 /** @todo Invalids. */ 14531 /*11*/ /* FP64_TABLE_D10_SS_INVALIDS // or excerpt? */ 14532 }; 14533 #define PASS_s_aValuesSR RT_ELEMENTS(s_aValuesSR), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValuesSR 14534 14535 static BS3CPUINSTR4_TEST1_T const s_aTests16[] = 14536 { 14537 { bs3CpuInstr4_sqrtss_XMM1_XMM2_icebp_c16, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues }, 14538 { bs3CpuInstr4_sqrtss_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues }, 14539 14540 { bs3CpuInstr4_vsqrtss_XMM1_XMM2_XMM3_icebp_c16, X86_XCPT_AC, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues }, 14541 { bs3CpuInstr4_vsqrtss_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues }, 14542 14543 { bs3CpuInstr4_sqrtss_XMM1_XMM1_icebp_c16, 255, RM_REG, T_SSE, 1, 1, 1, PASS_s_aValuesSR }, 14544 { bs3CpuInstr4_vsqrtss_XMM1_XMM1_XMM1_icebp_c16, X86_XCPT_AC, RM_REG, T_AVX_128, 1, 1, 1, PASS_s_aValuesSR }, 14545 { bs3CpuInstr4_vsqrtss_XMM1_XMM1_XMM2_icebp_c16, X86_XCPT_AC, RM_REG, T_AVX_128, 1, 1, 2, PASS_s_aValues }, 14546 { bs3CpuInstr4_vsqrtss_XMM1_XMM2_XMM2_icebp_c16, X86_XCPT_AC, RM_REG, T_AVX_128, 1, 2, 2, PASS_s_aValuesSR }, 14547 { bs3CpuInstr4_vsqrtss_XMM1_XMM1_FSxBX_icebp_c16, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues }, 14548 }; 14549 static BS3CPUINSTR4_TEST1_T const s_aTests32[] = 14550 { 14551 { bs3CpuInstr4_sqrtss_XMM1_XMM2_icebp_c32, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues }, 14552 { bs3CpuInstr4_sqrtss_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues }, 14553 14554 { bs3CpuInstr4_vsqrtss_XMM1_XMM2_XMM3_icebp_c32, X86_XCPT_AC, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues }, 14555 { bs3CpuInstr4_vsqrtss_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues }, 14556 14557 { bs3CpuInstr4_sqrtss_XMM1_XMM1_icebp_c32, 255, RM_REG, T_SSE, 1, 1, 1, PASS_s_aValuesSR }, 14558 { bs3CpuInstr4_vsqrtss_XMM1_XMM1_XMM1_icebp_c32, X86_XCPT_AC, RM_REG, T_AVX_128, 1, 1, 1, PASS_s_aValuesSR }, 14559 { bs3CpuInstr4_vsqrtss_XMM1_XMM1_XMM2_icebp_c32, X86_XCPT_AC, RM_REG, T_AVX_128, 1, 1, 2, PASS_s_aValues }, 14560 { bs3CpuInstr4_vsqrtss_XMM1_XMM2_XMM2_icebp_c32, X86_XCPT_AC, RM_REG, T_AVX_128, 1, 2, 2, PASS_s_aValuesSR }, 14561 { bs3CpuInstr4_vsqrtss_XMM1_XMM1_FSxBX_icebp_c32, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues }, 14562 }; 14563 static BS3CPUINSTR4_TEST1_T const s_aTests64[] = 14564 { 14565 { bs3CpuInstr4_sqrtss_XMM1_XMM2_icebp_c64, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues }, 14566 { bs3CpuInstr4_sqrtss_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues }, 14567 14568 { bs3CpuInstr4_sqrtss_XMM8_XMM9_icebp_c64, 255, RM_REG, T_SSE, 8, 8, 9, PASS_s_aValues }, 14569 { bs3CpuInstr4_sqrtss_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 8, 8, 255, PASS_s_aValues }, 14570 14571 { bs3CpuInstr4_vsqrtss_XMM1_XMM2_XMM3_icebp_c64, X86_XCPT_AC, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues }, 14572 { bs3CpuInstr4_vsqrtss_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues }, 14573 14574 { bs3CpuInstr4_vsqrtss_XMM8_XMM9_XMM10_icebp_c64, X86_XCPT_AC, RM_REG, T_AVX_128, 8, 9, 10, PASS_s_aValues }, 14575 { bs3CpuInstr4_vsqrtss_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 8, 9, 255, PASS_s_aValues }, 14576 14577 { bs3CpuInstr4_sqrtss_XMM1_XMM1_icebp_c64, 255, RM_REG, T_SSE, 1, 1, 1, PASS_s_aValuesSR }, 14578 { bs3CpuInstr4_vsqrtss_XMM1_XMM1_XMM1_icebp_c64, X86_XCPT_AC, RM_REG, T_AVX_128, 1, 1, 1, PASS_s_aValuesSR }, 14579 { bs3CpuInstr4_vsqrtss_XMM1_XMM1_XMM2_icebp_c64, X86_XCPT_AC, RM_REG, T_AVX_128, 1, 1, 2, PASS_s_aValues }, 14580 { bs3CpuInstr4_vsqrtss_XMM1_XMM2_XMM2_icebp_c64, X86_XCPT_AC, RM_REG, T_AVX_128, 1, 2, 2, PASS_s_aValuesSR }, 14581 { bs3CpuInstr4_vsqrtss_XMM1_XMM1_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues }, 14582 }; 14583 #undef PASS_s_aValues 14584 #undef PASS_s_aValuesSR 14585 14586 static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64); 14587 unsigned const iTest = BS3CPUINSTR4_TEST_MODES_INDEX(bMode); 14588 return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests, 14589 g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5)); 14590 } 14591 14592 14161 14593 /** 14162 14594 * The 32-bit protected mode main function. … … 14212 14644 { "[v]sqrtps", bs3CpuInstr4_v_sqrtps, 0 }, 14213 14645 { "[v]sqrtpd", bs3CpuInstr4_v_sqrtpd, 0 }, 14646 { "[v]sqrtss", bs3CpuInstr4_v_sqrtss, 0 }, 14214 14647 #endif 14215 14648 };
Note:
See TracChangeset
for help on using the changeset viewer.