semaphore.S 1019 B

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