VirtualBox

Changeset 40024 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Feb 7, 2012 9:50:43 PM (13 years ago)
Author:
vboxsync
Message:

IEM: Some more FPU work underways.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h

    r40022 r40024  
    1000310003        case 5: pImpl = &g_iemAImpl_shr; IEMOP_MNEMONIC("shr Eb,CL"); break;
    1000410004        case 7: pImpl = &g_iemAImpl_sar; IEMOP_MNEMONIC("sar Eb,CL"); break;
    10005         case 6: return IEMOP_RAISE_INVALID_LOCK_PREFIX();
     10005        case 6: return IEMOP_RAISE_INVALID_OPCODE();
    1000610006        IEM_NOT_REACHED_DEFAULT_CASE_RET(); /* gcc, grr. */
    1000710007    }
     
    1038310383/** Opcode 0xdc. */
    1038410384FNIEMOP_STUB(iemOp_EscF4);
     10385
     10386#if 0
     10387/** Opcode 0xdd /0 mem32real */
     10388FNIEMOP_STUB_1(iemOp_fld_m32r, uint8_t, bRm);
     10389
     10390/** Opcode 0xdd /0 stN */
     10391FNIEMOP_STUB_1(iemOp_fld_stN, uint8_t, bRm);
     10392
     10393/** Opcode 0xdd /1 stN   */
     10394FNIEMOP_STUB_1(iemOp_fst_m32r, uint8_t, bRm);
     10395
     10396/** Opcode 0xdd /2 mem32real */
     10397FNIEMOP_STUB_1(iemOp_fst_m32r, uint8_t, bRm);
     10398
     10399/** Opcode 0xdd /3 */
     10400FNIEMOP_STUB_1(iemOp_fstp_m32r, uint8_t, bRm);
     10401
     10402/** Opcode 0xdd /4 */
     10403FNIEMOP_STUB_1(iemOp_fldenv, uint8_t, bRm);
     10404
     10405/** Opcode 0xdd /5 */
     10406FNIEMOP_STUB_1(iemOp_fldcw, uint8_t, bRm);
     10407
     10408/** Opcode 0xdd /6 */
     10409FNIEMOP_STUB_1(iemOp_fstenv, uint8_t, bRm);
     10410
     10411/** Opcode 0xdd /7 */
     10412FNIEMOP_STUB_1(iemOp_fstcw, uint8_t, bRm);
     10413
     10414/** Opcode 0xdd 0xc9, 0xdd 0xd8-0xdf.  */
     10415FNIEMOP_STUB(iemOp_fnop);
     10416
     10417
    1038510418/** Opcode 0xdd. */
     10419FNIEMOP_DEF(iemOp_EscF5)
     10420{
     10421    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     10422    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     10423    {
     10424        switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)
     10425        {
     10426            case 0: return FNIEMOP_CALL_1(iemOp_fld_stX,  bRm);
     10427            case 1: return FNIEMOP_CALL_1(iemOp_fxch_stX,  bRm);
     10428            case 2:
     10429                if (bRm == 0xc9)
     10430                    return FNIEMOP_CALL(iemOp_fnop);
     10431                return IEMOP_RAISE_INVALID_OPCODE();
     10432            case 3: return FNIEMOP_CALL(iemOp_fnop); /* AMD says reserved; tests on intel indicates FNOP. */
     10433            case 4:
     10434            case 5:
     10435            case 6:
     10436            case 7:
     10437            IEM_NOT_REACHED_DEFAULT_CASE_RET();
     10438        }
     10439
     10440    }
     10441    else
     10442    {
     10443        switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)
     10444        {
     10445            case 0: return FNIEMOP_CALL_1(iemOp_fld_m32r,  bRm);
     10446            case 1: return IEMOP_RAISE_INVALID_OPCODE(); /** @todo Check if 0xdd /1 is a valid instruction which does/did something. */
     10447            case 2: return FNIEMOP_CALL_1(iemOp_fst_m32r,  bRm);
     10448            case 3: return FNIEMOP_CALL_1(iemOp_fstp_m32r, bRm);
     10449            case 4: return FNIEMOP_CALL_1(iemOp_fldenv,   bRm);
     10450            case 5: return FNIEMOP_CALL_1(iemOp_fldcw,    bRm);
     10451            case 6: return FNIEMOP_CALL_1(iemOp_fstenv,   bRm);
     10452            case 7: return FNIEMOP_CALL_1(iemOp_fstcw,    bRm);
     10453            IEM_NOT_REACHED_DEFAULT_CASE_RET();
     10454        }
     10455    }
     10456}
     10457#else
    1038610458FNIEMOP_STUB(iemOp_EscF5);
     10459#endif
     10460
    1038710461
    1038810462/** Opcode 0xde 0xd9. */
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