semaphore.S 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /*
  2. * linux/arch/m68k/lib/semaphore.S
  3. *
  4. * Copyright (C) 1996 Linus Torvalds
  5. *
  6. * m68k version by Andreas Schwab
  7. *
  8. * MAR/1999 -- modified to support ColdFire (gerg@snapgear.com)
  9. */
  10. #include <linux/linkage.h>
  11. #include <asm/semaphore.h>
  12. /*
  13. * "down_failed" is called with the eventual return address
  14. * in %a0, and the address of the semaphore in %a1. We need
  15. * to increment the number of waiters on the semaphore,
  16. * call "__down()", and then eventually return to try again.
  17. */
  18. ENTRY(__down_failed)
  19. #ifdef CONFIG_COLDFIRE
  20. subl #12,%sp
  21. moveml %a0/%d0/%d1,(%sp)
  22. #else
  23. moveml %a0/%d0/%d1,-(%sp)
  24. #endif
  25. movel %a1,-(%sp)
  26. jbsr __down
  27. movel (%sp)+,%a1
  28. movel (%sp)+,%d0
  29. movel (%sp)+,%d1
  30. rts
  31. ENTRY(__down_failed_interruptible)
  32. movel %a0,-(%sp)
  33. movel %d1,-(%sp)
  34. movel %a1,-(%sp)
  35. jbsr __down_interruptible
  36. movel (%sp)+,%a1
  37. movel (%sp)+,%d1
  38. rts
  39. ENTRY(__up_wakeup)
  40. #ifdef CONFIG_COLDFIRE
  41. subl #12,%sp
  42. moveml %a0/%d0/%d1,(%sp)
  43. #else
  44. moveml %a0/%d0/%d1,-(%sp)
  45. #endif
  46. movel %a1,-(%sp)
  47. jbsr __up
  48. movel (%sp)+,%a1
  49. movel (%sp)+,%d0
  50. movel (%sp)+,%d1
  51. rts
  52. ENTRY(__down_failed_trylock)
  53. movel %a0,-(%sp)
  54. movel %d1,-(%sp)
  55. movel %a1,-(%sp)
  56. jbsr __down_trylock
  57. movel (%sp)+,%a1
  58. movel (%sp)+,%d1
  59. movel (%sp)+,%a0
  60. rts