Subversion Repositories HelenOS

Rev

Rev 1902 | Rev 2071 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1902 Rev 2047
Line 34... Line 34...
34
 
34
 
35
#ifndef KERN_sparc64_BARRIER_H_
35
#ifndef KERN_sparc64_BARRIER_H_
36
#define KERN_sparc64_BARRIER_H_
36
#define KERN_sparc64_BARRIER_H_
37
 
37
 
38
/*
38
/*
39
 * We assume TSO memory model in which only reads can pass earlier stores
39
 * Our critical section barriers are prepared for the weakest RMO memory model.
40
 * (but not earlier reads). Therefore, CS_ENTER_BARRIER() and CS_LEAVE_BARRIER()
-
 
41
 * can be empty.
-
 
42
 */
40
 */
43
#define CS_ENTER_BARRIER()  __asm__ volatile ("" ::: "memory")
41
#define CS_ENTER_BARRIER()              \
-
 
42
    __asm__ volatile (              \
-
 
43
        "membar #LoadLoad | #LoadStore\n"   \
-
 
44
        ::: "memory"                \
-
 
45
    )
44
#define CS_LEAVE_BARRIER()  __asm__ volatile ("" ::: "memory")
46
#define CS_LEAVE_BARRIER()              \
-
 
47
    __asm__ volatile (              \
-
 
48
        "membar #StoreStore\n"          \
-
 
49
        "membar #LoadStore\n"           \
-
 
50
        ::: "memory"                \
-
 
51
    )
45
 
52
 
-
 
53
#define memory_barrier()    \
46
#define memory_barrier()    __asm__ volatile ("membar #LoadLoad | #StoreStore\n" ::: "memory")
54
    __asm__ volatile ("membar #LoadLoad | #StoreStore\n" ::: "memory")
-
 
55
#define read_barrier()      \
47
#define read_barrier()      __asm__ volatile ("membar #LoadLoad\n" ::: "memory")
56
    __asm__ volatile ("membar #LoadLoad\n" ::: "memory")
-
 
57
#define write_barrier()     \
48
#define write_barrier()     __asm__ volatile ("membar #StoreStore\n" ::: "memory")
58
    __asm__ volatile ("membar #StoreStore\n" ::: "memory")
49
 
59
 
50
/** Flush Instruction Memory instruction. */
60
/** Flush Instruction Memory instruction. */
51
static inline void flush(void)
61
static inline void flush(void)
52
{
62
{
53
    /*
63
    /*