Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/sh/linux-atomic.asm @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children |
comparison
equal
deleted
inserted
replaced
52:c156f1bd5cd9 | 55:77e2b8dfacca |
---|---|
52 ATOMIC_TEST_AND_SET (1,b,extu.b) | 52 ATOMIC_TEST_AND_SET (1,b,extu.b) |
53 ATOMIC_TEST_AND_SET (2,w,extu.w) | 53 ATOMIC_TEST_AND_SET (2,w,extu.w) |
54 ATOMIC_TEST_AND_SET (4,l,mov) | 54 ATOMIC_TEST_AND_SET (4,l,mov) |
55 | 55 |
56 #define ATOMIC_COMPARE_AND_SWAP(N,T,EXTS,EXT) \ | 56 #define ATOMIC_COMPARE_AND_SWAP(N,T,EXTS,EXT) \ |
57 .global __sync_compare_and_swap_##N; \ | 57 .global __sync_val_compare_and_swap_##N; \ |
58 HIDDEN_FUNC(__sync_compare_and_swap_##N); \ | 58 HIDDEN_FUNC(__sync_val_compare_and_swap_##N); \ |
59 .align 2; \ | 59 .align 2; \ |
60 __sync_compare_and_swap_##N:; \ | 60 __sync_val_compare_and_swap_##N:; \ |
61 mova 1f, r0; \ | 61 mova 1f, r0; \ |
62 EXTS r5, r5; \ | 62 EXTS r5, r5; \ |
63 mov r15, r1; \ | 63 mov r15, r1; \ |
64 mov #(0f-1f), r15; \ | 64 mov #(0f-1f), r15; \ |
65 0: mov.##T @r4, r2; \ | 65 0: mov.##T @r4, r2; \ |
67 bf 1f; \ | 67 bf 1f; \ |
68 mov.##T r6, @r4; \ | 68 mov.##T r6, @r4; \ |
69 1: mov r1, r15; \ | 69 1: mov r1, r15; \ |
70 rts; \ | 70 rts; \ |
71 EXT r2, r0; \ | 71 EXT r2, r0; \ |
72 ENDFUNC(__sync_compare_and_swap_##N) | 72 ENDFUNC(__sync_val_compare_and_swap_##N) |
73 | 73 |
74 ATOMIC_COMPARE_AND_SWAP (1,b,exts.b,extu.b) | 74 ATOMIC_COMPARE_AND_SWAP (1,b,exts.b,extu.b) |
75 ATOMIC_COMPARE_AND_SWAP (2,w,exts.w,extu.w) | 75 ATOMIC_COMPARE_AND_SWAP (2,w,exts.w,extu.w) |
76 ATOMIC_COMPARE_AND_SWAP (4,l,mov,mov) | 76 ATOMIC_COMPARE_AND_SWAP (4,l,mov,mov) |
77 | 77 |
78 #define ATOMIC_BOOL_COMPARE_AND_SWAP(N,T,EXTS) \ | |
79 .global __sync_bool_compare_and_swap_##N; \ | |
80 HIDDEN_FUNC(__sync_bool_compare_and_swap_##N); \ | |
81 .align 2; \ | |
82 __sync_bool_compare_and_swap_##N:; \ | |
83 mova 1f, r0; \ | |
84 EXTS r5, r5; \ | |
85 mov r15, r1; \ | |
86 mov #(0f-1f), r15; \ | |
87 0: mov.##T @r4, r2; \ | |
88 cmp/eq r2, r5; \ | |
89 bf 1f; \ | |
90 mov.##T r6, @r4; \ | |
91 1: mov r1, r15; \ | |
92 rts; \ | |
93 movt r0; \ | |
94 ENDFUNC(__sync_bool_compare_and_swap_##N) | |
95 | |
96 ATOMIC_BOOL_COMPARE_AND_SWAP (1,b,exts.b) | |
97 ATOMIC_BOOL_COMPARE_AND_SWAP (2,w,exts.w) | |
98 ATOMIC_BOOL_COMPARE_AND_SWAP (4,l,mov) | |
99 | |
78 #define ATOMIC_FETCH_AND_OP(OP,N,T,EXT) \ | 100 #define ATOMIC_FETCH_AND_OP(OP,N,T,EXT) \ |
79 .global __sync_fetch_and_##OP##_##N; \ | 101 .global __sync_fetch_and_##OP##_##N; \ |
80 HIDDEN_FUNC(__sync_fetch_and_##OP##_##N); \ | 102 HIDDEN_FUNC(__sync_fetch_and_##OP##_##N); \ |
81 .align 2; \ | 103 .align 2; \ |
82 __sync_fetch_and_##OP##_##N:; \ | 104 __sync_fetch_and_##OP##_##N:; \ |
133 | 155 |
134 ATOMIC_FETCH_AND_COMBOP(nand,and,not,1,b,extu.b) | 156 ATOMIC_FETCH_AND_COMBOP(nand,and,not,1,b,extu.b) |
135 ATOMIC_FETCH_AND_COMBOP(nand,and,not,2,w,extu.w) | 157 ATOMIC_FETCH_AND_COMBOP(nand,and,not,2,w,extu.w) |
136 ATOMIC_FETCH_AND_COMBOP(nand,and,not,4,l,mov) | 158 ATOMIC_FETCH_AND_COMBOP(nand,and,not,4,l,mov) |
137 | 159 |
160 #define ATOMIC_OP_AND_FETCH(OP,N,T,EXT) \ | |
161 .global __sync_##OP##_and_fetch_##N; \ | |
162 HIDDEN_FUNC(__sync_##OP##_and_fetch_##N); \ | |
163 .align 2; \ | |
164 __sync_##OP##_and_fetch_##N:; \ | |
165 mova 1f, r0; \ | |
166 nop; \ | |
167 mov r15, r1; \ | |
168 mov #(0f-1f), r15; \ | |
169 0: mov.##T @r4, r2; \ | |
170 mov r5, r3; \ | |
171 OP r2, r3; \ | |
172 mov.##T r3, @r4; \ | |
173 1: mov r1, r15; \ | |
174 rts; \ | |
175 EXT r3, r0; \ | |
176 ENDFUNC(__sync_##OP##_and_fetch_##N) | |
177 | |
178 ATOMIC_OP_AND_FETCH(add,1,b,extu.b) | |
179 ATOMIC_OP_AND_FETCH(add,2,w,extu.w) | |
180 ATOMIC_OP_AND_FETCH(add,4,l,mov) | |
181 | |
182 ATOMIC_OP_AND_FETCH(or,1,b,extu.b) | |
183 ATOMIC_OP_AND_FETCH(or,2,w,extu.w) | |
184 ATOMIC_OP_AND_FETCH(or,4,l,mov) | |
185 | |
186 ATOMIC_OP_AND_FETCH(and,1,b,extu.b) | |
187 ATOMIC_OP_AND_FETCH(and,2,w,extu.w) | |
188 ATOMIC_OP_AND_FETCH(and,4,l,mov) | |
189 | |
190 ATOMIC_OP_AND_FETCH(xor,1,b,extu.b) | |
191 ATOMIC_OP_AND_FETCH(xor,2,w,extu.w) | |
192 ATOMIC_OP_AND_FETCH(xor,4,l,mov) | |
193 | |
194 #define ATOMIC_COMBOP_AND_FETCH(OP,OP0,OP1,N,T,EXT) \ | |
195 .global __sync_##OP##_and_fetch_##N; \ | |
196 HIDDEN_FUNC(__sync_##OP##_and_fetch_##N); \ | |
197 .align 2; \ | |
198 __sync_##OP##_and_fetch_##N:; \ | |
199 mova 1f, r0; \ | |
200 mov r15, r1; \ | |
201 mov #(0f-1f), r15; \ | |
202 0: mov.##T @r4, r2; \ | |
203 mov r5, r3; \ | |
204 OP0 r2, r3; \ | |
205 OP1 r3, r3; \ | |
206 mov.##T r3, @r4; \ | |
207 1: mov r1, r15; \ | |
208 rts; \ | |
209 EXT r3, r0; \ | |
210 ENDFUNC(__sync_##OP##_and_fetch_##N) | |
211 | |
212 ATOMIC_COMBOP_AND_FETCH(sub,sub,neg,1,b,extu.b) | |
213 ATOMIC_COMBOP_AND_FETCH(sub,sub,neg,2,w,extu.w) | |
214 ATOMIC_COMBOP_AND_FETCH(sub,sub,neg,4,l,mov) | |
215 | |
216 ATOMIC_COMBOP_AND_FETCH(nand,and,not,1,b,extu.b) | |
217 ATOMIC_COMBOP_AND_FETCH(nand,and,not,2,w,extu.w) | |
218 ATOMIC_COMBOP_AND_FETCH(nand,and,not,4,l,mov) | |
219 | |
220 .section .note.GNU-stack,"",%progbits | |
221 .previous | |
222 | |
138 #endif /* ! __SH5__ */ | 223 #endif /* ! __SH5__ */ |