aboutsummaryrefslogtreecommitdiff
path: root/sys/sys/_atomic_subword.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/sys/_atomic_subword.h')
-rw-r--r--sys/sys/_atomic_subword.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/sys/sys/_atomic_subword.h b/sys/sys/_atomic_subword.h
index dee5a3bed871..284e2bfa340f 100644
--- a/sys/sys/_atomic_subword.h
+++ b/sys/sys/_atomic_subword.h
@@ -205,4 +205,32 @@ atomic_load_acq_16(const volatile uint16_t *p)
#undef _ATOMIC_BYTE_SHIFT
#undef _ATOMIC_HWORD_SHIFT
+#ifndef atomic_set_16
+static __inline void
+atomic_set_16(volatile uint16_t *p, uint16_t bit)
+{
+ uint16_t v;
+
+ v = atomic_load_16(p);
+ for (;;) {
+ if (atomic_fcmpset_16(p, &v, v | bit))
+ break;
+ }
+}
+#endif
+
+#ifndef atomic_clear_16
+static __inline void
+atomic_clear_16(volatile uint16_t *p, uint16_t bit)
+{
+ uint16_t v;
+
+ v = atomic_load_16(p);
+ for (;;) {
+ if (atomic_fcmpset_16(p, &v, v & ~bit))
+ break;
+ }
+}
+#endif
+
#endif /* _SYS__ATOMIC_SUBWORD_H_ */