LCOV - code coverage report
Current view: top level - mm/boehm-gc/libatomic_ops/src/atomic_ops/sysdeps - read_ordered.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 4 4 100.0 %
Date: 2015-06-10 18:10:59 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2003 by Hewlett-Packard Company.  All rights reserved.
       3             :  *
       4             :  * Permission is hereby granted, free of charge, to any person obtaining a copy
       5             :  * of this software and associated documentation files (the "Software"), to deal
       6             :  * in the Software without restriction, including without limitation the rights
       7             :  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
       8             :  * copies of the Software, and to permit persons to whom the Software is
       9             :  * furnished to do so, subject to the following conditions:
      10             :  *
      11             :  * The above copyright notice and this permission notice shall be included in
      12             :  * all copies or substantial portions of the Software.
      13             :  *
      14             :  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      15             :  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      16             :  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      17             :  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      18             :  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      19             :  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      20             :  * SOFTWARE.
      21             :  */
      22             : 
      23             : /*
      24             :  * These are common definitions for architectures that provide processor
      25             :  * ordered memory operations except that a later read may pass an
      26             :  * earlier write.  Real x86 implementations seem to be in this category,
      27             :  * except apparently for some IDT WinChips, which we ignore.
      28             :  */
      29             : 
      30             : AO_INLINE void
      31             : AO_nop_read(void)
      32             : {
      33             :   AO_compiler_barrier();
      34             : }
      35             : #define AO_HAVE_nop_read
      36             : 
      37             : #ifdef AO_HAVE_load
      38             :   AO_INLINE AO_t
      39         263 :   AO_load_read(const volatile AO_t *addr)
      40             :   {
      41         263 :     AO_t result = AO_load(addr);
      42         265 :     AO_compiler_barrier();
      43         265 :     return result;
      44             :   }
      45             : # define AO_HAVE_load_read
      46             : 
      47             : # define AO_load_acquire(addr) AO_load_read(addr)
      48             : # define AO_HAVE_load_acquire
      49             : #endif /* AO_HAVE_load */
      50             : 
      51             : #ifdef AO_HAVE_char_load
      52             :   AO_INLINE AO_t
      53             :   AO_char_load_read(const volatile unsigned char *addr)
      54             :   {
      55             :     AO_t result = AO_char_load(addr);
      56             :     AO_compiler_barrier();
      57             :     return result;
      58             :   }
      59             : # define AO_HAVE_char_load_read
      60             : 
      61             : # define AO_char_load_acquire(addr) AO_char_load_read(addr)
      62             : # define AO_HAVE_char_load_acquire
      63             : #endif /* AO_HAVE_char_load */
      64             : 
      65             : #ifdef AO_HAVE_short_load
      66             :   AO_INLINE AO_t
      67             :   AO_short_load_read(const volatile unsigned short *addr)
      68             :   {
      69             :     AO_t result = AO_short_load(addr);
      70             :     AO_compiler_barrier();
      71             :     return result;
      72             :   }
      73             : # define AO_HAVE_short_load_read
      74             : 
      75             : # define AO_short_load_acquire(addr) AO_short_load_read(addr)
      76             : # define AO_HAVE_short_load_acquire
      77             : #endif /* AO_HAVE_short_load */
      78             : 
      79             : #ifdef AO_HAVE_int_load
      80             :   AO_INLINE AO_t
      81             :   AO_int_load_read(const volatile unsigned int *addr)
      82             :   {
      83             :     AO_t result = AO_int_load(addr);
      84             :     AO_compiler_barrier();
      85             :     return result;
      86             :   }
      87             : # define AO_HAVE_int_load_read
      88             : 
      89             : # define AO_int_load_acquire(addr) AO_int_load_read(addr)
      90             : # define AO_HAVE_int_load_acquire
      91             : #endif /* AO_HAVE_int_load */

Generated by: LCOV version 1.11