VirtualBox

Changeset 87256 in vbox


Ignore:
Timestamp:
Jan 15, 2021 10:27:15 AM (4 years ago)
Author:
vboxsync
Message:

IPRT,iprt/asm-arm.h: ASMReadTSC using CNTVCT or CNTPCT. bugref:9898

Location:
trunk
Files:
2 edited

Legend:

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

    r87218 r87256  
    8787#endif
    8888
    89 #if 0
    90 /**
    91  * Gets the content of the CPU timestamp counter register.
    92  *
    93  * @returns TSC.
     89
     90/**
     91 * Gets the content of the CNTVCT_EL0 (or CNTPCT) register.
     92 *
     93 * @returns CNTVCT_EL0 value.
     94 * @note    We call this TSC to better fit in with existing x86/amd64 based code.
    9495 */
    9596#if RT_INLINE_ASM_EXTERNAL
     
    9899DECLINLINE(uint64_t) ASMReadTSC(void)
    99100{
    100     RTUINT64U u;
    101 # if RT_INLINE_ASM_GNU_STYLE
    102 # else
    103 #  error "Unsupported compiler"
    104 # endif
    105     return u.u;
    106 }
    107 #endif
     101# if RT_INLINE_ASM_GNU_STYLE
     102    uint64_t u64;
     103#  ifdef RT_ARCH_ARM64
     104    __asm__ __volatile__("isb\n\t"
     105                         "mrs %0, CNTVCT_EL0\n\t"
     106                         : "=r" (u64));
     107#  else
     108    uint32_t u32Spill;
     109    uint32_t u32Comp;
     110    __asm__ __volatile__("isb\n"
     111                         "Lagain:\n\t"
     112                         "mrrc p15, 0, %[uSpill], %H[uRet],   c14\n\t"  /* CNTPCT high into uRet.hi */
     113                         "mrrc p15, 0, %[uRet],   %[uSpill],  c14\n\t"  /* CNTPCT low  into uRet.lo */
     114                         "mrrc p15, 0, %[uSpill], %[uHiComp], c14\n\t"  /* CNTPCT high into uHiComp */
     115                         "cmp  %H[uRet], %[uHiComp]\n\t"
     116                         "b.eq Lagain\n\t"                              /* Redo if high value changed. */
     117                         : [uRet] "=r" (u64)
     118                         , "=r" (uHiComp)
     119                         , "=r" (uSpill));
     120#  endif
     121    return u64;
     122
     123# else
     124#  error "Unsupported compiler"
     125# endif
     126}
    108127#endif
    109128
  • trunk/src/VBox/Runtime/testcase/tstRTInlineAsm.cpp

    r87228 r87256  
    4444# include <iprt/asm-amd64-x86.h>
    4545# include <iprt/x86.h>
     46#elif defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32)
     47# include <iprt/asm-arm.h>
     48# include <iprt/time.h>
    4649#else
    4750# include <iprt/time.h>
     
    26762679    RTTestSub(g_hTest, "Benchmarking");
    26772680
    2678 #if 0 && !defined(GCC44_32BIT_PIC) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86))
     2681#if 0 && !defined(GCC44_32BIT_PIC) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32))
    26792682# define BENCH(op, str) \
    26802683    do { \
     
    27062709    } while (0)
    27072710#endif
    2708 #if (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) && !defined(GCC44_32BIT_PIC)
     2711#if (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32)) && !defined(GCC44_32BIT_PIC)
    27092712# define BENCH_TSC(op, str) \
    27102713    do { \
     
    28042807    BENCH(s_u32 = ASMGetApicIdExt8000001E(),    "ASMGetApicIdExt8000001E");
    28052808#endif
     2809#if !defined(GCC44_32BIT_PIC) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)  || defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32))
     2810    BENCH(s_u64 = ASMReadTSC(),                 "ASMReadTSC");
     2811#endif
    28062812#if !defined(GCC44_32BIT_PIC) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86))
    28072813    uint32_t uAux;
     
    28132819        BENCH(s_u64 = ASMReadTscWithAux(&uAux),  "ASMReadTscWithAux");
    28142820    }
    2815     BENCH(s_u64 = ASMReadTSC(),                 "ASMReadTSC");
    28162821    union
    28172822    {
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