/usr/include/sphde/sasatom_i386.h is in libsphde-dev 1.3.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | /*
* Copyright (c) 1995-2014 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation, Steven Munroe - initial API and implementation
*/
#ifndef _SASATOMIC_I386_H
#define _SASATOMIC_I386_H
#define __arch_sas_full_barrier() __sync_synchronize()
#define __arch_sas_read_barrier() __sync_synchronize()
#define __arch_sas_write_barrier() __sync_synchronize()
static inline void
__arch_pause (void)
{
__asm__ (
" pause;"
:
:
: "memory"
);
}
static inline void *
__arch_fetch_and_add_ptr (void**pointer, long int delta)
{
void *temp = (void*)delta;
__asm__ (
" lock;"
" xaddl %0,(%1);"
: "+r" (temp)
: "p" (pointer)
: "memory"
);
return temp;
}
static inline long int
__arch_fetch_and_add (void *pointer, long int delta)
{
long temp = delta;
__asm__ (
" lock;"
" xaddl %0,(%1);"
: "+r" (temp)
: "p" (pointer)
: "memory"
);
return temp;
}
static inline int
__arch_compare_and_swap (volatile long int *p, long int oldval, long int newval)
{
char ret;
__asm__ __volatile__ ("lock; cmpxchgl %2, %1; sete %0"
: "=a" (ret), "=m" (*p)
: "r" (newval), "m" (*p), "0" (oldval)
: "memory");
return ret;
}
static inline long int
__arch_atomic_swap (long int *p, long int replace)
{
long int temp;
__asm__ (
" lock;"
" xchgl %0,(%1);"
: "+r" (temp)
: "p" (p)
: "memory"
);
return temp;
}
static inline void
__arch_atomic_inc (long int *p)
{
__asm__ __volatile__ (
" lock;"
" incl (%0);"
:
: "p" (p)
: "memory"
);
}
static inline void
__arch_atomic_dec (long int *p)
{
__asm__ __volatile__ (
" lock;"
" decl (%0);"
:
: "p" (p)
: "memory"
);
}
static inline void
__arch_sas_spin_lock (volatile sas_spin_lock_t *lock)
{
char rc;
do {
__asm__ __volatile__ ("lock; cmpxchgl %2, %1; sete %0"
: "=a" (rc), "=m" (*lock)
: "r" (1), "m" (*lock), "0" (0)
: "memory");
} while (!rc);
}
static inline int
__arch_sas_spin_trylock (volatile sas_spin_lock_t *lock)
{
int notlocked = 1;
char rc;
__asm__ __volatile__ ("lock; cmpxchgl %2, %1; sete %0"
: "=a" (rc), "=m" (*lock)
: "r" (1), "m" (*lock), "0" (0)
: "memory");
notlocked = (rc == 0);
return notlocked;
}
#endif // SASATOM_I386_H
|