2
* Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved.
3
* Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved.
4
* Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved.
7
* THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
8
* OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
10
* Permission is hereby granted to use or copy this program
11
* for any purpose, provided the above notices are retained on all copies.
12
* Permission to modify the code and to distribute modified code is granted,
13
* provided the above notices are retained, and a notice that the code was
14
* modified is included with the above copyright notice.
18
/* FIXME. Very incomplete. No support for sparc64. */
19
/* Non-ancient SPARCs provide compare-and-swap (casa). */
20
/* We should make that available. */
22
#include "../all_atomic_load_store.h"
24
/* Real SPARC code uses TSO: */
25
#include "../ordered_except_wr.h"
27
/* Test_and_set location is just a byte. */
28
#include "../test_and_set_t_is_char.h"
31
AO_test_and_set_full(volatile AO_TS_t *addr) {
34
__asm__ __volatile__("ldstub %1,%0"
35
: "=r"(oldval), "=m"(*addr)
36
: "m"(*addr) : "memory");
40
#define AO_HAVE_test_and_set_full
42
/* FIXME: This needs to be extended for SPARC v8 and v9. */
43
/* SPARC V8 also has swap. V9 has CAS. */
44
/* There are barriers like membar #LoadStore. */
45
/* CASA (32-bit) and CASXA(64-bit) instructions were */