Changeset 106132 in vbox for trunk/src/VBox/ValidationKit/bootsectors
- Timestamp:
- Sep 24, 2024 2:00:45 AM (5 months ago)
- Location:
- trunk/src/VBox/ValidationKit/bootsectors
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4-template.mac
r106115 r106132 586 586 EMIT_INSTR_PLUS_ICEBP_C64 vminps, YMM8, YMM9, FSxBX 587 587 588 ; 589 ;; [v]sqrtps 590 ; 591 EMIT_INSTR_PLUS_ICEBP sqrtps, XMM1, XMM2 592 EMIT_INSTR_PLUS_ICEBP sqrtps, XMM1, FSxBX 593 EMIT_INSTR_PLUS_ICEBP_C64 sqrtps, XMM8, XMM9 594 EMIT_INSTR_PLUS_ICEBP_C64 sqrtps, XMM8, FSxBX 595 596 EMIT_INSTR_PLUS_ICEBP vsqrtps, XMM1, XMM2 597 EMIT_INSTR_PLUS_ICEBP vsqrtps, XMM1, FSxBX 598 EMIT_INSTR_PLUS_ICEBP_C64 vsqrtps, XMM8, XMM9 599 EMIT_INSTR_PLUS_ICEBP_C64 vsqrtps, XMM8, FSxBX 600 601 EMIT_INSTR_PLUS_ICEBP vsqrtps, YMM1, YMM2 602 EMIT_INSTR_PLUS_ICEBP vsqrtps, YMM1, FSxBX 603 EMIT_INSTR_PLUS_ICEBP_C64 vsqrtps, YMM8, YMM9 604 EMIT_INSTR_PLUS_ICEBP_C64 vsqrtps, YMM8, FSxBX 605 606 588 607 %endif ; BS3_INSTANTIATING_CMN 589 608 -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32
r106115 r106132 8365 8365 /*xcpt? */ false, false }, 8366 8366 #ifdef TODO_X86_MXCSR_UE /** @todo THIS FAILS ON IEM: X86_MXCSR_UE not set in 256:out */ 8367 /*-- /22*/{ { /*src2 */ { FP64_1(0), FP64_1(1), FP64_1(0), FP64_1(0) } },8367 /*--|22*/{ { /*src2 */ { FP64_1(0), FP64_1(1), FP64_1(0), FP64_1(0) } }, 8368 8368 { /*src1 */ { FP64_0(0), FP64_0(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } }, 8369 8369 { /* => */ { FP64_0(0), FP64_0(1), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } }, … … 8373 8373 /*xcpt? */ false, true }, 8374 8374 #endif /* TODO_X86_MXCSR_UE */ 8375 /*22 /23*/{ { /*src2 */ { FP64_1(0), FP64_1(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },8375 /*22|23*/{ { /*src2 */ { FP64_1(0), FP64_1(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } }, 8376 8376 { /*src1 */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_0(0), FP64_1(1) } }, 8377 8377 { /* => */ { FP64_0(0), FP64_0(0), FP64_QNAN(1), FP64_INF(1) } }, … … 11909 11909 11910 11910 11911 /* 11912 * [V]SQRTPS. 11913 */ 11914 BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_sqrtps(uint8_t bMode) 11915 { 11916 #define FP32_x8_UNUSED FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0) 11917 static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues[] = 11918 { 11919 /* 11920 * Zero. 11921 */ 11922 /* 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) } }, 11923 { /*unused */ { FP32_x8_UNUSED } }, 11924 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 11925 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 11926 /*128:out */ X86_MXCSR_XCPT_MASK, 11927 /*256:out */ X86_MXCSR_XCPT_MASK, 11928 /*xcpt? */ false, false }, 11929 { { /*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) } }, 11930 { /*unused */ { FP32_x8_UNUSED } }, 11931 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 11932 /*mxcsr:in */ 0, 11933 /*128:out */ 0, 11934 /*256:out */ 0, 11935 /*xcpt? */ false, false }, 11936 { { /*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) } }, 11937 { /*unused */ { FP32_x8_UNUSED } }, 11938 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 11939 /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP, 11940 /*128:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP, 11941 /*256:out */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP, 11942 /*xcpt? */ false, false }, 11943 { { /*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) } }, 11944 { /*unused */ { FP32_x8_UNUSED } }, 11945 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 11946 /*mxcsr:in */ X86_MXCSR_RC_ZERO, 11947 /*128:out */ X86_MXCSR_RC_ZERO, 11948 /*256:out */ X86_MXCSR_RC_ZERO, 11949 /*xcpt? */ false, false }, 11950 { { /*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) } }, 11951 { /*unused */ { FP32_x8_UNUSED } }, 11952 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } }, 11953 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 11954 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 11955 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 11956 /*xcpt? */ false, false }, 11957 /* 11958 * Infinity. 11959 */ 11960 /* 5*/{ { /*src1 */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 11961 { /*unused */ { FP32_x8_UNUSED } }, 11962 { /* => */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 11963 /*mxcsr:in */ 0, 11964 /*128:out */ 0, 11965 /*256:out */ X86_MXCSR_IE, 11966 /*xcpt? */ false, true }, 11967 { { /*src1 */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 11968 { /*unused */ { FP32_x8_UNUSED } }, 11969 { /* => */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN(1), FP32_0(0), FP32_0(0), FP32_0(0) } }, 11970 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 11971 /*128:out */ X86_MXCSR_XCPT_MASK, 11972 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE, 11973 /*xcpt? */ false, false }, 11974 /* 11975 * Precision (Overflow, Underflow not possible). 11976 */ 11977 /* 7*/{ { /*src1 */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0) } }, 11978 { /*unused */ { FP32_x8_UNUSED } }, 11979 { /* => */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_V(0, 0x3504f3, 0x7f)/*sqrt(2)*/ } }, 11980 /*mxcsr:in */ 0, 11981 /*128:out */ 0, 11982 /*256:out */ X86_MXCSR_PE, 11983 /*xcpt? */ false, true }, 11984 { { /*src1 */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0) } }, 11985 { /*unused */ { FP32_x8_UNUSED } }, 11986 { /* => */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_V(0, 0x3504f3, 0x7f)/*sqrt(2)*/ } }, 11987 /*mxcsr:in */ X86_MXCSR_PM, 11988 /*128:out */ X86_MXCSR_PM, 11989 /*256:out */ X86_MXCSR_PM | X86_MXCSR_PE, 11990 /*xcpt? */ false, false }, 11991 { { /*src1 */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0) } }, 11992 { /*unused */ { FP32_x8_UNUSED } }, 11993 { /* => */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_V(0, 0x3504f3, 0x7f)/*sqrt(2)*/ } }, 11994 /*mxcsr:in */ X86_MXCSR_PM | X86_MXCSR_RC_DOWN, 11995 /*128:out */ X86_MXCSR_PM | X86_MXCSR_RC_DOWN, 11996 /*256:out */ X86_MXCSR_PM | X86_MXCSR_RC_DOWN | X86_MXCSR_PE, 11997 /*xcpt? */ false, false }, 11998 { { /*src1 */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0) } }, 11999 { /*unused */ { FP32_x8_UNUSED } }, 12000 { /* => */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_V(0, 0x3504f4, 0x7f)/*sqrt^(2)*/ } }, 12001 /*mxcsr:in */ X86_MXCSR_PM | X86_MXCSR_RC_UP, 12002 /*128:out */ X86_MXCSR_PM | X86_MXCSR_RC_UP, 12003 /*256:out */ X86_MXCSR_PM | X86_MXCSR_RC_UP | X86_MXCSR_PE, 12004 /*xcpt? */ false, false }, 12005 { { /*src1 */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0) } }, 12006 { /*unused */ { FP32_x8_UNUSED } }, 12007 { /* => */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_V(0, 0x3504f3, 0x7f)/*sqrt(2)*/ } }, 12008 /*mxcsr:in */ X86_MXCSR_PM | X86_MXCSR_RC_ZERO, 12009 /*128:out */ X86_MXCSR_PM | X86_MXCSR_RC_ZERO, 12010 /*256:out */ X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_PE, 12011 /*xcpt? */ false, false }, 12012 { { /*src1 */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0) } }, 12013 { /*unused */ { FP32_x8_UNUSED } }, 12014 { /* => */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_V(0, 0x3504f3, 0x7f)/*sqrt(2)*/ } }, 12015 /*mxcsr:in */ X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_DAZ, 12016 /*128:out */ X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_DAZ, 12017 /*256:out */ X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_DAZ | X86_MXCSR_PE, 12018 /*xcpt? */ false, false }, 12019 /* 12020 * Normals. 12021 */ 12022 /*13*/{ { /*src1 */ { FP32_NORM_V0(0), FP32_NORM_V1(0), FP32_NORM_V2(0), FP32_NORM_V3(0), FP32_NORM_V4(0), FP32_NORM_V5(0), FP32_NORM_V6(0), FP32_NORM_V7(0) } }, 12023 { /*unused */ { FP32_x8_UNUSED } }, 12024 { /* => */ { FP32_V(0,0x1ccf5c,0x40)/*sqrt(FP32_NORM_V0)*/, 12025 FP32_V(0,0x293fdb,0x97)/*sqrt(FP32_NORM_V1)*/, 12026 FP32_V(0,0x3455c7,0x7e)/*sqrt(FP32_NORM_V2)*/, 12027 FP32_V(0,0x27905f,0xbe)/*sqrt(FP32_NORM_V3)*/, 12028 FP32_V(0,0x49278b,0x9d)/*sqrt(FP32_NORM_V4)*/, 12029 FP32_V(0,0x009150,0xa8)/*sqrt(FP32_NORM_V5)*/, 12030 FP32_V(0,0x561776,0x5d)/*sqrt(FP32_NORM_V6)*/, 12031 FP32_V(0,0x3504f3,0x68)/*sqrt(FP32_NORM_V7)*/ } }, 12032 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 12033 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE, 12034 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE, 12035 /*xcpt? */ false, false }, 12036 { { /*src1 */ { FP32_V(0,0x44000,0x88)/*529.0*/, 12037 FP32_V(0,0x0,0x87)/*256.0*/, 12038 FP32_V(0,0x440000,0x7c)/*(7/16)^2*/, 12039 FP32_V(0,0x6f4840,0x8c)/*123.75^2*/, 12040 FP32_V(0,0x40000,0x88)/*528.0*/, 12041 FP32_V(0,0x8000,0x87)/*257.0*/, 12042 FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, 12043 FP32_V(0,0x6f4841,0x8c)/*123.75^2+epsilon*/ } }, 12044 { /*unused */ { FP32_x8_UNUSED } }, 12045 { /* => */ { FP32_V(0,0x380000,0x83)/*23.0*/, 12046 FP32_V(0,0x0,0x83)/*16.0*/, 12047 FP32_V(0,0x600000,0x7d)/*7/16*/, 12048 FP32_V(0,0x778000,0x85)/*123.75*/, 12049 FP32_V(0,0x37d375,0x83)/*sqrt(528)*/, 12050 FP32_V(0,0x3ff0,0x83)/*sqrt(257)*/, 12051 FP32_V(0,0x5fffff,0x7d)/*7/16-*/, 12052 FP32_V(0,0x778001,0x85)/*123.75+*/ } }, 12053 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 12054 /*128:out */ X86_MXCSR_XCPT_MASK, 12055 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE, 12056 /*xcpt? */ false, false }, 12057 { { /*src1 */ { FP32_V(0,0x44000,0x88)/*529.0*/, 12058 FP32_V(0,0x0,0x87)/*256.0*/, 12059 FP32_V(0,0x440000,0x7c)/*(7/16)^2*/, 12060 FP32_V(0,0x6f4840,0x8c)/*123.75^2*/, 12061 FP32_V(0,0x40000,0x88)/*528.0*/, 12062 FP32_V(0,0x8000,0x87)/*257.0*/, 12063 FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, 12064 FP32_V(0,0x6f4841,0x8c)/*123.75^2+epsilon*/ } }, 12065 { /*unused */ { FP32_x8_UNUSED } }, 12066 { /* => */ { FP32_V(0,0x380000,0x83)/*23.0*/, 12067 FP32_V(0,0x0,0x83)/*16.0*/, 12068 FP32_V(0,0x600000,0x7d)/*7/16*/, 12069 FP32_V(0,0x778000,0x85)/*123.75*/, 12070 FP32_V(0,0x37d375,0x83)/*sqrt(528)*/, 12071 FP32_V(0,0x3ff0,0x83)/*sqrt(257)*/, 12072 FP32_V(0,0x5fffff,0x7d)/*7/16-*/, 12073 FP32_V(0,0x778000,0x85)/*123.75[DOWN]*/ } }, 12074 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 12075 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 12076 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE | X86_MXCSR_RC_DOWN, 12077 /*xcpt? */ false, false }, 12078 { { /*src1 */ { FP32_V(0,0x44000,0x88)/*529.0*/, 12079 FP32_V(0,0x0,0x87)/*256.0*/, 12080 FP32_V(0,0x440000,0x7c)/*(7/16)^2*/, 12081 FP32_V(0,0x6f4840,0x8c)/*123.75^2*/, 12082 FP32_V(0,0x40000,0x88)/*528.0*/, 12083 FP32_V(0,0x8000,0x87)/*257.0*/, 12084 FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, 12085 FP32_V(0,0x6f4841,0x8c)/*123.75^2+epsilon*/ } }, 12086 { /*unused */ { FP32_x8_UNUSED } }, 12087 { /* => */ { FP32_V(0,0x380000,0x83)/*23.0*/, 12088 FP32_V(0,0x0,0x83)/*16.0*/, 12089 FP32_V(0,0x600000,0x7d)/*7/16*/, 12090 FP32_V(0,0x778000,0x85)/*123.75*/, 12091 FP32_V(0,0x37d376,0x83)/*sqrt(528)[UP]*/, 12092 FP32_V(0,0x3ff1,0x83)/*sqrt(257)[UP]*/, 12093 FP32_V(0,0x600000,0x7d)/*7/16[UP]*/, 12094 FP32_V(0,0x778001,0x85)/*123.75+*/ } }, 12095 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP, 12096 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP, 12097 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE | X86_MXCSR_RC_UP, 12098 /*xcpt? */ false, false }, 12099 { { /*src1 */ { FP32_V(0,0x44000,0x88)/*529.0*/, 12100 FP32_V(0,0x0,0x87)/*256.0*/, 12101 FP32_V(0,0x440000,0x7c)/*(7/16)^2*/, 12102 FP32_V(0,0x6f4840,0x8c)/*123.75^2*/, 12103 FP32_V(0,0x40000,0x88)/*528.0*/, 12104 FP32_V(0,0x8000,0x87)/*257.0*/, 12105 FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, 12106 FP32_V(0,0x6f4841,0x8c)/*123.75^2+epsilon*/ } }, 12107 { /*unused */ { FP32_x8_UNUSED } }, 12108 { /* => */ { FP32_V(0,0x380000,0x83)/*23.0*/, 12109 FP32_V(0,0x0,0x83)/*16.0*/, 12110 FP32_V(0,0x600000,0x7d)/*7/16*/, 12111 FP32_V(0,0x778000,0x85)/*123.75*/, 12112 FP32_V(0,0x37d375,0x83)/*sqrt(528)*/, 12113 FP32_V(0,0x3ff0,0x83)/*sqrt(257)*/, 12114 FP32_V(0,0x5fffff,0x7d)/*7/16-*/, 12115 FP32_V(0,0x778000,0x85)/*123.75[ZERO=DOWN]*/ } }, 12116 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 12117 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 12118 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE | X86_MXCSR_RC_ZERO, 12119 /*xcpt? */ false, false }, 12120 { { /*src1 */ { FP32_NORM_MAX(0), 12121 FP32_NORM_MIN(0), 12122 FP32_NORM_SAFE_INT_MAX(0), 12123 FP32_NORM_SAFE_INT_MIN(0), 12124 FP32_NORM_MAX(1), 12125 FP32_NORM_MIN(1), 12126 FP32_NORM_SAFE_INT_MAX(1), 12127 FP32_NORM_SAFE_INT_MIN(1) } }, 12128 { /*unused */ { FP32_x8_UNUSED } }, 12129 { /* => */ { FP32_V(0,0x7fffff,0xbe)/*sqrt(FP32_NORM_MAX)*/, 12130 FP32_V(0,0x0,0x40)/*sqrt(FP32_NORM_MIN)*/, 12131 FP32_V(0,0x7fffff,0x8a)/*sqrt(FP32_NORM_SAFE_INT_MAX)*/, 12132 FP32_V(0,0x0,0x40)/*sqrt(FP32_NORM_SAFE_INT_MIN)*/, 12133 FP32_QNAN(1), 12134 FP32_QNAN(1), 12135 FP32_QNAN(1), 12136 FP32_QNAN(1) } }, 12137 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ, 12138 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_PE, 12139 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_PE | X86_MXCSR_IE, 12140 /*xcpt? */ false, false }, 12141 /** @todo More Normals. */ 12142 /* 12143 * Denormals. 12144 */ 12145 /*19*/{ { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } }, 12146 { /*unused */ { FP32_x8_UNUSED } }, 12147 { /* => */ { FP32_V(0,0x7fffff,0x3f), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(1), FP32_0(0) } }, 12148 /*mxcsr:in */ 0, 12149 /*128:out */ X86_MXCSR_DE, 12150 /*256:out */ X86_MXCSR_DE | X86_MXCSR_IE, 12151 /*xcpt? */ true, true }, 12152 #ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE not set in 256:out */ 12153 /*--|20*/{ { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } }, 12154 { /*unused */ { FP32_x8_UNUSED } }, 12155 { /* => */ { FP32_V(0,0x7fffff,0x3f), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(1), FP32_0(0) } }, 12156 /*mxcsr:in */ X86_MXCSR_DM, 12157 /*128:out */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_PE, 12158 /*256:out */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_IE, 12159 /*xcpt? */ true, true }, 12160 #endif /* TODO_X86_MXCSR_PE */ 12161 /*20|21*/{ { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } }, 12162 { /*unused */ { FP32_x8_UNUSED } }, 12163 { /* => */ { FP32_V(0,0x7fffff,0x3f), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(1), FP32_0(0) } }, 12164 /*mxcsr:in */ X86_MXCSR_PM, 12165 /*128:out */ X86_MXCSR_PM | X86_MXCSR_DE, 12166 /*256:out */ X86_MXCSR_PM | X86_MXCSR_DE | X86_MXCSR_IE, 12167 /*xcpt? */ true, true }, 12168 #ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE unexpectedly set in 256:out */ 12169 /*--|22*/{ { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } }, 12170 { /*unused */ { FP32_x8_UNUSED } }, 12171 { /* => */ { FP32_V(0,0x7fffff,0x3f), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(1), FP32_0(0) } }, 12172 /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_PM, 12173 /*128:out */ X86_MXCSR_DM | X86_MXCSR_PM | X86_MXCSR_DE | X86_MXCSR_PE, 12174 /*256:out */ X86_MXCSR_DM | X86_MXCSR_PM | X86_MXCSR_DE | X86_MXCSR_IE, 12175 /*xcpt? */ false, true }, 12176 #endif /* TODO_X86_MXCSR_PE */ 12177 /*21|23*/{ { /*src1 */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } }, 12178 { /*unused */ { FP32_x8_UNUSED } }, 12179 { /* => */ { FP32_V(0,0x7fffff,0x3f), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(1), FP32_0(0) } }, 12180 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 12181 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE, 12182 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE, 12183 /*xcpt? */ false, false }, 12184 { { /*src1 */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(1), FP32_0(0) } }, 12185 { /*unused */ { FP32_x8_UNUSED } }, 12186 { /* => */ { FP32_V(0,0x3504f3,0x34), FP32_V(0,0x3504f3,0x34), FP32_0(0), FP32_0(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(1), FP32_0(0) } }, 12187 /*mxcsr:in */ 0, 12188 /*128:out */ X86_MXCSR_DE, 12189 /*256:out */ X86_MXCSR_DE | X86_MXCSR_IE, 12190 /*xcpt? */ true, true }, 12191 { { /*src1 */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(1), FP32_0(0) } }, 12192 { /*unused */ { FP32_x8_UNUSED } }, 12193 { /* => */ { FP32_V(0,0x3504f3,0x34), FP32_V(0,0x3504f3,0x34), FP32_0(0), FP32_0(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(1), FP32_0(0) } }, 12194 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 12195 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE, 12196 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE, 12197 /*xcpt? */ false, false }, 12198 { { /*src1 */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } }, 12199 { /*unused */ { FP32_x8_UNUSED } }, 12200 { /* => */ { FP32_V(0,0x3504f3+1,0x34), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(1), FP32_0(0) } }, 12201 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP, 12202 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_RC_UP, 12203 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE | X86_MXCSR_RC_UP, 12204 /*xcpt? */ false, false }, 12205 { { /*src1 */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } }, 12206 { /*unused */ { FP32_x8_UNUSED } }, 12207 { /* => */ { FP32_V(0,0x3504f3,0x34), FP32_V(0,0x7fffff-1,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(1), FP32_0(0) } }, 12208 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 12209 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_RC_DOWN, 12210 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE | X86_MXCSR_RC_DOWN, 12211 /*xcpt? */ false, false }, 12212 { { /*src1 */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } }, 12213 { /*unused */ { FP32_x8_UNUSED } }, 12214 { /* => */ { FP32_V(0,0x3504f3,0x34), FP32_V(0,0x7fffff-1,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(1), FP32_0(0) } }, 12215 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 12216 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_RC_ZERO, 12217 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE | X86_MXCSR_RC_ZERO, 12218 /*xcpt? */ false, false }, 12219 { { /*src1 */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } }, 12220 { /*unused */ { FP32_x8_UNUSED } }, 12221 { /* => */ { FP32_V(0,0x3504f3,0x34), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(1), FP32_0(0) } }, 12222 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ, 12223 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_FZ, 12224 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE | X86_MXCSR_FZ, 12225 /*xcpt? */ false, false }, 12226 { { /*src1 */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } }, 12227 { /*unused */ { FP32_x8_UNUSED } }, 12228 { /* => */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(0) } }, 12229 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ, 12230 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ, 12231 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ, 12232 /*xcpt? */ false, false }, 12233 /** @todo More Denormals. */ 12234 /* 12235 * Invalids. 12236 */ 12237 /** @todo Invalids. */ 12238 /*29|31*/ /* FP32_TABLE_D10_PS_INVALIDS */ 12239 /** @todo Underflow, Precision; Rounding; FZ etc. */ 12240 }; 12241 #undef FP32_x8_UNUSED 12242 12243 #define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues 12244 static BS3CPUINSTR4_TEST1_T const s_aTests16[] = 12245 { 12246 { bs3CpuInstr4_sqrtps_XMM1_XMM2_icebp_c16, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues }, 12247 { bs3CpuInstr4_sqrtps_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues }, 12248 12249 { bs3CpuInstr4_vsqrtps_XMM1_XMM2_icebp_c16, 255, RM_REG, T_AVX_128, 1, 1, 2, PASS_s_aValues }, 12250 { bs3CpuInstr4_vsqrtps_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues }, 12251 12252 { bs3CpuInstr4_vsqrtps_YMM1_YMM2_icebp_c16, 255, RM_REG, T_AVX_256, 1, 1, 2, PASS_s_aValues }, 12253 { bs3CpuInstr4_vsqrtps_YMM1_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_256, 1, 1, 255, PASS_s_aValues }, 12254 }; 12255 static BS3CPUINSTR4_TEST1_T const s_aTests32[] = 12256 { 12257 { bs3CpuInstr4_sqrtps_XMM1_XMM2_icebp_c32, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues }, 12258 { bs3CpuInstr4_sqrtps_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues }, 12259 12260 { bs3CpuInstr4_vsqrtps_XMM1_XMM2_icebp_c32, 255, RM_REG, T_AVX_128, 1, 1, 2, PASS_s_aValues }, 12261 { bs3CpuInstr4_vsqrtps_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues }, 12262 12263 { bs3CpuInstr4_vsqrtps_YMM1_YMM2_icebp_c32, 255, RM_REG, T_AVX_256, 1, 1, 2, PASS_s_aValues }, 12264 { bs3CpuInstr4_vsqrtps_YMM1_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_256, 1, 1, 255, PASS_s_aValues }, 12265 }; 12266 static BS3CPUINSTR4_TEST1_T const s_aTests64[] = 12267 { 12268 { bs3CpuInstr4_sqrtps_XMM1_XMM2_icebp_c64, 255, RM_REG, T_SSE, 1, 1, 2, PASS_s_aValues }, 12269 { bs3CpuInstr4_sqrtps_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues }, 12270 12271 { bs3CpuInstr4_vsqrtps_XMM1_XMM2_icebp_c64, 255, RM_REG, T_AVX_128, 1, 1, 2, PASS_s_aValues }, 12272 { bs3CpuInstr4_vsqrtps_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues }, 12273 12274 { bs3CpuInstr4_vsqrtps_YMM1_YMM2_icebp_c64, 255, RM_REG, T_AVX_256, 1, 1, 2, PASS_s_aValues }, 12275 { bs3CpuInstr4_vsqrtps_YMM1_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 1, 1, 255, PASS_s_aValues }, 12276 12277 { bs3CpuInstr4_sqrtps_XMM8_XMM9_icebp_c64, 255, RM_REG, T_SSE, 8, 8, 9, PASS_s_aValues }, 12278 { bs3CpuInstr4_sqrtps_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 8, 8, 255, PASS_s_aValues }, 12279 12280 { bs3CpuInstr4_vsqrtps_XMM8_XMM9_icebp_c64, 255, RM_REG, T_AVX_128, 8, 8, 9, PASS_s_aValues }, 12281 { bs3CpuInstr4_vsqrtps_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 8, 8, 255, PASS_s_aValues }, 12282 { bs3CpuInstr4_vsqrtps_YMM8_YMM9_icebp_c64, 255, RM_REG, T_AVX_256, 8, 8, 9, PASS_s_aValues }, 12283 { bs3CpuInstr4_vsqrtps_YMM8_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 8, 8, 255, PASS_s_aValues }, 12284 }; 12285 #undef PASS_s_aValues 12286 12287 static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64); 12288 unsigned const iTest = BS3CPUINSTR4_TEST_MODES_INDEX(bMode); 12289 return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests, 12290 g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2)); 12291 } 12292 12293 11911 12294 /** 11912 12295 * The 32-bit protected mode main function. … … 11955 12338 { "[v]maxsd", bs3CpuInstr4_v_maxsd, 0 }, 11956 12339 { "[v]minps", bs3CpuInstr4_v_minps, 0 }, 12340 { "[v]sqrtps", bs3CpuInstr4_v_sqrtps, 0 }, 11957 12341 #endif 11958 12342 };
Note:
See TracChangeset
for help on using the changeset viewer.