        .section        ".text",#alloc,#execinstr
	        .align 8
	        .skip 16


	/*
	**  int _STLP_atomic_exchange (void *pvalue, int value)
	*/

	        .type   _STLP_atomic_exchange,#function
	        .global _STLP_atomic_exchange
	        .align  8

_STLP_atomic_exchange:
0:
	        ld      [%o0], %o2              ! Set the current value
	        mov     %o1, %o3                ! Set the new value
!	        swap     [%o0], %o3             ! Do the compare and swap
	        cas     [%o0], %o2, %o3 
	        cmp     %o2, %o3                ! Check whether successful
	        bne     0b                      ! Retry upon failure
	        stbar
	        mov     %o2, %o0                ! Set the new value
	        retl                            ! return
	        nop
	        .size   _STLP_atomic_exchange,(.-_STLP_atomic_exchange)

	/* int _STLP_atomic_increment (void *pvalue) */

	        .type   _STLP_atomic_increment,#function
	        .global _STLP_atomic_increment
	        .align  8
_STLP_atomic_increment:
1:
	        ld      [%o0], %o2              ! set the current
	        add             %o2, 0x1, %o3                   ! Increment and store current
!	        swap     [%o0], %o3         ! Do the compare and swap
	        cas     [%o0], %o2, %o3 
	        cmp     %o3, %o2                ! Check whether successful
	        bne     1b                                         ! Retry if we failed.
	        membar  #LoadLoad | #LoadStore  ! Ensure the cas finishes before
	                                        ! returning
	        nop
	        retl                            ! return
	        nop

	        .size   _STLP_atomic_increment,(.-_STLP_atomic_increment)


	/* int _STLP_atomic_decrement (void *pvalue) */
	        .type   _STLP_atomic_decrement,#function
	        .global _STLP_atomic_decrement
	        .align  8

_STLP_atomic_decrement:
2:
	        ld      [%o0], %o2              ! set the current
	        sub     %o2, 0x1, %o3                   ! decrement and store current
!	        swap    [%o0], %o3         ! Do the compare and swap
	        cas     [%o0], %o2, %o3 
	        cmp     %o3, %o2                ! Check whether successful
	        bne     2b                                         ! Retry if we failed.
	        membar  #LoadLoad | #LoadStore  ! Ensure the cas finishes before
	        nop
	                                        ! returning
	        retl                            ! return
	        nop
	        .size   _STLP_atomic_decrement,(.-_STLP_atomic_decrement)
