Go to the source code of this file.
◆ AO_HAVE_compare_and_swap
| #define AO_HAVE_compare_and_swap |
◆ AO_HAVE_fetch_and_add
| #define AO_HAVE_fetch_and_add |
◆ AO_HAVE_fetch_compare_and_swap
| #define AO_HAVE_fetch_compare_and_swap |
◆ AO_HAVE_nop_full
◆ AO_HAVE_test_and_set
| #define AO_HAVE_test_and_set |
◆ AO_MIPS_LL
◆ AO_MIPS_LL_1
| #define AO_MIPS_LL_1 |
( |
|
args | ) |
" ll " args "\n" |
◆ AO_MIPS_SC
| #define AO_MIPS_SC |
( |
|
args | ) |
" sc " args "\n" |
◆ AO_MIPS_SET_ISA
| #define AO_MIPS_SET_ISA " .set mips2\n" |
◆ AO_NO_DD_ORDERING
| #define AO_NO_DD_ORDERING |
◆ AO_T_IS_INT
◆ AO_compare_and_swap()
Definition at line 141 of file mips.h.
142 {
143 register int was_equal = 0;
144 register int temp;
145
146 __asm__ __volatile__(
147 " .set push\n"
149 " .set noreorder\n"
150 " .set nomacro\n"
151 "1: "
153 " bne %0, %4, 2f\n"
154 " move %0, %3\n"
156 " .set pop\n"
157 " beqz %0, 1b\n"
158 " li %2, 1\n"
159 "2:"
160 : "=&r" (temp), "+m" (*addr), "+r" (was_equal)
161 : "r" (new_val), "r" (old)
162 : "memory");
163 return was_equal;
164 }
◆ AO_fetch_and_add()
Definition at line 87 of file mips.h.
88{
90 register int temp;
91
92 __asm__ __volatile__(
93 " .set push\n"
95 " .set noreorder\n"
96 " .set nomacro\n"
97 "1: "
99 " addu %1, %0, %3\n"
101 " beqz %1, 1b\n"
102 " nop\n"
103 " .set pop"
104 :
"=&r" (
result),
"=&r" (temp),
"+m" (*addr)
105 : "Ir" (incr)
106 : "memory");
108}
◆ AO_fetch_compare_and_swap()
Definition at line 169 of file mips.h.
170{
171 register int fetched_val;
172 register int temp;
173
174 __asm__ __volatile__(
175 " .set push\n"
177 " .set noreorder\n"
178 " .set nomacro\n"
179 "1: "
181 " bne %0, %4, 2f\n"
182 " move %1, %3\n"
184 " beqz %1, 1b\n"
185 " nop\n"
186 " .set pop\n"
187 "2:"
188 : "=&r" (fetched_val), "=&r" (temp), "+m" (*addr)
189 : "r" (new_val), "Jr" (old)
190 : "memory");
191 return (
AO_t)fetched_val;
192}
◆ AO_nop_full()
Definition at line 72 of file mips.h.
73{
74 __asm__ __volatile__(
75 " .set push\n"
77 " .set noreorder\n"
78 " .set nomacro\n"
79 " sync\n"
80 " .set pop"
81 : : : "memory");
82}
◆ AO_test_and_set()
Definition at line 112 of file mips.h.
113{
114 register int oldval;
115 register int temp;
116
117 __asm__ __volatile__(
118 " .set push\n"
120 " .set noreorder\n"
121 " .set nomacro\n"
122 "1: "
124 " move %1, %3\n"
126 " beqz %1, 1b\n"
127 " nop\n"
128 " .set pop"
129 : "=&r" (oldval), "=&r" (temp), "+m" (*addr)
130 : "r" (1)
131 : "memory");
133}