VirtualBox

Changeset 40199 in vbox for trunk/src/VBox/VMM/testcase


Ignore:
Timestamp:
Feb 21, 2012 2:07:05 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
76364
Message:

fstp st0

Location:
trunk/src/VBox/VMM/testcase
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r40182 r40199  
    425425#define IEM_MC_CALL_FPU_AIMPL_2(a_pfnAImpl, a0, a1)                     do { } while (0)
    426426#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)
    427428#define IEM_MC_PUSH_FPU_RESULT(a_FpuData)                               do { } while (0)
    428429#define IEM_MC_PUSH_FPU_RESULT_MEM_OP(a_FpuData, a_iEffSeg, a_GCPtrEff) do { } while (0)
     
    459460#define IEM_MC_IF_LOCAL_IS_Z(a_Local)                                   if ((a_Local) == 0) {
    460461#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) {
    461463#define IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(a_pr80Dst, a_iSt)            if (g_fRandom) {
    462464#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  
    242242        if (rc != 0)
    243243            RTTestFailed(hTest, "x861_Test4 -> %d", rc);
    244 #endif
     244//#endif
    245245
    246246        RTTestSub(hTest, "Odd encodings and odd ends");
     
    249249            RTTestFailed(hTest, "x861_Test5 -> %d", rc);
    250250
    251 #if 0
     251//#if 0
    252252        RTTestSub(hTest, "Odd floating point encodings");
    253253        rc = x861_Test6();
     
    259259        if (rc != 0)
    260260            RTTestFailed(hTest, "x861_Test6 -> %d", rc);
     261#endif
    261262
    262263        rc = x861_TestFPUInstr1();
    263264        if (rc != 0)
    264265            RTTestFailed(hTest, "x861_TestFPUInstr1 -> %d", rc);
    265 #endif
    266266    }
    267267
  • trunk/src/VBox/VMM/testcase/tstX86-1A.asm

    r40174 r40199  
    105105g_r80_Max:      dt 07ffeffffffffffffffffh
    106106g_r80_Inf:      dt 07fff8000000000000000h
     107g_r80_QNaN:     dt 07fffc000000000000000h
     108g_r80_QNaNMax:  dt 07fffffffffffffffffffh
     109g_r80_SNaN:     dt 07fff8000000000000001h
     110g_r80_SNaNMax:  dt 07fffbfffffffffffffffh
    107111g_r80_DnMin:    dt 000000000000000000001h
    108112g_r80_DnMax:    dt 000007fffffffffffffffh
     
    303307        cmp     eax, (%2)
    304308        je      %%ok
    305         mov     eax, 10000000 + __LINE__
     309        mov     eax, 100000000 + __LINE__
    306310        jmp     .return
    307311%%ok:
     
    321325        bt      [%1 + X86FXSTATE.FTW], eax
    322326        jnc     %%ok
    323         mov     eax, 20000000 + __LINE__
     327        mov     eax, 200000000 + __LINE__
    324328        jmp     .return
    325329%%ok:
     
    18371841        sub     xSP, 2048
    18381842        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
    18391847        arch_fxsave [xSP + 1024]
    18401848        %1
     
    18811889
    18821890        ; 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
    18831895        arch_fxsave [xSP + xS]
    18841896
     
    24622474        ; AMD64 doesn't seem to store anything at IP and DP, so use the
    24632475        ; fnstenv image instead even if that only contains the lower 32-bit.
    2464         xor        eax, eax
     2476        xor     eax, eax
    24652477        cmp     xAX, [xBP + xS*2 + X86FXSTATE.FPUIP]
    24662478        jne     .failure1_for_real
     
    24892501;
    24902502%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
    24912507%%instruction:
    24922508        %1
     
    24972513        call    CheckOpcodeCsIp
    24982514        jz      %%ok
    2499         or      eax, __LINE__
     2515        lea     xAX, [xAX + __LINE__]
    25002516        jmp     .return
    25012517%%ok:
     
    25132529;
    25142530%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
    25152539%%instruction:
    25162540        %1
     
    25372561        call    CheckOpcodeCsIp
    25382562        jz      %%ok
    2539         or      eax, __LINE__
     2563        lea     xAX, [xAX + __LINE__]
    25402564        jmp     .return
    25412565%%ok:
     
    26172641        call    CheckOpcodeCsIpDsDp
    26182642        jz      %%ok
    2619         or      eax, __LINE__
     2643        lea     xAX, [xAX + __LINE__]
    26202644        jmp     .return
    26212645%%ok:
     
    26342658;
    26352659%macro FpuTrapOpcodeCsIpDsDp 2
     2660        mov     dword [xSP + X86FXSTATE.FPUIP], 0
    26362661        mov     dword [xSP + X86FXSTATE.FPUCS], 0
     2662        mov     dword [xSP + X86FXSTATE.FPUDP], 0
    26372663        mov     dword [xSP + X86FXSTATE.FPUDS], 0
    26382664%%instruction:
     
    26612687        call    CheckOpcodeCsIpDsDp
    26622688        jz      %%ok
    2663         or      eax, __LINE__
     2689        lea     xAX, [xAX + __LINE__]
    26642690        jmp     .return
    26652691%%ok:
     
    26792705        call    CompareFPUAndGRegsOnStack
    26802706        jz      %%ok
    2681         or      eax, __LINE__
     2707        lea     xAX, [xAX + __LINE__]
    26822708        jmp     .return
    26832709%%ok:
     
    27052731        SAVE_ALL_PROLOGUE
    27062732        sub     xSP, 2048
    2707 %if 1
     2733%if 0
    27082734        ;
    27092735        ; FDIV with 64-bit floating point memory operand.
     
    28672893        mov     xBX, [REF_EXTERN(g_pbEfExecPage)]
    28682894        ShouldTrap X86_XCPT_MF, fdiv qword [xBX + PAGE_SIZE]
    2869 %endif
    28702895
    28712896        ;
     
    29312956        FxSaveCheckStNValueConst xSP, 1, REF(g_r80_DnMax)
    29322957        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)
    29343049
    29353050.success:
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette