VirtualBox

Changeset 103721 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Mar 7, 2024 10:03:58 AM (12 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162089
Message:

VMM/IEM: Simplified IEMOP_BODY_BINARY_rm_rv_RO and IEMOP_BODY_BINARY_rv_rm_RO. bugref:10376

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

Legend:

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

    r103718 r103721  
    282282 * @note Used both in OneByte and TwoByte0f.
    283283 */
    284 #define IEMOP_BODY_BINARY_rv_rm_RO(a_bRm, a_fnNormalU16, a_fnNormalU32, a_fnNormalU64, a_EmitterBasename, a_fNativeArchs) \
     284#define IEMOP_BODY_BINARY_rv_rm_RO(a_bRm, a_InsNm, a_fNativeArchs) \
    285285    /* \
    286286     * If rm is denoting a register, no more instruction bytes. \
     
    301301                    IEM_MC_LOCAL(uint32_t,  uEFlags); \
    302302                    IEM_MC_FETCH_EFLAGS(uEFlags); \
    303                     IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u16Dst, u16Src, uEFlags, 16); \
     303                    IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u16Dst, u16Src, uEFlags, 16); \
    304304                    IEM_MC_COMMIT_EFLAGS(uEFlags); \
    305305                } IEM_MC_NATIVE_ELSE() { \
     
    308308                    IEM_MC_ARG(uint32_t *,  pEFlags, 2); \
    309309                    IEM_MC_REF_EFLAGS(pEFlags); \
    310                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \
     310                    IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \
    311311                } IEM_MC_NATIVE_ENDIF(); \
    312312                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    325325                    IEM_MC_LOCAL(uint32_t,  uEFlags); \
    326326                    IEM_MC_FETCH_EFLAGS(uEFlags); \
    327                     IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u32Dst, u32Src, uEFlags, 32); \
     327                    IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u32Dst, u32Src, uEFlags, 32); \
    328328                    IEM_MC_COMMIT_EFLAGS(uEFlags); \
    329329                } IEM_MC_NATIVE_ELSE() { \
     
    332332                    IEM_MC_ARG(uint32_t *,  pEFlags, 2); \
    333333                    IEM_MC_REF_EFLAGS(pEFlags); \
    334                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
     334                    IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \
    335335                } IEM_MC_NATIVE_ENDIF(); \
    336336                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    349349                    IEM_MC_LOCAL(uint32_t,  uEFlags); \
    350350                    IEM_MC_FETCH_EFLAGS(uEFlags); \
    351                     IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u64Dst, u64Src, uEFlags, 64); \
     351                    IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u64Dst, u64Src, uEFlags, 64); \
    352352                    IEM_MC_COMMIT_EFLAGS(uEFlags); \
    353353                } IEM_MC_NATIVE_ELSE() { \
     
    356356                    IEM_MC_ARG(uint32_t *,  pEFlags, 2); \
    357357                    IEM_MC_REF_EFLAGS(pEFlags); \
    358                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \
     358                    IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \
    359359                } IEM_MC_NATIVE_ENDIF(); \
    360360                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    385385                    IEM_MC_LOCAL(uint32_t,  uEFlags); \
    386386                    IEM_MC_FETCH_EFLAGS(uEFlags); \
    387                     IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u16Dst, u16Src, uEFlags, 16); \
     387                    IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u16Dst, u16Src, uEFlags, 16); \
    388388                    IEM_MC_COMMIT_EFLAGS(uEFlags); \
    389389                } IEM_MC_NATIVE_ELSE() { \
     
    392392                    IEM_MC_ARG(uint32_t *, pEFlags, 2); \
    393393                    IEM_MC_REF_EFLAGS(pEFlags); \
    394                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \
     394                    IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \
    395395                } IEM_MC_NATIVE_ENDIF(); \
    396396                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    411411                    IEM_MC_LOCAL(uint32_t,  uEFlags); \
    412412                    IEM_MC_FETCH_EFLAGS(uEFlags); \
    413                     IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u32Dst, u32Src, uEFlags, 32); \
     413                    IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u32Dst, u32Src, uEFlags, 32); \
    414414                    IEM_MC_COMMIT_EFLAGS(uEFlags); \
    415415                } IEM_MC_NATIVE_ELSE() { \
     
    418418                    IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \
    419419                    IEM_MC_REF_EFLAGS(pEFlags); \
    420                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
     420                    IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \
    421421                } IEM_MC_NATIVE_ENDIF(); \
    422422                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    437437                    IEM_MC_LOCAL(uint32_t,  uEFlags); \
    438438                    IEM_MC_FETCH_EFLAGS(uEFlags); \
    439                     IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u64Dst, u64Src, uEFlags, 64); \
     439                    IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u64Dst, u64Src, uEFlags, 64); \
    440440                    IEM_MC_COMMIT_EFLAGS(uEFlags); \
    441441                } IEM_MC_NATIVE_ELSE() { \
     
    444444                    IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \
    445445                    IEM_MC_REF_EFLAGS(pEFlags); \
    446                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \
     446                    IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \
    447447                } IEM_MC_NATIVE_ENDIF(); \
    448448                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h

    r103719 r103721  
    620620 * memory/register as the destination.
    621621 */
    622 #define IEMOP_BODY_BINARY_rm_rv_RO(a_bRm, a_fnNormalU16, a_fnNormalU32, a_fnNormalU64, a_EmitterBasename, a_fNativeArchs) \
     622#define IEMOP_BODY_BINARY_rm_rv_RO(a_bRm, a_InsNm, a_fNativeArchs) \
    623623    /* \
    624624     * If rm is denoting a register, no more instruction bytes. \
     
    639639                    IEM_MC_LOCAL(uint32_t,  uEFlags); \
    640640                    IEM_MC_FETCH_EFLAGS(uEFlags); \
    641                     IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u16Dst, u16Src, uEFlags, 16); \
     641                    IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u16Dst, u16Src, uEFlags, 16); \
    642642                    IEM_MC_COMMIT_EFLAGS(uEFlags); \
    643643                } IEM_MC_NATIVE_ELSE() { \
     
    646646                    IEM_MC_ARG(uint32_t *, pEFlags, 2); \
    647647                    IEM_MC_REF_EFLAGS(pEFlags); \
    648                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \
     648                    IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \
    649649                } IEM_MC_NATIVE_ENDIF(); \
    650650                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    663663                    IEM_MC_LOCAL(uint32_t,  uEFlags); \
    664664                    IEM_MC_FETCH_EFLAGS(uEFlags); \
    665                     IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u32Dst, u32Src, uEFlags, 32); \
     665                    IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u32Dst, u32Src, uEFlags, 32); \
    666666                    IEM_MC_COMMIT_EFLAGS(uEFlags); \
    667667                } IEM_MC_NATIVE_ELSE() { \
     
    670670                    IEM_MC_ARG(uint32_t *, pEFlags, 2); \
    671671                    IEM_MC_REF_EFLAGS(pEFlags); \
    672                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
     672                    IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \
    673673                } IEM_MC_NATIVE_ENDIF(); \
    674674                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    687687                    IEM_MC_LOCAL(uint32_t,  uEFlags); \
    688688                    IEM_MC_FETCH_EFLAGS(uEFlags); \
    689                     IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u64Dst, u64Src, uEFlags, 64); \
     689                    IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u64Dst, u64Src, uEFlags, 64); \
    690690                    IEM_MC_COMMIT_EFLAGS(uEFlags); \
    691691                } IEM_MC_NATIVE_ELSE() { \
     
    694694                    IEM_MC_ARG(uint32_t *,  pEFlags, 2); \
    695695                    IEM_MC_REF_EFLAGS(pEFlags); \
    696                     IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \
     696                    IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \
    697697                } IEM_MC_NATIVE_ENDIF(); \
    698698                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    727727                        IEM_MC_LOCAL(uint32_t,  uEFlags); \
    728728                        IEM_MC_FETCH_EFLAGS(uEFlags); \
    729                         IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u16Dst, u16SrcEmit, uEFlags, 16); \
     729                        IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u16Dst, u16SrcEmit, uEFlags, 16); \
    730730                        IEM_MC_COMMIT_EFLAGS(uEFlags); \
    731731                    } IEM_MC_NATIVE_ELSE() { \
     
    737737                        IEM_MC_ARG_LOCAL_EFLAGS(     pEFlags, EFlags, 2); \
    738738                        IEM_MC_FETCH_EFLAGS(EFlags); \
    739                         IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU16, pu16Dst, u16Src, pEFlags); \
     739                        IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \
    740740                        IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \
    741741                        IEM_MC_COMMIT_EFLAGS(EFlags); \
     
    758758                        IEM_MC_LOCAL(uint32_t,  uEFlags); \
    759759                        IEM_MC_FETCH_EFLAGS(uEFlags); \
    760                         IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u32Dst, u32SrcEmit, uEFlags, 32); \
     760                        IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u32Dst, u32SrcEmit, uEFlags, 32); \
    761761                        IEM_MC_COMMIT_EFLAGS(uEFlags); \
    762762                    } IEM_MC_NATIVE_ELSE() { \
     
    768768                        IEM_MC_ARG_LOCAL_EFLAGS(     pEFlags, EFlags, 2); \
    769769                        IEM_MC_FETCH_EFLAGS(EFlags); \
    770                         IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU32, pu32Dst, u32Src, pEFlags); \
     770                        IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \
    771771                        IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \
    772772                        IEM_MC_COMMIT_EFLAGS(EFlags); \
     
    789789                        IEM_MC_LOCAL(uint32_t,  uEFlags); \
    790790                        IEM_MC_FETCH_EFLAGS(uEFlags); \
    791                         IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_EmitterBasename,_r_r_efl), u64Dst, u64SrcEmit, uEFlags, 64); \
     791                        IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u64Dst, u64SrcEmit, uEFlags, 64); \
    792792                        IEM_MC_COMMIT_EFLAGS(uEFlags); \
    793793                    } IEM_MC_NATIVE_ELSE() { \
     
    799799                        IEM_MC_ARG_LOCAL_EFLAGS(     pEFlags, EFlags, 2); \
    800800                        IEM_MC_FETCH_EFLAGS(EFlags); \
    801                         IEM_MC_CALL_VOID_AIMPL_3(a_fnNormalU64, pu64Dst, u64Src, pEFlags); \
     801                        IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \
    802802                        IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \
    803803                        IEM_MC_COMMIT_EFLAGS(EFlags); \
     
    18421842    IEMOP_MNEMONIC(cmp_Ev_Gv, "cmp Ev,Gv");
    18431843    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    1844     IEMOP_BODY_BINARY_rm_rv_RO(bRm, iemAImpl_cmp_u16, iemAImpl_cmp_u32, iemAImpl_cmp_u64, cmp, RT_ARCH_VAL_AMD64 | RT_ARCH_VAL_ARM64);
     1844    IEMOP_BODY_BINARY_rm_rv_RO(bRm, cmp, RT_ARCH_VAL_AMD64 | RT_ARCH_VAL_ARM64);
    18451845}
    18461846
     
    18661866    IEMOP_MNEMONIC(cmp_Gv_Ev, "cmp Gv,Ev");
    18671867    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    1868     IEMOP_BODY_BINARY_rv_rm_RO(bRm, iemAImpl_cmp_u16, iemAImpl_cmp_u32, iemAImpl_cmp_u64, cmp, RT_ARCH_VAL_AMD64 | RT_ARCH_VAL_ARM64);
     1868    IEMOP_BODY_BINARY_rv_rm_RO(bRm, cmp, RT_ARCH_VAL_AMD64 | RT_ARCH_VAL_ARM64);
    18691869}
    18701870
     
    55395539    }
    55405540
    5541     IEMOP_BODY_BINARY_rm_rv_RO(bRm, iemAImpl_test_u16, iemAImpl_test_u32, iemAImpl_test_u64, test, RT_ARCH_VAL_AMD64 | RT_ARCH_VAL_ARM64);
     5541    IEMOP_BODY_BINARY_rm_rv_RO(bRm, test, RT_ARCH_VAL_AMD64 | RT_ARCH_VAL_ARM64);
    55425542}
    55435543
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