VirtualBox

Changeset 106559 in vbox for trunk


Ignore:
Timestamp:
Oct 21, 2024 12:08:33 PM (6 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165393
Message:

IPRT: Sort out export/import trouble with 'inline-assembly' functions implemented in C++ on windows by introducing a RT_DECL_ASM() macro that combines RTDECL with DECLASM. jiraref:VBP-1171

Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/asm-math.h

    r106061 r106559  
    397397 */
    398398#if RT_INLINE_ASM_EXTERNAL || !defined(__GNUC__) || (!defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86))
    399 DECLASM(uint64_t) ASMMultU64ByU32DivByU32(uint64_t u64A, uint32_t u32B, uint32_t u32C);
     399RT_DECL_ASM(uint64_t) ASMMultU64ByU32DivByU32(uint64_t u64A, uint32_t u32B, uint32_t u32C);
    400400#else
    401401DECLINLINE(uint64_t) ASMMultU64ByU32DivByU32(uint64_t u64A, uint32_t u32B, uint32_t u32C)
  • trunk/include/iprt/asm-mem.h

    r106553 r106559  
    184184 */
    185185#if !defined(RDESKTOP) && (!defined(RT_OS_LINUX) || !defined(__KERNEL__))
    186 DECLASM(void RT_FAR *) ASMMemFirstNonZero(void const RT_FAR *pv, size_t cb) RT_NOTHROW_PROTO;
     186RT_DECL_ASM(void RT_FAR *) ASMMemFirstNonZero(void const RT_FAR *pv, size_t cb) RT_NOTHROW_PROTO;
    187187#else
    188188DECLINLINE(void RT_FAR *) ASMMemFirstNonZero(void const RT_FAR *pv, size_t cb) RT_NOTHROW_DEF
     
    233233#if    (!defined(RT_OS_LINUX) || !defined(__KERNEL__)) \
    234234    && (!defined(RT_OS_FREEBSD) || !defined(_KERNEL))
    235 DECLASM(void *) ASMMemFirstMismatchingU8(void const RT_FAR *pv, size_t cb, uint8_t u8) RT_NOTHROW_PROTO;
     235RT_DECL_ASM(void *) ASMMemFirstMismatchingU8(void const RT_FAR *pv, size_t cb, uint8_t u8) RT_NOTHROW_PROTO;
    236236#else
    237237DECLINLINE(void *) ASMMemFirstMismatchingU8(void const RT_FAR *pv, size_t cb, uint8_t u8) RT_NOTHROW_DEF
  • trunk/include/iprt/asm.h

    r106551 r106559  
    78047804 */
    78057805#if RT_INLINE_ASM_EXTERNAL || (!defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86))
    7806 DECLASM(int32_t) ASMBitFirstClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits) RT_NOTHROW_PROTO;
     7806RT_DECL_ASM(int32_t) ASMBitFirstClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits) RT_NOTHROW_PROTO;
    78077807#else
    78087808DECLINLINE(int32_t) ASMBitFirstClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits) RT_NOTHROW_DEF
     
    78917891 */
    78927892#if RT_INLINE_ASM_EXTERNAL || (!defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86))
    7893 DECLASM(int) ASMBitNextClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) RT_NOTHROW_PROTO;
     7893RT_DECL_ASM(int) ASMBitNextClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) RT_NOTHROW_PROTO;
    78947894#else
    78957895DECLINLINE(int) ASMBitNextClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) RT_NOTHROW_DEF
     
    79617961 */
    79627962#if RT_INLINE_ASM_EXTERNAL || (!defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86))
    7963 DECLASM(int32_t) ASMBitFirstSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits) RT_NOTHROW_PROTO;
     7963RT_DECL_ASM(int32_t) ASMBitFirstSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits) RT_NOTHROW_PROTO;
    79647964#else
    79657965DECLINLINE(int32_t) ASMBitFirstSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits) RT_NOTHROW_DEF
     
    80478047 */
    80488048#if RT_INLINE_ASM_EXTERNAL || (!defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86))
    8049 DECLASM(int) ASMBitNextSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) RT_NOTHROW_PROTO;
     8049RT_DECL_ASM(int) ASMBitNextSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) RT_NOTHROW_PROTO;
    80508050#else
    80518051DECLINLINE(int) ASMBitNextSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) RT_NOTHROW_DEF
  • trunk/include/iprt/cdefs.h

    r106493 r106559  
    17081708#endif
    17091709
     1710/** @def DECL_EXTERN_C
     1711 * Prepends an 'extern "C"' in C++ code.
     1712 * @param   a_RetTypeExpr   The return type, calling convention, function
     1713 *                          attributes, and whatnot expression of the function
     1714 *                          declaration.
     1715 */
     1716#ifdef __cplusplus
     1717# define DECL_EXTERN_C(a_RetTypeExpr)   extern "C" a_RetTypeExpr
     1718#else
     1719# define DECL_EXTERN_C(a_RetTypeExpr)   a_RetTypeExpr
     1720#endif
     1721
    17101722/** @def DECLASM
    17111723 * How to declare an internal assembly function.
     
    17351747# define RT_ASM_DECL_PRAGMA_WATCOM_386(a_RetType)   a_RetType
    17361748#else
    1737 # define RT_ASM_DECL_PRAGMA_WATCOM(a_RetType)       DECLASM(a_RetType)
    1738 # define RT_ASM_DECL_PRAGMA_WATCOM_386(a_RetType)   DECLASM(a_RetType)
     1749# define RT_ASM_DECL_PRAGMA_WATCOM(a_RetType)       RT_DECL_ASM(a_RetType)
     1750# define RT_ASM_DECL_PRAGMA_WATCOM_386(a_RetType)   RT_DECL_ASM(a_RetType)
    17391751#endif
    17401752
     
    21112123#else
    21122124# define RTDECL(a_RetType)      DECL_IMPORT_NOTHROW(a_RetType) RTCALL
     2125#endif
     2126
     2127/** @def RT_DECL_ASM(a_RetType)
     2128 * Runtime Library assembly export or import declaration.
     2129 * Functions declared using this macro exists in all contexts.
     2130 * @param   a_RetType   The return type of the function declaration.
     2131 * @remarks This is only used inside IPRT.
     2132 * @note    This is compatible with DECLASM, just add hidden/import/export
     2133 *          attributes to the function.
     2134 */
     2135#if defined(IN_RT_R3) || defined(IN_RT_RC) || defined(IN_RT_R0)
     2136# ifdef IN_RT_STATIC
     2137#  define RT_DECL_ASM(a_RetType) DECL_EXTERN_C(DECL_HIDDEN_NOTHROW(a_RetType RTCALL))
     2138# else
     2139#  define RT_DECL_ASM(a_RetType) DECL_EXTERN_C(DECL_EXPORT_NOTHROW(a_RetType RTCALL))
     2140# endif
     2141#else
     2142# define RT_DECL_ASM(a_RetType)  DECL_EXTERN_C(DECL_IMPORT_NOTHROW(a_RetType RTCALL))
    21132143#endif
    21142144
  • trunk/src/VBox/Runtime/common/asm/ASMBitFirstClear-generic.cpp

    r106424 r106559  
    4545
    4646
    47 RTDECL(int32_t) ASMBitFirstClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits) RT_NOTHROW_DEF
     47RT_DECL_ASM(int32_t) ASMBitFirstClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits) RT_NOTHROW_DEF
    4848{
    4949    const volatile size_t RT_FAR *pu = (const volatile size_t RT_FAR *)pvBitmap;
  • trunk/src/VBox/Runtime/common/asm/ASMBitFirstSet-generic.cpp

    r106424 r106559  
    4545
    4646
    47 RTDECL(int32_t) ASMBitFirstSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits) RT_NOTHROW_DEF
     47RT_DECL_ASM(int32_t) ASMBitFirstSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits) RT_NOTHROW_DEF
    4848{
    4949    const volatile size_t RT_FAR *pu = (const volatile size_t RT_FAR *)pvBitmap;
  • trunk/src/VBox/Runtime/common/asm/ASMBitNextClear-generic.cpp

    r106424 r106559  
    4545
    4646
    47 RTDECL(int) ASMBitNextClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) RT_NOTHROW_DEF
     47RT_DECL_ASM(int) ASMBitNextClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) RT_NOTHROW_DEF
    4848{
    4949    const volatile uint32_t RT_FAR *pau32Bitmap = (const volatile uint32_t RT_FAR *)pvBitmap;
  • trunk/src/VBox/Runtime/common/asm/ASMBitNextSet-generic.cpp

    r106424 r106559  
    4545
    4646
    47 RTDECL(int) ASMBitNextSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) RT_NOTHROW_DEF
     47RT_DECL_ASM(int) ASMBitNextSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) RT_NOTHROW_DEF
    4848{
    4949    const volatile uint32_t RT_FAR *pau32Bitmap = (const volatile uint32_t RT_FAR *)pvBitmap;
  • trunk/src/VBox/Runtime/common/asm/ASMMemFill32-generic.cpp

    r106424 r106559  
    4646
    4747
    48 RTDECL(void) ASMMemFill32(volatile void RT_FAR *pv, size_t cb, uint32_t u32) RT_NOTHROW_DEF
     48RT_DECL_ASM(void) ASMMemFill32(volatile void RT_FAR *pv, size_t cb, uint32_t u32) RT_NOTHROW_DEF
    4949{
    5050    Assert(!(cb & 3));
  • trunk/src/VBox/Runtime/common/asm/ASMMemFirstMismatchingU8-generic.cpp

    r106424 r106559  
    4343
    4444
    45 RTDECL(void *) ASMMemFirstMismatchingU8(void const RT_FAR *pv, size_t cb, uint8_t u8) RT_NOTHROW_DEF
     45RT_DECL_ASM(void *) ASMMemFirstMismatchingU8(void const RT_FAR *pv, size_t cb, uint8_t u8) RT_NOTHROW_DEF
    4646{
    4747    uint8_t const *pb = (uint8_t const RT_FAR *)pv;
  • trunk/src/VBox/Runtime/common/asm/ASMMemFirstNonZero-generic.cpp

    r106424 r106559  
    4343
    4444
    45 RTDECL(void RT_FAR *) ASMMemFirstNonZero(void const RT_FAR *pv, size_t cb) RT_NOTHROW_DEF
     45RT_DECL_ASM(void RT_FAR *) ASMMemFirstNonZero(void const RT_FAR *pv, size_t cb) RT_NOTHROW_DEF
    4646{
    4747    uint8_t const *pb = (uint8_t const RT_FAR *)pv;
  • trunk/src/VBox/Runtime/common/asm/ASMMemZero32-generic.cpp

    r106424 r106559  
    4545
    4646
    47 RTDECL(void) ASMMemZero32(volatile void RT_FAR *pv, size_t cb) RT_NOTHROW_DEF
     47RT_DECL_ASM(void) ASMMemZero32(volatile void RT_FAR *pv, size_t cb) RT_NOTHROW_DEF
    4848{
    4949    memset((void *)pv, 0, cb);
  • trunk/src/VBox/Runtime/common/asm/ASMMultU64ByU32DivByU32-generic.cpp

    r106424 r106559  
    4444
    4545
    46 RTDECL(uint64_t) ASMMultU64ByU32DivByU32(uint64_t u64A, uint32_t u32B, uint32_t u32C)
     46RT_DECL_ASM(uint64_t) ASMMultU64ByU32DivByU32(uint64_t u64A, uint32_t u32B, uint32_t u32C)
    4747{
    4848    RTUINT64U   u;
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