Changeset 40199 in vbox for trunk/src/VBox/VMM/testcase
- Timestamp:
- Feb 21, 2012 2:07:05 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 76364
- Location:
- trunk/src/VBox/VMM/testcase
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp
r40182 r40199 425 425 #define IEM_MC_CALL_FPU_AIMPL_2(a_pfnAImpl, a0, a1) do { } while (0) 426 426 #define IEM_MC_CALL_FPU_AIMPL_3(a_pfnAImpl, a0, a1, a3) do { } while (0) 427 #define IEM_MC_SET_FPU_RESULT(a_FpuData, a_FSW, a_pr80Value) do { } while (0) 427 428 #define IEM_MC_PUSH_FPU_RESULT(a_FpuData) do { } while (0) 428 429 #define IEM_MC_PUSH_FPU_RESULT_MEM_OP(a_FpuData, a_iEffSeg, a_GCPtrEff) do { } while (0) … … 459 460 #define IEM_MC_IF_LOCAL_IS_Z(a_Local) if ((a_Local) == 0) { 460 461 #define IEM_MC_IF_GREG_BIT_SET(a_iGReg, a_iBitNo) if (g_fRandom) { 462 #define IEM_MC_IF_FPUREG_NOT_EMPTY(a_iSt) if (g_fRandom) { 461 463 #define IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(a_pr80Dst, a_iSt) if (g_fRandom) { 462 464 #define IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(p0, i0, p1, i1) if (g_fRandom) { -
trunk/src/VBox/VMM/testcase/tstX86-1.cpp
r40174 r40199 242 242 if (rc != 0) 243 243 RTTestFailed(hTest, "x861_Test4 -> %d", rc); 244 #endif244 //#endif 245 245 246 246 RTTestSub(hTest, "Odd encodings and odd ends"); … … 249 249 RTTestFailed(hTest, "x861_Test5 -> %d", rc); 250 250 251 #if 0251 //#if 0 252 252 RTTestSub(hTest, "Odd floating point encodings"); 253 253 rc = x861_Test6(); … … 259 259 if (rc != 0) 260 260 RTTestFailed(hTest, "x861_Test6 -> %d", rc); 261 #endif 261 262 262 263 rc = x861_TestFPUInstr1(); 263 264 if (rc != 0) 264 265 RTTestFailed(hTest, "x861_TestFPUInstr1 -> %d", rc); 265 #endif266 266 } 267 267 -
trunk/src/VBox/VMM/testcase/tstX86-1A.asm
r40174 r40199 105 105 g_r80_Max: dt 07ffeffffffffffffffffh 106 106 g_r80_Inf: dt 07fff8000000000000000h 107 g_r80_QNaN: dt 07fffc000000000000000h 108 g_r80_QNaNMax: dt 07fffffffffffffffffffh 109 g_r80_SNaN: dt 07fff8000000000000001h 110 g_r80_SNaNMax: dt 07fffbfffffffffffffffh 107 111 g_r80_DnMin: dt 000000000000000000001h 108 112 g_r80_DnMax: dt 000007fffffffffffffffh … … 303 307 cmp eax, (%2) 304 308 je %%ok 305 mov eax, 10000000 + __LINE__309 mov eax, 100000000 + __LINE__ 306 310 jmp .return 307 311 %%ok: … … 321 325 bt [%1 + X86FXSTATE.FTW], eax 322 326 jnc %%ok 323 mov eax, 20000000 + __LINE__327 mov eax, 200000000 + __LINE__ 324 328 jmp .return 325 329 %%ok: … … 1837 1841 sub xSP, 2048 1838 1842 and xSP, ~0fh 1843 mov dword [xSP + 1024 + X86FXSTATE.FPUIP], 0 1844 mov dword [xSP + 1024 + X86FXSTATE.FPUCS], 0 1845 mov dword [xSP + 1024 + X86FXSTATE.FPUDP], 0 1846 mov dword [xSP + 1024 + X86FXSTATE.FPUDS], 0 1839 1847 arch_fxsave [xSP + 1024] 1840 1848 %1 … … 1881 1889 1882 1890 ; Save the FPU state. 1891 mov dword [xSP + xS + X86FXSTATE.FPUIP], 0 1892 mov dword [xSP + xS + X86FXSTATE.FPUCS], 0 1893 mov dword [xSP + xS + X86FXSTATE.FPUDP], 0 1894 mov dword [xSP + xS + X86FXSTATE.FPUDS], 0 1883 1895 arch_fxsave [xSP + xS] 1884 1896 … … 2462 2474 ; AMD64 doesn't seem to store anything at IP and DP, so use the 2463 2475 ; fnstenv image instead even if that only contains the lower 32-bit. 2464 xor 2476 xor eax, eax 2465 2477 cmp xAX, [xBP + xS*2 + X86FXSTATE.FPUIP] 2466 2478 jne .failure1_for_real … … 2489 2501 ; 2490 2502 %macro FpuCheckOpcodeCsIp 1 2503 mov dword [xSP + X86FXSTATE.FPUIP], 0 2504 mov dword [xSP + X86FXSTATE.FPUCS], 0 2505 mov dword [xSP + X86FXSTATE.FPUDP], 0 2506 mov dword [xSP + X86FXSTATE.FPUDS], 0 2491 2507 %%instruction: 2492 2508 %1 … … 2497 2513 call CheckOpcodeCsIp 2498 2514 jz %%ok 2499 or eax, __LINE__2515 lea xAX, [xAX + __LINE__] 2500 2516 jmp .return 2501 2517 %%ok: … … 2513 2529 ; 2514 2530 %macro FpuTrapOpcodeCsIp 1 2531 mov dword [xSP + 1024 + 512 + X86FXSTATE.FPUIP], 0 2532 mov dword [xSP + 1024 + 512 + X86FXSTATE.FPUCS], 0 2533 mov dword [xSP + 1024 + 512 + X86FXSTATE.FPUDP], 0 2534 mov dword [xSP + 1024 + 512 + X86FXSTATE.FPUDS], 0 2535 mov dword [xSP + X86FXSTATE.FPUIP], 0 2536 mov dword [xSP + X86FXSTATE.FPUCS], 0 2537 mov dword [xSP + X86FXSTATE.FPUDP], 0 2538 mov dword [xSP + X86FXSTATE.FPUDS], 0 2515 2539 %%instruction: 2516 2540 %1 … … 2537 2561 call CheckOpcodeCsIp 2538 2562 jz %%ok 2539 or eax, __LINE__2563 lea xAX, [xAX + __LINE__] 2540 2564 jmp .return 2541 2565 %%ok: … … 2617 2641 call CheckOpcodeCsIpDsDp 2618 2642 jz %%ok 2619 or eax, __LINE__2643 lea xAX, [xAX + __LINE__] 2620 2644 jmp .return 2621 2645 %%ok: … … 2634 2658 ; 2635 2659 %macro FpuTrapOpcodeCsIpDsDp 2 2660 mov dword [xSP + X86FXSTATE.FPUIP], 0 2636 2661 mov dword [xSP + X86FXSTATE.FPUCS], 0 2662 mov dword [xSP + X86FXSTATE.FPUDP], 0 2637 2663 mov dword [xSP + X86FXSTATE.FPUDS], 0 2638 2664 %%instruction: … … 2661 2687 call CheckOpcodeCsIpDsDp 2662 2688 jz %%ok 2663 or eax, __LINE__2689 lea xAX, [xAX + __LINE__] 2664 2690 jmp .return 2665 2691 %%ok: … … 2679 2705 call CompareFPUAndGRegsOnStack 2680 2706 jz %%ok 2681 or eax, __LINE__2707 lea xAX, [xAX + __LINE__] 2682 2708 jmp .return 2683 2709 %%ok: … … 2705 2731 SAVE_ALL_PROLOGUE 2706 2732 sub xSP, 2048 2707 %if 12733 %if 0 2708 2734 ; 2709 2735 ; FDIV with 64-bit floating point memory operand. … … 2867 2893 mov xBX, [REF_EXTERN(g_pbEfExecPage)] 2868 2894 ShouldTrap X86_XCPT_MF, fdiv qword [xBX + PAGE_SIZE] 2869 %endif2870 2895 2871 2896 ; … … 2931 2956 FxSaveCheckStNValueConst xSP, 1, REF(g_r80_DnMax) 2932 2957 FxSaveCheckStNValueConst xSP, 0, REF(g_r80_DnMin) 2933 2958 %endif 2959 2960 ; 2961 ; FSTP ST0, STn 2962 ; 2963 SetSubTest "FSTP ST0, STn" 2964 2965 ; ## Normal operation. ## 2966 FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST 2967 fld tword [REF(g_r80_0dot1)] 2968 fld tword [REF(g_r80_3dot2)] 2969 FpuCheckOpcodeCsIp { fstp st2 } 2970 FxSaveCheckFSW xSP, 0, 0 2971 FxSaveCheckStNValueConst xSP, 0, REF(g_r80_0dot1) 2972 FxSaveCheckStNValueConst xSP, 1, REF(g_r80_3dot2) 2973 2974 FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST 2975 fld tword [REF(g_r80_Max)] 2976 fld tword [REF(g_r80_Inf)] 2977 FpuCheckOpcodeCsIp { fstp st3 } 2978 FxSaveCheckFSW xSP, 0, 0 2979 FxSaveCheckStNValueConst xSP, 0, REF(g_r80_Max) 2980 FxSaveCheckStNValueConst xSP, 2, REF(g_r80_Inf) 2981 2982 ; Denormal register values doesn't matter get reasserted. 2983 fninit 2984 fld tword [REF(g_r80_DnMin)] 2985 fld tword [REF(g_r80_DnMax)] 2986 fnclex 2987 mov dword [xSP], X86_FCW_PC_64 | X86_FCW_RC_NEAREST 2988 fldcw [xSP] 2989 FpuCheckOpcodeCsIp { fstp st2 } 2990 FxSaveCheckFSW xSP, 0, 0 2991 FxSaveCheckStNValueConst xSP, 0, REF(g_r80_DnMin) 2992 FxSaveCheckStNValueConst xSP, 1, REF(g_r80_DnMax) 2993 2994 ; Signaled NaN doesn't matter. 2995 FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST 2996 fld tword [REF(g_r80_SNaN)] 2997 fld tword [REF(g_r80_SNaN)] 2998 fnclex 2999 FpuCheckOpcodeCsIp { fstp st3 } 3000 FxSaveCheckFSW xSP, 0, 0 3001 FxSaveCheckStNValueConst xSP, 0, REF(g_r80_SNaN) 3002 FxSaveCheckStNValueConst xSP, 2, REF(g_r80_SNaN) 3003 3004 ; Quiet NaN doesn't matter either 3005 FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST 3006 fld tword [REF(g_r80_QNaN)] 3007 fld tword [REF(g_r80_QNaN)] 3008 fnclex 3009 FpuCheckOpcodeCsIp { fstp st4 } 3010 FxSaveCheckFSW xSP, 0, 0 3011 FxSaveCheckStNValueConst xSP, 0, REF(g_r80_QNaN) 3012 FxSaveCheckStNValueConst xSP, 3, REF(g_r80_QNaN) 3013 3014 ; There is no overflow signalled. 3015 FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST 3016 fld tword [REF(g_r80_SNaNMax)] 3017 fld tword [REF(g_r80_SNaNMax)] 3018 fnclex 3019 FpuCheckOpcodeCsIp { fstp st1 } 3020 FxSaveCheckFSW xSP, 0, 0 3021 FxSaveCheckStNValueConst xSP, 0, REF(g_r80_SNaNMax) 3022 3023 ; ## Masked exceptions. ## 3024 3025 ; Masked stack underflow. 3026 fninit 3027 FpuCheckOpcodeCsIp { fstp st1 } 3028 FxSaveCheckFSW xSP, X86_FSW_IE | X86_FSW_SF, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3 3029 FxSaveCheckSt0Value_QNaN(xSP) 3030 3031 fninit 3032 FpuCheckOpcodeCsIp { fstp st0 } 3033 FxSaveCheckFSW xSP, X86_FSW_IE | X86_FSW_SF, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3 3034 FxSaveCheckSt0Empty xSP 3035 3036 ; ## Unmasked exceptions. ## 3037 3038 ; Stack underflow - no pop or change. 3039 FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST 3040 fld tword [REF(g_r80_0dot1)] 3041 fld tword [REF(g_r80_3dot2)] 3042 fld tword [REF(g_r80_Ten)] 3043 ffree st0 3044 FpuTrapOpcodeCsIp { fstp st1 } 3045 FxSaveCheckFSW xSP, X86_FSW_IE | X86_FSW_SF | X86_FSW_ES | X86_FSW_B, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3 3046 FxSaveCheckSt0Empty xSP 3047 FxSaveCheckStNValueConst xSP, 1, REF(g_r80_3dot2) 3048 FxSaveCheckStNValueConst xSP, 2, REF(g_r80_0dot1) 2934 3049 2935 3050 .success:
Note:
See TracChangeset
for help on using the changeset viewer.