Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[wrt350n-kernel.git] / arch / m68k / lib / semaphore.S
blob0215624c16027e918aef70055c6dcda7c46861ef
1 /*
2  *  linux/arch/m68k/lib/semaphore.S
3  *
4  *  Copyright (C) 1996  Linus Torvalds
5  *
6  *  m68k version by Andreas Schwab
7  */
9 #include <linux/linkage.h>
10 #include <asm/semaphore.h>
13  * The semaphore operations have a special calling sequence that
14  * allow us to do a simpler in-line version of them. These routines
15  * need to convert that sequence back into the C sequence when
16  * there is contention on the semaphore.
17  */
18 ENTRY(__down_failed)
19         moveml %a0/%d0/%d1,-(%sp)
20         movel %a1,-(%sp)
21         jbsr __down
22         movel (%sp)+,%a1
23         moveml (%sp)+,%a0/%d0/%d1
24         rts
26 ENTRY(__down_failed_interruptible)
27         movel %a0,-(%sp)
28         movel %d1,-(%sp)
29         movel %a1,-(%sp)
30         jbsr __down_interruptible
31         movel (%sp)+,%a1
32         movel (%sp)+,%d1
33         movel (%sp)+,%a0
34         rts
36 ENTRY(__down_failed_trylock)
37         movel %a0,-(%sp)
38         movel %d1,-(%sp)
39         movel %a1,-(%sp)
40         jbsr __down_trylock
41         movel (%sp)+,%a1
42         movel (%sp)+,%d1
43         movel (%sp)+,%a0
44         rts
46 ENTRY(__up_wakeup)
47         moveml %a0/%d0/%d1,-(%sp)
48         movel %a1,-(%sp)
49         jbsr __up
50         movel (%sp)+,%a1
51         moveml (%sp)+,%a0/%d0/%d1
52         rts