VirtualBox

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


Ignore:
Timestamp:
Feb 8, 2012 9:16:33 PM (13 years ago)
Author:
vboxsync
Message:

a bit more...

Location:
trunk/src/VBox/VMM/VMMAll
Files:
2 edited

Legend:

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

    r40022 r40042  
    51345134#define IEM_MC_FETCH_MEM_U64_DISP(a_u64Dst, a_iSeg, a_GCPtrMem, a_offDisp) \
    51355135    IEM_MC_RETURN_ON_FAILURE(iemMemFetchDataU64(pIemCpu, &(a_u64Dst), (a_iSeg), (a_GCPtrMem) + (a_offDisp)))
     5136
     5137#define IEM_MC_FETCH_MEM_R32(a_r32Dst, a_iSeg, a_GCPtrMem) \
     5138    IEM_MC_RETURN_ON_FAILURE(iemMemFetchDataU32(pIemCpu, &(a_r32Dst).u32, (a_iSeg), (a_GCPtrMem)))
     5139#define IEM_MC_FETCH_MEM_R64(a_r64Dst, a_iSeg, a_GCPtrMem) \
     5140    IEM_MC_RETURN_ON_FAILURE(iemMemFetchDataU64(pIemCpu, &(a_r64Dst).u64, (a_iSeg), (a_GCPtrMem)))
     5141#define IEM_MC_FETCH_MEM_R80(a_r80Dst, a_iSeg, a_GCPtrMem) \
     5142    IEM_MC_RETURN_ON_FAILURE(iemMemFetchDataR80(pIemCpu, &(a_r64Dst), (a_iSeg), (a_GCPtrMem)))
     5143
    51365144
    51375145#define IEM_MC_FETCH_MEM_U8_ZX_U16(a_u16Dst, a_iSeg, a_GCPtrMem) \
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h

    r40024 r40042  
    1038410384FNIEMOP_STUB(iemOp_EscF4);
    1038510385
     10386
     10387/** Opcode 0xdd /0 mem32real */
     10388FNIEMOP_DEF_1(iemOp_fld_m32r, uint8_t, bRm)
     10389{
     10390    IEMOP_MNEMONIC("fld m32r");
     10391    IEMOP_HLP_NO_LOCK_PREFIX();
    1038610392#if 0
    10387 /** Opcode 0xdd /0 mem32real */
    10388 FNIEMOP_STUB_1(iemOp_fld_m32r, uint8_t, bRm);
     10393
     10394    IEM_MC_BEGIN(3, 2);
     10395    IEM_MC_LOCAL(RTFLOAT32U,    r32Tmp);
     10396    IEM_MC_LOCAL(RTGCPTR,       GCPtrEffSrc);
     10397
     10398    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm);
     10399    IEM_MC_FETCH_MEM_R32(r32Tmp, pIemCpu->iEffSeg, GCPtrEffSrc);
     10400
     10401
     10402    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     10403    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     10404
     10405
     10406    IEM_MC_ADVANCE_RIP();
     10407    IEM_MC_END();
     10408    return VINF_SUCCESS;
     10409#else
     10410    AssertFailedReturn(VERR_NOT_IMPLEMENTED);
     10411#endif
     10412}
     10413
    1038910414
    1039010415/** Opcode 0xdd /0 stN */
    1039110416FNIEMOP_STUB_1(iemOp_fld_stN, uint8_t, bRm);
    1039210417
    10393 /** Opcode 0xdd /1 stN   */
    10394 FNIEMOP_STUB_1(iemOp_fst_m32r, uint8_t, bRm);
    10395 
    1039610418/** Opcode 0xdd /2 mem32real */
    1039710419FNIEMOP_STUB_1(iemOp_fst_m32r, uint8_t, bRm);
    1039810420
     10421/** Opcode 0xdd /0 stN */
     10422FNIEMOP_STUB_1(iemOp_fxch_stN, uint8_t, bRm);
     10423
    1039910424/** Opcode 0xdd /3 */
    1040010425FNIEMOP_STUB_1(iemOp_fstp_m32r, uint8_t, bRm);
     
    1041510440FNIEMOP_STUB(iemOp_fnop);
    1041610441
     10442/** Opcode 0xdd 0xe0. */
     10443FNIEMOP_STUB(iemOp_fchs);
     10444
     10445/** Opcode 0xdd 0xe1. */
     10446FNIEMOP_STUB(iemOp_fabs);
     10447
     10448/** Opcode 0xdd 0xe4. */
     10449FNIEMOP_STUB(iemOp_ftst);
     10450
     10451/** Opcode 0xdd 0xe5. */
     10452FNIEMOP_STUB(iemOp_fxam);
     10453
     10454/** Opcode 0xdd 0xe8. */
     10455FNIEMOP_STUB(iemOp_fld1);
     10456
     10457/** Opcode 0xdd 0xe9. */
     10458FNIEMOP_STUB(iemOp_fldl2t);
     10459
     10460/** Opcode 0xdd 0xea. */
     10461FNIEMOP_STUB(iemOp_fldl2e);
     10462
     10463/** Opcode 0xdd 0xeb. */
     10464FNIEMOP_STUB(iemOp_fldpi);
     10465
     10466/** Opcode 0xdd 0xec. */
     10467FNIEMOP_STUB(iemOp_fldlg2);
     10468
     10469/** Opcode 0xdd 0xed. */
     10470FNIEMOP_STUB(iemOp_fldln2);
     10471
     10472/** Opcode 0xdd 0xee. */
     10473FNIEMOP_STUB(iemOp_fldz);
     10474
     10475/** Opcode 0xdd 0xf0. */
     10476FNIEMOP_STUB(iemOp_f2xm1);
     10477
     10478/** Opcode 0xdd 0xf1. */
     10479FNIEMOP_STUB(iemOp_fylx2);
     10480
     10481/** Opcode 0xdd 0xf2. */
     10482FNIEMOP_STUB(iemOp_fptan);
     10483
     10484/** Opcode 0xdd 0xf3. */
     10485FNIEMOP_STUB(iemOp_fpatan);
     10486
     10487/** Opcode 0xdd 0xf4. */
     10488FNIEMOP_STUB(iemOp_fxtract);
     10489
     10490/** Opcode 0xdd 0xf5. */
     10491FNIEMOP_STUB(iemOp_fprem1);
     10492
     10493/** Opcode 0xdd 0xf6. */
     10494FNIEMOP_STUB(iemOp_fdecstp);
     10495
     10496/** Opcode 0xdd 0xf7. */
     10497FNIEMOP_STUB(iemOp_fincstp);
     10498
     10499/** Opcode 0xdd 0xf8. */
     10500FNIEMOP_STUB(iemOp_fprem);
     10501
     10502/** Opcode 0xdd 0xf9. */
     10503FNIEMOP_STUB(iemOp_fyl2xp1);
     10504
     10505/** Opcode 0xdd 0xfa. */
     10506FNIEMOP_STUB(iemOp_fsqrt);
     10507
     10508/** Opcode 0xdd 0xfb. */
     10509FNIEMOP_STUB(iemOp_fsincos);
     10510
     10511/** Opcode 0xdd 0xfc. */
     10512FNIEMOP_STUB(iemOp_frndint);
     10513
     10514/** Opcode 0xdd 0xfd. */
     10515FNIEMOP_STUB(iemOp_fscale);
     10516
     10517/** Opcode 0xdd 0xfe. */
     10518FNIEMOP_STUB(iemOp_fsin);
     10519
     10520/** Opcode 0xdd 0xff. */
     10521FNIEMOP_STUB(iemOp_fcos);
     10522
     10523
     10524/** Used by iemOp_EscF5. */
     10525static const PFNIEMOP g_apfnEscF5_E0toFF[32] =
     10526{
     10527    /* 0xe0 */  iemOp_fchs,
     10528    /* 0xe1 */  iemOp_fabs,
     10529    /* 0xe2 */  iemOp_Invalid,
     10530    /* 0xe3 */  iemOp_Invalid,
     10531    /* 0xe4 */  iemOp_ftst,
     10532    /* 0xe5 */  iemOp_fxam,
     10533    /* 0xe6 */  iemOp_Invalid,
     10534    /* 0xe7 */  iemOp_Invalid,
     10535    /* 0xe8 */  iemOp_fld1,
     10536    /* 0xe9 */  iemOp_fldl2t,
     10537    /* 0xea */  iemOp_fldl2e,
     10538    /* 0xeb */  iemOp_fldpi,
     10539    /* 0xec */  iemOp_fldlg2,
     10540    /* 0xed */  iemOp_fldln2,
     10541    /* 0xee */  iemOp_fldz,
     10542    /* 0xef */  iemOp_Invalid,
     10543    /* 0xf0 */  iemOp_f2xm1,
     10544    /* 0xf1 */  iemOp_fylx2,
     10545    /* 0xf2 */  iemOp_fptan,
     10546    /* 0xf3 */  iemOp_fpatan,
     10547    /* 0xf4 */  iemOp_fxtract,
     10548    /* 0xf5 */  iemOp_fprem1,
     10549    /* 0xf6 */  iemOp_fdecstp,
     10550    /* 0xf7 */  iemOp_fincstp,
     10551    /* 0xf8 */  iemOp_fprem,
     10552    /* 0xf9 */  iemOp_fyl2xp1,
     10553    /* 0xfa */  iemOp_fsqrt,
     10554    /* 0xfb */  iemOp_fsincos,
     10555    /* 0xfc */  iemOp_frndint,
     10556    /* 0xfd */  iemOp_fscale,
     10557    /* 0xfe */  iemOp_fsin,
     10558    /* 0xff */  iemOp_fcos
     10559};
     10560
    1041710561
    1041810562/** Opcode 0xdd. */
     
    1042410568        switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)
    1042510569        {
    10426             case 0: return FNIEMOP_CALL_1(iemOp_fld_stX,  bRm);
    10427             case 1: return FNIEMOP_CALL_1(iemOp_fxch_stX,  bRm);
     10570            case 0:
     10571                return FNIEMOP_CALL_1(iemOp_fld_stN, bRm);
     10572            case 1:
     10573                return FNIEMOP_CALL_1(iemOp_fxch_stN, bRm);
    1042810574            case 2:
    1042910575                if (bRm == 0xc9)
    1043010576                    return FNIEMOP_CALL(iemOp_fnop);
    1043110577                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:
     10578            case 3:
     10579                return FNIEMOP_CALL(iemOp_fnop); /* AMD says reserved; tests on intel indicates FNOP. */
     10580            case 4: case 5: case 6: case 7:
     10581                return FNIEMOP_CALL(g_apfnEscF5_E0toFF[(bRm & (X86_MODRM_REG_MASK |X86_MODRM_RM_MASK)) - 0xe0]);
    1043710582            IEM_NOT_REACHED_DEFAULT_CASE_RET();
    1043810583        }
     
    1044710592            case 2: return FNIEMOP_CALL_1(iemOp_fst_m32r,  bRm);
    1044810593            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);
     10594            case 4: return FNIEMOP_CALL_1(iemOp_fldenv,    bRm);
     10595            case 5: return FNIEMOP_CALL_1(iemOp_fldcw,     bRm);
     10596            case 6: return FNIEMOP_CALL_1(iemOp_fstenv,    bRm);
     10597            case 7: return FNIEMOP_CALL_1(iemOp_fstcw,     bRm);
    1045310598            IEM_NOT_REACHED_DEFAULT_CASE_RET();
    1045410599        }
    1045510600    }
    1045610601}
    10457 #else
    10458 FNIEMOP_STUB(iemOp_EscF5);
    10459 #endif
    1046010602
    1046110603
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