VirtualBox

Ignore:
Timestamp:
Mar 23, 2017 2:34:13 PM (8 years ago)
Author:
vboxsync
Message:

bs3kit,bs3-cpu-generated-1: Extended CPU state and SSE testing work.

Location:
trunk/src/VBox/ValidationKit/bootsectors/bs3kit
Files:
1 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/Makefile.kmk

    r66214 r66226  
    114114       bs3-cmn-ExtCtxAlloc.c \
    115115       bs3-cmn-ExtCtxFree.c \
     116       bs3-cmn-ExtCtxCopy.c \
    116117       bs3-cmn-SelFar32ToFlat32.c \
    117118       bs3-cmn-SelFar32ToFlat32NoClobber.asm \
     
    198199       ../../../Runtime/common/asm/ASMSerializeInstruction-rdtscp.asm \
    199200       ../../../Runtime/common/asm/ASMCpuIdExSlow.asm \
     201       ../../../Runtime/common/asm/ASMGetXcr0.asm \
     202       ../../../Runtime/common/asm/ASMSetXcr0.asm \
    200203
    201204# The 16-bit BS3Kit library.
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-ExtCtxAlloc.c

    r66214 r66226  
    3333
    3434#undef Bs3ExtCtxAlloc
    35 BS3_CMN_DEF(PBS3EXTCTX, Bs3ExtCtxAlloc,(uint16_t fFlags, BS3MEMKIND enmKind))
     35BS3_CMN_DEF(PBS3EXTCTX, Bs3ExtCtxAlloc,(BS3MEMKIND enmKind))
    3636{
    37     uint16_t   cbExtCtx = Bs3ExtCtxGetSize(fFlags);
     37    uint64_t   fFlags;
     38    uint16_t   cbExtCtx = Bs3ExtCtxGetSize(&fFlags);
    3839    PBS3EXTCTX pExtCtx = (PBS3EXTCTX)Bs3MemAlloc(enmKind, cbExtCtx);
    3940    if (pExtCtx)
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-ExtCtxGetSize.c

    r66214 r66226  
    3434
    3535#undef Bs3ExtCtxGetSize
    36 BS3_CMN_DEF(uint16_t, Bs3ExtCtxGetSize,(uint16_t fFlags))
     36BS3_CMN_DEF(uint16_t, Bs3ExtCtxGetSize,(uint64_t BS3_FAR *pfFlags))
    3737{
    3838    uint32_t fEcx, fEdx;
    39     BS3_ASSERT(fFlags == 0);
     39    *pfFlags = 0;
    4040
    4141    ASMCpuIdExSlow(1, 0, 0, 0, NULL, NULL, &fEcx, &fEdx);
     42#if 1 /* To disable xsave/xrstor till IEM groks it... */
    4243    if (fEcx & X86_CPUID_FEATURE_ECX_XSAVE)
    4344    {
    44         ASMCpuIdExSlow(13, 0, 0, 0, NULL, NULL, &fEcx, NULL);
     45        uint32_t fEax;
     46        ASMCpuIdExSlow(13, 0, 0, 0, &fEax, NULL, &fEcx, &fEdx);
    4547        if (   fEcx >= sizeof(X86FXSTATE) + sizeof(X86XSAVEHDR)
    4648            && fEcx < _32K)
     49        {
     50            *pfFlags = fEax | ((uint64_t)fEdx << 32);
    4751            return RT_OFFSETOF(BS3EXTCTX, Ctx) + RT_ALIGN(fEcx, 256);
     52        }
    4853    }
     54#endif
    4955    if (fEdx & X86_CPUID_FEATURE_EDX_FXSR)
    5056        return RT_OFFSETOF(BS3EXTCTX, Ctx) + sizeof(X86FXSTATE);
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-ExtCtxInit.c

    r66214 r66226  
    3434
    3535#undef Bs3ExtCtxInit
    36 BS3_CMN_DEF(PBS3EXTCTX, Bs3ExtCtxInit,(PBS3EXTCTX pExtCtx, uint16_t cbExtCtx, uint16_t fFlags))
     36BS3_CMN_DEF(PBS3EXTCTX, Bs3ExtCtxInit,(PBS3EXTCTX pExtCtx, uint16_t cbExtCtx, uint64_t fFlags))
    3737{
    38     BS3_ASSERT(fFlags == 0);
    39 
    4038    Bs3MemSet(pExtCtx, 0, cbExtCtx);
    4139    if (cbExtCtx >= RT_OFFSETOF(BS3EXTCTX, Ctx) + sizeof(X86FXSTATE) + sizeof(X86XSAVEHDR))
     40    {
     41        BS3_ASSERT(fFlags & XSAVE_C_X87);
    4242        pExtCtx->enmMethod = BS3EXTCTXMETHOD_XSAVE;
     43        pExtCtx->Ctx.x.Hdr.bmXState = fFlags;
     44    }
    4345    else if (cbExtCtx >= RT_OFFSETOF(BS3EXTCTX, Ctx) + sizeof(X86FXSTATE))
     46    {
     47        BS3_ASSERT(fFlags == 0);
    4448        pExtCtx->enmMethod = BS3EXTCTXMETHOD_FXSAVE;
     49    }
    4550    else
    4651    {
     52        BS3_ASSERT(fFlags == 0);
    4753        BS3_ASSERT(cbExtCtx >= RT_OFFSETOF(BS3EXTCTX, Ctx) + sizeof(X86FPUSTATE));
    4854        pExtCtx->enmMethod = BS3EXTCTXMETHOD_ANCIENT;
     
    5056    pExtCtx->cb       = cbExtCtx;
    5157    pExtCtx->u16Magic = BS3EXTCTX_MAGIC;
     58    pExtCtx->fXcr0    = fFlags;
    5259    return pExtCtx;
    5360}
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-autostubs.kmk

    r66214 r66226  
    5151$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3SwitchFromV86To16BitAndCallC)
    5252$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3ExtCtxAlloc)
     53$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3ExtCtxCopy)
    5354$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3ExtCtxInit)
    5455$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapSetHandler)
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-define.h

    r66214 r66226  
    3232#define Bs3A20EnableViaPortA BS3_CMN_MANGLER(Bs3A20EnableViaPortA)
    3333#define Bs3ExtCtxAlloc BS3_CMN_MANGLER(Bs3ExtCtxAlloc)
     34#define Bs3ExtCtxCopy BS3_CMN_MANGLER(Bs3ExtCtxCopy)
    3435#define Bs3ExtCtxFree BS3_CMN_MANGLER(Bs3ExtCtxFree)
    3536#define Bs3ExtCtxGetSize BS3_CMN_MANGLER(Bs3ExtCtxGetSize)
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-undef.h

    r66214 r66226  
    3232#undef Bs3A20EnableViaPortA
    3333#undef Bs3ExtCtxAlloc
     34#undef Bs3ExtCtxCopy
    3435#undef Bs3ExtCtxFree
    3536#undef Bs3ExtCtxGetSize
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h

    r66216 r66226  
    26802680    /** The method used to save and restore the context (BS3EXTCTXMETHOD). */
    26812681    uint8_t             enmMethod;
     2682    uint8_t             abPadding0[3];
     2683    /** XSAVE_C_XXX. */
     2684    uint64_t            fXcr0;
    26822685
    26832686    /** Explicit alignment padding. */
    2684     uint8_t             abPadding[64 - 2 - 2 - 1];
     2687    uint8_t             abPadding[64 - 2 - 2 - 1 - 3 - 8];
    26852688
    26862689    /** The context, variable size (see above).
     
    27112714 *
    27122715 * @returns The new extended CPU context structure.
    2713  * @param   fFlags          Flags, MBZ.
    27142716 * @param   enmKind         The kind of allocation to make.
    27152717 */
    2716 BS3_CMN_PROTO_STUB(PBS3EXTCTX, Bs3ExtCtxAlloc,(uint16_t fFlags, BS3MEMKIND enmKind));
     2718BS3_CMN_PROTO_STUB(PBS3EXTCTX, Bs3ExtCtxAlloc,(BS3MEMKIND enmKind));
    27172719
    27182720/**
     
    27282730 *
    27292731 * @returns size in bytes of the whole structure.
     2732 * @param   pfFlags         Where to return flags for Bs3ExtCtxInit.
    27302733 * @note    Use Bs3ExtCtxAlloc when possible.
    27312734 */
    2732 BS3_CMN_PROTO_STUB(uint16_t,   Bs3ExtCtxGetSize,(uint16_t fFlags));
     2735BS3_CMN_PROTO_STUB(uint16_t,   Bs3ExtCtxGetSize,(uint64_t *pfFlags));
    27332736
    27342737/**
     
    27372740 * @param   pExtCtx         The extended CPU context.
    27382741 * @param   cbExtCtx        The size of the @a pExtCtx allocation.
    2739  * @param   fFlags          Flags, MBZ.
    2740  */
    2741 BS3_CMN_PROTO_STUB(PBS3EXTCTX, Bs3ExtCtxInit,(PBS3EXTCTX pExtCtx, uint16_t cbExtCtx, uint16_t fFlags));
     2742 * @param   fFlags          XSAVE_C_XXX flags.
     2743 */
     2744BS3_CMN_PROTO_STUB(PBS3EXTCTX, Bs3ExtCtxInit,(PBS3EXTCTX pExtCtx, uint16_t cbExtCtx, uint64_t fFlags));
    27422745
    27432746/**
     
    27562759 */
    27572760BS3_CMN_PROTO_STUB(void,       Bs3ExtCtxRestore,(PBS3EXTCTX pExtCtx));
     2761
     2762/**
     2763 * Copies the state from one context to another.
     2764 *
     2765 * @returns pDst
     2766 * @param   pDst            The destination extended CPU context.
     2767 * @param   pSrc            The source extended CPU context.
     2768 */
     2769BS3_CMN_PROTO_STUB(PBS3EXTCTX, Bs3ExtCtxCopy,(PBS3EXTCTX pDst, PCBS3EXTCTX pSrc));
    27582770
    27592771
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.mac

    r66214 r66226  
    14251425        .cb         resw 1              ; uint16_t            cb;
    14261426        .enmMethod  resb 1              ; uint8_t             enmMethod;
    1427         alignb 64
     1427        alignb           8
     1428        .fXcr0      resq 1
     1429        alignb           64
    14281430        .Ctx        resb 512
    14291431endstruc
Note: See TracChangeset for help on using the changeset viewer.

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