VirtualBox

Changeset 47669 in vbox


Ignore:
Timestamp:
Aug 12, 2013 10:42:55 AM (11 years ago)
Author:
vboxsync
Message:

loop $ optimization.

File:
1 edited

Legend:

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

    r47568 r47669  
    1573615736        case IEMMODE_16BIT:
    1573715737            IEM_MC_BEGIN(0,0);
    15738             IEM_MC_SUB_GREG_U16(X86_GREG_xCX, 1);
    15739             IEM_MC_IF_CX_IS_NZ() {
    15740                 IEM_MC_REL_JMP_S8(i8Imm);
    15741             } IEM_MC_ELSE() {
    15742                 IEM_MC_ADVANCE_RIP();
    15743             } IEM_MC_ENDIF();
     15738            if (-(int8_t)pIemCpu->offOpcode != i8Imm)
     15739            {
     15740                IEM_MC_SUB_GREG_U16(X86_GREG_xCX, 1);
     15741                IEM_MC_IF_CX_IS_NZ() {
     15742                    IEM_MC_REL_JMP_S8(i8Imm);
     15743                } IEM_MC_ELSE() {
     15744                    IEM_MC_ADVANCE_RIP();
     15745                } IEM_MC_ENDIF();
     15746            }
     15747            else
     15748            {
     15749                IEM_MC_STORE_GREG_U16_CONST(X86_GREG_xCX, 0);
     15750                IEM_MC_ADVANCE_RIP();
     15751            }
    1574415752            IEM_MC_END();
    1574515753            return VINF_SUCCESS;
     
    1574715755        case IEMMODE_32BIT:
    1574815756            IEM_MC_BEGIN(0,0);
    15749             IEM_MC_SUB_GREG_U32(X86_GREG_xCX, 1);
    15750             IEM_MC_IF_ECX_IS_NZ() {
    15751                 IEM_MC_REL_JMP_S8(i8Imm);
    15752             } IEM_MC_ELSE() {
    15753                 IEM_MC_ADVANCE_RIP();
    15754             } IEM_MC_ENDIF();
     15757            if (-(int8_t)pIemCpu->offOpcode != i8Imm)
     15758            {
     15759                IEM_MC_SUB_GREG_U32(X86_GREG_xCX, 1);
     15760                IEM_MC_IF_ECX_IS_NZ() {
     15761                    IEM_MC_REL_JMP_S8(i8Imm);
     15762                } IEM_MC_ELSE() {
     15763                    IEM_MC_ADVANCE_RIP();
     15764                } IEM_MC_ENDIF();
     15765            }
     15766            else
     15767            {
     15768                IEM_MC_STORE_GREG_U32_CONST(X86_GREG_xCX, 0);
     15769                IEM_MC_ADVANCE_RIP();
     15770            }
    1575515771            IEM_MC_END();
    1575615772            return VINF_SUCCESS;
     
    1575815774        case IEMMODE_64BIT:
    1575915775            IEM_MC_BEGIN(0,0);
    15760             IEM_MC_SUB_GREG_U64(X86_GREG_xCX, 1);
    15761             IEM_MC_IF_RCX_IS_NZ() {
    15762                 IEM_MC_REL_JMP_S8(i8Imm);
    15763             } IEM_MC_ELSE() {
    15764                 IEM_MC_ADVANCE_RIP();
    15765             } IEM_MC_ENDIF();
     15776            if (-(int8_t)pIemCpu->offOpcode != i8Imm)
     15777            {
     15778                IEM_MC_SUB_GREG_U64(X86_GREG_xCX, 1);
     15779                IEM_MC_IF_RCX_IS_NZ() {
     15780                    IEM_MC_REL_JMP_S8(i8Imm);
     15781                } IEM_MC_ELSE() {
     15782                    IEM_MC_ADVANCE_RIP();
     15783                } IEM_MC_ENDIF();
     15784            }
     15785            else
     15786            {
     15787                IEM_MC_STORE_GREG_U64_CONST(X86_GREG_xCX, 0);
     15788                IEM_MC_ADVANCE_RIP();
     15789            }
    1576615790            IEM_MC_END();
    1576715791            return VINF_SUCCESS;
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