1/*
2 *  linux/arch/m68k/lib/semaphore.S
3 *
4 *  Copyright (C) 1996  Linus Torvalds
5 *
6 *  m68k version by Andreas Schwab
7 */
8
9#include <linux/linkage.h>
10#include <asm/semaphore.h>
11
12/*
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 */
18ENTRY(__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
25
26ENTRY(__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
35
36ENTRY(__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
45
46ENTRY(__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
53