VirtualBox

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


Ignore:
Timestamp:
Feb 5, 2012 12:15:08 AM (13 years ago)
Author:
vboxsync
Message:

IEM: Group 15 stubs.

File:
1 edited

Legend:

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

    r39994 r40000  
    32643264}
    32653265
     3266/** Opcode 0x0f 0xae mem/0. */
     3267FNIEMOP_STUB_1(iemOp_Grp15_fxsave,   uint8_t, bRm);
     3268
     3269/** Opcode 0x0f 0xae mem/1. */
     3270FNIEMOP_STUB_1(iemOp_Grp15_fxrstor,  uint8_t, bRm);
     3271
     3272/** Opcode 0x0f 0xae mem/2. */
     3273FNIEMOP_STUB_1(iemOp_Grp15_ldmxcsr,  uint8_t, bRm);
     3274
     3275/** Opcode 0x0f 0xae mem/3. */
     3276FNIEMOP_STUB_1(iemOp_Grp15_stmxcsr,  uint8_t, bRm);
     3277
     3278/** Opcode 0x0f 0xae mem/4. */
     3279FNIEMOP_STUB_1(iemOp_Grp15_xsave,    uint8_t, bRm);
     3280
     3281/** Opcode 0x0f 0xae mem/5. */
     3282FNIEMOP_STUB_1(iemOp_Grp15_xrstor,   uint8_t, bRm);
     3283
     3284/** Opcode 0x0f 0xae mem/6. */
     3285FNIEMOP_STUB_1(iemOp_Grp15_xsaveopt, uint8_t, bRm);
     3286
     3287/** Opcode 0x0f 0xae mem/7. */
     3288FNIEMOP_STUB_1(iemOp_Grp15_clflush,  uint8_t, bRm);
     3289
     3290/** Opcode 0x0f 0xae 11b/5. */
     3291FNIEMOP_STUB_1(iemOp_Grp15_lfence,   uint8_t, bRm);
     3292
     3293/** Opcode 0x0f 0xae 11b/6. */
     3294FNIEMOP_STUB_1(iemOp_Grp15_mfence,   uint8_t, bRm);
     3295
     3296/** Opcode 0x0f 0xae 11b/7. */
     3297FNIEMOP_STUB_1(iemOp_Grp15_sfence,   uint8_t, bRm);
     3298
     3299/** Opcode 0xf3 0x0f 0xae 11b/0. */
     3300FNIEMOP_STUB_1(iemOp_Grp15_rdfsbase, uint8_t, bRm);
     3301
     3302/** Opcode 0xf3 0x0f 0xae 11b/1. */
     3303FNIEMOP_STUB_1(iemOp_Grp15_rdgsbase, uint8_t, bRm);
     3304
     3305/** Opcode 0xf3 0x0f 0xae 11b/2. */
     3306FNIEMOP_STUB_1(iemOp_Grp15_wrfsbase, uint8_t, bRm);
     3307
     3308/** Opcode 0xf3 0x0f 0xae 11b/3. */
     3309FNIEMOP_STUB_1(iemOp_Grp15_wrgsbase, uint8_t, bRm);
     3310
    32663311
    32673312/** Opcode 0x0f 0xae. */
    3268 #if 1
    3269 FNIEMOP_STUB(iemOp_Grp15); /** @todo next up: fxrstor */
    3270 #else
    32713313FNIEMOP_DEF(iemOp_Grp15)
    32723314{
    32733315    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    3274     IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */
    32753316    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    32763317    {
    3277         ////
     3318        switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)
     3319        {
     3320            case 0: return FNIEMOP_CALL_1(iemOp_Grp15_fxsave,  bRm);
     3321            case 1: return FNIEMOP_CALL_1(iemOp_Grp15_fxrstor, bRm);
     3322            case 2: return FNIEMOP_CALL_1(iemOp_Grp15_ldmxcsr, bRm);
     3323            case 3: return FNIEMOP_CALL_1(iemOp_Grp15_stmxcsr, bRm);
     3324            case 4: return FNIEMOP_CALL_1(iemOp_Grp15_xsave,   bRm);
     3325            case 5: return FNIEMOP_CALL_1(iemOp_Grp15_xrstor,  bRm);
     3326            case 6: return FNIEMOP_CALL_1(iemOp_Grp15_xsaveopt,bRm);
     3327            case 7: return FNIEMOP_CALL_1(iemOp_Grp15_clflush, bRm);
     3328            IEM_NOT_REACHED_DEFAULT_CASE_RET();
     3329        }
    32783330    }
    32793331    else
    32803332    {
    3281 
    3282         if (pIemCpu->offOpcode == 2 || )
     3333        switch (pIemCpu->fPrefixes & (IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ | IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_LOCK))
    32833334        {
    3284         }
    3285         pIemCpu->
    3286         switch (pIemCpu->fPrefixes & (IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ | IEM_OP_PRF_SIZE_OP))
    3287         {
    3288             case IEM_OP_PRF_SIZE_OP:
    3289 
     3335            case 0:
     3336                switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)
     3337                {
     3338                    case 0: return IEMOP_RAISE_INVALID_OPCODE();
     3339                    case 1: return IEMOP_RAISE_INVALID_OPCODE();
     3340                    case 2: return IEMOP_RAISE_INVALID_OPCODE();
     3341                    case 3: return IEMOP_RAISE_INVALID_OPCODE();
     3342                    case 4: return IEMOP_RAISE_INVALID_OPCODE();
     3343                    case 5: return FNIEMOP_CALL_1(iemOp_Grp15_lfence, bRm);
     3344                    case 6: return FNIEMOP_CALL_1(iemOp_Grp15_mfence, bRm);
     3345                    case 7: return FNIEMOP_CALL_1(iemOp_Grp15_sfence, bRm);
     3346                    IEM_NOT_REACHED_DEFAULT_CASE_RET();
     3347                }
     3348                break;
    32903349
    32913350            case IEM_OP_PRF_REPZ:
     3351                switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)
     3352                {
     3353                    case 0: return FNIEMOP_CALL_1(iemOp_Grp15_rdfsbase, bRm);
     3354                    case 1: return FNIEMOP_CALL_1(iemOp_Grp15_rdgsbase, bRm);
     3355                    case 2: return FNIEMOP_CALL_1(iemOp_Grp15_wrfsbase, bRm);
     3356                    case 3: return FNIEMOP_CALL_1(iemOp_Grp15_wrgsbase, bRm);
     3357                    case 4: return IEMOP_RAISE_INVALID_OPCODE();
     3358                    case 5: return IEMOP_RAISE_INVALID_OPCODE();
     3359                    case 6: return IEMOP_RAISE_INVALID_OPCODE();
     3360                    case 7: return IEMOP_RAISE_INVALID_OPCODE();
     3361                    IEM_NOT_REACHED_DEFAULT_CASE_RET();
     3362                }
     3363                break;
     3364
     3365            default:
     3366                IEMOP_RAISE_INVALID_OPCODE();
    32923367        }
    32933368    }
     
    33213396    return VINF_SUCCESS;
    33223397}
    3323 #endif
    33243398
    33253399
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