• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2014 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 SkBarriers_x86_DEFINED
9 #define SkBarriers_x86_DEFINED
10 
11 #ifdef SK_BUILD_FOR_WIN
12 #  include <intrin.h>
sk_compiler_barrier()13 static inline void sk_compiler_barrier() { _ReadWriteBarrier(); }
14 #else
sk_compiler_barrier()15 static inline void sk_compiler_barrier() { asm volatile("" : : : "memory"); }
16 #endif
17 
18 template <typename T>
sk_acquire_load(T * ptr)19 T sk_acquire_load(T* ptr) {
20     T val = *ptr;
21     // On x86, all loads are acquire loads, so we only need a compiler barrier.
22     sk_compiler_barrier();
23     return val;
24 }
25 
26 template <typename T>
sk_release_store(T * ptr,T val)27 void sk_release_store(T* ptr, T val) {
28     // On x86, all stores are release stores, so we only need a compiler barrier.
29     sk_compiler_barrier();
30     *ptr = val;
31 }
32 
33 #endif//SkBarriers_x86_DEFINED
34