vBulletin Search Engine Optimization
| |||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| |||
| 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 |
| ||||
| 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; } |