VirtualBox

Changeset 66885 in vbox


Ignore:
Timestamp:
May 12, 2017 7:59:22 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
115390
Message:

DBGFReg: Added support for YMM registers, expanding the DBGFREVAL type to 512 in preparation for ZMM regs of AVX-512.

Location:
trunk
Files:
4 edited

Legend:

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

    r64770 r66885  
    16821682    /** @todo add XMM aliases. */
    16831683
     1684    /* AVX: */
     1685    DBGFREG_YMM0,
     1686    DBGFREG_YMM1,
     1687    DBGFREG_YMM2,
     1688    DBGFREG_YMM3,
     1689    DBGFREG_YMM4,
     1690    DBGFREG_YMM5,
     1691    DBGFREG_YMM6,
     1692    DBGFREG_YMM7,
     1693    DBGFREG_YMM8,
     1694    DBGFREG_YMM9,
     1695    DBGFREG_YMM10,
     1696    DBGFREG_YMM11,
     1697    DBGFREG_YMM12,
     1698    DBGFREG_YMM13,
     1699    DBGFREG_YMM14,
     1700    DBGFREG_YMM15,
     1701
    16841702    /* System registers: */
    16851703    DBGFREG_GDTR_BASE,
     
    17641782    /** Unsigned 128-bit register value. */
    17651783    DBGFREGVALTYPE_U128,
     1784    /** Unsigned 256-bit register value. */
     1785    DBGFREGVALTYPE_U256,
     1786    /** Unsigned 512-bit register value. */
     1787    DBGFREGVALTYPE_U512,
    17661788    /** Long double register value. */
    17671789    DBGFREGVALTYPE_R80,
     
    17811803typedef union DBGFREGVAL
    17821804{
    1783     uint64_t    au64[2];        /**< The 64-bit array view. First because of the initializer. */
    1784     uint32_t    au32[4];        /**< The 32-bit array view. */
    1785     uint16_t    au16[8];        /**< The 16-bit array view. */
    1786     uint8_t     au8[16];        /**< The 8-bit array view. */
     1805    uint64_t    au64[8];        /**< The 64-bit array view. First because of the initializer. */
     1806    uint32_t    au32[16];       /**< The 32-bit array view. */
     1807    uint16_t    au16[32];       /**< The 16-bit array view. */
     1808    uint8_t     au8[64];        /**< The 8-bit array view. */
    17871809
    17881810    uint8_t     u8;             /**< The 8-bit view. */
     
    17911813    uint64_t    u64;            /**< The 64-bit view. */
    17921814    RTUINT128U  u128;           /**< The 128-bit view. */
     1815    RTUINT256U  u256;           /**< The 256-bit view. */
     1816    RTUINT512U  u512;           /**< The 512-bit view. */
    17931817    RTFLOAT80U  r80;            /**< The 80-bit floating point view. */
    17941818    RTFLOAT80U2 r80Ex;          /**< The 80-bit floating point view v2. */
     
    18011825        uint32_t u32Limit;
    18021826    }           dtr;
    1803 
    1804     RTUINT128U  u;
    18051827} DBGFREGVAL;
    18061828/** Pointer to a generic register value type. */
     
    18101832
    18111833/** Initialize a DBGFREGVAL variable to all zeros.  */
    1812 #define DBGFREGVAL_INITIALIZE_ZERO { { 0, 0 } }
     1834#define DBGFREGVAL_INITIALIZE_ZERO { { 0, 0, 0, 0, 0, 0, 0, 0 } }
    18131835/** Initialize a DBGFREGVAL variable to all bits set .  */
    1814 #define DBGFREGVAL_INITIALIZE_FFFF { { UINT64_MAX, UINT64_MAX } }
     1836#define DBGFREGVAL_INITIALIZE_FFFF { { UINT64_MAX, UINT64_MAX, UINT64_MAX, UINT64_MAX, UINT64_MAX, UINT64_MAX, UINT64_MAX, UINT64_MAX } }
    18151837
    18161838
  • trunk/src/VBox/Debugger/DBGCOps.cpp

    r65645 r66885  
    470470                return VINF_SUCCESS;
    471471
     472            case DBGFREGVALTYPE_U256:
     473                DBGCVAR_INIT_NUMBER(pResult, Value.u256.QWords.qw0);
     474                return VINF_SUCCESS;
     475
     476            case DBGFREGVALTYPE_U512:
     477                DBGCVAR_INIT_NUMBER(pResult, Value.u512.QWords.qw0);
     478                return VINF_SUCCESS;
     479
    472480            case DBGFREGVALTYPE_R80:
    473481#ifdef RT_COMPILER_WITH_80BIT_LONG_DOUBLE
  • trunk/src/VBox/VMM/VMMR3/CPUMDbg.cpp

    r64655 r66885  
    5151        case DBGFREGVALTYPE_U64:       pValue->u64  = *(uint64_t const *)pv; return VINF_SUCCESS;
    5252        case DBGFREGVALTYPE_U128:      pValue->u128 = *(PCRTUINT128U    )pv; return VINF_SUCCESS;
     53        case DBGFREGVALTYPE_U256:      pValue->u256 = *(PCRTUINT256U    )pv; return VINF_SUCCESS;
     54        case DBGFREGVALTYPE_U512:      pValue->u512 = *(PCRTUINT512U    )pv; return VINF_SUCCESS;
    5355        default:
    5456            AssertMsgFailedReturn(("%d %s\n", pDesc->enmType, pDesc->pszName), VERR_IPE_NOT_REACHED_DEFAULT_CASE);
     
    342344}
    343345
     346
     347/**
     348 * @interface_method_impl{DBGFREGDESC,pfnGet}
     349 */
     350static DECLCALLBACK(int) cpumR3RegGet_ymm(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
     351{
     352    PVMCPU      pVCpu   = (PVMCPU)pvUser;
     353    uint32_t    iReg    = pDesc->offRegister;
     354
     355    Assert(pDesc->enmType == DBGFREGVALTYPE_U256);
     356    VMCPU_ASSERT_EMT(pVCpu);
     357
     358    if (iReg < 16)
     359    {
     360        pValue->u256.DQWords.dqw0 = pVCpu->cpum.s.Guest.pXStateR3->x87.aXMM[iReg].uXmm;
     361        pValue->u256.DQWords.dqw1 = pVCpu->cpum.s.Guest.pXStateR3->u.YmmHi.aYmmHi[iReg].uXmm;
     362        return VINF_SUCCESS;
     363    }
     364    return VERR_NOT_IMPLEMENTED;
     365}
     366
     367
     368/**
     369 * @interface_method_impl{DBGFREGDESC,pfnSet}
     370 */
     371static DECLCALLBACK(int) cpumR3RegSet_ymm(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
     372{
     373    PVMCPU      pVCpu = (PVMCPU)pvUser;
     374    uint32_t    iReg  = pDesc->offRegister;
     375
     376    Assert(pDesc->enmType == DBGFREGVALTYPE_U256);
     377    VMCPU_ASSERT_EMT(pVCpu);
     378
     379    if (iReg < 16)
     380    {
     381        RTUINT128U Val;
     382        RTUInt128AssignAnd(&pVCpu->cpum.s.Guest.pXStateR3->x87.aXMM[iReg].uXmm,
     383                           RTUInt128AssignBitwiseNot(RTUInt128Assign(&Val, &pfMask->u256.DQWords.dqw0)));
     384        RTUInt128AssignOr(&pVCpu->cpum.s.Guest.pXStateR3->u.YmmHi.aYmmHi[iReg].uXmm,
     385                          RTUInt128AssignAnd(RTUInt128Assign(&Val, &pValue->u128), &pfMask->u128));
     386
     387    }
     388    return VERR_NOT_IMPLEMENTED;
     389}
    344390
    345391
     
    949995};
    950996
     997#if 0 /* needs special accessor, too lazy for that now. */
     998/** Sub-fields for the YMM registers. */
     999static DBGFREGSUBFIELD const g_aCpumRegFields_ymmN[] =
     1000{
     1001    DBGFREGSUBFIELD_RW("r0",       0,     32,  0),
     1002    DBGFREGSUBFIELD_RW("r0.man",   0+ 0,  23,  0),
     1003    DBGFREGSUBFIELD_RW("r0.exp",   0+23,   8,  0),
     1004    DBGFREGSUBFIELD_RW("r0.sig",   0+31,   1,  0),
     1005    DBGFREGSUBFIELD_RW("r1",      32,     32,  0),
     1006    DBGFREGSUBFIELD_RW("r1.man",  32+ 0,  23,  0),
     1007    DBGFREGSUBFIELD_RW("r1.exp",  32+23,   8,  0),
     1008    DBGFREGSUBFIELD_RW("r1.sig",  32+31,   1,  0),
     1009    DBGFREGSUBFIELD_RW("r2",      64,     32,  0),
     1010    DBGFREGSUBFIELD_RW("r2.man",  64+ 0,  23,  0),
     1011    DBGFREGSUBFIELD_RW("r2.exp",  64+23,   8,  0),
     1012    DBGFREGSUBFIELD_RW("r2.sig",  64+31,   1,  0),
     1013    DBGFREGSUBFIELD_RW("r3",      96,     32,  0),
     1014    DBGFREGSUBFIELD_RW("r3.man",  96+ 0,  23,  0),
     1015    DBGFREGSUBFIELD_RW("r3.exp",  96+23,   8,  0),
     1016    DBGFREGSUBFIELD_RW("r3.sig",  96+31,   1,  0),
     1017    DBGFREGSUBFIELD_RW("r4",     128,     32,  0),
     1018    DBGFREGSUBFIELD_RW("r4.man", 128+ 0,  23,  0),
     1019    DBGFREGSUBFIELD_RW("r4.exp", 128+23,   8,  0),
     1020    DBGFREGSUBFIELD_RW("r4.sig", 128+31,   1,  0),
     1021    DBGFREGSUBFIELD_RW("r5",     160,     32,  0),
     1022    DBGFREGSUBFIELD_RW("r5.man", 160+ 0,  23,  0),
     1023    DBGFREGSUBFIELD_RW("r5.exp", 160+23,   8,  0),
     1024    DBGFREGSUBFIELD_RW("r5.sig", 160+31,   1,  0),
     1025    DBGFREGSUBFIELD_RW("r6",     192,     32,  0),
     1026    DBGFREGSUBFIELD_RW("r6.man", 192+ 0,  23,  0),
     1027    DBGFREGSUBFIELD_RW("r6.exp", 192+23,   8,  0),
     1028    DBGFREGSUBFIELD_RW("r6.sig", 192+31,   1,  0),
     1029    DBGFREGSUBFIELD_RW("r7",     224,     32,  0),
     1030    DBGFREGSUBFIELD_RW("r7.man", 224+ 0,  23,  0),
     1031    DBGFREGSUBFIELD_RW("r7.exp", 224+23,   8,  0),
     1032    DBGFREGSUBFIELD_RW("r7.sig", 224+31,   1,  0),
     1033    DBGFREGSUBFIELD_TERMINATOR()
     1034};
     1035#endif
     1036
    9511037/** Sub-fields for the CR0 register. */
    9521038static DBGFREGSUBFIELD const g_aCpumRegFields_cr0[] =
     
    11111197
    11121198#define CPU_REG_MM(n) \
    1113     CPU_REG_XS_RW_AS("mm" #n,       MM##n,          U64, x87.aRegs[n].mmx, cpumR3RegGet_XStateGeneric, cpumR3RegSet_XStateGeneric, NULL,                       g_aCpumRegFields_mmN)
     1199    CPU_REG_XS_RW_AS("mm" #n,       MM##n,          U64, x87.aRegs[n].mmx, cpumR3RegGet_XStateGeneric, cpumR3RegSet_XStateGeneric, NULL,                g_aCpumRegFields_mmN)
    11141200
    11151201#define CPU_REG_XMM(n) \
    1116     CPU_REG_XS_RW_AS("xmm" #n,      XMM##n,         U128, x87.aXMM[n].xmm, cpumR3RegGet_XStateGeneric, cpumR3RegSet_XStateGeneric, NULL,                       g_aCpumRegFields_xmmN)
     1202    CPU_REG_XS_RW_AS("xmm" #n,      XMM##n,         U128, x87.aXMM[n].xmm, cpumR3RegGet_XStateGeneric, cpumR3RegSet_XStateGeneric, NULL,                g_aCpumRegFields_xmmN)
     1203
     1204#define CPU_REG_YMM(n) \
     1205    { "ymm" #n, DBGFREG_YMM##n, DBGFREGVALTYPE_U256, 0 /*fFlags*/, n,   cpumR3RegGet_ymm, cpumR3RegSet_ymm, NULL /*paAliases*/, NULL /*paSubFields*/ }
     1206
    11171207/** @} */
    11181208
     
    12021292    CPU_REG_XMM(14),
    12031293    CPU_REG_XMM(15),
     1294    CPU_REG_YMM(0),
     1295    CPU_REG_YMM(1),
     1296    CPU_REG_YMM(2),
     1297    CPU_REG_YMM(3),
     1298    CPU_REG_YMM(4),
     1299    CPU_REG_YMM(5),
     1300    CPU_REG_YMM(6),
     1301    CPU_REG_YMM(7),
     1302    CPU_REG_YMM(8),
     1303    CPU_REG_YMM(9),
     1304    CPU_REG_YMM(10),
     1305    CPU_REG_YMM(11),
     1306    CPU_REG_YMM(12),
     1307    CPU_REG_YMM(13),
     1308    CPU_REG_YMM(14),
     1309    CPU_REG_YMM(15),
    12041310    CPU_REG_RW_AS("gdtr_base",      GDTR_BASE,      U64, gdtr.pGdt,             cpumR3RegGet_Generic,   cpumR3RegSet_Generic,   NULL,                       NULL                    ),
    12051311    CPU_REG_RW_AS("gdtr_lim",       GDTR_LIMIT,     U16, gdtr.cbGdt,            cpumR3RegGet_Generic,   cpumR3RegSet_Generic,   NULL,                       NULL                    ),
     
    13301436    CPU_REG_DUMMY("xmm14",          XMM14,          U128),
    13311437    CPU_REG_DUMMY("xmm15",          XMM15,          U128),
     1438    CPU_REG_DUMMY("ymm0",           YMM0,           U256),
     1439    CPU_REG_DUMMY("ymm1",           YMM1,           U256),
     1440    CPU_REG_DUMMY("ymm2",           YMM2,           U256),
     1441    CPU_REG_DUMMY("ymm3",           YMM3,           U256),
     1442    CPU_REG_DUMMY("ymm4",           YMM4,           U256),
     1443    CPU_REG_DUMMY("ymm5",           YMM5,           U256),
     1444    CPU_REG_DUMMY("ymm6",           YMM6,           U256),
     1445    CPU_REG_DUMMY("ymm7",           YMM7,           U256),
     1446    CPU_REG_DUMMY("ymm8",           YMM8,           U256),
     1447    CPU_REG_DUMMY("ymm9",           YMM9,           U256),
     1448    CPU_REG_DUMMY("ymm10",          YMM10,          U256),
     1449    CPU_REG_DUMMY("ymm11",          YMM11,          U256),
     1450    CPU_REG_DUMMY("ymm12",          YMM12,          U256),
     1451    CPU_REG_DUMMY("ymm13",          YMM13,          U256),
     1452    CPU_REG_DUMMY("ymm14",          YMM14,          U256),
     1453    CPU_REG_DUMMY("ymm15",          YMM15,          U256),
    13321454    CPU_REG_RW_AS("gdtr_base",      GDTR_BASE,      U64, gdtr.pGdt,             cpumR3RegGet_Generic,   cpumR3RegSet_Generic,   NULL,                       NULL                    ),
    13331455    CPU_REG_RW_AS("gdtr_lim",       GDTR_LIMIT,     U16, gdtr.cbGdt,            cpumR3RegGet_Generic,   cpumR3RegSet_Generic,   NULL,                       NULL                    ),
  • trunk/src/VBox/VMM/VMMR3/DBGFReg.cpp

    r62637 r66885  
    552552    pValue->au64[0] = 0;
    553553    pValue->au64[1] = 0;
     554    pValue->au64[2] = 0;
     555    pValue->au64[3] = 0;
     556    pValue->au64[4] = 0;
     557    pValue->au64[5] = 0;
     558    pValue->au64[6] = 0;
     559    pValue->au64[7] = 0;
    554560}
    555561
     
    648654                case DBGFREGVALTYPE_U64:    pValue->u64       = InVal.u8; return VINF_DBGF_ZERO_EXTENDED_REGISTER;
    649655                case DBGFREGVALTYPE_U128:   pValue->u128.s.Lo = InVal.u8; return VINF_DBGF_ZERO_EXTENDED_REGISTER;
     656                case DBGFREGVALTYPE_U256:   pValue->u256.Words.w0 = InVal.u8; return VINF_DBGF_ZERO_EXTENDED_REGISTER;
     657                case DBGFREGVALTYPE_U512:   pValue->u512.Words.w0 = InVal.u8; return VINF_DBGF_ZERO_EXTENDED_REGISTER;
    650658                case DBGFREGVALTYPE_R80:    dbgfR3RegValR80SetU64(pValue, InVal.u8); return VINF_DBGF_ZERO_EXTENDED_REGISTER;
    651659                case DBGFREGVALTYPE_DTR:                                  return VERR_DBGF_UNSUPPORTED_CAST;
     
    666674                case DBGFREGVALTYPE_U64:    pValue->u64       = InVal.u16;  return VINF_DBGF_ZERO_EXTENDED_REGISTER;
    667675                case DBGFREGVALTYPE_U128:   pValue->u128.s.Lo = InVal.u16;  return VINF_DBGF_ZERO_EXTENDED_REGISTER;
     676                case DBGFREGVALTYPE_U256:   pValue->u256.Words.w0 = InVal.u16;  return VINF_DBGF_ZERO_EXTENDED_REGISTER;
     677                case DBGFREGVALTYPE_U512:   pValue->u512.Words.w0 = InVal.u16;  return VINF_DBGF_ZERO_EXTENDED_REGISTER;
    668678                case DBGFREGVALTYPE_R80:    dbgfR3RegValR80SetU64(pValue, InVal.u16); return VINF_DBGF_ZERO_EXTENDED_REGISTER;
    669679                case DBGFREGVALTYPE_DTR:                                    return VERR_DBGF_UNSUPPORTED_CAST;
     
    684694                case DBGFREGVALTYPE_U64:    pValue->u64       = InVal.u32;  return VINF_DBGF_ZERO_EXTENDED_REGISTER;
    685695                case DBGFREGVALTYPE_U128:   pValue->u128.s.Lo = InVal.u32;  return VINF_DBGF_ZERO_EXTENDED_REGISTER;
     696                case DBGFREGVALTYPE_U256:   pValue->u256.DWords.dw0 = InVal.u32;  return VINF_DBGF_ZERO_EXTENDED_REGISTER;
     697                case DBGFREGVALTYPE_U512:   pValue->u512.DWords.dw0 = InVal.u32;  return VINF_DBGF_ZERO_EXTENDED_REGISTER;
    686698                case DBGFREGVALTYPE_R80:    dbgfR3RegValR80SetU64(pValue, InVal.u32); return VINF_DBGF_ZERO_EXTENDED_REGISTER;
    687699                case DBGFREGVALTYPE_DTR:                                    return VERR_DBGF_UNSUPPORTED_CAST;
     
    702714                case DBGFREGVALTYPE_U64:    pValue->u64       = InVal.u64;  return VINF_SUCCESS;
    703715                case DBGFREGVALTYPE_U128:   pValue->u128.s.Lo = InVal.u64;  return VINF_DBGF_TRUNCATED_REGISTER;
     716                case DBGFREGVALTYPE_U256:   pValue->u256.QWords.qw0 = InVal.u64;  return VINF_DBGF_TRUNCATED_REGISTER;
     717                case DBGFREGVALTYPE_U512:   pValue->u512.QWords.qw0 = InVal.u64;  return VINF_DBGF_TRUNCATED_REGISTER;
    704718                case DBGFREGVALTYPE_R80:    dbgfR3RegValR80SetU64(pValue, InVal.u64); return VINF_DBGF_TRUNCATED_REGISTER;
    705719                case DBGFREGVALTYPE_DTR:                                    return VERR_DBGF_UNSUPPORTED_CAST;
     
    720734                case DBGFREGVALTYPE_U64:    pValue->u64       = InVal.u128.s.Lo;  return VINF_DBGF_TRUNCATED_REGISTER;
    721735                case DBGFREGVALTYPE_U128:   pValue->u128      = InVal.u128;       return VINF_SUCCESS;
     736                case DBGFREGVALTYPE_U256:   pValue->u256.DQWords.dqw0 = InVal.u128; return VINF_SUCCESS;
     737                case DBGFREGVALTYPE_U512:   pValue->u512.DQWords.dqw0 = InVal.u128; return VINF_SUCCESS;
    722738                case DBGFREGVALTYPE_R80:    dbgfR3RegValR80SetU128(pValue, InVal.u128); return VINF_DBGF_TRUNCATED_REGISTER;
    723739                case DBGFREGVALTYPE_DTR:                                          return VERR_DBGF_UNSUPPORTED_CAST;
     740
     741                case DBGFREGVALTYPE_32BIT_HACK:
     742                case DBGFREGVALTYPE_END:
     743                case DBGFREGVALTYPE_INVALID:
     744                    break;
     745            }
     746            break;
     747
     748        case DBGFREGVALTYPE_U256:
     749            switch (enmToType)
     750            {
     751                case DBGFREGVALTYPE_U8:     pValue->u8        = InVal.u256.Words.w0;        return VINF_DBGF_TRUNCATED_REGISTER;
     752                case DBGFREGVALTYPE_U16:    pValue->u16       = InVal.u256.Words.w0;        return VINF_DBGF_TRUNCATED_REGISTER;
     753                case DBGFREGVALTYPE_U32:    pValue->u32       = InVal.u256.DWords.dw0;      return VINF_DBGF_TRUNCATED_REGISTER;
     754                case DBGFREGVALTYPE_U64:    pValue->u64       = InVal.u256.QWords.qw0;      return VINF_DBGF_TRUNCATED_REGISTER;
     755                case DBGFREGVALTYPE_U128:   pValue->u128      = InVal.u256.DQWords.dqw0;    return VINF_DBGF_TRUNCATED_REGISTER;
     756                case DBGFREGVALTYPE_U256:   pValue->u256      = InVal.u256;                 return VINF_SUCCESS;
     757                case DBGFREGVALTYPE_U512:   pValue->u512.OWords.ow0 = InVal.u256;           return VINF_SUCCESS;
     758                case DBGFREGVALTYPE_R80:    dbgfR3RegValR80SetU128(pValue, InVal.u256.DQWords.dqw0); return VINF_DBGF_TRUNCATED_REGISTER;
     759                case DBGFREGVALTYPE_DTR:                                                    return VERR_DBGF_UNSUPPORTED_CAST;
     760
     761                case DBGFREGVALTYPE_32BIT_HACK:
     762                case DBGFREGVALTYPE_END:
     763                case DBGFREGVALTYPE_INVALID:
     764                    break;
     765            }
     766            break;
     767
     768        case DBGFREGVALTYPE_U512:
     769            switch (enmToType)
     770            {
     771                case DBGFREGVALTYPE_U8:     pValue->u8        = InVal.u512.Words.w0;        return VINF_DBGF_TRUNCATED_REGISTER;
     772                case DBGFREGVALTYPE_U16:    pValue->u16       = InVal.u512.Words.w0;        return VINF_DBGF_TRUNCATED_REGISTER;
     773                case DBGFREGVALTYPE_U32:    pValue->u32       = InVal.u512.DWords.dw0;      return VINF_DBGF_TRUNCATED_REGISTER;
     774                case DBGFREGVALTYPE_U64:    pValue->u64       = InVal.u512.QWords.qw0;      return VINF_DBGF_TRUNCATED_REGISTER;
     775                case DBGFREGVALTYPE_U128:   pValue->u128      = InVal.u512.DQWords.dqw0;    return VINF_DBGF_TRUNCATED_REGISTER;
     776                case DBGFREGVALTYPE_U256:   pValue->u256      = InVal.u512.OWords.ow0;      return VINF_DBGF_TRUNCATED_REGISTER;
     777                case DBGFREGVALTYPE_U512:   pValue->u512      = InVal.u512;                 return VINF_SUCCESS;
     778                case DBGFREGVALTYPE_R80:    dbgfR3RegValR80SetU128(pValue, InVal.u512.DQWords.dqw0); return VINF_DBGF_TRUNCATED_REGISTER;
     779                case DBGFREGVALTYPE_DTR:                                                    return VERR_DBGF_UNSUPPORTED_CAST;
    724780
    725781                case DBGFREGVALTYPE_32BIT_HACK:
     
    738794                case DBGFREGVALTYPE_U64:    pValue->u64       = (uint64_t)dbgfR3RegValR80GetU64(&InVal);  return VINF_DBGF_TRUNCATED_REGISTER;
    739795                case DBGFREGVALTYPE_U128:   pValue->u128      = dbgfR3RegValR80GetU128(&InVal);           return VINF_DBGF_TRUNCATED_REGISTER;
     796                case DBGFREGVALTYPE_U256:   pValue->u256.DQWords.dqw0 = dbgfR3RegValR80GetU128(&InVal);   return VINF_DBGF_TRUNCATED_REGISTER;
     797                case DBGFREGVALTYPE_U512:   pValue->u512.DQWords.dqw0 = dbgfR3RegValR80GetU128(&InVal);   return VINF_DBGF_TRUNCATED_REGISTER;
    740798                case DBGFREGVALTYPE_R80:    pValue->r80       = InVal.r80;          return VINF_SUCCESS;
    741799                case DBGFREGVALTYPE_DTR:                                            return VERR_DBGF_UNSUPPORTED_CAST;
     
    756814                case DBGFREGVALTYPE_U64:    pValue->u64       = InVal.dtr.u64Base;  return VINF_DBGF_TRUNCATED_REGISTER;
    757815                case DBGFREGVALTYPE_U128:   pValue->u128.s.Lo = InVal.dtr.u64Base;  return VINF_DBGF_TRUNCATED_REGISTER;
     816                case DBGFREGVALTYPE_U256:   pValue->u256.QWords.qw0 = InVal.dtr.u64Base;  return VINF_DBGF_TRUNCATED_REGISTER;
     817                case DBGFREGVALTYPE_U512:   pValue->u512.QWords.qw0 = InVal.dtr.u64Base;  return VINF_DBGF_TRUNCATED_REGISTER;
    758818                case DBGFREGVALTYPE_R80:    dbgfR3RegValR80SetU64(pValue, InVal.dtr.u64Base);  return VINF_DBGF_TRUNCATED_REGISTER;
    759819                case DBGFREGVALTYPE_DTR:    pValue->dtr       = InVal.dtr;          return VINF_SUCCESS;
     
    20052065                    Mask.u128.s.Hi = UINT64_MAX;
    20062066                    break;
     2067                case DBGFREGVALTYPE_U256:
     2068                    Value.u256 = pValue->u256;
     2069                    Mask.u256.QWords.qw0 = UINT64_MAX;
     2070                    Mask.u256.QWords.qw1 = UINT64_MAX;
     2071                    Mask.u256.QWords.qw2 = UINT64_MAX;
     2072                    Mask.u256.QWords.qw3 = UINT64_MAX;
     2073                    break;
     2074                case DBGFREGVALTYPE_U512:
     2075                    Value.u512 = pValue->u512;
     2076                    Mask.u512.QWords.qw0 = UINT64_MAX;
     2077                    Mask.u512.QWords.qw1 = UINT64_MAX;
     2078                    Mask.u512.QWords.qw2 = UINT64_MAX;
     2079                    Mask.u512.QWords.qw3 = UINT64_MAX;
     2080                    Mask.u512.QWords.qw4 = UINT64_MAX;
     2081                    Mask.u512.QWords.qw5 = UINT64_MAX;
     2082                    Mask.u512.QWords.qw6 = UINT64_MAX;
     2083                    Mask.u512.QWords.qw7 = UINT64_MAX;
     2084                    break;
    20072085                case DBGFREGVALTYPE_R80:
    20082086#ifdef RT_COMPILER_WITH_80BIT_LONG_DOUBLE
     
    20402118                else if (cBits <= 64)
    20412119                    enmRegType = DBGFREGVALTYPE_U64;
     2120                else if (cBits <= 128)
     2121                    enmRegType = DBGFREGVALTYPE_U128;
     2122                else if (cBits <= 256)
     2123                    enmRegType = DBGFREGVALTYPE_U256;
    20422124                else
    2043                     enmRegType = DBGFREGVALTYPE_U128;
     2125                    enmRegType = DBGFREGVALTYPE_U512;
    20442126            }
    20452127            else if (pLookupRec->pAlias)
     
    21422224        case DBGFREGVALTYPE_U128:
    21432225            return RTStrFormatU128(pszBuf, cbBuf, &pValue->u128, uBase, cchWidth, cchPrecision, fFlags);
     2226        case DBGFREGVALTYPE_U256:
     2227            return RTStrFormatU256(pszBuf, cbBuf, &pValue->u256, uBase, cchWidth, cchPrecision, fFlags);
     2228        case DBGFREGVALTYPE_U512:
     2229            return RTStrFormatU512(pszBuf, cbBuf, &pValue->u512, uBase, cchWidth, cchPrecision, fFlags);
    21442230        case DBGFREGVALTYPE_R80:
    21452231            return RTStrFormatR80u2(pszBuf, cbBuf, &pValue->r80Ex, cchWidth, cchPrecision, fFlags);
     
    22242310    switch (enmType)
    22252311    {
    2226         case DBGFREGVALTYPE_U8:     cchWidth = 2  + fSpecial*2; break;
    2227         case DBGFREGVALTYPE_U16:    cchWidth = 4  + fSpecial*2; break;
    2228         case DBGFREGVALTYPE_U32:    cchWidth = 8  + fSpecial*2; break;
    2229         case DBGFREGVALTYPE_U64:    cchWidth = 16 + fSpecial*2; break;
    2230         case DBGFREGVALTYPE_U128:   cchWidth = 32 + fSpecial*2; break;
     2312        case DBGFREGVALTYPE_U8:     cchWidth = 2   + fSpecial*2; break;
     2313        case DBGFREGVALTYPE_U16:    cchWidth = 4   + fSpecial*2; break;
     2314        case DBGFREGVALTYPE_U32:    cchWidth = 8   + fSpecial*2; break;
     2315        case DBGFREGVALTYPE_U64:    cchWidth = 16  + fSpecial*2; break;
     2316        case DBGFREGVALTYPE_U128:   cchWidth = 32  + fSpecial*2; break;
     2317        case DBGFREGVALTYPE_U256:   cchWidth = 64  + fSpecial*2; break;
     2318        case DBGFREGVALTYPE_U512:   cchWidth = 128 + fSpecial*2; break;
    22312319        case DBGFREGVALTYPE_R80:    cchWidth = 0; break;
    22322320        case DBGFREGVALTYPE_DTR:    cchWidth = 16+1+4 + fSpecial*2; break;
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