VirtualBox

Ignore:
Timestamp:
Aug 8, 2018 8:49:36 AM (6 years ago)
Author:
vboxsync
Message:

IEM: Added IEM_OPCODE_GET_NEXT_RM and associated IEMCPU::offModRm. bugref:9180

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r72866 r73555  
    422422    uint8_t                 iEffSeg;                                                                        /* 0x2b */
    423423
     424    /** The offset of the ModR/M byte relative to the start of the instruction. */
     425    uint8_t                 offModRm;                                                                       /* 0x2c */
    424426#else
    425427    /** The size of what has currently been fetched into abOpcode. */
     
    427429    /** The current offset into abOpcode. */
    428430    uint8_t                 offOpcode;                                                                      /*       0x09 */
     431    /** The offset of the ModR/M byte relative to the start of the instruction. */
     432    uint8_t                 offModRm;                                                                       /*       0x0a */
    429433
    430434    /** The effective segment register (X86_SREG_XXX). */
    431     uint8_t                 iEffSeg;                                                                        /*       0x0a */
    432 
    433     /** The extra REX ModR/M register field bit (REX.R << 3). */
    434     uint8_t                 uRexReg;                                                                        /*       0x0b */
     435    uint8_t                 iEffSeg;                                                                        /*       0x0b */
     436
    435437    /** The prefix mask (IEM_OP_PRF_XXX). */
    436438    uint32_t                fPrefixes;                                                                      /*       0x0c */
     439    /** The extra REX ModR/M register field bit (REX.R << 3). */
     440    uint8_t                 uRexReg;                                                                        /*       0x10 */
    437441    /** The extra REX ModR/M r/m field, SIB base and opcode reg bit
    438442     * (REX.B << 3). */
    439     uint8_t                 uRexB;                                                                          /*       0x10 */
     443    uint8_t                 uRexB;                                                                          /*       0x11 */
    440444    /** The extra REX SIB index field bit (REX.X << 3). */
    441     uint8_t                 uRexIndex;                                                                      /*       0x11 */
     445    uint8_t                 uRexIndex;                                                                      /*       0x12 */
    442446
    443447#endif
    444448
    445449    /** The effective operand mode. */
    446     IEMMODE                 enmEffOpSize;                                                                   /* 0x2c, 0x12 */
     450    IEMMODE                 enmEffOpSize;                                                                   /* 0x2d, 0x13 */
    447451    /** The default addressing mode. */
    448     IEMMODE                 enmDefAddrMode;                                                                 /* 0x2d, 0x13 */
     452    IEMMODE                 enmDefAddrMode;                                                                 /* 0x2e, 0x14 */
    449453    /** The effective addressing mode. */
    450     IEMMODE                 enmEffAddrMode;                                                                 /* 0x2e, 0x14 */
     454    IEMMODE                 enmEffAddrMode;                                                                 /* 0x2f, 0x15 */
    451455    /** The default operand mode. */
    452     IEMMODE                 enmDefOpSize;                                                                   /* 0x2f, 0x15 */
     456    IEMMODE                 enmDefOpSize;                                                                   /* 0x30, 0x16 */
    453457
    454458    /** Prefix index (VEX.pp) for two byte and three byte tables. */
    455     uint8_t                 idxPrefix;                                                                      /* 0x30, 0x16 */
     459    uint8_t                 idxPrefix;                                                                      /* 0x31, 0x17 */
    456460    /** 3rd VEX/EVEX/XOP register.
    457461     * Please use IEM_GET_EFFECTIVE_VVVV to access.  */
    458     uint8_t                 uVex3rdReg;                                                                     /* 0x31, 0x17 */
     462    uint8_t                 uVex3rdReg;                                                                     /* 0x32, 0x18 */
    459463    /** The VEX/EVEX/XOP length field. */
    460     uint8_t                 uVexLength;                                                                     /* 0x32, 0x18 */
     464    uint8_t                 uVexLength;                                                                     /* 0x33, 0x19 */
    461465    /** Additional EVEX stuff. */
    462     uint8_t                 fEvexStuff;                                                                     /* 0x33, 0x19 */
    463 
     466    uint8_t                 fEvexStuff;                                                                     /* 0x34, 0x1a */
     467
     468    /** Explicit alignment padding. */
     469    uint8_t                 abAlignment2a[1];                                                               /* 0x35, 0x1b */
    464470    /** The FPU opcode (FOP). */
    465     uint16_t                uFpuOpcode;                                                                     /* 0x34, 0x1a */
    466 
     471    uint16_t                uFpuOpcode;                                                                     /* 0x36, 0x1c */
     472#ifndef IEM_WITH_CODE_TLB
    467473    /** Explicit alignment padding. */
    468 #ifdef IEM_WITH_CODE_TLB
    469     uint8_t                 abAlignment2a[2];                                                               /* 0x36       */
     474    uint8_t                 abAlignment2b[2];                                                               /*       0x1e */
    470475#endif
    471476
    472477    /** The opcode bytes. */
    473     uint8_t                 abOpcode[15];                                                                   /* 0x48, 0x1c */
     478    uint8_t                 abOpcode[15];                                                                   /* 0x48, 0x20 */
    474479    /** Explicit alignment padding. */
    475480#ifdef IEM_WITH_CODE_TLB
    476481    uint8_t                 abAlignment2c[0x48 - 0x47];                                                     /* 0x37 */
    477482#else
    478     uint8_t                 abAlignment2c[0x48 - 0x2b];                                                     /*       0x2b */
     483    uint8_t                 abAlignment2c[0x48 - 0x2f];                                                     /*       0x2f */
    479484#endif
    480485    /** @} */
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