VirtualBox

Changeset 40083 in vbox


Ignore:
Timestamp:
Feb 12, 2012 1:51:58 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
76217
Message:

More FPU instruction stubs.

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

Legend:

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

    r40082 r40083  
    1064510645
    1064610646/** Opcode 0xdb 11/0. */
    10647 FNIEMOP_STUB_1(iemOp_fcmovnb,  uint8_t, bRm);
     10647FNIEMOP_STUB_1(iemOp_fcmovnb_stN,  uint8_t, bRm);
    1064810648
    1064910649/** Opcode 0xdb 11/1. */
    10650 FNIEMOP_STUB_1(iemOp_fcmovne,  uint8_t, bRm);
     10650FNIEMOP_STUB_1(iemOp_fcmovne_stN,  uint8_t, bRm);
    1065110651
    1065210652/** Opcode 0xdb 11/2. */
    10653 FNIEMOP_STUB_1(iemOp_fcmovnbe, uint8_t, bRm);
     10653FNIEMOP_STUB_1(iemOp_fcmovnbe_stN, uint8_t, bRm);
    1065410654
    1065510655/** Opcode 0xdb 11/3. */
    10656 FNIEMOP_STUB_1(iemOp_fcmovnnu, uint8_t, bRm);
     10656FNIEMOP_STUB_1(iemOp_fcmovnnu_stN, uint8_t, bRm);
    1065710657
    1065810658
     
    1071810718
    1071910719/** Opcode 0xdb 11/5. */
    10720 FNIEMOP_STUB_1(iemOp_fucomi, uint8_t, bRm);
     10720FNIEMOP_STUB_1(iemOp_fucomi_stN, uint8_t, bRm);
    1072110721
    1072210722/** Opcode 0xdb 11/6. */
    10723 FNIEMOP_STUB_1(iemOp_fcomi,  uint8_t, bRm);
     10723FNIEMOP_STUB_1(iemOp_fcomi_stN,  uint8_t, bRm);
    1072410724
    1072510725
     
    1073310733        switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)
    1073410734        {
    10735             case 0: FNIEMOP_CALL_1(iemOp_fcmovnb,  bRm);
    10736             case 1: FNIEMOP_CALL_1(iemOp_fcmovne,  bRm);
    10737             case 2: FNIEMOP_CALL_1(iemOp_fcmovnbe, bRm);
    10738             case 3: FNIEMOP_CALL_1(iemOp_fcmovnnu, bRm);
     10735            case 0: FNIEMOP_CALL_1(iemOp_fcmovnb_stN,  bRm);
     10736            case 1: FNIEMOP_CALL_1(iemOp_fcmovne_stN,  bRm);
     10737            case 2: FNIEMOP_CALL_1(iemOp_fcmovnbe_stN, bRm);
     10738            case 3: FNIEMOP_CALL_1(iemOp_fcmovnnu_stN, bRm);
    1073910739            case 4:
    1074010740                IEMOP_HLP_NO_LOCK_PREFIX();
     
    1075210752                }
    1075310753                break;
    10754             case 5: return FNIEMOP_CALL_1(iemOp_fucomi, bRm);
    10755             case 6: return FNIEMOP_CALL_1(iemOp_fcomi,  bRm);
     10754            case 5: return FNIEMOP_CALL_1(iemOp_fucomi_stN, bRm);
     10755            case 6: return FNIEMOP_CALL_1(iemOp_fcomi_stN,  bRm);
    1075610756            case 7: return IEMOP_RAISE_INVALID_OPCODE();
    1075710757            IEM_NOT_REACHED_DEFAULT_CASE_RET();
     
    1077510775}
    1077610776
     10777
     10778/** Opcode 0xdc 11/0. */
     10779FNIEMOP_STUB_1(iemOp_fadd_stN_st0,   uint8_t, bRm);
     10780
     10781/** Opcode 0xdc 11/1. */
     10782FNIEMOP_STUB_1(iemOp_fmul_stN_st0,   uint8_t, bRm);
     10783
     10784/** Opcode 0xdc 11/4. */
     10785FNIEMOP_STUB_1(iemOp_fsubr_stN_st0,  uint8_t, bRm);
     10786
     10787/** Opcode 0xdc 11/5. */
     10788FNIEMOP_STUB_1(iemOp_fsub_stN_st0,   uint8_t, bRm);
     10789
     10790/** Opcode 0xdc 11/6. */
     10791FNIEMOP_STUB_1(iemOp_fdivr_stN_st0,  uint8_t, bRm);
     10792
     10793/** Opcode 0xdc 11/7. */
     10794FNIEMOP_STUB_1(iemOp_fdiv_stN_st0,   uint8_t, bRm);
     10795
     10796/** Opcode 0xdc !11/0. */
     10797FNIEMOP_STUB_1(iemOp_fadd_m64r,  uint8_t, bRm);
     10798
     10799/** Opcode 0xdc !11/1. */
     10800FNIEMOP_STUB_1(iemOp_fmul_m64r,  uint8_t, bRm);
     10801
     10802/** Opcode 0xdc !11/2. */
     10803FNIEMOP_STUB_1(iemOp_fcom_m64r,  uint8_t, bRm);
     10804
     10805/** Opcode 0xdc !11/3. */
     10806FNIEMOP_STUB_1(iemOp_fcomp_m64r, uint8_t, bRm);
     10807
     10808/** Opcode 0xdc !11/4. */
     10809FNIEMOP_STUB_1(iemOp_fsub_m64r,  uint8_t, bRm);
     10810
     10811/** Opcode 0xdc !11/5. */
     10812FNIEMOP_STUB_1(iemOp_fsubr_m64r, uint8_t, bRm);
     10813
     10814/** Opcode 0xdc !11/6. */
     10815FNIEMOP_STUB_1(iemOp_fdiv_m64r,  uint8_t, bRm);
     10816
     10817/** Opcode 0xdc !11/7. */
     10818FNIEMOP_STUB_1(iemOp_fdivr_m64r, uint8_t, bRm);
     10819
     10820
    1077710821/** Opcode 0xdc. */
    10778 FNIEMOP_STUB(iemOp_EscF4);
     10822FNIEMOP_DEF(iemOp_EscF4)
     10823{
     10824    pIemCpu->offFpuOpcode = pIemCpu->offOpcode - 1;
     10825    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     10826    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     10827    {
     10828        switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)
     10829        {
     10830            case 0: return FNIEMOP_CALL_1(iemOp_fadd_stN_st0,  bRm);
     10831            case 1: return FNIEMOP_CALL_1(iemOp_fmul_stN_st0,  bRm);
     10832            case 2: return FNIEMOP_CALL(iemOp_fnop);
     10833            case 3: return FNIEMOP_CALL(iemOp_fnop);
     10834            case 4: return FNIEMOP_CALL_1(iemOp_fsubr_stN_st0, bRm);
     10835            case 5: return FNIEMOP_CALL_1(iemOp_fsub_stN_st0,  bRm);
     10836            case 6: return FNIEMOP_CALL_1(iemOp_fdivr_stN_st0, bRm);
     10837            case 7: return FNIEMOP_CALL_1(iemOp_fdiv_stN_st0,  bRm);
     10838            IEM_NOT_REACHED_DEFAULT_CASE_RET();
     10839        }
     10840    }
     10841    else
     10842    {
     10843        switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)
     10844        {
     10845            case 0: return FNIEMOP_CALL_1(iemOp_fadd_m64r,  bRm);
     10846            case 1: return FNIEMOP_CALL_1(iemOp_fmul_m64r,  bRm);
     10847            case 2: return FNIEMOP_CALL_1(iemOp_fcom_m64r,  bRm);
     10848            case 3: return FNIEMOP_CALL_1(iemOp_fcomp_m64r, bRm);
     10849            case 4: return FNIEMOP_CALL_1(iemOp_fsub_m64r,  bRm);
     10850            case 5: return FNIEMOP_CALL_1(iemOp_fsubr_m64r, bRm);
     10851            case 6: return FNIEMOP_CALL_1(iemOp_fdiv_m64r,  bRm);
     10852            case 7: return FNIEMOP_CALL_1(iemOp_fdivr_m64r, bRm);
     10853            IEM_NOT_REACHED_DEFAULT_CASE_RET();
     10854        }
     10855    }
     10856}
    1077910857
    1078010858
  • trunk/src/VBox/VMM/testcase/tstX86-1A.asm

    r40082 r40083  
    14521452        ShouldTrap X86_XCPT_UD, db 0dbh, 032h
    14531453
     1454        ; the 0xdc block
     1455        db 0dbh, 0d0h ; fnop?
     1456        db 0dbh, 0d1h ; fnop?
     1457        db 0dbh, 0d2h ; fnop?
     1458        db 0dbh, 0d3h ; fnop?
     1459        db 0dbh, 0d4h ; fnop?
     1460        db 0dbh, 0d5h ; fnop?
     1461        db 0dbh, 0d6h ; fnop?
     1462        db 0dbh, 0d7h ; fnop?
     1463        db 0dbh, 0d8h ; fnop?
     1464        db 0dbh, 0d9h ; fnop?
     1465        db 0dbh, 0dah ; fnop?
     1466        db 0dbh, 0dbh ; fnop?
     1467        db 0dbh, 0dch ; fnop?
     1468        db 0dbh, 0ddh ; fnop?
     1469        db 0dbh, 0deh ; fnop?
     1470        db 0dbh, 0dfh ; fnop?
     1471
    14541472        ; the 0xdd block
    14551473        db 0ddh, 0c0h ; fnop?
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