Changeset 106943 in vbox for trunk/src/VBox/ValidationKit
- Timestamp:
- Nov 11, 2024 9:31:30 PM (6 months ago)
- svn:sync-xref-src-repo-rev:
- 165869
- Location:
- trunk/src/VBox/ValidationKit/bootsectors
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4-template.mac
r106838 r106943 870 870 EMIT_INSTR_PLUS_ICEBP vrsqrtss, XMM1, XMM1, FSxBX 871 871 EMIT_INSTR_PLUS_ICEBP_C64 vrsqrtss, XMM8, XMM8, XMM8 872 873 ; 874 ;; dpps 875 ; 876 EMIT_INSTR_PLUS_ICEBP dpps, XMM1, XMM2, 000h 877 EMIT_INSTR_PLUS_ICEBP dpps, XMM1, XMM2, 0FFh 878 EMIT_INSTR_PLUS_ICEBP dpps, XMM1, XMM2, 0E1h 879 EMIT_INSTR_PLUS_ICEBP dpps, XMM1, FSxBX, 000h 880 EMIT_INSTR_PLUS_ICEBP dpps, XMM1, FSxBX, 0FFh 881 EMIT_INSTR_PLUS_ICEBP dpps, XMM1, FSxBX, 0E1h 882 EMIT_INSTR_PLUS_ICEBP_C64 dpps, XMM8, XMM9, 0E1h 883 EMIT_INSTR_PLUS_ICEBP_C64 dpps, XMM8, FSxBX, 0E1h 884 885 EMIT_INSTR_PLUS_ICEBP vdpps, XMM1, XMM2, XMM3, 000h 886 EMIT_INSTR_PLUS_ICEBP vdpps, XMM1, XMM2, XMM3, 0FFh 887 EMIT_INSTR_PLUS_ICEBP vdpps, XMM1, XMM2, XMM3, 0E1h 888 EMIT_INSTR_PLUS_ICEBP vdpps, XMM1, XMM2, FSxBX, 000h 889 EMIT_INSTR_PLUS_ICEBP vdpps, XMM1, XMM2, FSxBX, 0FFh 890 EMIT_INSTR_PLUS_ICEBP vdpps, XMM1, XMM2, FSxBX, 0E1h 891 EMIT_INSTR_PLUS_ICEBP_C64 vdpps, XMM8, XMM9, XMM10, 0E1h 892 EMIT_INSTR_PLUS_ICEBP_C64 vdpps, XMM8, XMM9, FSxBX, 0E1h 893 894 EMIT_INSTR_PLUS_ICEBP vdpps, YMM1, YMM2, YMM3, 000h 895 EMIT_INSTR_PLUS_ICEBP vdpps, YMM1, YMM2, YMM3, 0FFh 896 EMIT_INSTR_PLUS_ICEBP vdpps, YMM1, YMM2, YMM3, 0E1h 897 EMIT_INSTR_PLUS_ICEBP vdpps, YMM1, YMM2, FSxBX, 000h 898 EMIT_INSTR_PLUS_ICEBP vdpps, YMM1, YMM2, FSxBX, 0FFh 899 EMIT_INSTR_PLUS_ICEBP vdpps, YMM1, YMM2, FSxBX, 0E1h 900 EMIT_INSTR_PLUS_ICEBP_C64 vdpps, YMM8, YMM9, YMM10, 0E1h 901 EMIT_INSTR_PLUS_ICEBP_C64 vdpps, YMM8, YMM9, FSxBX, 0E1h 902 903 EMIT_INSTR_PLUS_ICEBP dpps, XMM1, XMM1, 0E1h 904 EMIT_INSTR_PLUS_ICEBP_C64 dpps, XMM8, XMM8, 0E1h 905 906 EMIT_INSTR_PLUS_ICEBP vdpps, XMM1, XMM1, XMM1, 0E1h 907 EMIT_INSTR_PLUS_ICEBP vdpps, XMM1, XMM2, XMM1, 0E1h 908 EMIT_INSTR_PLUS_ICEBP vdpps, XMM1, XMM1, XMM2, 0E1h 909 EMIT_INSTR_PLUS_ICEBP vdpps, XMM1, XMM2, XMM2, 0E1h 910 EMIT_INSTR_PLUS_ICEBP vdpps, XMM1, XMM1, FSxBX, 0E1h 911 EMIT_INSTR_PLUS_ICEBP_C64 vdpps, XMM8, XMM8, XMM8, 0E1h 912 EMIT_INSTR_PLUS_ICEBP_C64 vdpps, XMM8, XMM8, FSxBX, 0E1h 913 914 EMIT_INSTR_PLUS_ICEBP vdpps, YMM1, YMM1, YMM1, 0E1h 915 EMIT_INSTR_PLUS_ICEBP vdpps, YMM1, YMM2, YMM1, 0E1h 916 EMIT_INSTR_PLUS_ICEBP vdpps, YMM1, YMM1, YMM2, 0E1h 917 EMIT_INSTR_PLUS_ICEBP vdpps, YMM1, YMM2, YMM2, 0E1h 918 EMIT_INSTR_PLUS_ICEBP vdpps, YMM1, YMM1, FSxBX, 0E1h 919 EMIT_INSTR_PLUS_ICEBP_C64 vdpps, YMM8, YMM8, YMM8, 0E1h 920 EMIT_INSTR_PLUS_ICEBP_C64 vdpps, YMM8, YMM8, FSxBX, 0E1h 872 921 873 922 ; -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32
r106872 r106943 3211 3211 # define TODO_X86_MXCSR_UE_IEM 3212 3212 # define TODO_CVTDQ2PD_M64_IEM 3213 # define TODO_MXCSR_ORDER /* (test harness issue, not IEM) */ 3213 3214 #endif /* TODO_EXPOSE_IEM_ERRATA */ 3214 3215 … … 5377 5378 /*11*/{ { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MIN(1), FP32_0(0), FP32_NORM_MIN(1), FP32_NORM_MIN(0) } }, 5378 5379 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0) } }, 5379 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0) ,} },5380 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0) } }, 5380 5381 /*mxcsr:in */ 0, 5381 5382 /*128:out */ 0, … … 7286 7287 { { /*src2 */ { FP32_0(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1), FP32_2(0) } }, 7287 7288 { /*src1 */ { FP32_0(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_2(0), FP32_NORM_MAX(0) } }, 7288 { /* => */ { FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_INF(1), FP32_INF(0) ,} },7289 { /* => */ { FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_INF(1), FP32_INF(0) } }, 7289 7290 /*mxcsr:in */ X86_MXCSR_OM, 7290 7291 /*128:out */ X86_MXCSR_OM, … … 7749 7750 { { /*src2 */ { FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(1) } }, 7750 7751 { /*src1 */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(1), FP64_DENORM_MIN(1) } }, 7751 { /* => */ { FP64_0(0), FP64_0(0), FP64_0(1), FP64_0(0) ,} },7752 { /* => */ { FP64_0(0), FP64_0(0), FP64_0(1), FP64_0(0) } }, 7752 7753 /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 7753 7754 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_PE_FUZZY /* IEM */, … … 8866 8867 * Denormals. 8867 8868 */ 8868 /*18*/{ { /*src2 */ { FP64_DENORM_MAX(1), FP64_DENORM_MIN(0), FP64_DENORM_MIN(1), FP64_DENORM_MAX(0) ,} },8869 { /*src1 */ { FP64_0(1), FP64_DENORM_MIN(1), FP64_0(0), FP64_DENORM_MAX(0) ,} },8869 /*18*/{ { /*src2 */ { FP64_DENORM_MAX(1), FP64_DENORM_MIN(0), FP64_DENORM_MIN(1), FP64_DENORM_MAX(0) } }, 8870 { /*src1 */ { FP64_0(1), FP64_DENORM_MIN(1), FP64_0(0), FP64_DENORM_MAX(0) } }, 8870 8871 { /* => */ { FP64_0(0), FP64_1(1), FP64_0(1), FP64_1(0) } }, 8871 8872 /*mxcsr:in */ 0, … … 8918 8919 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ, 8919 8920 /*256:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE | X86_MXCSR_ZE }, 8920 { { /*src2 */ { FP64_1(0), FP64_1(0), FP64_DENORM_MAX(0), FP64_DENORM_MIN(0) ,} },8921 { { /*src2 */ { FP64_1(0), FP64_1(0), FP64_DENORM_MAX(0), FP64_DENORM_MIN(0) } }, 8921 8922 { /*src1 */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_1(0), FP64_1(0) } }, 8922 8923 { /* => */ { FP64_0(0), FP64_0(0), FP64_INF(0), FP64_INF(0) } }, … … 14931 14932 { { /*src1 */ { FP64_DENORM_MIN(0), FP64_DENORM_MAX(0), FP64_DENORM_MIN(1), FP64_DENORM_MAX(1) } }, 14932 14933 { /*unused */ { FP64_ROW_UNUSED } }, 14933 { /* => */ { FP64_0(0), FP64_0(0), FP64_0(1), FP64_0(1) ,} },14934 { /* => */ { FP64_0(0), FP64_0(0), FP64_0(1), FP64_0(1) } }, 14934 14935 /*mxcsr:in */ X86_MXCSR_DAZ, 14935 14936 /*128:out */ X86_MXCSR_DAZ, … … 16377 16378 16378 16379 /* 16380 * [V]DPPS. 16381 */ 16382 /** @todo this fails entirely under IEM, getting #GP faults and many differences in exceptions */ 16383 BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_dpps(uint8_t bMode) 16384 { 16385 static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues00[] = 16386 { 16387 /* 16388 * Zero. 16389 */ 16390 /* 0*/{ { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 16391 { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 16392 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16393 /*mxcsr:in */ 0, 16394 /*128:out */ 0, 16395 /*256:out */ 0 }, 16396 { { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 16397 { /*src2 */ { FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1), FP32_INF(0), FP32_INF(1), FP32_RAND_V0(0), FP32_RAND_V0(1) } }, 16398 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16399 /*mxcsr:in */ 0, 16400 /*128:out */ 0, 16401 /*256:out */ 0 }, 16402 /* 16403 * Infinity. 16404 */ 16405 /* 2*/{ { /*src1 */ { FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(0), FP32_INF(0) } }, 16406 { /*src2 */ { FP32_INF(0), FP32_INF(1), FP32_2(0), FP32_RAND_V0(1), FP32_2(1), FP32_2(0), FP32_1(0), FP32_1(1) } }, 16407 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16408 /*mxcsr:in */ 0, 16409 /*128:out */ 0, 16410 /*256:out */ 0 }, 16411 /* 16412 * Normals. 16413 */ 16414 /* 3*/{ { /*src1 */ { FP32_NORM_V0(0), FP32_NORM_V1(1), FP32_NORM_V2(0), FP32_NORM_V3(1), FP32_RAND_V4(0), FP32_RAND_V5(1), FP32_RAND_V6(1), FP32_RAND_V7(0) } }, 16415 { /*src2 */ { FP32_NORM_V4(0), FP32_NORM_V5(0), FP32_NORM_V6(1), FP32_NORM_V7(1), FP32_RAND_V3(1), FP32_RAND_V2(0), FP32_RAND_V1(0), FP32_RAND_V0(0) } }, 16416 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16417 /*mxcsr:in */ 0, 16418 /*128:out */ 0, 16419 /*256:out */ 0 }, 16420 /* 16421 * Denormals. 16422 */ 16423 /* 4*/{ { /*src1 */ { FP32_DENORM_V0(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_V3(1), FP32_DENORM_V4(0), FP32_DENORM_V5(1), FP32_DENORM_V6(1), FP32_DENORM_V7(0) } }, 16424 { /*src2 */ { FP32_DENORM_V4(0), FP32_DENORM_V5(0), FP32_DENORM_V6(1), FP32_DENORM_V7(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_V1(0), FP32_DENORM_V0(0) } }, 16425 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16426 /*mxcsr:in */ 0, 16427 /*128:out */ 0, 16428 /*256:out */ 0 }, 16429 /* 16430 * Invalids. 16431 */ 16432 /* 5*/{ { /*src1 */ { FP32_QNAN_V5(0), FP32_QNAN_V2(1), FP32_QNAN_V0(1), FP32_QNAN_V0(0), FP32_QNAN_V3(1), FP32_QNAN_V7(0), FP32_QNAN(0), FP32_QNAN_V4(1) } }, 16433 { /*src2 */ { FP32_QNAN(1), FP32_QNAN_V1(0), FP32_QNAN_MAX(0), FP32_QNAN_V6(0), FP32_QNAN_V5(1), FP32_QNAN_V7(1), FP32_QNAN_V6(1), FP32_QNAN_MAX(1) } }, 16434 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16435 /*mxcsr:in */ 0, 16436 /*128:out */ 0, 16437 /*256:out */ 0 }, 16438 { { /*src1 */ { FP32_SNAN_V5(0), FP32_SNAN_V2(1), FP32_SNAN_V0(1), FP32_SNAN_V0(0), FP32_SNAN_V3(1), FP32_SNAN_V7(0), FP32_SNAN(0), FP32_SNAN_V4(1) } }, 16439 { /*src2 */ { FP32_SNAN(1), FP32_SNAN_V1(0), FP32_SNAN_MAX(0), FP32_SNAN_V6(0), FP32_SNAN_V5(1), FP32_SNAN_V7(1), FP32_SNAN_V6(1), FP32_SNAN_MAX(1) } }, 16440 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16441 /*mxcsr:in */ 0, 16442 /*128:out */ 0, 16443 /*256:out */ 0 }, 16444 /* 16445 * Precision, Overflow, Underflow not possible in 'imm 0' case. 16446 */ 16447 }; 16448 static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValuesFF[] = 16449 { 16450 /* 16451 * Zero. 16452 */ 16453 /* 0*/{ { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 16454 { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 16455 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16456 /*mxcsr:in */ 0, 16457 /*128:out */ 0, 16458 /*256:out */ 0 }, 16459 { { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 16460 { /*src2 */ { FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1), FP32_NORM_V0(0), FP32_NORM_V0(1), FP32_RAND_V0(0), FP32_RAND_V0(1) } }, 16461 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16462 /*mxcsr:in */ 0, 16463 /*128:out */ 0, 16464 /*256:out */ 0 }, 16465 /* 16466 * Infinity. 16467 */ 16468 /* 2*/{ { /*src1 */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(0) } }, 16469 { /*src2 */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(0) } }, 16470 { /* => */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0) } }, 16471 /*mxcsr:in */ 0, 16472 /*128:out */ 0, 16473 /*256:out */ 0 }, 16474 { { /*src1 */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(0) } }, 16475 { /*src2 */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(1) } }, 16476 { /* => */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 16477 /*mxcsr:in */ 0, /* oo + -oo = IE */ 16478 /*128:out */ 0, 16479 /*256:out */ X86_MXCSR_IE }, 16480 { { /*src1 */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_0(0), FP32_0(1), FP32_0(0) } }, 16481 { /*src2 */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } }, 16482 { /* => */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 16483 /*mxcsr:in */ 0, /* oo * 0 = IE */ 16484 /*128:out */ 0, 16485 /*256:out */ X86_MXCSR_IE }, 16486 { { /*src1 */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } }, 16487 { /*src2 */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0) } }, 16488 { /* => */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } }, 16489 /*mxcsr:in */ 0, /* big * big = oo (OE); big * -big = -oo (OE) */ 16490 /*128:out */ X86_MXCSR_OE | X86_MXCSR_PE, 16491 /*256:out */ X86_MXCSR_OE | X86_MXCSR_PE }, 16492 /** @todo the following three entries (including ifdef'd out one) are one test, with some corners unexplored due to tester issues. 16493 * The tester 'knows' that DE/IE/ZE are 'early' exceptions while OE/PE/UE are 'late'. This instruction can hit them in different 16494 * orders due to its internal sequence of operations. Possible fix: for all instructions, first run it unmasked; then, whatever 16495 * exception(s) hit, run it with those masked; repeat, adding more masks until the expected exceptions have all been delivered (or not). 16496 * Note this is a tester issue, the CPU is behaving correctly, we just aren't able to test it properly at the moment. 16497 */ 16498 { { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } }, 16499 { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } }, 16500 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) /* unused */ } }, 16501 /*mxcsr:in */ 0, /* big * big = oo (OE); big * -big = -oo (OE) */ 16502 /*128:out */ 0, /* OE hits in multiply step, before IE in addition step */ 16503 /*256:out */ X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED }, 16504 { { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } }, 16505 { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } }, 16506 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } }, 16507 /*mxcsr:in */ X86_MXCSR_IM | X86_MXCSR_OM | X86_MXCSR_PM, /* big * big = oo (OE); big * -big = -oo (OE); oo + -oo = IE */ 16508 /*128:out */ X86_MXCSR_IM | X86_MXCSR_OM | X86_MXCSR_PM, 16509 /*256:out */ X86_MXCSR_IM | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_IE | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_IM_FIXED | BS3_MXCSR_OM_FIXED | BS3_MXCSR_PM_FIXED }, 16510 #ifdef TODO_MXCSR_ORDER /** @todo wrong order of exceptions, see above */ 16511 /*--| 8*/{ { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } }, 16512 { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } }, 16513 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) /* unused */ } }, 16514 /*mxcsr:in */ X86_MXCSR_OM, /* big * big = oo (OE); big * -big = -oo (OE); oo + -oo = IE */ 16515 /*128:out */ X86_MXCSR_OM, 16516 /*256:out */ X86_MXCSR_OM | X86_MXCSR_IE | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED }, 16517 #endif /* TODO_MXCSR_ORDER */ 16518 /* 16519 * Normals, Precision, Overflow. 16520 */ 16521 /* 8| 9*/{ { /*src1 */ { FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1), FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1) } }, 16522 { /*src2 */ { FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1), FP32_1(1), FP32_1(0), FP32_2(0), FP32_2(0) } }, 16523 { /* => */ { FP32_V(0,0x200000,0x82), FP32_V(0,0x200000,0x82), FP32_V(0,0x200000,0x82), FP32_V(0,0x200000,0x82), FP32_2(1), FP32_2(1), FP32_2(1), FP32_2(1) } }, 16524 /*10.0*/ /*10.0*/ /*10.0*/ /*10.0*/ 16525 /*mxcsr:in */ 0, 16526 /*128:out */ 0, 16527 /*256:out */ 0 }, 16528 { { /*src1 */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } }, 16529 { /*src2 */ { FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0) } }, 16530 { /* => */ { FP32_ROW_UNUSED } }, 16531 /*mxcsr:in */ 0, 16532 /*128:out */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED, 16533 /*256:out */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED }, 16534 { { /*src1 */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(1) } }, 16535 { /*src2 */ { FP32_2(0), FP32_2(1), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(1), FP32_2(0) } }, 16536 { /* => */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } }, 16537 /*mxcsr:in */ X86_MXCSR_OM, 16538 /*128:out */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED, 16539 /*256:out */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED }, 16540 /** @todo more normals; rounding controls affecting different steps of the calculation */ 16541 /* 16542 * Denormals, Underflow. 16543 */ 16544 /*11|12*/{ { /*src1 */ { FP32_DENORM_V0(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_V3(1), FP32_DENORM_V4(0), FP32_DENORM_V5(1), FP32_DENORM_V6(1), FP32_DENORM_V7(0) } }, 16545 { /*src2 */ { FP32_DENORM_V4(0), FP32_DENORM_V5(0), FP32_DENORM_V6(1), FP32_DENORM_V7(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_V1(0), FP32_DENORM_V0(0) } }, 16546 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16547 /*mxcsr:in */ 0, 16548 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE, 16549 /*256:out */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE }, 16550 #define TINY_MAXx8 FP32_V(0,0x7ffffe,3) /* 8 * FP32_DENORM_MAX(0) */ 16551 #define TINY_MINx8 FP32_V(0,8,0) /* 8 * FP32_DENORM_MIN(0) */ 16552 { { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } }, 16553 { /*src2 */ { FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0) } }, 16554 { /* => */ { TINY_MAXx8, TINY_MAXx8, TINY_MAXx8, TINY_MAXx8, /* unused */ } }, 16555 /*mxcsr:in */ 0, 16556 /*128:out */ X86_MXCSR_DE, 16557 /*256:out */ X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED }, 16558 { { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } }, 16559 { /*src2 */ { FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0) } }, 16560 { /* => */ { TINY_MAXx8, TINY_MAXx8, TINY_MAXx8, TINY_MAXx8, TINY_MINx8, TINY_MINx8, TINY_MINx8, TINY_MINx8 } }, 16561 /*mxcsr:in */ X86_MXCSR_UM, 16562 /*128:out */ X86_MXCSR_DE, 16563 /*256:out */ X86_MXCSR_UM | X86_MXCSR_DE | BS3_MXCSR_UM_FIXED }, 16564 { { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } }, 16565 { /*src2 */ { FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0) } }, 16566 { /* => */ { TINY_MAXx8, TINY_MAXx8, TINY_MAXx8, TINY_MAXx8, /* unused */ } }, 16567 /*mxcsr:in */ X86_MXCSR_FZ, 16568 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_DE, 16569 /*256:out */ X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED }, 16570 { { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } }, 16571 { /*src2 */ { FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0) } }, 16572 { /* => */ { TINY_MAXx8, TINY_MAXx8, TINY_MAXx8, TINY_MAXx8, FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16573 /*mxcsr:in */ X86_MXCSR_UM | X86_MXCSR_FZ, 16574 /*128:out */ X86_MXCSR_UM | X86_MXCSR_FZ | X86_MXCSR_DE, 16575 /*256:out */ X86_MXCSR_UM | X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED }, 16576 #undef TINY_MAXx8 16577 #undef TINY_MINx8 16578 /* 16579 * Invalids. 16580 */ 16581 /*16|17*/{ { /*src1 */ { FP32_QNAN_V5(0), FP32_QNAN_V2(1), FP32_QNAN_V0(1), FP32_QNAN_V0(0), FP32_QNAN_V3(1), FP32_QNAN_V7(0), FP32_QNAN(0), FP32_QNAN_V4(1) } }, 16582 { /*src2 */ { FP32_QNAN(1), FP32_QNAN_V1(0), FP32_QNAN_MAX(0), FP32_QNAN_V6(0), FP32_QNAN_V5(1), FP32_QNAN_V7(1), FP32_QNAN_V6(1), FP32_QNAN_MAX(1) } }, 16583 { /* => */ { FP32_QNAN_V1(0), FP32_QNAN(1), FP32_QNAN_V6(0), FP32_QNAN_MAX(0), FP32_QNAN_V7(1), FP32_QNAN_V5(1), FP32_QNAN_MAX(1), FP32_QNAN_V6(1) } }, 16584 /*mxcsr:in */ 0, /* output swaps src2 input pairs?!? -- result from i7-10700 */ 16585 /*128:out */ 0, 16586 /*256:out */ 0 }, 16587 { { /*src1 */ { FP32_SNAN_V5(0), FP32_SNAN_V2(1), FP32_SNAN_V0(1), FP32_SNAN_V0(0), FP32_SNAN_V3(1), FP32_SNAN_V7(0), FP32_SNAN(0), FP32_SNAN_V4(1) } }, 16588 { /*src2 */ { FP32_SNAN(1), FP32_SNAN_V1(0), FP32_SNAN_MAX(0), FP32_SNAN_V6(0), FP32_SNAN_V5(1), FP32_SNAN_V7(1), FP32_SNAN_V6(1), FP32_SNAN_MAX(1) } }, 16589 { /* => */ { FP32_QNAN_V1(0), FP32_QNAN_V(1,1), FP32_QNAN_V6(0), FP32_QNAN_MAX(0), FP32_QNAN_V7(1), FP32_QNAN_V5(1), FP32_QNAN_MAX(1), FP32_QNAN_V6(1) } }, 16590 /*mxcsr:in */ 0, /* output has swapped src2 input pairs?!? -- result from i7-10700 */ 16591 /*128:out */ X86_MXCSR_IE, 16592 /*256:out */ X86_MXCSR_IE }, 16593 { { /*src1 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0) } }, 16594 { /*src2 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_QNAN_MAX(1) } }, 16595 { /* => */ { FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1) } }, 16596 /*4.0*/ /*4.0*/ /*4.0*/ /*4.0*/ 16597 /*mxcsr:in */ 0, /* output duplicates the NaN 4x?!? -- result from i7-10700 */ 16598 /*128:out */ 0, 16599 /*256:out */ 0 }, 16600 { { /*src1 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0) } }, 16601 { /*src2 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_QNAN_MAX(1), FP32_1(0), FP32_1(0), FP32_1(0) } }, 16602 { /* => */ { FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1) } }, 16603 /*4.0*/ /*4.0*/ /*4.0*/ /*4.0*/ 16604 /*mxcsr:in */ 0, /* output duplicates the NaN 4x?!? -- result from i7-10700 */ 16605 /*128:out */ 0, 16606 /*256:out */ 0 }, 16607 { { /*src1 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_QNAN_MAX(1), FP32_1(0) } }, 16608 { /*src2 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0) } }, 16609 { /* => */ { FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1) } }, 16610 /*4.0*/ /*4.0*/ /*4.0*/ /*4.0*/ 16611 /*mxcsr:in */ 0, /* output duplicates the NaN 4x?!? -- result from i7-10700 */ 16612 /*128:out */ 0, 16613 /*256:out */ 0 }, 16614 { { /*src1 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0) } }, 16615 { /*src2 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_SNAN_MAX(1) } }, 16616 { /* => */ { FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1) } }, 16617 /*4.0*/ /*4.0*/ /*4.0*/ /*4.0*/ 16618 /*mxcsr:in */ 0, /* output duplicates the NaN 4x?!? -- result from i7-10700 */ 16619 /*128:out */ 0, 16620 /*256:out */ X86_MXCSR_IE }, 16621 }; 16622 static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValuesE1[] = 16623 { 16624 /* 16625 * Zero. 16626 */ 16627 /* 0*/{ { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 16628 { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 16629 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16630 /*mxcsr:in */ 0, 16631 /*128:out */ 0, 16632 /*256:out */ 0 }, 16633 { { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 16634 { /*src2 */ { FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1), FP32_NORM_V0(0), FP32_NORM_V0(1), FP32_RAND_V0(0), FP32_RAND_V0(1) } }, 16635 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16636 /*mxcsr:in */ 0, 16637 /*128:out */ 0, 16638 /*256:out */ 0 }, 16639 /* 16640 * Infinity. 16641 */ 16642 /* 2*/{ { /*src1 */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(0) } }, 16643 { /*src2 */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(0) } }, 16644 { /* => */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16645 /*mxcsr:in */ 0, 16646 /*128:out */ 0, 16647 /*256:out */ 0 }, 16648 { { /*src1 */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(0) } }, 16649 { /*src2 */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(1) } }, 16650 { /* => */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16651 /*mxcsr:in */ 0, /* oo + -oo = IE */ 16652 /*128:out */ 0, 16653 /*256:out */ X86_MXCSR_IE }, 16654 { { /*src1 */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_0(0), FP32_0(1), FP32_0(0) } }, 16655 { /*src2 */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1) } }, 16656 { /* => */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16657 /*mxcsr:in */ 0, /* no IE: the oo * 0 dot-product is skipped */ 16658 /*128:out */ 0, 16659 /*256:out */ 0 }, 16660 { { /*src1 */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } }, 16661 { /*src2 */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0) } }, 16662 { /* => */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16663 /*mxcsr:in */ 0, /* big * big = oo (OE); big * -big = -oo (OE) */ 16664 /*128:out */ X86_MXCSR_OE | X86_MXCSR_PE, 16665 /*256:out */ X86_MXCSR_OE | X86_MXCSR_PE }, 16666 { { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } }, 16667 { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } }, 16668 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) /* unused */ } }, 16669 /*mxcsr:in */ 0, /* big * big = oo (OE); big * -big = -oo (OE) */ 16670 /*128:out */ 0, /* OE hits in multiply step, before IE in addition step */ 16671 /*256:out */ X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED }, 16672 { { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1) } }, 16673 { /*src2 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } }, 16674 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16675 /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM, /* big * big = oo (OE) is skipped; big * -big = -oo (OE); -oo + -oo = -oo (!IE) */ 16676 /*128:out */ X86_MXCSR_OM | X86_MXCSR_PM, 16677 /*256:out */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED | BS3_MXCSR_PM_FIXED }, 16678 /* 16679 * Normals, Precision, Overflow. 16680 */ 16681 /* 8*/{ { /*src1 */ { FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1), FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1) } }, 16682 { /*src2 */ { FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1), FP32_1(1), FP32_1(0), FP32_2(0), FP32_2(0) } }, 16683 { /* => */ { FP32_V(0,0x100000,0x82), FP32_0(0), FP32_0(0), FP32_0(0), FP32_1(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16684 /*9.0*/ 16685 /*mxcsr:in */ 0, 16686 /*128:out */ 0, 16687 /*256:out */ 0 }, 16688 { { /*src1 */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } }, 16689 { /*src2 */ { FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0) } }, 16690 { /* => */ { FP32_ROW_UNUSED } }, 16691 /*mxcsr:in */ 0, 16692 /*128:out */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED, 16693 /*256:out */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED }, 16694 { { /*src1 */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(1) } }, 16695 { /*src2 */ { FP32_2(0), FP32_2(1), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(1), FP32_2(0) } }, 16696 { /* => */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16697 /*mxcsr:in */ X86_MXCSR_OM, 16698 /*128:out */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED, 16699 /*256:out */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED }, 16700 /** @todo more normals; rounding controls affecting different steps of the calculation */ 16701 /* 16702 * Denormals, Underflow. 16703 */ 16704 { { /*src1 */ { FP32_DENORM_V0(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_V3(1), FP32_DENORM_V4(0), FP32_DENORM_V5(1), FP32_DENORM_V6(1), FP32_DENORM_V7(0) } }, 16705 { /*src2 */ { FP32_DENORM_V4(0), FP32_DENORM_V5(0), FP32_DENORM_V6(1), FP32_DENORM_V7(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_V1(0), FP32_DENORM_V0(0) } }, 16706 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16707 /*mxcsr:in */ 0, 16708 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED, 16709 /*256:out */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE }, 16710 { { /*src1 */ { FP32_DENORM_V0(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_V3(1), FP32_DENORM_V4(0), FP32_DENORM_V5(1), FP32_DENORM_V6(1), FP32_DENORM_V7(0) } }, 16711 { /*src2 */ { FP32_DENORM_V4(0), FP32_DENORM_V5(0), FP32_DENORM_V6(1), FP32_DENORM_V7(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_V1(0), FP32_DENORM_V0(0) } }, 16712 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16713 /*mxcsr:in */ X86_MXCSR_UM, 16714 /*128:out */ X86_MXCSR_UM | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED, 16715 /*256:out */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE }, 16716 { { /*src1 */ { FP32_DENORM_V0(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_V3(1), FP32_DENORM_V4(0), FP32_DENORM_V5(1), FP32_DENORM_V6(1), FP32_DENORM_V7(0) } }, 16717 { /*src2 */ { FP32_DENORM_V4(0), FP32_DENORM_V5(0), FP32_DENORM_V6(1), FP32_DENORM_V7(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_V1(0), FP32_DENORM_V0(0) } }, 16718 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16719 /*mxcsr:in */ X86_MXCSR_DM, 16720 /*128:out */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED, 16721 /*256:out */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE }, 16722 #define TINY_MAXx6 FP32_V(0,0x3ffffe,3) /* 6 * FP32_DENORM_MAX(0) */ 16723 #define TINY_MINx6 FP32_V(0,6,0) /* 6 * FP32_DENORM_MIN(0) */ 16724 { { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } }, 16725 { /*src2 */ { FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0) } }, 16726 { /* => */ { TINY_MAXx6, FP32_0(0), FP32_0(0), FP32_0(0) /* unused */ } }, 16727 /*mxcsr:in */ 0, 16728 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE, 16729 /*256:out */ X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED }, 16730 { { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } }, 16731 { /*src2 */ { FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0) } }, 16732 { /* => */ { TINY_MAXx6, FP32_0(0), FP32_0(0), FP32_0(0) /* unused */ } }, 16733 /*mxcsr:in */ 0, 16734 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE, 16735 /*256:out */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED }, 16736 { { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } }, 16737 { /*src2 */ { FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0) } }, 16738 { /* => */ { TINY_MAXx6, FP32_0(0), FP32_0(0), FP32_0(0), TINY_MINx6, FP32_0(0), FP32_0(0), FP32_0(0) } }, 16739 /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_UM, 16740 /*128:out */ X86_MXCSR_DE | X86_MXCSR_PE, 16741 /*256:out */ X86_MXCSR_DM | X86_MXCSR_UM | X86_MXCSR_DE | X86_MXCSR_PE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED }, 16742 { { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } }, 16743 { /*src2 */ { FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0) } }, 16744 { /* => */ { TINY_MAXx6, FP32_0(0), FP32_0(0), FP32_0(0), TINY_MINx6, FP32_0(0), FP32_0(0), FP32_0(0) } }, 16745 /*mxcsr:in */ X86_MXCSR_FZ, 16746 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_PE, 16747 /*256:out */ X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED }, 16748 { { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } }, 16749 { /*src2 */ { FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0), FP32_2(0) } }, 16750 { /* => */ { TINY_MAXx6, FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16751 /*mxcsr:in */ X86_MXCSR_UM | X86_MXCSR_FZ, 16752 /*128:out */ X86_MXCSR_UM | X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_PE, 16753 /*256:out */ X86_MXCSR_UM | X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED }, 16754 #undef TINY_MAXx6 16755 #undef TINY_MINx6 16756 /* 16757 * Invalids. 16758 */ 16759 /*16|17*/{ { /*src1 */ { FP32_QNAN_V5(0), FP32_QNAN_V2(1), FP32_QNAN_V0(1), FP32_QNAN_V0(0), FP32_QNAN_V3(1), FP32_QNAN_V7(0), FP32_QNAN(0), FP32_QNAN_V4(1) } }, 16760 { /*src2 */ { FP32_QNAN(1), FP32_QNAN_V1(0), FP32_QNAN_MAX(0), FP32_QNAN_V6(0), FP32_QNAN_V5(1), FP32_QNAN_V7(1), FP32_QNAN_V6(1), FP32_QNAN_MAX(1) } }, 16761 { /* => */ { FP32_QNAN_V1(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN_V7(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16762 /*mxcsr:in */ 0, /* output swaps src2 input pairs?!? -- result from i7-10700 */ 16763 /*128:out */ 0, 16764 /*256:out */ 0 }, 16765 { { /*src1 */ { FP32_SNAN_V5(0), FP32_SNAN_V2(1), FP32_SNAN_V0(1), FP32_SNAN_V0(0), FP32_SNAN_V3(1), FP32_SNAN_V7(0), FP32_SNAN(0), FP32_SNAN_V4(1) } }, 16766 { /*src2 */ { FP32_SNAN(1), FP32_SNAN_V1(0), FP32_SNAN_MAX(0), FP32_SNAN_V6(0), FP32_SNAN_V5(1), FP32_SNAN_V7(1), FP32_SNAN_V6(1), FP32_SNAN_MAX(1) } }, 16767 { /* => */ { FP32_QNAN_V1(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN_V7(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16768 /*mxcsr:in */ 0, /* output has swapped src2 input pairs?!? -- result from i7-10700 */ 16769 /*128:out */ X86_MXCSR_IE, 16770 /*256:out */ X86_MXCSR_IE }, 16771 { { /*src1 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0) } }, 16772 { /*src2 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_QNAN_MAX(1) } }, 16773 { /* => */ { FP32_V(0,0x400000,0x80), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16774 /*3.0*/ 16775 /*mxcsr:in */ 0, /* output grabs the one NaN -- result from i7-10700 */ 16776 /*128:out */ 0, 16777 /*256:out */ 0 }, 16778 { { /*src1 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0) } }, 16779 { /*src2 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_QNAN_MAX(1), FP32_1(0), FP32_1(0), FP32_1(0) } }, 16780 { /* => */ { FP32_V(0,0x400000,0x80), FP32_0(0), FP32_0(0), FP32_0(0), FP32_V(0,0x400000,0x80), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16781 /*3.0*/ /*3.0*/ 16782 /*mxcsr:in */ 0, /* the NaN isn't in the specified set of calculations */ 16783 /*128:out */ 0, 16784 /*256:out */ 0 }, 16785 { { /*src1 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_QNAN_MAX(1), FP32_1(0) } }, 16786 { /*src2 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0) } }, 16787 { /* => */ { FP32_V(0,0x400000,0x80), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16788 /*3.0*/ 16789 /*mxcsr:in */ 0, /* output grabs the one NaN -- result from i7-10700 */ 16790 /*128:out */ 0, 16791 /*256:out */ 0 }, 16792 { { /*src1 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0) } }, 16793 { /*src2 */ { FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_SNAN_MAX(1) } }, 16794 { /* => */ { FP32_V(0,0x400000,0x80), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16795 /*3.0*/ 16796 /*mxcsr:in */ 0, /* output grabs the one NaN -- result from i7-10700 */ 16797 /*128:out */ 0, 16798 /*256:out */ X86_MXCSR_IE }, 16799 }; 16800 static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValuesSR[] = 16801 { 16802 /* 16803 * Zero. 16804 */ 16805 /* 0*/{ { /*unused */ { FP32_ROW_UNUSED } }, 16806 { /*src1 */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 16807 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16808 /*mxcsr:in */ 0, 16809 /*128:out */ 0, 16810 /*256:out */ 0 }, 16811 /* 16812 * Infinity. 16813 */ 16814 /* 1*/{ { /*src1 */ { FP32_ROW_UNUSED } }, 16815 { /*unused */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } }, 16816 { /* => */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0) } }, 16817 /*mxcsr:in */ 0, 16818 /*128:out */ 0, 16819 /*256:out */ 0 }, 16820 }; 16821 16822 static BS3CPUINSTR4_TEST1_T const s_aTests16[] = 16823 { 16824 { bs3CpuInstr4_dpps_XMM1_XMM2_000h_icebp_c16, 255, RM_REG, T_SSE4_1, XMM1, XMM1, XMM2, PASS_ELEMENTS(s_aValues00) }, 16825 { bs3CpuInstr4_dpps_XMM1_XMM2_0E1h_icebp_c16, 255, RM_REG, T_SSE4_1, XMM1, XMM1, XMM2, PASS_ELEMENTS(s_aValuesE1) }, 16826 { bs3CpuInstr4_dpps_XMM1_XMM2_0FFh_icebp_c16, 255, RM_REG, T_SSE4_1, XMM1, XMM1, XMM2, PASS_ELEMENTS(s_aValuesFF) }, 16827 { bs3CpuInstr4_dpps_XMM1_FSxBX_000h_icebp_c16, 255, RM_MEM, T_SSE4_1, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues00) }, 16828 { bs3CpuInstr4_dpps_XMM1_FSxBX_0E1h_icebp_c16, 255, RM_MEM, T_SSE4_1, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16829 { bs3CpuInstr4_dpps_XMM1_FSxBX_0FFh_icebp_c16, 255, RM_MEM, T_SSE4_1, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesFF) }, 16830 16831 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_000h_icebp_c16, 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, PASS_ELEMENTS(s_aValues00) }, 16832 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_0E1h_icebp_c16, 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, PASS_ELEMENTS(s_aValuesE1) }, 16833 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_0FFh_icebp_c16, 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, PASS_ELEMENTS(s_aValuesFF) }, 16834 { bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_000h_icebp_c16, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValues00) }, 16835 { bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_0E1h_icebp_c16, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16836 { bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_0FFh_icebp_c16, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) }, 16837 16838 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_000h_icebp_c16, 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3, PASS_ELEMENTS(s_aValues00) }, 16839 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_0E1h_icebp_c16, 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3, PASS_ELEMENTS(s_aValuesE1) }, 16840 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_0FFh_icebp_c16, 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3, PASS_ELEMENTS(s_aValuesFF) }, 16841 { bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_000h_icebp_c16, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValues00) }, 16842 { bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_0E1h_icebp_c16, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16843 { bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_0FFh_icebp_c16, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) }, 16844 16845 { bs3CpuInstr4_dpps_XMM1_XMM1_0E1h_icebp_c16, 255, RM_REG, T_SSE4_1, XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16846 16847 { bs3CpuInstr4_vdpps_XMM1_XMM1_XMM1_0E1h_icebp_c16, 255, RM_REG, T_AVX_128, XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16848 { bs3CpuInstr4_vdpps_XMM1_XMM1_XMM2_0E1h_icebp_c16, 255, RM_REG, T_AVX_128, XMM1, XMM1, XMM2, PASS_ELEMENTS(s_aValuesE1) }, 16849 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM1_0E1h_icebp_c16, 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM1, PASS_ELEMENTS(s_aValuesE1) }, 16850 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM2_0E1h_icebp_c16, 255, RM_REG, T_AVX_128, XMM1, XMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16851 { bs3CpuInstr4_vdpps_XMM1_XMM1_FSxBX_0E1h_icebp_c16, 255, RM_MEM, T_AVX_128, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16852 16853 { bs3CpuInstr4_vdpps_YMM1_YMM1_YMM1_0E1h_icebp_c16, 255, RM_REG, T_AVX_256, YMM1, YMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16854 { bs3CpuInstr4_vdpps_YMM1_YMM1_YMM2_0E1h_icebp_c16, 255, RM_REG, T_AVX_256, YMM1, YMM1, YMM2, PASS_ELEMENTS(s_aValuesE1) }, 16855 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM1_0E1h_icebp_c16, 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM1, PASS_ELEMENTS(s_aValuesE1) }, 16856 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM2_0E1h_icebp_c16, 255, RM_REG, T_AVX_256, YMM1, YMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16857 { bs3CpuInstr4_vdpps_YMM1_YMM1_FSxBX_0E1h_icebp_c16, 255, RM_MEM, T_AVX_256, YMM1, YMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16858 }; 16859 static BS3CPUINSTR4_TEST1_T const s_aTests32[] = 16860 { 16861 { bs3CpuInstr4_dpps_XMM1_XMM2_000h_icebp_c32, 255, RM_REG, T_SSE4_1, XMM1, XMM1, XMM2, PASS_ELEMENTS(s_aValues00) }, 16862 { bs3CpuInstr4_dpps_XMM1_XMM2_0E1h_icebp_c32, 255, RM_REG, T_SSE4_1, XMM1, XMM1, XMM2, PASS_ELEMENTS(s_aValuesE1) }, 16863 { bs3CpuInstr4_dpps_XMM1_XMM2_0FFh_icebp_c32, 255, RM_REG, T_SSE4_1, XMM1, XMM1, XMM2, PASS_ELEMENTS(s_aValuesFF) }, 16864 { bs3CpuInstr4_dpps_XMM1_FSxBX_000h_icebp_c32, 255, RM_MEM, T_SSE4_1, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues00) }, 16865 { bs3CpuInstr4_dpps_XMM1_FSxBX_0E1h_icebp_c32, 255, RM_MEM, T_SSE4_1, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16866 { bs3CpuInstr4_dpps_XMM1_FSxBX_0FFh_icebp_c32, 255, RM_MEM, T_SSE4_1, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesFF) }, 16867 16868 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_000h_icebp_c32, 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, PASS_ELEMENTS(s_aValues00) }, 16869 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_0E1h_icebp_c32, 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, PASS_ELEMENTS(s_aValuesE1) }, 16870 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_0FFh_icebp_c32, 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, PASS_ELEMENTS(s_aValuesFF) }, 16871 { bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_000h_icebp_c32, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValues00) }, 16872 { bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_0E1h_icebp_c32, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16873 { bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_0FFh_icebp_c32, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) }, 16874 16875 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_000h_icebp_c32, 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3, PASS_ELEMENTS(s_aValues00) }, 16876 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_0E1h_icebp_c32, 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3, PASS_ELEMENTS(s_aValuesE1) }, 16877 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_0FFh_icebp_c32, 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3, PASS_ELEMENTS(s_aValuesFF) }, 16878 { bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_000h_icebp_c32, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValues00) }, 16879 { bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_0E1h_icebp_c32, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16880 { bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_0FFh_icebp_c32, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) }, 16881 16882 { bs3CpuInstr4_dpps_XMM1_XMM1_0E1h_icebp_c32, 255, RM_REG, T_SSE4_1, XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16883 16884 { bs3CpuInstr4_vdpps_XMM1_XMM1_XMM1_0E1h_icebp_c32, 255, RM_REG, T_AVX_128, XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16885 { bs3CpuInstr4_vdpps_XMM1_XMM1_XMM2_0E1h_icebp_c32, 255, RM_REG, T_AVX_128, XMM1, XMM1, XMM2, PASS_ELEMENTS(s_aValuesE1) }, 16886 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM1_0E1h_icebp_c32, 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM1, PASS_ELEMENTS(s_aValuesE1) }, 16887 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM2_0E1h_icebp_c32, 255, RM_REG, T_AVX_128, XMM1, XMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16888 { bs3CpuInstr4_vdpps_XMM1_XMM1_FSxBX_0E1h_icebp_c32, 255, RM_MEM, T_AVX_128, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16889 16890 { bs3CpuInstr4_vdpps_YMM1_YMM1_YMM1_0E1h_icebp_c32, 255, RM_REG, T_AVX_256, YMM1, YMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16891 { bs3CpuInstr4_vdpps_YMM1_YMM1_YMM2_0E1h_icebp_c32, 255, RM_REG, T_AVX_256, YMM1, YMM1, YMM2, PASS_ELEMENTS(s_aValuesE1) }, 16892 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM1_0E1h_icebp_c32, 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM1, PASS_ELEMENTS(s_aValuesE1) }, 16893 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM2_0E1h_icebp_c32, 255, RM_REG, T_AVX_256, YMM1, YMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16894 { bs3CpuInstr4_vdpps_YMM1_YMM1_FSxBX_0E1h_icebp_c32, 255, RM_MEM, T_AVX_256, YMM1, YMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16895 }; 16896 static BS3CPUINSTR4_TEST1_T const s_aTests64[] = 16897 { 16898 { bs3CpuInstr4_dpps_XMM1_XMM2_000h_icebp_c64, 255, RM_REG, T_SSE4_1, XMM1, XMM1, XMM2, PASS_ELEMENTS(s_aValues00) }, 16899 { bs3CpuInstr4_dpps_XMM1_XMM2_0E1h_icebp_c64, 255, RM_REG, T_SSE4_1, XMM1, XMM1, XMM2, PASS_ELEMENTS(s_aValuesE1) }, 16900 { bs3CpuInstr4_dpps_XMM1_XMM2_0FFh_icebp_c64, 255, RM_REG, T_SSE4_1, XMM1, XMM1, XMM2, PASS_ELEMENTS(s_aValuesFF) }, 16901 { bs3CpuInstr4_dpps_XMM1_FSxBX_000h_icebp_c64, 255, RM_MEM, T_SSE4_1, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues00) }, 16902 { bs3CpuInstr4_dpps_XMM1_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_SSE4_1, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16903 { bs3CpuInstr4_dpps_XMM1_FSxBX_0FFh_icebp_c64, 255, RM_MEM, T_SSE4_1, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesFF) }, 16904 { bs3CpuInstr4_dpps_XMM8_XMM9_0E1h_icebp_c64, 255, RM_REG, T_SSE4_1, XMM8, XMM8, XMM9, PASS_ELEMENTS(s_aValuesE1) }, 16905 { bs3CpuInstr4_dpps_XMM8_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_SSE4_1, XMM8, XMM8, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16906 16907 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_000h_icebp_c64, 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, PASS_ELEMENTS(s_aValues00) }, 16908 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_0E1h_icebp_c64, 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, PASS_ELEMENTS(s_aValuesE1) }, 16909 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_0FFh_icebp_c64, 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3, PASS_ELEMENTS(s_aValuesFF) }, 16910 { bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_000h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValues00) }, 16911 { bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16912 { bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_0FFh_icebp_c64, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) }, 16913 { bs3CpuInstr4_vdpps_XMM8_XMM9_XMM10_0E1h_icebp_c64, 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, PASS_ELEMENTS(s_aValuesE1) }, 16914 { bs3CpuInstr4_vdpps_XMM8_XMM9_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM8, XMM9, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16915 16916 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_000h_icebp_c64, 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3, PASS_ELEMENTS(s_aValues00) }, 16917 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_0E1h_icebp_c64, 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3, PASS_ELEMENTS(s_aValuesE1) }, 16918 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_0FFh_icebp_c64, 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3, PASS_ELEMENTS(s_aValuesFF) }, 16919 { bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_000h_icebp_c64, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValues00) }, 16920 { bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16921 { bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_0FFh_icebp_c64, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) }, 16922 { bs3CpuInstr4_vdpps_YMM8_YMM9_YMM10_0E1h_icebp_c64, 255, RM_REG, T_AVX_256, YMM8, YMM9, YMM10, PASS_ELEMENTS(s_aValuesE1) }, 16923 { bs3CpuInstr4_vdpps_YMM8_YMM9_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_256, YMM8, YMM9, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16924 16925 { bs3CpuInstr4_dpps_XMM1_XMM1_0E1h_icebp_c64, 255, RM_REG, T_SSE4_1, XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16926 { bs3CpuInstr4_dpps_XMM8_XMM8_0E1h_icebp_c64, 255, RM_REG, T_SSE4_1, XMM8, XMM8, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16927 16928 { bs3CpuInstr4_vdpps_XMM1_XMM1_XMM1_0E1h_icebp_c64, 255, RM_REG, T_AVX_128, XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16929 { bs3CpuInstr4_vdpps_XMM1_XMM1_XMM2_0E1h_icebp_c64, 255, RM_REG, T_AVX_128, XMM1, XMM1, XMM2, PASS_ELEMENTS(s_aValuesE1) }, 16930 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM1_0E1h_icebp_c64, 255, RM_REG, T_AVX_128, XMM1, XMM2, XMM1, PASS_ELEMENTS(s_aValuesE1) }, 16931 { bs3CpuInstr4_vdpps_XMM1_XMM2_XMM2_0E1h_icebp_c64, 255, RM_REG, T_AVX_128, XMM1, XMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16932 { bs3CpuInstr4_vdpps_XMM1_XMM1_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16933 { bs3CpuInstr4_vdpps_XMM8_XMM8_XMM8_0E1h_icebp_c64, 255, RM_REG, T_AVX_128, XMM8, XMM8, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16934 { bs3CpuInstr4_vdpps_XMM8_XMM8_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM8, XMM8, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16935 16936 { bs3CpuInstr4_vdpps_YMM1_YMM1_YMM1_0E1h_icebp_c64, 255, RM_REG, T_AVX_256, YMM1, YMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16937 { bs3CpuInstr4_vdpps_YMM1_YMM1_YMM2_0E1h_icebp_c64, 255, RM_REG, T_AVX_256, YMM1, YMM1, YMM2, PASS_ELEMENTS(s_aValuesE1) }, 16938 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM1_0E1h_icebp_c64, 255, RM_REG, T_AVX_256, YMM1, YMM2, YMM1, PASS_ELEMENTS(s_aValuesE1) }, 16939 { bs3CpuInstr4_vdpps_YMM1_YMM2_YMM2_0E1h_icebp_c64, 255, RM_REG, T_AVX_256, YMM1, YMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16940 { bs3CpuInstr4_vdpps_YMM1_YMM1_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_256, YMM1, YMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16941 { bs3CpuInstr4_vdpps_YMM8_YMM8_YMM8_0E1h_icebp_c64, 255, RM_REG, T_AVX_256, YMM8, YMM8, NOREG, PASS_ELEMENTS(s_aValuesSR) }, 16942 { bs3CpuInstr4_vdpps_YMM8_YMM8_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_256, YMM8, YMM8, FSxBX, PASS_ELEMENTS(s_aValuesE1) }, 16943 }; 16944 16945 static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16,s_aTests32,s_aTests64); 16946 unsigned const iTest = BS3CPUINSTR4_TEST_MODES_INDEX(bMode); 16947 return bs3CpuInstr4_WorkerTestType1(bMode,s_aTests[iTest].paTests,s_aTests[iTest].cTests, 16948 g_aXcptConfig4,RT_ELEMENTS(g_aXcptConfig4)); 16949 } 16950 16951 16952 /* 16379 16953 * CVTPI2PS. 16380 16954 */ … … 20056 20630 }; 20057 20631 20058 #define TODO_CVTDQ2PD_M64_IEM /** @todo testing IEM fix for unexpected #GP */20059 20632 static BS3CPUINSTR4_TEST1_T const s_aTests16[] = 20060 20633 { … … 21710 22283 { "[v]rsqrtps", bs3CpuInstr4_v_rsqrtps, 0 }, 21711 22284 { "[v]rsqrtss", bs3CpuInstr4_v_rsqrtss, 0 }, 22285 { "[v]dpps", bs3CpuInstr4_v_dpps, 0 }, 21712 22286 { "cvtpi2ps", bs3CpuInstr4_cvtpi2ps, 0 }, 21713 22287 { "cvtps2pi", bs3CpuInstr4_cvtps2pi, 0 },
Note:
See TracChangeset
for help on using the changeset viewer.