VirtualBox

Changeset 36595 in vbox


Ignore:
Timestamp:
Apr 6, 2011 7:44:43 PM (14 years ago)
Author:
vboxsync
Message:

iprt/asm.h: Added ASMAtomic[Dec|Inc|Add|Sub]Z.

File:
1 edited

Legend:

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

    r35004 r36595  
    25262526
    25272527/**
     2528 * Atomically exchanges and adds to a size_t value, ordered.
     2529 *
     2530 * @returns The old value.
     2531 * @param   pcb         Pointer to the size_t value.
     2532 * @param   cb          Number to add.
     2533 */
     2534DECLINLINE(size_t) ASMAtomicAddZ(size_t volatile *pcb, size_t cb)
     2535{
     2536#if ARCH_BITS == 64
     2537    return ASMAtomicAddU64((uint64_t volatile *)pcb, cb);
     2538#elif ARCH_BITS == 32
     2539    return ASMAtomicAddU32((uint32_t volatile *)pcb, cb);
     2540#else
     2541# error "Unsupported ARCH_BITS value"
     2542#endif
     2543}
     2544
     2545
     2546/**
    25282547 * Atomically exchanges and adds a value which size might differ between
    25292548 * platforms or compilers, ordered.
     
    25932612    return (int64_t)ASMAtomicAddU64((uint64_t volatile *)pi64, (uint64_t)-i64);
    25942613}
     2614
     2615
     2616/**
     2617 * Atomically exchanges and subtracts to a size_t value, ordered.
     2618 *
     2619 * @returns The old value.
     2620 * @param   pcb         Pointer to the size_t value.
     2621 * @param   cb          Number to subtract.
     2622 */
     2623DECLINLINE(size_t) ASMAtomicSubZ(size_t volatile *pcb, size_t cb)
     2624{
     2625#if ARCH_BITS == 64
     2626    return ASMAtomicSubU64((uint64_t volatile *)pcb, cb);
     2627#elif ARCH_BITS == 32
     2628    return ASMAtomicSubU32((uint32_t volatile *)pcb, cb);
     2629#else
     2630# error "Unsupported ARCH_BITS value"
     2631#endif
     2632}
     2633
    25952634
    25962635/**
     
    27122751
    27132752/**
     2753 * Atomically increment a size_t value, ordered.
     2754 *
     2755 * @returns The new value.
     2756 * @param   pcb         Pointer to the value to increment.
     2757 */
     2758DECLINLINE(int64_t) ASMAtomicIncZ(size_t volatile *pcb)
     2759{
     2760#if ARCH_BITS == 64
     2761    return ASMAtomicIncU64((uint64_t volatile *)pcb);
     2762#elif ARCH_BITS == 32
     2763    return ASMAtomicIncU32((uint32_t volatile *)pcb);
     2764#else
     2765# error "Unsupported ARCH_BITS value"
     2766#endif
     2767}
     2768
     2769
     2770/**
    27142771 * Atomically decrement an unsigned 32-bit value, ordered.
    27152772 *
     
    28062863{
    28072864    return (int64_t)ASMAtomicDecU64((uint64_t volatile *)pi64);
     2865}
     2866
     2867
     2868/**
     2869 * Atomically decrement a size_t value, ordered.
     2870 *
     2871 * @returns The new value.
     2872 * @param   pcb         Pointer to the value to decrement.
     2873 */
     2874DECLINLINE(int64_t) ASMAtomicDecZ(size_t volatile *pcb)
     2875{
     2876#if ARCH_BITS == 64
     2877    return ASMAtomicDecU64((uint64_t volatile *)pcb);
     2878#elif ARCH_BITS == 32
     2879    return ASMAtomicDecU32((uint32_t volatile *)pcb);
     2880#else
     2881# error "Unsupported ARCH_BITS value"
     2882#endif
    28082883}
    28092884
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