Unix Technical Forum

SEO

vBulletin Search Engine Optimization


Go Back   Unix Technical Forum > Unix Operating Systems > HP-UX Operating System

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 03-17-2008, 06:04 AM
yuval.shaia
 
Posts: n/a
Default 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
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 03-17-2008, 06:04 AM
rajesh.vijayarajan@gmail.com
 
Posts: n/a
Default 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" <yuval.sh...@gmail.com> 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


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 03-17-2008, 06:04 AM
Dennis Handly
 
Posts: n/a
Default 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 <machine/sys/inline.h>
#include <stdio.h>
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;
}

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT. The time now is 08:44 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62