Mikael Starvik | 51533b6 | 2005-07-27 11:44:44 -0700 | [diff] [blame] | 1 | ;; Core of the spinlock implementation |
2 | ;; | ||||
3 | ;; Copyright (C) 2004 Axis Communications AB. | ||||
4 | ;; | ||||
5 | ;; Author: Mikael Starvik | ||||
6 | |||||
7 | |||||
8 | .global cris_spin_lock | ||||
9 | .global cris_spin_trylock | ||||
10 | |||||
11 | .text | ||||
12 | |||||
13 | cris_spin_lock: | ||||
14 | clearf p | ||||
15 | 1: test.d [$r10] | ||||
16 | beq 1b | ||||
17 | clearf p | ||||
18 | ax | ||||
19 | clear.d [$r10] | ||||
20 | bcs 1b | ||||
21 | clearf p | ||||
22 | ret | ||||
23 | nop | ||||
24 | |||||
25 | cris_spin_trylock: | ||||
26 | clearf p | ||||
27 | 1: move.d [$r10], $r11 | ||||
28 | ax | ||||
29 | clear.d [$r10] | ||||
30 | bcs 1b | ||||
31 | clearf p | ||||
32 | ret | ||||
33 | move.d $r11,$r10 |