blob: 345cb09de4664d99bcd26a81ef9a3fd14fe1e59e [file] [log] [blame]
bungeman@google.comd9947f62013-12-18 15:27:39 +00001/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkAtomics_none_DEFINED
9#define SkAtomics_none_DEFINED
10
11/** Non-atomic atomics for uniprocessor systems. */
12
13#include <stdint.h>
14
15static inline int32_t sk_atomic_inc(int32_t* addr) {
16 int32_t value = *addr;
17 *addr = value + 1;
18 return value;
19}
20
21static inline int32_t sk_atomic_add(int32_t* addr, int32_t inc) {
22 int32_t value = *addr;
23 *addr = value + inc;
24 return value;
25}
26
27static inline int32_t sk_atomic_dec(int32_t* addr) {
28 int32_t value = *addr;
29 *addr = value - 1;
30 return value;
31}
32
33static inline void sk_membar_acquire__after_atomic_dec() { }
34
35static inline int32_t sk_atomic_conditional_inc(int32_t* addr) {
36 int32_t value = *addr;
37 if (value != 0) ++*addr;
38 return value;
39}
40
41static inline void sk_membar_acquire__after_atomic_conditional_inc() { }
42
43#endif