54 lines
1,019 B
ArmAsm
54 lines
1,019 B
ArmAsm
|
/*
|
||
|
* linux/arch/m68k/lib/semaphore.S
|
||
|
*
|
||
|
* Copyright (C) 1996 Linus Torvalds
|
||
|
*
|
||
|
* m68k version by Andreas Schwab
|
||
|
*/
|
||
|
|
||
|
#include <linux/linkage.h>
|
||
|
#include <asm/semaphore.h>
|
||
|
|
||
|
/*
|
||
|
* The semaphore operations have a special calling sequence that
|
||
|
* allow us to do a simpler in-line version of them. These routines
|
||
|
* need to convert that sequence back into the C sequence when
|
||
|
* there is contention on the semaphore.
|
||
|
*/
|
||
|
ENTRY(__down_failed)
|
||
|
moveml %a0/%d0/%d1,-(%sp)
|
||
|
movel %a1,-(%sp)
|
||
|
jbsr __down
|
||
|
movel (%sp)+,%a1
|
||
|
moveml (%sp)+,%a0/%d0/%d1
|
||
|
rts
|
||
|
|
||
|
ENTRY(__down_failed_interruptible)
|
||
|
movel %a0,-(%sp)
|
||
|
movel %d1,-(%sp)
|
||
|
movel %a1,-(%sp)
|
||
|
jbsr __down_interruptible
|
||
|
movel (%sp)+,%a1
|
||
|
movel (%sp)+,%d1
|
||
|
movel (%sp)+,%a0
|
||
|
rts
|
||
|
|
||
|
ENTRY(__down_failed_trylock)
|
||
|
movel %a0,-(%sp)
|
||
|
movel %d1,-(%sp)
|
||
|
movel %a1,-(%sp)
|
||
|
jbsr __down_trylock
|
||
|
movel (%sp)+,%a1
|
||
|
movel (%sp)+,%d1
|
||
|
movel (%sp)+,%a0
|
||
|
rts
|
||
|
|
||
|
ENTRY(__up_wakeup)
|
||
|
moveml %a0/%d0/%d1,-(%sp)
|
||
|
movel %a1,-(%sp)
|
||
|
jbsr __up
|
||
|
movel (%sp)+,%a1
|
||
|
moveml (%sp)+,%a0/%d0/%d1
|
||
|
rts
|
||
|
|