180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkThread.h"
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruint32_t sk_atomic_inc(int32_t* addr) {
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    int32_t value = *addr;
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    *addr = value + 1;
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return value;
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruint32_t sk_atomic_add(int32_t* addr, int32_t inc) {
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    int32_t value = *addr;
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    *addr = value + inc;
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return value;
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruint32_t sk_atomic_dec(int32_t* addr) {
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    int32_t value = *addr;
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    *addr = value - 1;
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return value;
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid sk_membar_aquire__after_atomic_dec() { }
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruint32_t sk_atomic_conditional_inc(int32_t* addr) {
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    int32_t value = *addr;
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (value != 0) ++*addr;
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return value;
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid sk_membar_aquire__after_atomic_conditional_inc() { }
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkMutex::SkMutex() {}
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkMutex::~SkMutex() {}
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef SK_USE_POSIX_THREADS
4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkMutex::acquire() {}
4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkMutex::release() {}
4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
44