atomic.S
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:1k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id: atomic.S,v 1.4 2001/11/18 00:12:56 davem Exp $
  2.  * atomic.S: These things are too big to do inline.
  3.  *
  4.  * Copyright (C) 1999 David S. Miller (davem@redhat.com)
  5.  */
  6. #include <asm/asi.h>
  7. .text
  8. .align 64
  9. .globl atomic_impl_begin, atomic_impl_end
  10. .globl __atomic_add
  11. atomic_impl_begin:
  12. __atomic_add: /* %o0 = increment, %o1 = atomic_ptr */
  13. lduw [%o1], %g5
  14. add %g5, %o0, %g7
  15. cas [%o1], %g5, %g7
  16. cmp %g5, %g7
  17. bne,pn %icc, __atomic_add
  18.  membar #StoreLoad | #StoreStore
  19. retl
  20.  add %g7, %o0, %o0
  21. .globl __atomic_sub
  22. __atomic_sub: /* %o0 = increment, %o1 = atomic_ptr */
  23. lduw [%o1], %g5
  24. sub %g5, %o0, %g7
  25. cas [%o1], %g5, %g7
  26. cmp %g5, %g7
  27. bne,pn %icc, __atomic_sub
  28.  membar #StoreLoad | #StoreStore
  29. retl
  30.  sub %g7, %o0, %o0
  31. atomic_impl_end: