VirtualBox

Changeset 73 in vbox


Ignore:
Timestamp:
Jan 16, 2007 5:25:59 PM (18 years ago)
Author:
vboxsync
Message:

Just drop the inline assembly on 64-bit host.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/hwacc_vmx.h

    r1 r73  
    697697 * @param   pVMXOn      Physical address of VMXON structure
    698698 */
    699 #if RT_INLINE_ASM_EXTERNAL
     699#if RT_INLINE_ASM_EXTERNAL || HC_ARCH_BITS == 64
    700700DECLASM(int) VMXEnable(RTHCPHYS pVMXOn);
    701701#else
     
    750750 * Executes VMXOFF
    751751 */
    752 #if RT_INLINE_ASM_EXTERNAL
     752#if RT_INLINE_ASM_EXTERNAL || HC_ARCH_BITS == 64
    753753DECLASM(void) VMXDisable(void);
    754754#else
     
    777777 * @param   pVMCS       Physical address of VM control structure
    778778 */
    779 #if RT_INLINE_ASM_EXTERNAL
     779#if RT_INLINE_ASM_EXTERNAL || HC_ARCH_BITS == 64
    780780DECLASM(int) VMXClearVMCS(RTHCPHYS pVMCS);
    781781#else
     
    824824 * @param   pVMCS       Physical address of VMCS structure
    825825 */
    826 #if RT_INLINE_ASM_EXTERNAL
     826#if RT_INLINE_ASM_EXTERNAL || HC_ARCH_BITS == 64
    827827DECLASM(int) VMXActivateVMCS(RTHCPHYS pVMCS);
    828828#else
     
    872872 * @param   u64Val          16, 32 or 64 bits value
    873873 */
    874 #if RT_INLINE_ASM_EXTERNAL
    875874DECLASM(int) VMXWriteVMCS64(uint32_t idxField, uint64_t u64Val);
    876 #else
    877 DECLINLINE(int) VMXWriteVMCS64(uint32_t idxField, uint64_t u64Val)
    878 {
    879     int rc = VINF_SUCCESS;
    880 # if RT_INLINE_ASM_GNU_STYLE
    881 #  if HC_ARCH_BITS == 64
    882 #   error "todo"
    883 #  endif
    884 # else
    885     __asm
    886     {
    887         push   dword ptr [u64Val+4]
    888         push   dword ptr [u64Val]
    889         mov    eax, [idxField]
    890         _emit  0x0F
    891         _emit  0x79
    892         _emit  0x04
    893         _emit  0x24     /* VMWRITE eax, [esp] */
    894         jnc    valid_vmcs
    895         mov    dword ptr [rc], VERR_VMX_INVALID_VMCS_PTR
    896         jmp    the_end
    897 
    898 valid_vmcs:
    899         jnz    the_end
    900         mov    dword ptr [rc], VERR_VMX_INVALID_VMCS_FIELD
    901 the_end:
    902         add    esp, 8
    903     }
    904 # endif
    905     return rc;
    906 }
    907 #endif
    908875
    909876/**
     
    914881 * @param   u32Val          32 bits value
    915882 */
    916 #if RT_INLINE_ASM_EXTERNAL
     883#if RT_INLINE_ASM_EXTERNAL || HC_ARCH_BITS == 64
    917884DECLASM(int) VMXWriteVMCS32(uint32_t idxField, uint32_t u32Val);
    918885#else
     
    973940 * @param   pData           Ptr to store VM field value
    974941 */
    975 #if RT_INLINE_ASM_EXTERNAL
    976942DECLASM(int) VMXReadVMCS64(uint32_t idxField, uint64_t *pData);
    977 #else
    978 DECLINLINE(int) VMXReadVMCS64(uint32_t idxField, uint64_t *pData)
    979 {
    980     int rc = VINF_SUCCESS;
    981 # if RT_INLINE_ASM_GNU_STYLE
    982 #  if HC_ARCH_BITS == 64
    983 #   error "todo"
    984 #  endif
    985 # else
    986     __asm
    987     {
    988         sub     esp, 8
    989         mov     dword ptr [esp], 0
    990         mov     dword ptr [esp+4], 0
    991         mov     eax, [idxField]
    992         _emit   0x0F
    993         _emit   0x78
    994         _emit   0x04
    995         _emit   0x24     /* VMREAD eax, [esp] */
    996         mov     edx, pData
    997         pop     dword ptr [edx]
    998         pop     dword ptr [edx+4]
    999         jnc     valid_vmcs
    1000         mov     dword ptr [rc], VERR_VMX_INVALID_VMCS_PTR
    1001         jmp     the_end
    1002 
    1003 valid_vmcs:
    1004         jnz     the_end
    1005         mov     dword ptr [rc], VERR_VMX_INVALID_VMCS_FIELD
    1006 the_end:
    1007     }
    1008 # endif
    1009     return rc;
    1010 }
    1011 #endif
    1012 
    1013943
    1014944/**
     
    1019949 * @param   pData           Ptr to store VM field value
    1020950 */
    1021 #if RT_INLINE_ASM_EXTERNAL
     951#if RT_INLINE_ASM_EXTERNAL || HC_ARCH_BITS == 64
    1022952DECLASM(int) VMXReadVMCS32(uint32_t idxField, uint32_t *pData);
    1023953#else
     
    10941024 * @returns error value
    10951025 */
    1096 uint32_t inline VMXGetLastError()
     1026DECLINLINE(uint32_t) VMXGetLastError(void)
    10971027{
     1028#if HC_ARCH_BITS == 64
     1029    uint64_t uLastError = 0;
     1030    int rc = VMXReadVMCS(VMX_VMCS_RO_VM_INSTR_ERROR, &uLastError);
     1031    AssertRC(rc);
     1032    return (uint32_t)uLastError;
     1033
     1034#else /* 32-bit host: */
    10981035    uint32_t lasterr = 0;
    10991036    int      rc;
     
    11021039    AssertRC(rc);
    11031040    return lasterr;
     1041#endif
    11041042}
    11051043
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