Lines Matching +full:2 +full:v

2  * SPDX-License-Identifier: BSD-2-Clause
15 * 2. Redistributions in binary form must reproduce the above copyright
44 * of this file. See also Appendix B.2 of Book II of the architecture manual.
78 * atomic_add(p, v)
79 * { *p += v; }
82 #define __atomic_add_int(p, v, t) \ argument
84 "1: lwarx %0, 0, %2\n" \
86 " stwcx. %0, 0, %2\n" \
89 : "r" (p), "r" (v), "m" (*p) \
94 #define __atomic_add_long(p, v, t) \ argument
96 "1: ldarx %0, 0, %2\n" \
98 " stdcx. %0, 0, %2\n" \
101 : "r" (p), "r" (v), "m" (*p) \
105 #define __atomic_add_long(p, v, t) \ argument
107 "1: lwarx %0, 0, %2\n" \
109 " stwcx. %0, 0, %2\n" \
112 : "r" (p), "r" (v), "m" (*p) \
119 atomic_add_##type(volatile u_##type *p, u_##type v) { \
121 __atomic_add_##type(p, v, t); \
125 atomic_add_acq_##type(volatile u_##type *p, u_##type v) { \
127 __atomic_add_##type(p, v, t); \
132 atomic_add_rel_##type(volatile u_##type *p, u_##type v) { \
135 __atomic_add_##type(p, v, t); \
164 * atomic_clear(p, v) in _ATOMIC_ADD()
165 * { *p &= ~v; } in _ATOMIC_ADD()
168 #define __atomic_clear_int(p, v, t) \ in _ATOMIC_ADD() argument
170 "1: lwarx %0, 0, %2\n" \ in _ATOMIC_ADD()
172 " stwcx. %0, 0, %2\n" \ in _ATOMIC_ADD()
175 : "r" (p), "r" (v), "m" (*p) \ in _ATOMIC_ADD()
180 #define __atomic_clear_long(p, v, t) \ in _ATOMIC_ADD() argument
182 "1: ldarx %0, 0, %2\n" \ in _ATOMIC_ADD()
184 " stdcx. %0, 0, %2\n" \ in _ATOMIC_ADD()
187 : "r" (p), "r" (v), "m" (*p) \ in _ATOMIC_ADD()
191 #define __atomic_clear_long(p, v, t) \ in _ATOMIC_ADD()
193 "1: lwarx %0, 0, %2\n" \ in _ATOMIC_ADD()
195 " stwcx. %0, 0, %2\n" \ in _ATOMIC_ADD()
198 : "r" (p), "r" (v), "m" (*p) \ in _ATOMIC_ADD()
205 atomic_clear_##type(volatile u_##type *p, u_##type v) { \ in _ATOMIC_ADD()
207 __atomic_clear_##type(p, v, t); \ in _ATOMIC_ADD()
211 atomic_clear_acq_##type(volatile u_##type *p, u_##type v) { \
213 __atomic_clear_##type(p, v, t); \
218 atomic_clear_rel_##type(volatile u_##type *p, u_##type v) { \
221 __atomic_clear_##type(p, v, t); \
265 * atomic_set(p, v)
266 * { *p |= v; }
269 #define __atomic_set_int(p, v, t) \ argument
271 "1: lwarx %0, 0, %2\n" \
273 " stwcx. %0, 0, %2\n" \
276 : "r" (p), "r" (v), "m" (*p) \
281 #define __atomic_set_long(p, v, t) \ argument
283 "1: ldarx %0, 0, %2\n" \
285 " stdcx. %0, 0, %2\n" \
288 : "r" (p), "r" (v), "m" (*p) \
292 #define __atomic_set_long(p, v, t) \
294 "1: lwarx %0, 0, %2\n" \
296 " stwcx. %0, 0, %2\n" \
299 : "r" (p), "r" (v), "m" (*p) \
306 atomic_set_##type(volatile u_##type *p, u_##type v) { \
308 __atomic_set_##type(p, v, t); \
312 atomic_set_acq_##type(volatile u_##type *p, u_##type v) { \
314 __atomic_set_##type(p, v, t); \
319 atomic_set_rel_##type(volatile u_##type *p, u_##type v) { \
322 __atomic_set_##type(p, v, t); \
351 * atomic_subtract(p, v)
352 * { *p -= v; }
355 #define __atomic_subtract_int(p, v, t) \ argument
357 "1: lwarx %0, 0, %2\n" \
359 " stwcx. %0, 0, %2\n" \
362 : "r" (p), "r" (v), "m" (*p) \
367 #define __atomic_subtract_long(p, v, t) \ argument
369 "1: ldarx %0, 0, %2\n" \
371 " stdcx. %0, 0, %2\n" \
374 : "r" (p), "r" (v), "m" (*p) \
378 #define __atomic_subtract_long(p, v, t) \
380 "1: lwarx %0, 0, %2\n" \
382 " stwcx. %0, 0, %2\n" \
385 : "r" (p), "r" (v), "m" (*p) \
392 atomic_subtract_##type(volatile u_##type *p, u_##type v) { \
394 __atomic_subtract_##type(p, v, t); \
398 atomic_subtract_acq_##type(volatile u_##type *p, u_##type v) { \
400 __atomic_subtract_##type(p, v, t); \
405 atomic_subtract_rel_##type(volatile u_##type *p, u_##type v) { \
408 __atomic_subtract_##type(p, v, t); \
437 * atomic_store_rel(p, v)
507 u_##TYPE v; \
509 v = *p; \
511 return (v); \
515 atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v) \
519 *p = v; \
567 "1:\tlbarx %0, 0, %2\n\t" /* load old value */
569 "bne- 2f\n\t" /* exit if not equal */
570 "stbcx. %4, 0, %2\n\t" /* attempt to store */
574 "2:\n\t"
575 "stbcx. %0, 0, %2\n\t" /* clear reservation (74xx) */
591 "1:\tlharx %0, 0, %2\n\t" /* load old value */ in atomic_cmpset_short()
593 "bne- 2f\n\t" /* exit if not equal */ in atomic_cmpset_short()
594 "sthcx. %4, 0, %2\n\t" /* attempt to store */ in atomic_cmpset_short()
598 "2:\n\t" in atomic_cmpset_short()
599 "sthcx. %0, 0, %2\n\t" /* clear reservation (74xx) */ in atomic_cmpset_short()
617 "1:\tlwarx %2, 0, %3\n\t" /* load old value */
618 "and %0, %2, %7\n\t"
620 "bne- 2f\n\t" /* exit if not equal */
621 "andc %2, %2, %7\n\t"
622 "or %2, %2, %5\n\t"
623 "stwcx. %2, 0, %3\n\t" /* attempt to store */
627 "2:\n\t"
628 "stwcx. %2, 0, %3\n\t" /* clear reservation (74xx) */
639 #define _atomic_cmpset_masked_word(a,o,v,m) atomic_cmpset_masked(a, o, v, m)
648 "1:\tlwarx %0, 0, %2\n\t" /* load old value */ in atomic_cmpset_int()
650 "bne- 2f\n\t" /* exit if not equal */ in atomic_cmpset_int()
651 "stwcx. %4, 0, %2\n\t" /* attempt to store */ in atomic_cmpset_int()
655 "2:\n\t" in atomic_cmpset_int()
656 "stwcx. %0, 0, %2\n\t" /* clear reservation (74xx) */ in atomic_cmpset_int()
672 "1:\tldarx %0, 0, %2\n\t" /* load old value */ in atomic_cmpset_long()
674 "bne- 2f\n\t" /* exit if not equal */ in atomic_cmpset_long()
675 "stdcx. %4, 0, %2\n\t" /* attempt to store */ in atomic_cmpset_long()
677 "1:\tlwarx %0, 0, %2\n\t" /* load old value */ in atomic_cmpset_long()
679 "bne- 2f\n\t" /* exit if not equal */ in atomic_cmpset_long()
680 "stwcx. %4, 0, %2\n\t" /* attempt to store */ in atomic_cmpset_long()
685 "2:\n\t" in atomic_cmpset_long()
687 "stdcx. %0, 0, %2\n\t" /* clear reservation (74xx) */ in atomic_cmpset_long()
689 "stwcx. %0, 0, %2\n\t" /* clear reservation (74xx) */ in atomic_cmpset_long()
771 "b 2f\n\t" /* we've succeeded */ in atomic_fcmpset_char()
776 "2:\n\t" in atomic_fcmpset_char()
796 "b 2f\n\t" /* we've succeeded */ in atomic_fcmpset_short()
801 "2:\n\t" in atomic_fcmpset_short()
822 "b 2f\n\t" /* we've succeeded */ in atomic_fcmpset_int()
827 "2:\n\t" in atomic_fcmpset_int()
853 "b 2f\n\t" /* we've succeeded */ in atomic_fcmpset_long()
863 "2:\n\t" in atomic_fcmpset_long()
924 atomic_fetchadd_int(volatile u_int *p, u_int v) in atomic_fetchadd_int() argument
930 } while (!atomic_cmpset_int(p, value, value + v)); in atomic_fetchadd_int()
935 atomic_fetchadd_long(volatile u_long *p, u_long v) in atomic_fetchadd_long() argument
941 } while (!atomic_cmpset_long(p, value, value + v)); in atomic_fetchadd_long()
946 atomic_swap_32(volatile u_int *p, u_int v) in atomic_swap_32() argument
951 "1: lwarx %0,0,%2\n" in atomic_swap_32()
952 " stwcx. %3,0,%2\n" in atomic_swap_32()
955 : "r" (p), "r" (v) in atomic_swap_32()
963 atomic_swap_64(volatile u_long *p, u_long v) in atomic_swap_64() argument
968 "1: ldarx %0,0,%2\n" in atomic_swap_64()
969 " stdcx. %3,0,%2\n" in atomic_swap_64()
972 : "r" (p), "r" (v) in atomic_swap_64()
987 #define atomic_swap_long(p,v) atomic_swap_32((volatile u_int *)(p), v) argument
988 #define atomic_swap_ptr(p,v) atomic_swap_32((volatile u_int *)(p), v) argument
992 atomic_testandset_int(volatile u_int *p, u_int v) in atomic_testandset_int() argument
994 u_int m = (1u << (v & 0x1f)); in atomic_testandset_int()
1012 atomic_testandclear_int(volatile u_int *p, u_int v) in atomic_testandclear_int() argument
1014 u_int m = (1u << (v & 0x1f)); in atomic_testandclear_int()
1033 atomic_testandset_long(volatile u_long *p, u_int v) in atomic_testandset_long() argument
1035 u_long m = (1ul << (v & 0x3f)); in atomic_testandset_long()
1053 atomic_testandclear_long(volatile u_long *p, u_int v) in atomic_testandclear_long() argument
1055 u_long m = (1ul << (v & 0x3f)); in atomic_testandclear_long()
1073 atomic_testandset_long(volatile u_long *p, u_int v) in atomic_testandset_long() argument
1075 return (atomic_testandset_int((volatile u_int *)p, v)); in atomic_testandset_long()
1079 atomic_testandclear_long(volatile u_long *p, u_int v) in atomic_testandclear_long() argument
1081 return (atomic_testandclear_int((volatile u_int *)p, v)); in atomic_testandclear_long()
1089 atomic_testandset_acq_long(volatile u_long *p, u_int v) in atomic_testandset_acq_long() argument
1091 u_int a = atomic_testandset_long(p, v); in atomic_testandset_acq_long()
1100 #define atomic_testandclear_ptr(p,v) \ argument
1101 atomic_testandclear_32((volatile u_int *)(p), v)
1102 #define atomic_testandset_ptr(p,v) \ argument
1103 atomic_testandset_32((volatile u_int *)(p), v)