2 kumpf 1.1 ;
3 ; Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 ; Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 ; Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
6 ; IBM Corp.; EMC Corporation, The Open Group.
7 ; Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 ; IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
9 ; Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 ; EMC Corporation; VERITAS Software Corporation; The Open Group.
|
13 kumpf 1.1 ;
14 ; Permission is hereby granted, free of charge, to any person obtaining a copy
15 ; of this software and associated documentation files (the "Software"), to
16 ; deal in the Software without restriction, including without limitation the
17 ; rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18 ; sell copies of the Software, and to permit persons to whom the Software is
19 ; furnished to do so, subject to the following conditions:
|
21 kumpf 1.1 ; THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 ; ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
23 ; "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24 ; LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
25 ; PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26 ; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 ; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 ; WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 ;
30 ;==============================================================================
31 ;
32 ; Author: Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
33 ;
34 ;%/////////////////////////////////////////////////////////////////////////////
35
36 ;
37 ; LoadAndClearWord_HPUX_PARISC_ACC.s:
38 ; HP-UX PA-RISC assembly language routine for spinlock support.
39 ;
40
41 .code
42 kumpf 1.1 #ifdef __LP64__
43 .level 2.0W
44 #else
45 .level 1.1
46 #endif
47 .export LoadAndClearWord,entry,priv_lev=3,rtnval=gr
48 .proc
49
50 LoadAndClearWord
51 .callinfo no_calls
52 .enter
53
54 ; create a 16 byte aligned pointer to the load+clear word area
55 addi 15,%arg0,%arg2 ; add 15 to the pointer to round up
56
57 #ifdef __LP64__
58 depdi 0,63,4,%arg2 ; mask the lower 4 bits (64-bit)
59 #else
60 depi 0,31,4,%arg2 ; mask the lower 4 bits (32-bit)
61 #endif
62
63 kumpf 1.1 #ifdef __LP64__
64 bve (%r2) ; return 0 if already locked, else !0
65 #else
66 bv (%r2) ; return 0 if already locked, else !0
67 #endif
68 ldcws,co (%arg2),%ret0 ; (in branch delay slot)
69 ; load and clear (coherent) the spinlock word
70
71 ; This code is never executed. This endless loop reduces the
72 ; prefetching after mispredicted bv on pre PA 8700 processors.
73 ; Leave this dead code here to improve performance.
74
75 load_and_clear_loop
76 b load_and_clear_loop
77 nop
78 .leave
79 .procend
|