1448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org/* 2448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org * Copyright 2014 Google Inc. 3448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org * 4448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 5448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org * found in the LICENSE file. 6448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org */ 7448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org 8448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org#ifndef SkBarriers_x86_DEFINED 9448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org#define SkBarriers_x86_DEFINED 10448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org 11448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org#ifdef SK_BUILD_FOR_WIN 12448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org# include <intrin.h> 13448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.orgstatic inline void sk_compiler_barrier() { _ReadWriteBarrier(); } 14448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org#else 15448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.orgstatic inline void sk_compiler_barrier() { asm volatile("" : : : "memory"); } 16448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org#endif 17448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org 18448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.orgtemplate <typename T> 19448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.orgT sk_acquire_load(T* ptr) { 20832cb667498407401a7b508a331a65524736c072mtklein T val = *ptr; 21448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org // On x86, all loads are acquire loads, so we only need a compiler barrier. 22448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org sk_compiler_barrier(); 23448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org return val; 24448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org} 25448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org 26448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.orgtemplate <typename T> 27448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.orgvoid sk_release_store(T* ptr, T val) { 28448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org // On x86, all stores are release stores, so we only need a compiler barrier. 29448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org sk_compiler_barrier(); 30448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org *ptr = val; 31448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org} 32448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org 33448e2a3b3935d91e7bf84dc5b0367b92d2e2a518commit-bot@chromium.org#endif//SkBarriers_x86_DEFINED 34