Update copyright notices with scripts/update-copyrights
[glibc.git] / nptl / sysdeps / unix / sysv / linux / sh / lowlevel-atomic.h
blobd580ca3ce508cdd040456aecb14926bf10ccc5db
1 /* Copyright (C) 2003-2014 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library; if not, see
16 <http://www.gnu.org/licenses/>. */
18 #ifdef __ASSEMBLER__
20 #define _IMP1 #1
21 #define _IMM1 #-1
22 #define _IMM4 #-4
23 #define _IMM6 #-6
24 #define _IMM8 #-8
26 #define INC(mem, reg) \
27 .align 2; \
28 mova 99f, r0; \
29 mov r15, r1; \
30 mov _IMM6, r15; \
31 98: mov.l mem, reg; \
32 add _IMP1, reg; \
33 mov.l reg, mem; \
34 99: mov r1, r15
36 #define DEC(mem, reg) \
37 .align 2; \
38 mova 99f, r0; \
39 mov r15, r1; \
40 mov _IMM6, r15; \
41 98: mov.l mem, reg; \
42 add _IMM1, reg; \
43 mov.l reg, mem; \
44 99: mov r1, r15
46 #define XADD(reg, mem, old, tmp) \
47 .align 2; \
48 mova 99f, r0; \
49 nop; \
50 mov r15, r1; \
51 mov _IMM8, r15; \
52 98: mov.l mem, old; \
53 mov reg, tmp; \
54 add old, tmp; \
55 mov.l tmp, mem; \
56 99: mov r1, r15
58 #define XCHG(reg, mem, old) \
59 .align 2; \
60 mova 99f, r0; \
61 nop; \
62 mov r15, r1; \
63 mov _IMM4, r15; \
64 98: mov.l mem, old; \
65 mov.l reg, mem; \
66 99: mov r1, r15
68 #define CMPXCHG(reg, mem, new, old) \
69 .align 2; \
70 mova 99f, r0; \
71 nop; \
72 mov r15, r1; \
73 mov _IMM8, r15; \
74 98: mov.l mem, old; \
75 cmp/eq old, reg; \
76 bf 99f; \
77 mov.l new, mem; \
78 99: mov r1, r15
80 #endif /* __ASSEMBLER__ */