VirtualBox

Changeset 6650 in vbox


Ignore:
Timestamp:
Jan 31, 2008 11:13:16 AM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
27716
Message:

cmpxchg optimization

File:
1 edited

Legend:

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

    r6648 r6650  
    22662266{
    22672267# if RT_INLINE_ASM_GNU_STYLE
    2268     uint32_t u32Ret;
     2268    uint8_t u8Ret;
    22692269    __asm__ __volatile__("lock; cmpxchgl %2, %0\n\t"
    2270                          "setz  %%al\n\t"
    2271                          "movzbl %%al, %%eax\n\t"
     2270                         "setz  %1\n\t"
    22722271                         : "=m" (*pu32),
    2273                            "=a" (u32Ret)
     2272                           "=qm" (u8Ret)
    22742273                         : "r" (u32New),
    2275                            "1" (u32Old));
    2276     return (bool)u32Ret;
     2274                           "a" (u32Old));
     2275    return (bool)u8Ret;
    22772276
    22782277# elif RT_INLINE_ASM_USES_INTRIN
     
    23412340# elif defined(RT_ARCH_AMD64)
    23422341#  if RT_INLINE_ASM_GNU_STYLE
    2343     uint64_t u64Ret;
     2342    uint8_t u8Ret;
    23442343    __asm__ __volatile__("lock; cmpxchgq %2, %0\n\t"
    2345                          "setz  %%al\n\t"
    2346                          "movzbl %%al, %%eax\n\t"
     2344                         "setz  %1\n\t"
    23472345                         : "=m" (*pu64),
    2348                            "=a" (u64Ret)
     2346                           "=qm" (u8Ret)
    23492347                         : "r" (u64New),
    2350                            "1" (u64Old));
    2351     return (bool)u64Ret;
     2348                           "a" (u64Old));
     2349    return (bool)u8Ret;
    23522350#  else
    23532351    bool fRet;
     
    24932491{
    24942492# if RT_INLINE_ASM_GNU_STYLE
    2495     uint32_t u32Ret;
     2493    uint8_t u8Ret;
    24962494    __asm__ __volatile__("lock; cmpxchgl %3, %0\n\t"
    2497                          "movl %%eax, %2\n\t"
    2498                          "setz  %%al\n\t"
    2499                          "movzbl %%al, %%eax\n\t"
     2495                         "setz  %1\n\t"
    25002496                         : "=m" (*pu32),
    2501                            "=a" (u32Ret),
    2502                            "=m" (*pu32Old)
     2497                           "=qm" (u8Ret),
     2498                           "=a" (*pu32Old)
    25032499                         : "r" (u32New),
    2504                            "1" (u32Old));
    2505     return (bool)u32Ret;
     2500                           "a" (u32Old));
     2501    return (bool)u8Ret;
    25062502
    25072503# elif RT_INLINE_ASM_USES_INTRIN
     
    25782574# elif defined(RT_ARCH_AMD64)
    25792575#  if RT_INLINE_ASM_GNU_STYLE
    2580     uint64_t u64Ret;
     2576    uint8_t u8Ret;
    25812577    __asm__ __volatile__("lock; cmpxchgq %3, %0\n\t"
    2582                          "movq %%rax, %2\n\t"
    2583                          "setz  %%al\n\t"
    2584                          "movzbl %%al, %%eax\n\t"
     2578                         "setz  %1\n\t"
    25852579                         : "=m" (*pu64),
    2586                            "=a" (u64Ret),
    2587                            "=m" (*pu64Old)
     2580                           "=qm" (u8Ret),
     2581                           "=a" (*pu64Old)
    25882582                         : "r" (u64New),
    2589                            "1" (u64Old));
     2583                           "a" (u64Old));
    25902584    return (bool)u64Ret;
    25912585#  else
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