VirtualBox

Changeset 62059 in vbox for trunk


Ignore:
Timestamp:
Jul 6, 2016 2:57:29 PM (9 years ago)
Author:
vboxsync
Message:

CPUMCTX: Finally figured out a way to make the general purpose and segment register accessible via arrays as well as named. More unnamed structure/union trickery.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/cpumctx.h

    r58106 r62059  
    7272    X86DESCATTR Attr;
    7373} CPUMSELREG;
     74#ifdef VBOX_FOR_DTRACE_LIB
     75AssertCompileSize(CPUMSELREG, 24)
     76#endif
    7477
    7578/** @name CPUMSELREG_FLAGS_XXX - CPUMSELREG::fFlags values.
     
    120123} CPUMSYSENTER;
    121124
    122 /**
     125/** @def CPUM_UNION_NAME
    123126 * For compilers (like DTrace) that does not grok nameless unions, we have a
    124127 * little hack to make them palatable.
     
    131134# define CPUM_UNION_NAME(a_Nm)
    132135#endif
     136
     137/** A general register (union). */
     138typedef union CPUMCTXGREG
     139{
     140    /** Natural unsigned integer view. */
     141    uint64_t            u;
     142    /** 64-bit view. */
     143    uint64_t            u64;
     144    /** 32-bit view. */
     145    uint32_t            u32;
     146    /** 16-bit view. */
     147    uint16_t            u16;
     148    /** 8-bit view. */
     149    uint8_t             u8;
     150    /** 8-bit low/high view.    */
     151    struct
     152    {
     153        /** Low byte (al, cl, dl, bl, ++). */
     154        uint8_t         bLo;
     155        /** High byte in the first word - ah, ch, dh, bh. */
     156        uint8_t         bHi;
     157    } CPUM_UNION_NAME(s);
     158} CPUMCTXGREG;
     159#ifdef VBOX_FOR_DTRACE_LIB
     160AssertCompileSize(CPUMCTXGREG, 8);
     161AssertCompileMemberOffset(CPUMCTXGREG, CPUM_UNION_NAME(s.) bLo, 0);
     162AssertCompileMemberOffset(CPUMCTXGREG, CPUM_UNION_NAME(s.) bHi, 1);
     163#endif
     164
    133165
    134166
     
    250282     * @{ */
    251283
    252     /** @name General Register.
    253      * @note  These follow the encoding order (X86_GREG_XXX) and can be accessed as
    254      *        an array starting at rax.
    255      * @{ */
    256     union
    257     {
    258         uint8_t         al;
    259         uint16_t        ax;
    260         uint32_t        eax;
    261         uint64_t        rax;
    262     } CPUM_UNION_NAME(rax);
    263     union
    264     {
    265         uint8_t         cl;
    266         uint16_t        cx;
    267         uint32_t        ecx;
    268         uint64_t        rcx;
    269     } CPUM_UNION_NAME(rcx);
    270     union
    271     {
    272         uint8_t         dl;
    273         uint16_t        dx;
    274         uint32_t        edx;
    275         uint64_t        rdx;
    276     } CPUM_UNION_NAME(rdx);
    277     union
    278     {
    279         uint8_t         bl;
    280         uint16_t        bx;
    281         uint32_t        ebx;
    282         uint64_t        rbx;
    283     } CPUM_UNION_NAME(rbx);
    284     union
    285     {
    286         uint16_t        sp;
    287         uint32_t        esp;
    288         uint64_t        rsp;
    289     } CPUM_UNION_NAME(rsp);
    290     union
    291     {
    292         uint16_t        bp;
    293         uint32_t        ebp;
    294         uint64_t        rbp;
    295     } CPUM_UNION_NAME(rbp);
    296     union
    297     {
    298         uint8_t         sil;
    299         uint16_t        si;
    300         uint32_t        esi;
    301         uint64_t        rsi;
    302     } CPUM_UNION_NAME(rsi);
    303     union
    304     {
    305         uint8_t         dil;
    306         uint16_t        di;
    307         uint32_t        edi;
    308         uint64_t        rdi;
    309     } CPUM_UNION_NAME(rdi);
    310     uint64_t            r8;
    311     uint64_t            r9;
    312     uint64_t            r10;
    313     uint64_t            r11;
    314     uint64_t            r12;
    315     uint64_t            r13;
    316     uint64_t            r14;
    317     uint64_t            r15;
    318     /** @} */
    319 
    320     /** @name Segment registers.
    321      * @note These follow the encoding order (X86_SREG_XXX) and can be accessed as
    322      *       an array starting at es.
    323      * @{  */
    324     CPUMSELREG          es;
    325     CPUMSELREG          cs;
    326     CPUMSELREG          ss;
    327     CPUMSELREG          ds;
    328     CPUMSELREG          fs;
    329     CPUMSELREG          gs;
    330     /** @} */
     284    /** General purpose registers. */
     285    union /* no tag! */
     286    {
     287        /** The general purpose register array view, indexed by X86_GREG_XXX. */
     288        CPUMCTXGREG     aGRegs[16];
     289
     290        /** 64-bit general purpose register view. */
     291        struct /* no tag! */
     292        {
     293            uint64_t    rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15;
     294        } CPUM_UNION_NAME(qw);
     295        /** 64-bit general purpose register view. */
     296        struct /* no tag! */
     297        {
     298            uint64_t    r0, r1, r2, r3, r4, r5, r6, r7;
     299        } CPUM_UNION_NAME(qw2);
     300        /** 32-bit general purpose register view. */
     301        struct /* no tag! */
     302        {
     303            uint32_t     eax, u32Pad00,      ecx, u32Pad01,      edx, u32Pad02,      ebx, u32Pad03,
     304                         esp, u32Pad04,      ebp, u32Pad05,      esi, u32Pad06,      edi, u32Pad07,
     305                         r8d, u32Pad08,      r9d, u32Pad09,     r10d, u32Pad10,     r11d, u32Pad11,
     306                        r12d, u32Pad12,     r13d, u32Pad13,     r14d, u32Pad14,     r15d, u32Pad15;
     307        } CPUM_UNION_NAME(dw);
     308        /** 16-bit general purpose register view. */
     309        struct /* no tag! */
     310        {
     311            uint16_t      ax, au16Pad00[3],   cx, au16Pad01[3],   dx, au16Pad02[3],   bx, au16Pad03[3],
     312                          sp, au16Pad04[3],   bp, au16Pad05[3],   si, au16Pad06[3],   di, au16Pad07[3],
     313                         r8w, au16Pad08[3],  r9w, au16Pad09[3], r10w, au16Pad10[3], r11w, au16Pad11[3],
     314                        r12w, au16Pad12[3], r13w, au16Pad13[3], r14w, au16Pad14[3], r15w, au16Pad15[3];
     315        } CPUM_UNION_NAME(w);
     316        struct /* no tag! */
     317        {
     318            uint8_t   al, ah, abPad00[6], cl, ch, abPad01[6], dl, dh, abPad02[6], bl, bh, abPad03[6],
     319                         spl, abPad04[7],    bpl, abPad05[7],    sil, abPad06[7],    dil, abPad07[7],
     320                         r8l, abPad08[7],    r9l, abPad09[7],   r10l, abPad10[7],   r11l, abPad11[7],
     321                        r12l, abPad12[7],   r13l, abPad13[7],   r14l, abPad14[7],   r15l, abPad15[7];
     322        } CPUM_UNION_NAME(b);
     323    } CPUM_UNION_NAME(g);
     324
     325    /** Segment registers. */
     326    union /* no tag! */
     327    {
     328        /** The segment register array view, indexed by X86_SREG_XXX. */
     329        CPUMSELREG      aSRegs[6];
     330        /** The named segment register view. */
     331        struct /* no tag! */
     332        {
     333            CPUMSELREG  es, cs, ss, ds, fs, gs;
     334        } CPUM_UNION_NAME(n);
     335    } CPUM_UNION_NAME(s);
    331336
    332337    /** The program counter. */
     
    421426#ifndef VBOX_FOR_DTRACE_LIB
    422427AssertCompileSizeAlignment(CPUMCTX, 64);
     428AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rax,   0);
     429AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rcx,   8);
     430AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rdx,  16);
     431AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rbx,  24);
     432AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rsp,  32);
     433AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rbp,  40);
     434AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rsi,  48);
     435AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rdi,  56);
     436AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.)  r8,  64);
     437AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.)  r9,  72);
     438AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r10,  80);
     439AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r11,  88);
     440AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r12,  96);
     441AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r13, 104);
     442AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r14, 112);
     443AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r15, 120);
     444AssertCompileMemberOffset(CPUMCTX,   CPUM_UNION_NAME(s.n.) es, 128);
     445AssertCompileMemberOffset(CPUMCTX,   CPUM_UNION_NAME(s.n.) cs, 152);
     446AssertCompileMemberOffset(CPUMCTX,   CPUM_UNION_NAME(s.n.) ss, 176);
     447AssertCompileMemberOffset(CPUMCTX,   CPUM_UNION_NAME(s.n.) ds, 200);
     448AssertCompileMemberOffset(CPUMCTX,   CPUM_UNION_NAME(s.n.) fs, 224);
     449AssertCompileMemberOffset(CPUMCTX,   CPUM_UNION_NAME(s.n.) gs, 248);
     450AssertCompileMemberOffset(CPUMCTX,                        rip, 272);
     451AssertCompileMemberOffset(CPUMCTX,                     rflags, 280);
     452AssertCompileMemberOffset(CPUMCTX,                        cr0, 288);
     453AssertCompileMemberOffset(CPUMCTX,                        cr2, 296);
     454AssertCompileMemberOffset(CPUMCTX,                        cr3, 304);
     455AssertCompileMemberOffset(CPUMCTX,                        cr4, 312);
     456AssertCompileMemberOffset(CPUMCTX,                         dr, 320);
     457AssertCompileMemberOffset(CPUMCTX,                       gdtr, 384+6);
     458AssertCompileMemberOffset(CPUMCTX,                       idtr, 400+6);
     459AssertCompileMemberOffset(CPUMCTX,                       ldtr, 416);
     460AssertCompileMemberOffset(CPUMCTX,                         tr, 440);
     461AssertCompileMemberOffset(CPUMCTX,                   SysEnter, 464);
     462AssertCompileMemberOffset(CPUMCTX,                    msrEFER, 488);
     463AssertCompileMemberOffset(CPUMCTX,                    msrSTAR, 496);
     464AssertCompileMemberOffset(CPUMCTX,                     msrPAT, 504);
     465AssertCompileMemberOffset(CPUMCTX,                   msrLSTAR, 512);
     466AssertCompileMemberOffset(CPUMCTX,                   msrCSTAR, 520);
     467AssertCompileMemberOffset(CPUMCTX,                  msrSFMASK, 528);
     468AssertCompileMemberOffset(CPUMCTX,            msrKERNELGSBASE, 536);
     469AssertCompileMemberOffset(CPUMCTX,                msrApicBase, 544);
     470AssertCompileMemberOffset(CPUMCTX,                       aXcr, 552);
     471AssertCompileMemberOffset(CPUMCTX,                fXStateMask, 568);
     472AssertCompileMemberOffset(CPUMCTX,                  pXStateR0, 576);
     473AssertCompileMemberOffset(CPUMCTX,                  pXStateR3, HC_ARCH_BITS == 64 ? 584 : 580);
     474AssertCompileMemberOffset(CPUMCTX,                  pXStateRC, HC_ARCH_BITS == 64 ? 592 : 584);
     475AssertCompileMemberOffset(CPUMCTX,                 aoffXState, HC_ARCH_BITS == 64 ? 596 : 588);
     476AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rax, CPUMCTX, CPUM_UNION_NAME(g.)  aGRegs);
     477AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rax, CPUMCTX, CPUM_UNION_NAME(g.qw2.)  r0);
     478AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rcx, CPUMCTX, CPUM_UNION_NAME(g.qw2.)  r1);
     479AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rdx, CPUMCTX, CPUM_UNION_NAME(g.qw2.)  r2);
     480AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rbx, CPUMCTX, CPUM_UNION_NAME(g.qw2.)  r3);
     481AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rsp, CPUMCTX, CPUM_UNION_NAME(g.qw2.)  r4);
     482AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rbp, CPUMCTX, CPUM_UNION_NAME(g.qw2.)  r5);
     483AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rsi, CPUMCTX, CPUM_UNION_NAME(g.qw2.)  r6);
     484AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rdi, CPUMCTX, CPUM_UNION_NAME(g.qw2.)  r7);
     485AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rax, CPUMCTX, CPUM_UNION_NAME(g.dw.)  eax);
     486AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rcx, CPUMCTX, CPUM_UNION_NAME(g.dw.)  ecx);
     487AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rdx, CPUMCTX, CPUM_UNION_NAME(g.dw.)  edx);
     488AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rbx, CPUMCTX, CPUM_UNION_NAME(g.dw.)  ebx);
     489AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rsp, CPUMCTX, CPUM_UNION_NAME(g.dw.)  esp);
     490AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rbp, CPUMCTX, CPUM_UNION_NAME(g.dw.)  ebp);
     491AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rsi, CPUMCTX, CPUM_UNION_NAME(g.dw.)  esi);
     492AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rdi, CPUMCTX, CPUM_UNION_NAME(g.dw.)  edi);
     493AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.)  r8, CPUMCTX, CPUM_UNION_NAME(g.dw.)  r8d);
     494AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.)  r9, CPUMCTX, CPUM_UNION_NAME(g.dw.)  r9d);
     495AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r10, CPUMCTX, CPUM_UNION_NAME(g.dw.) r10d);
     496AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r11, CPUMCTX, CPUM_UNION_NAME(g.dw.) r11d);
     497AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r12, CPUMCTX, CPUM_UNION_NAME(g.dw.) r12d);
     498AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r13, CPUMCTX, CPUM_UNION_NAME(g.dw.) r13d);
     499AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r14, CPUMCTX, CPUM_UNION_NAME(g.dw.) r14d);
     500AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r15, CPUMCTX, CPUM_UNION_NAME(g.dw.) r15d);
     501AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rax, CPUMCTX, CPUM_UNION_NAME(g.w.)    ax);
     502AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rcx, CPUMCTX, CPUM_UNION_NAME(g.w.)    cx);
     503AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rdx, CPUMCTX, CPUM_UNION_NAME(g.w.)    dx);
     504AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rbx, CPUMCTX, CPUM_UNION_NAME(g.w.)    bx);
     505AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rsp, CPUMCTX, CPUM_UNION_NAME(g.w.)    sp);
     506AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rbp, CPUMCTX, CPUM_UNION_NAME(g.w.)    bp);
     507AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rsi, CPUMCTX, CPUM_UNION_NAME(g.w.)    si);
     508AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rdi, CPUMCTX, CPUM_UNION_NAME(g.w.)    di);
     509AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.)  r8, CPUMCTX, CPUM_UNION_NAME(g.w.)   r8w);
     510AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.)  r9, CPUMCTX, CPUM_UNION_NAME(g.w.)   r9w);
     511AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r10, CPUMCTX, CPUM_UNION_NAME(g.w.)  r10w);
     512AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r11, CPUMCTX, CPUM_UNION_NAME(g.w.)  r11w);
     513AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r12, CPUMCTX, CPUM_UNION_NAME(g.w.)  r12w);
     514AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r13, CPUMCTX, CPUM_UNION_NAME(g.w.)  r13w);
     515AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r14, CPUMCTX, CPUM_UNION_NAME(g.w.)  r14w);
     516AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r15, CPUMCTX, CPUM_UNION_NAME(g.w.)  r15w);
     517AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rax, CPUMCTX, CPUM_UNION_NAME(g.b.)    al);
     518AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rcx, CPUMCTX, CPUM_UNION_NAME(g.b.)    cl);
     519AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rdx, CPUMCTX, CPUM_UNION_NAME(g.b.)    dl);
     520AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rbx, CPUMCTX, CPUM_UNION_NAME(g.b.)    bl);
     521AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rsp, CPUMCTX, CPUM_UNION_NAME(g.b.)   spl);
     522AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rbp, CPUMCTX, CPUM_UNION_NAME(g.b.)   bpl);
     523AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rsi, CPUMCTX, CPUM_UNION_NAME(g.b.)   sil);
     524AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rdi, CPUMCTX, CPUM_UNION_NAME(g.b.)   dil);
     525AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.)  r8, CPUMCTX, CPUM_UNION_NAME(g.b.)   r8l);
     526AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.)  r9, CPUMCTX, CPUM_UNION_NAME(g.b.)   r9l);
     527AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r10, CPUMCTX, CPUM_UNION_NAME(g.b.)  r10l);
     528AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r11, CPUMCTX, CPUM_UNION_NAME(g.b.)  r11l);
     529AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r12, CPUMCTX, CPUM_UNION_NAME(g.b.)  r12l);
     530AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r13, CPUMCTX, CPUM_UNION_NAME(g.b.)  r13l);
     531AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r14, CPUMCTX, CPUM_UNION_NAME(g.b.)  r14l);
     532AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r15, CPUMCTX, CPUM_UNION_NAME(g.b.)  r15l);
     533AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(s.n.) es,   CPUMCTX, CPUM_UNION_NAME(s.)  aSRegs);
     534# ifndef _MSC_VER
     535AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rax, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_xAX]);
     536AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rcx, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_xCX]);
     537AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rdx, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_xDX]);
     538AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rbx, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_xBX]);
     539AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rsp, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_xSP]);
     540AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rbp, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_xBP]);
     541AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rsi, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_xSI]);
     542AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) rdi, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_xDI]);
     543AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.)  r8, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_x8]);
     544AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.)  r9, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_x9]);
     545AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r10, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_x10]);
     546AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r11, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_x11]);
     547AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r12, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_x12]);
     548AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r13, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_x13]);
     549AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r14, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_x14]);
     550AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(g.qw.) r15, CPUMCTX, CPUM_UNION_NAME(g.) aGRegs[X86_GREG_x15]);
     551AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(s.n.) es,   CPUMCTX, CPUM_UNION_NAME(s.) aSRegs[X86_SREG_ES]);
     552AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(s.n.) cs,   CPUMCTX, CPUM_UNION_NAME(s.) aSRegs[X86_SREG_CS]);
     553AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(s.n.) ss,   CPUMCTX, CPUM_UNION_NAME(s.) aSRegs[X86_SREG_SS]);
     554AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(s.n.) ds,   CPUMCTX, CPUM_UNION_NAME(s.) aSRegs[X86_SREG_DS]);
     555AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(s.n.) fs,   CPUMCTX, CPUM_UNION_NAME(s.) aSRegs[X86_SREG_FS]);
     556AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_NAME(s.n.) gs,   CPUMCTX, CPUM_UNION_NAME(s.) aSRegs[X86_SREG_GS]);
     557# endif
    423558
    424559/**
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