Compare and Swap - HP UX

This is a discussion on Compare and Swap - HP UX ; I'm trying to use CAS operation supported in HP IA64. Can anyone help by showing how to do it or from where to get the information? Tnx, Yuval...

+ Reply to Thread
Results 1 to 3 of 3

Thread: Compare and Swap

  1. Compare and Swap

    I'm trying to use CAS operation supported in HP IA64.
    Can anyone help by showing how to do it or from where to get the
    information?

    Tnx,
    Yuval

  2. Re: Compare and Swap

    Yuval,

    There are some assembly macros that are provided in
    /usr/include/machine/sys/builtins.h

    For CAS, you can use cmpxchg instruction with the help of the macro
    below:

    uint64_t _Asm_cmpxchg (_Asm_sz,
    _Asm_sem,
    void * r3,
    uint64_t r2,
    _Asm_ldhint,
    ... /* _Asm_fence */);

    Rajesh


    On Mar 12, 2:50 pm, "yuval.shaia" wrote:
    > I'm trying to use CAS operation supported in HP IA64.
    > Can anyone help by showing how to do it or from where to get the
    > information?
    >
    > Tnx,
    > Yuval



  3. Re: Compare and Swap

    rajesh.vijayarajan@gmail.com wrote:
    > There are some assembly macros that are provided in
    > /usr/include/machine/sys/builtins.h


    These aren't macros. These are inline assembly functions:
    http://h21007.www2.hp.com/portal/sit...10275d6e10RCRD
    >
    > For CAS, you can use cmpxchg instruction with the help of the macro
    > below:
    > uint64_t _Asm_cmpxchg (_Asm_sz, _Asm_sem, void *r3, uint64_t r2,
    > _Asm_ldhint, ... /* _Asm_fence */);


    The value being compared must first be moved into AR.CCV.
    Here is a trivial example:
    #include
    #include
    int test = 99;
    int main() {
    _Asm_mov_to_ar(_AREG_CCV, 99LL);
    int old = (int)_Asm_cmpxchg(_SZ_W, _SEM_ACQ, &test, 88LL,
    _LDHINT_NONE);
    printf("test's old value was %d\nnew is %d\n", old, test);
    return 0;
    }


+ Reply to Thread