VirtualBox

Changeset 35513 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Jan 12, 2011 5:50:43 PM (14 years ago)
Author:
vboxsync
Message:

DBGFReg: long double -> RTFLOAT80U2. Get floating point registers and stuff.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/MachineDebuggerImpl.cpp

    r35504 r35513  
    10851085            return S_OK;
    10861086
    1087         case DBGFREGVALTYPE_LRD:
    1088             /** @todo long double -> string conversion. */
    1089             /** @todo long double == double on MSC. Stupid, stupid,
    1090              *        microsoft! */
    1091             RTStrFormatNumber(szHex, a_pValue->au16[5], 16, 2+4, 0, RTSTR_F_SPECIAL | RTSTR_F_ZEROPAD | RTSTR_F_16BIT);
    1092             RTStrFormatNumber(&szHex[2+4], a_pValue->au64[0], 16, 16, 0, RTSTR_F_ZEROPAD | RTSTR_F_64BIT);
     1087        case DBGFREGVALTYPE_R80:
     1088        {
     1089            char *pszHex = szHex;
     1090            if (a_pValue->r80.s.fSign)
     1091                *pszHex++ = '-';
     1092
     1093            if (a_pValue->r80.s.uExponent == 0)
     1094            {
     1095                if (   !a_pValue->r80.sj64.u63Fraction
     1096                    && a_pValue->r80.sj64.fInteger)
     1097                    *pszHex++ = '0';
     1098                /* else: Denormal, handled way below. */
     1099            }
     1100            else if (a_pValue->r80.sj64.uExponent == UINT16_C(0x7fff))
     1101            {
     1102                /** @todo Figure out Pseudo inf/nan... */
     1103                if (a_pValue->r80.sj64.fInteger)
     1104                    *pszHex++ = 'P';
     1105                if (a_pValue->r80.sj64.u63Fraction == 0)
     1106                {
     1107                    *pszHex++ = 'I';
     1108                    *pszHex++ = 'n';
     1109                    *pszHex++ = 'f';
     1110                }
     1111                else
     1112                {
     1113                    *pszHex++ = 'N';
     1114                    *pszHex++ = 'a';
     1115                    *pszHex++ = 'N';
     1116                }
     1117            }
     1118            if (pszHex != &szHex[1])
     1119                *pszHex = '\0';
     1120            else
     1121            {
     1122                *pszHex++ = a_pValue->r80.sj64.fInteger ? '1' : '0';
     1123                *pszHex++ = 'm';
     1124                pszHex += RTStrFormatNumber(pszHex, a_pValue->r80.sj64.u63Fraction, 16, 2+16, 0,
     1125                                            RTSTR_F_SPECIAL | RTSTR_F_ZEROPAD | RTSTR_F_64BIT);
     1126
     1127                *pszHex++ = 'e';
     1128                pszHex += RTStrFormatNumber(pszHex, (int32_t)a_pValue->r80.sj64.uExponent - 16383, 10, 0, 0,
     1129                                            RTSTR_F_ZEROPAD | RTSTR_F_32BIT | RTSTR_F_VALSIGNED);
     1130            }
    10931131            *a_pbstr = szHex;
    10941132            return S_OK;
     1133        }
    10951134
    10961135        case DBGFREGVALTYPE_DTR:
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