solaris_sparc.s
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:1k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. !!
  2. !! $Header: /usr/local/cvsroot/pgsql/src/backend/port/tas/solaris_sparc.s,v 1.1 1998/06/18 16:32:49 momjian Exp $
  3. !!
  4. !! this would be a piece of inlined assembler but it appears
  5. !! to be easier to just write the assembler than to try to 
  6. !! figure out how to make sure that in/out registers are kept
  7. !! straight in the asm's.
  8. !!
  9. .file "tas.c"
  10. .section ".text"
  11. .align 4
  12. .global tas
  13. .type  tas,#function
  14. .proc 04
  15. tas:
  16. !!
  17. !! this is a leaf procedure - no need to save windows and 
  18. !! diddle the CWP.
  19. !!
  20. !#PROLOGUE# 0
  21. !#PROLOGUE# 1
  22. !!
  23. !! write 0xFF into the lock address, saving the old value in %o0.
  24. !! this is an atomic action, even on multiprocessors.
  25. !!
  26. ldstub [%o0],%o0
  27. !!
  28. !! if it was already set when we set it, somebody else already
  29. !! owned the lock -- return 1.
  30. !!
  31. cmp %o0,0
  32. bne .LL2
  33. mov 1,%o0
  34. !!
  35. !! otherwise, it was clear and we now own the lock -- return 0.
  36. !!
  37. mov 0,%o0
  38. .LL2:
  39. !!
  40. !! this is a leaf procedure - no need to restore windows and 
  41. !! diddle the CWP.
  42. !!
  43. retl
  44. nop
  45. .LLfe1:
  46. .size  tas,.LLfe1-tas
  47. .ident "GCC: (GNU) 2.5.8"