Update.
[glibc.git] / db2 / mutex / parisc.gcc
blob2e4540f7678518b998816405f199a3d857feb953
1 /*
2  * @(#)parisc.gcc       8.8 (Sleepycat) 6/2/98
3  *
4  * Copyright (c) 1996-1997, The University of Utah and the Computer Systems
5  * Laboratory at the University of Utah (CSL).  All rights reserved.
6  *
7  * Permission to use, copy, modify and distribute this software is hereby
8  * granted provided that (1) source code retains these copyright, permission,
9  * and disclaimer notices, and (2) redistributions including binaries
10  * reproduce the notices in supporting documentation, and (3) all advertising
11  * materials mentioning features or use of this software display the following
12  * acknowledgement: ``This product includes software developed by the Computer
13  * Systems Laboratory at the University of Utah.''
14  *
15  * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
16  * IS" CONDITION.  THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
17  * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
18  *
19  * CSL requests users of this software to return to csl-dist@cs.utah.edu any
20  * improvements that they make and grant CSL redistribution rights.
21  */
24  * The PA-RISC has a "load and clear" instead of a "test and set" instruction.
25  * The 32-bit word used by that instruction must be 16-byte aligned.  We could
26  * use the "aligned" attribute in GCC but that doesn't work for stack variables.
27  */
28 #define TSL_SET(tsl) ({                                                 \
29         register tsl_t *__l = (tsl);                                    \
30         int __r;                                                        \
31         asm volatile("ldcws 0(%1),%0" : "=r" (__r) : "r" (__l));        \
32         __r & 1;                                                        \
35 #define TSL_UNSET(tsl)  (*(tsl) = -1)
36 #define TSL_INIT(tsl)   TSL_UNSET(tsl)