home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / stlpt453.zip / STLport-4.5.3 / src / sparc_atomic64.s < prev    next >
Text File  |  2001-03-29  |  2KB  |  66 lines

  1.         .section        ".text",#alloc,#execinstr
  2.         .align 8
  3.         .skip 16
  4.  
  5. !  int _STLP_atomic_exchange (void *pvalue, int value)
  6. !
  7.  
  8.         .type   _STLP_atomic_exchange,#function
  9.         .global _STLP_atomic_exchange
  10.         .align  8
  11.  
  12. _STLP_atomic_exchange:
  13. 1:    
  14.     ldx      [%o0], %o2              ! Set the current value
  15.         mov      %o1, %o3                ! Set the new value
  16.         casx     [%o0], %o2, %o3         ! Do the compare and swap
  17.         cmp      %o2, %o3                ! Check whether successful
  18.         bne      1b                  ! Retry upon failure
  19.         membar  #LoadLoad | #LoadStore  ! Ensure the cas finishes before
  20.                                         ! returning
  21.         retl                            ! return
  22.         mov     %o2, %o0                                ! Set the new value
  23.         .size   _STLP_atomic_exchange,(.-_STLP_atomic_exchange)
  24.  
  25.     
  26. ! int _STLP_atomic_increment (void *pvalue)
  27.  
  28.         .type   _STLP_atomic_increment,#function
  29.         .global _STLP_atomic_increment
  30.         .align  8
  31. _STLP_atomic_increment:
  32. 0:    
  33.         ldx      [%o0], %o2              ! set the current
  34.         addx     %o2, 0x1, %o3                   ! Increment and store current
  35.         casx     [%o0], %o2, %o3         ! Do the compare and swap
  36.         cmp     %o3, %o2                ! Check whether successful
  37.         bne     0b
  38.         membar  #LoadLoad | #LoadStore  ! Ensure the cas finishes before
  39.                                         ! returning
  40.         retl                            ! return
  41.         mov    %o1, %o0                                 ! Set the return value
  42.  
  43.         .size   _STLP_atomic_increment,(.-_STLP_atomic_increment)
  44.  
  45.     
  46. !        /* int _STLP_atomic_decrement (void *pvalue) */
  47.         .type   _STLP_atomic_decrement,#function
  48.         .global _STLP_atomic_decrement
  49.         .align  8
  50.  
  51. _STLP_atomic_decrement:
  52. 0:    
  53.         ldx      [%o0], %o2              ! set the current
  54.         subx             %o2, 0x1, %o3                   ! decrement and store current
  55.         casx     [%o0], %o2, %o3         ! Do the compare and swap
  56.         cmp     %o3, %o2                ! Check whether successful
  57.         bne     0b
  58.         membar  #LoadLoad | #LoadStore  ! Ensure the cas finishes before
  59.                                         ! returning
  60.         retl                            ! return
  61.     nop
  62.         .size   _STLP_atomic_decrement,(.-_STLP_atomic_decrement)
  63.  
  64.     
  65.  
  66.