Changeset 106059 in vbox for trunk/src/VBox/ValidationKit/bootsectors
- Timestamp:
- Sep 16, 2024 10:37:09 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
r106043 r106059 488 488 EMIT_INSTR_PLUS_ICEBP_C64 vmaxps, YMM8, YMM9, FSxBX 489 489 490 ; 491 ;; [v]maxpd 492 ; 493 EMIT_INSTR_PLUS_ICEBP maxpd, XMM1, XMM2 494 EMIT_INSTR_PLUS_ICEBP maxpd, XMM1, FSxBX 495 EMIT_INSTR_PLUS_ICEBP_C64 maxpd, XMM8, XMM9 496 EMIT_INSTR_PLUS_ICEBP_C64 maxpd, XMM8, FSxBX 497 498 EMIT_INSTR_PLUS_ICEBP vmaxpd, XMM1, XMM2, XMM3 499 EMIT_INSTR_PLUS_ICEBP vmaxpd, XMM1, XMM2, FSxBX 500 EMIT_INSTR_PLUS_ICEBP_C64 vmaxpd, XMM8, XMM9, XMM10 501 EMIT_INSTR_PLUS_ICEBP_C64 vmaxpd, XMM8, XMM9, FSxBX 502 503 EMIT_INSTR_PLUS_ICEBP vmaxpd, YMM1, YMM2, YMM3 504 EMIT_INSTR_PLUS_ICEBP vmaxpd, YMM1, YMM2, FSxBX 505 EMIT_INSTR_PLUS_ICEBP_C64 vmaxpd, YMM8, YMM9, YMM10 506 EMIT_INSTR_PLUS_ICEBP_C64 vmaxpd, YMM8, YMM9, FSxBX 507 490 508 %endif ; BS3_INSTANTIATING_CMN 491 509 -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32
r106057 r106059 9099 9099 9100 9100 9101 /* 9102 * [V]MAXPD. 9103 */ 9104 BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_maxpd(uint8_t bMode) 9105 { 9106 static BS3CPUINSTR4_TEST1_VALUES_PD_T const s_aValues[] = 9107 { 9108 /* 9109 * Zero. 9110 */ 9111 /* 0*/{ { /*src2 */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 9112 { /*src1 */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 9113 { /* => */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 9114 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 9115 /*128:out */ X86_MXCSR_XCPT_MASK, 9116 /*256:out */ X86_MXCSR_XCPT_MASK, 9117 /*xcpt? */ false, false }, 9118 { { /*src2 */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 9119 { /*src1 */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 9120 { /* => */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 9121 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 9122 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 9123 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 9124 /*xcpt? */ false, false }, 9125 { { /*src2 */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 9126 { /*src1 */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 9127 { /* => */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } }, 9128 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 9129 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 9130 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 9131 /*xcpt? */ false, false }, 9132 { { /*src2 */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } }, 9133 { /*src1 */ { FP64_0(1), FP64_0(0), FP64_0(1), FP64_0(1) } }, 9134 { /* => */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } }, 9135 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 9136 /*128:out */ X86_MXCSR_XCPT_MASK, 9137 /*256:out */ X86_MXCSR_XCPT_MASK, 9138 /*xcpt? */ false, false }, 9139 { { /*src2 */ { FP64_0(1), FP64_0(1), FP64_0(1), FP64_0(0) } }, 9140 { /*src1 */ { FP64_0(1), FP64_0(0), FP64_0(0), FP64_0(0) } }, 9141 { /* => */ { FP64_0(1), FP64_0(1), FP64_0(1), FP64_0(0) } }, 9142 /*mxcsr:in */ 0, 9143 /*128:out */ 0, 9144 /*256:out */ 0, 9145 /*xcpt? */ false, false }, 9146 { { /*src2 */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } }, 9147 { /*src1 */ { FP64_0(1), FP64_0(0), FP64_0(1), FP64_0(1) } }, 9148 { /* => */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } }, 9149 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 9150 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 9151 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 9152 /*xcpt? */ false, false }, 9153 { { /*src2 */ { FP64_0(1), FP64_0(1), FP64_0(1), FP64_0(0) } }, 9154 { /*src1 */ { FP64_0(1), FP64_0(0), FP64_0(0), FP64_0(0) } }, 9155 { /* => */ { FP64_0(1), FP64_0(1), FP64_0(1), FP64_0(0) } }, 9156 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP, 9157 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP, 9158 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP, 9159 /*xcpt? */ false, false }, 9160 { { /*src2 */ { FP64_0(1), FP64_0(1), FP64_0(1), FP64_0(0) } }, 9161 { /*src1 */ { FP64_0(1), FP64_0(0), FP64_0(0), FP64_0(0) } }, 9162 { /* => */ { FP64_0(1), FP64_0(1), FP64_0(1), FP64_0(0) } }, 9163 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 9164 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 9165 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 9166 /*xcpt? */ false, false }, 9167 { { /*src2 */ { FP64_0(1), FP64_0(1), FP64_0(0), FP64_0(0) } }, 9168 { /*src1 */ { FP64_0(1), FP64_0(1), FP64_0(0), FP64_0(0) } }, 9169 { /* => */ { FP64_0(1), FP64_0(1), FP64_0(0), FP64_0(0) } }, 9170 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 9171 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 9172 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 9173 /*xcpt? */ false, false }, 9174 /* 9175 * Infinity. 9176 */ 9177 /*9 */{ { /*src2 */ { FP64_INF(0), FP64_0(0), FP64_INF(0), FP64_0(1) } }, 9178 { /*src1 */ { FP64_0(0), FP64_INF(0), FP64_0(1), FP64_INF(0) } }, 9179 { /* => */ { FP64_INF(0), FP64_INF(0), FP64_INF(0), FP64_INF(0) } }, 9180 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 9181 /*128:out */ X86_MXCSR_XCPT_MASK, 9182 /*256:out */ X86_MXCSR_XCPT_MASK, 9183 /*xcpt? */ false, false }, 9184 { { /*src2 */ { FP64_INF(0), FP64_0(0), FP64_INF(0), FP64_0(1) } }, 9185 { /*src1 */ { FP64_0(0), FP64_INF(0), FP64_0(1), FP64_INF(0) } }, 9186 { /* => */ { FP64_INF(0), FP64_INF(0), FP64_INF(0), FP64_INF(0) } }, 9187 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP, 9188 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP, 9189 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP, 9190 /*xcpt? */ false, false }, 9191 { { /*src2 */ { FP64_INF(0), FP64_0(0), FP64_INF(0), FP64_0(1) } }, 9192 { /*src1 */ { FP64_0(0), FP64_INF(0), FP64_0(1), FP64_INF(0) } }, 9193 { /* => */ { FP64_INF(0), FP64_INF(0), FP64_INF(0), FP64_INF(0) } }, 9194 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 9195 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 9196 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN, 9197 /*xcpt? */ false, false }, 9198 { { /*src2 */ { FP64_INF(0), FP64_0(0), FP64_INF(0), FP64_0(1) } }, 9199 { /*src1 */ { FP64_0(0), FP64_INF(0), FP64_0(1), FP64_INF(0) } }, 9200 { /* => */ { FP64_INF(0), FP64_INF(0), FP64_INF(0), FP64_INF(0) } }, 9201 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 9202 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 9203 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 9204 /*xcpt? */ false, false }, 9205 { { /*src2 */ { FP64_INF(0), FP64_0(0), FP64_INF(0), FP64_0(1) } }, 9206 { /*src1 */ { FP64_0(0), FP64_INF(0), FP64_0(1), FP64_INF(0) } }, 9207 { /* => */ { FP64_INF(0), FP64_INF(0), FP64_INF(0), FP64_INF(0) } }, 9208 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 9209 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 9210 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO, 9211 /*xcpt? */ false, false }, 9212 { { /*src2 */ { FP64_INF(0), FP64_INF(0), FP64_INF(1), FP64_INF(1) } }, 9213 { /*src1 */ { FP64_INF(0), FP64_INF(1), FP64_INF(0), FP64_INF(1) } }, 9214 { /* => */ { FP64_INF(0), FP64_INF(0), FP64_INF(0), FP64_INF(1) } }, 9215 /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_UP, 9216 /*128:out */ X86_MXCSR_FZ | X86_MXCSR_RC_UP, 9217 /*256:out */ X86_MXCSR_FZ | X86_MXCSR_RC_UP, 9218 /*xcpt? */ false, false }, 9219 { { /*src2 */ { FP64_INF(0), FP64_INF(0), FP64_INF(1), FP64_INF(1) } }, 9220 { /*src1 */ { FP64_INF(0), FP64_INF(1), FP64_INF(0), FP64_INF(1) } }, 9221 { /* => */ { FP64_INF(0), FP64_INF(0), FP64_INF(0), FP64_INF(1) } }, 9222 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 9223 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 9224 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 9225 /*xcpt? */ false, false }, 9226 { { /*src2 */ { FP64_INF(0), FP64_NORM_V1(0), FP64_INF(1), FP64_NORM_V3(1) } }, 9227 { /*src1 */ { FP64_NORM_V0(0), FP64_INF(1), FP64_NORM_V2(0), FP64_INF(1) } }, 9228 { /* => */ { FP64_INF(0), FP64_NORM_V1(0), FP64_NORM_V2(0), FP64_NORM_V3(1) } }, 9229 /*mxcsr:in */ X86_MXCSR_XCPT_MASK, 9230 /*128:out */ X86_MXCSR_XCPT_MASK, 9231 /*256:out */ X86_MXCSR_XCPT_MASK, 9232 /*xcpt? */ false, false }, 9233 { { /*src2 */ { FP64_INF(0), FP64_NORM_V1(0), FP64_INF(1), FP64_NORM_V3(1) } }, 9234 { /*src1 */ { FP64_NORM_V0(0), FP64_INF(1), FP64_NORM_V2(0), FP64_INF(1) } }, 9235 { /* => */ { FP64_INF(0), FP64_NORM_V1(0), FP64_NORM_V2(0), FP64_NORM_V3(1) } }, 9236 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 9237 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 9238 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN, 9239 /*xcpt? */ false, false }, 9240 { { /*src2 */ { FP64_NORM_V1(0), FP64_INF(1), FP64_NORM_V2(1), FP64_INF(1) } }, 9241 { /*src1 */ { FP64_INF(1), FP64_NORM_V3(0), FP64_INF(1), FP64_NORM_V0(1) } }, 9242 { /* => */ { FP64_NORM_V1(0), FP64_NORM_V3(0), FP64_NORM_V2(1), FP64_NORM_V0(1) } }, 9243 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP, 9244 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP, 9245 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP, 9246 /*xcpt? */ false, false }, 9247 { { /*src2 */ { FP64_NORM_V1(0), FP64_INF(1), FP64_NORM_V3(1), FP64_INF(1) } }, 9248 { /*src1 */ { FP64_INF(0), FP64_NORM_V2(0), FP64_INF(0), FP64_NORM_V0(1) } }, 9249 { /* => */ { FP64_INF(0), FP64_NORM_V2(0), FP64_INF(0), FP64_NORM_V0(1) } }, 9250 /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 9251 /*128:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 9252 /*256:out */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO, 9253 /*xcpt? */ false, false }, 9254 /** @todo Normals; Denormals; Invalids. */ 9255 }; 9256 9257 #define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues 9258 static BS3CPUINSTR4_TEST1_T const s_aTests16[] = 9259 { 9260 { bs3CpuInstr4_maxpd_XMM1_XMM2_icebp_c16, 255, RM_REG, T_SSE2, 1, 1, 2, PASS_s_aValues }, 9261 { bs3CpuInstr4_maxpd_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE2, 1, 1, 255, PASS_s_aValues }, 9262 9263 { bs3CpuInstr4_vmaxpd_XMM1_XMM2_XMM3_icebp_c16, X86_XCPT_GP, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues }, 9264 { bs3CpuInstr4_vmaxpd_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_GP, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues }, 9265 9266 { bs3CpuInstr4_vmaxpd_YMM1_YMM2_YMM3_icebp_c16, X86_XCPT_GP, RM_REG, T_AVX2_256, 1, 2, 3, PASS_s_aValues }, 9267 { bs3CpuInstr4_vmaxpd_YMM1_YMM2_FSxBX_icebp_c16, X86_XCPT_GP, RM_MEM, T_AVX2_256, 1, 2, 255, PASS_s_aValues }, 9268 }; 9269 static BS3CPUINSTR4_TEST1_T const s_aTests32[] = 9270 { 9271 { bs3CpuInstr4_maxpd_XMM1_XMM2_icebp_c32, 255, RM_REG, T_SSE2, 1, 1, 2, PASS_s_aValues }, 9272 { bs3CpuInstr4_maxpd_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE2, 1, 1, 255, PASS_s_aValues }, 9273 9274 { bs3CpuInstr4_vmaxpd_XMM1_XMM2_XMM3_icebp_c32, X86_XCPT_GP, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues }, 9275 { bs3CpuInstr4_vmaxpd_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_GP, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues }, 9276 9277 { bs3CpuInstr4_vmaxpd_YMM1_YMM2_YMM3_icebp_c32, X86_XCPT_GP, RM_REG, T_AVX2_256, 1, 2, 3, PASS_s_aValues }, 9278 { bs3CpuInstr4_vmaxpd_YMM1_YMM2_FSxBX_icebp_c32, X86_XCPT_GP, RM_MEM, T_AVX2_256, 1, 2, 255, PASS_s_aValues }, 9279 }; 9280 static BS3CPUINSTR4_TEST1_T const s_aTests64[] = 9281 { 9282 { bs3CpuInstr4_maxpd_XMM1_XMM2_icebp_c64, 255, RM_REG, T_SSE2, 1, 1, 2, PASS_s_aValues }, 9283 { bs3CpuInstr4_maxpd_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE2, 1, 1, 255, PASS_s_aValues }, 9284 9285 { bs3CpuInstr4_vmaxpd_XMM1_XMM2_XMM3_icebp_c64, X86_XCPT_GP, RM_REG, T_AVX_128, 1, 2, 3, PASS_s_aValues }, 9286 { bs3CpuInstr4_vmaxpd_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_GP, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues }, 9287 9288 { bs3CpuInstr4_vmaxpd_YMM1_YMM2_YMM3_icebp_c64, X86_XCPT_GP, RM_REG, T_AVX2_256, 1, 2, 3, PASS_s_aValues }, 9289 { bs3CpuInstr4_vmaxpd_YMM1_YMM2_FSxBX_icebp_c64, X86_XCPT_GP, RM_MEM, T_AVX2_256, 1, 2, 255, PASS_s_aValues }, 9290 9291 { bs3CpuInstr4_maxpd_XMM8_XMM9_icebp_c64, 255, RM_REG, T_SSE2, 8, 8, 9, PASS_s_aValues }, 9292 { bs3CpuInstr4_maxpd_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_SSE2, 8, 8, 255, PASS_s_aValues }, 9293 9294 { bs3CpuInstr4_vmaxpd_XMM8_XMM9_XMM10_icebp_c64, X86_XCPT_GP, RM_REG, T_AVX_128, 8, 9, 10, PASS_s_aValues }, 9295 { bs3CpuInstr4_vmaxpd_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_GP, RM_MEM, T_AVX_128, 8, 9, 255, PASS_s_aValues }, 9296 { bs3CpuInstr4_vmaxpd_YMM8_YMM9_YMM10_icebp_c64, X86_XCPT_GP, RM_REG, T_AVX_256, 8, 9, 10, PASS_s_aValues }, 9297 { bs3CpuInstr4_vmaxpd_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_GP, RM_MEM, T_AVX_256, 8, 9, 255, PASS_s_aValues }, 9298 }; 9299 #undef PASS_s_aValues 9300 9301 static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64); 9302 unsigned const iTest = BS3CPUINSTR4_TEST_MODES_INDEX(bMode); 9303 return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests, 9304 g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2)); 9305 } 9306 9307 9101 9308 /** 9102 9309 * The 32-bit protected mode main function. … … 9139 9346 { "[v]addsubpd", bs3CpuInstr4_v_addsubpd, 0 }, 9140 9347 { "[v]maxps", bs3CpuInstr4_v_maxps, 0 }, 9348 { "[v]maxpd", bs3CpuInstr4_v_maxpd, 0 }, 9141 9349 #endif 9142 9350 };
Note:
See TracChangeset
for help on using the changeset viewer.