VirtualBox

Changeset 9581 in vbox


Ignore:
Timestamp:
Jun 10, 2008 8:41:24 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
31880
Message:

const + small optimization

File:
1 edited

Legend:

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

    r9528 r9581  
    21552155#  if RT_INLINE_ASM_GNU_STYLE
    21562156#   if defined(PIC) || defined(RT_OS_DARWIN) /* darwin: 4.0.1 compiler option / bug? */
    2157     uint32_t u32 = (uint32_t)u64;
     2157    uint32_t u32EBX = (uint32_t)u64;
    21582158    __asm__ __volatile__(/*"xchgl %%esi, %5\n\t"*/
    21592159                         "xchgl %%ebx, %3\n\t"
     
    21612161                         "lock; cmpxchg8b (%5)\n\t"
    21622162                         "jnz 1b\n\t"
    2163                          "xchgl %%ebx, %3\n\t"
     2163                         "movl %3, %%ebx\n\t"
    21642164                         /*"xchgl %%esi, %5\n\t"*/
    21652165                         : "=A" (u64),
    21662166                           "=m" (*pu64)
    21672167                         : "0" (*pu64),
    2168                            "m" ( u32 ),
     2168                           "m" ( u32EBX ),
    21692169                           "c" ( (uint32_t)(u64 >> 32) ),
    21702170                           "S" (pu64) );
     
    24292429#  if RT_INLINE_ASM_GNU_STYLE
    24302430#   if defined(PIC) || defined(RT_OS_DARWIN) /* darwin: 4.0.1 compiler option / bug? */
    2431     uint32_t u32 = (uint32_t)u64New;
     2431    uint32_t u32EBX = (uint32_t)u64New;
    24322432    uint32_t u32Spill;
    24332433    __asm__ __volatile__("xchgl %%ebx, %4\n\t"
    24342434                         "lock; cmpxchg8b (%6)\n\t"
    24352435                         "setz  %%al\n\t"
    2436                          "xchgl %%ebx, %4\n\t"
     2436                         "movl  %4, %%ebx\n\t"
    24372437                         "movzbl %%al, %%eax\n\t"
    24382438                         : "=a" (u32Ret),
     
    24402440                           "=m" (*pu64)
    24412441                         : "A" (u64Old),
    2442                            "m" ( u32 ),
     2442                           "m" ( u32EBX ),
    24432443                           "c" ( (uint32_t)(u64New >> 32) ),
    24442444                           "S" (pu64) );
     
    32653265    __asm__ __volatile__("xchgl %%ebx, %3\n\t"
    32663266                         "lock; cmpxchg8b (%5)\n\t"
    3267                          "xchgl %%ebx, %3\n\t"
     3267                         "movl %3, %%ebx\n\t"
    32683268                         : "=A" (u64),
    32693269                           "=m" (*pu64)
     
    33353335    __asm__ __volatile__("xchgl %%ebx, %3\n\t"
    33363336                         "lock; cmpxchg8b (%5)\n\t"
    3337                          "xchgl %%ebx, %3\n\t"
     3337                         "movl %3, %%ebx\n\t"
    33383338                         : "=A" (u64),
    33393339                           "=m" (*pu64)
     
    48474847 */
    48484848#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN
    4849 DECLASM(bool) ASMBitTest(volatile void *pvBitmap, int32_t iBit);
    4850 #else
    4851 DECLINLINE(bool) ASMBitTest(volatile void *pvBitmap, int32_t iBit)
     4849DECLASM(bool) ASMBitTest(const volatile void *pvBitmap, int32_t iBit);
     4850#else
     4851DECLINLINE(bool) ASMBitTest(const volatile void *pvBitmap, int32_t iBit)
    48524852{
    48534853    union { bool f; uint32_t u32; uint8_t u8; } rc;
     
    48594859                          "setc %b0\n\t"
    48604860                          "andl $1, %0\n\t"
    4861                           : "=q" (rc.u32),
    4862                             "=m" (*(volatile long *)pvBitmap)
    4863                           : "Ir" (iBit)
     4861                          : "=q" (rc.u32)
     4862                          : "m" (*(const volatile long *)pvBitmap),
     4863                            "Ir" (iBit)
    48644864                          : "memory");
    48654865# else
     
    49754975 */
    49764976#if RT_INLINE_ASM_EXTERNAL
    4977 DECLASM(int) ASMBitFirstClear(volatile void *pvBitmap, uint32_t cBits);
    4978 #else
    4979 DECLINLINE(int) ASMBitFirstClear(volatile void *pvBitmap, uint32_t cBits)
     4977DECLASM(int) ASMBitFirstClear(const volatile void *pvBitmap, uint32_t cBits);
     4978#else
     4979DECLINLINE(int) ASMBitFirstClear(const volatile void *pvBitmap, uint32_t cBits)
    49804980{
    49814981    if (cBits)
     
    50615061 */
    50625062#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN
    5063 DECLASM(int) ASMBitNextClear(volatile void *pvBitmap, uint32_t cBits, uint32_t iBitPrev);
    5064 #else
    5065 DECLINLINE(int) ASMBitNextClear(volatile void *pvBitmap, uint32_t cBits, uint32_t iBitPrev)
     5063DECLASM(int) ASMBitNextClear(const volatile void *pvBitmap, uint32_t cBits, uint32_t iBitPrev);
     5064#else
     5065DECLINLINE(int) ASMBitNextClear(const volatile void *pvBitmap, uint32_t cBits, uint32_t iBitPrev)
    50665066{
    50675067    int iBit = ++iBitPrev & 31;
    5068     pvBitmap = (volatile char *)pvBitmap + ((iBitPrev >> 5) << 2);
     5068    pvBitmap = (const volatile char *)pvBitmap + ((iBitPrev >> 5) << 2);
    50695069    cBits   -= iBitPrev & ~31;
    50705070    if (iBit)
    50715071    {
    50725072        /* inspect the first dword. */
    5073         uint32_t u32 = (~*(volatile uint32_t *)pvBitmap) >> iBit;
     5073        uint32_t u32 = (~*(const volatile uint32_t *)pvBitmap) >> iBit;
    50745074# if RT_INLINE_ASM_USES_INTRIN
    50755075        unsigned long ulBit = 0;
     
    51025102        if (cBits > 32)
    51035103        {
    5104             iBit = ASMBitFirstClear((volatile char *)pvBitmap + sizeof(uint32_t), cBits - 32);
     5104            iBit = ASMBitFirstClear((const volatile char *)pvBitmap + sizeof(uint32_t), cBits - 32);
    51055105            if (iBit >= 0)
    51065106                return iBit + (iBitPrev & ~31) + 32;
     
    51285128 */
    51295129#if RT_INLINE_ASM_EXTERNAL
    5130 DECLASM(int) ASMBitFirstSet(volatile void *pvBitmap, uint32_t cBits);
    5131 #else
    5132 DECLINLINE(int) ASMBitFirstSet(volatile void *pvBitmap, uint32_t cBits)
     5130DECLASM(int) ASMBitFirstSet(const volatile void *pvBitmap, uint32_t cBits);
     5131#else
     5132DECLINLINE(int) ASMBitFirstSet(const volatile void *pvBitmap, uint32_t cBits)
    51335133{
    51345134    if (cBits)
     
    52135213 */
    52145214#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN
    5215 DECLASM(int) ASMBitNextSet(volatile void *pvBitmap, uint32_t cBits, uint32_t iBitPrev);
    5216 #else
    5217 DECLINLINE(int) ASMBitNextSet(volatile void *pvBitmap, uint32_t cBits, uint32_t iBitPrev)
     5215DECLASM(int) ASMBitNextSet(const volatile void *pvBitmap, uint32_t cBits, uint32_t iBitPrev);
     5216#else
     5217DECLINLINE(int) ASMBitNextSet(const volatile void *pvBitmap, uint32_t cBits, uint32_t iBitPrev)
    52185218{
    52195219    int iBit = ++iBitPrev & 31;
    5220     pvBitmap = (volatile char *)pvBitmap + ((iBitPrev >> 5) << 2);
     5220    pvBitmap = (const volatile char *)pvBitmap + ((iBitPrev >> 5) << 2);
    52215221    cBits   -= iBitPrev & ~31;
    52225222    if (iBit)
    52235223    {
    52245224        /* inspect the first dword. */
    5225         uint32_t u32 = *(volatile uint32_t *)pvBitmap >> iBit;
     5225        uint32_t u32 = *(const volatile uint32_t *)pvBitmap >> iBit;
    52265226# if RT_INLINE_ASM_USES_INTRIN
    52275227        unsigned long ulBit = 0;
     
    52545254        if (cBits > 32)
    52555255        {
    5256             iBit = ASMBitFirstSet((volatile char *)pvBitmap + sizeof(uint32_t), cBits - 32);
     5256            iBit = ASMBitFirstSet((const volatile char *)pvBitmap + sizeof(uint32_t), cBits - 32);
    52575257            if (iBit >= 0)
    52585258                return iBit + (iBitPrev & ~31) + 32;
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