1
1

* Update non-inlined Sparc64 assembly with slightly optimized code (saves a

couple register moves here and there).  Also inline the cmpset calls from
  the aquire and release cmpset calls, which should save a bunch.

This commit was SVN r4437.
Этот коммит содержится в:
Brian Barrett 2005-02-15 18:50:19 +00:00
родитель 3213187beb
Коммит 76ef91b7f6

Просмотреть файл

@ -34,10 +34,9 @@ END_FUNC(ompi_atomic_wmb)
START_FUNC(ompi_atomic_cmpset_32)
!#PROLOGUE# 0
!#PROLOGUE# 1
mov %o2, %g1
casa [%o0] 0x80, %o1, %g1
xor %g1, %o1, %g1
subcc %g0, %g1, %g0
casa [%o0] 0x80, %o1, %o2
xor %o2, %o1, %o2
subcc %g0, %o2, %g0
retl
subx %g0, -1, %o0
END_FUNC(ompi_atomic_cmpset_32)
@ -45,72 +44,60 @@ END_FUNC(ompi_atomic_cmpset_32)
START_FUNC(ompi_atomic_cmpset_acq_32)
!#PROLOGUE# 0
save %sp, -192, %sp
!#PROLOGUE# 1
mov %i0, %o0
mov %i1, %o1
call ompi_atomic_cmpset_32, 0
mov %i2, %o2
call ompi_atomic_rmb, 0
mov %o0, %i0
return %i7+8
sra %o0, 0, %o0
casa [%o0] 0x80, %o1, %o2
xor %o2, %o1, %o2
subcc %g0, %o2, %g0
subx %g0, -1, %o0
membar #LoadLoad
retl
sra %o0, 0, %o0
END_FUNC(ompi_atomic_cmpset_acq_32)
START_FUNC(ompi_atomic_cmpset_rel_32)
!#PROLOGUE# 0
save %sp, -192, %sp
!#PROLOGUE# 1
call ompi_atomic_wmb, 0
sra %i1, 0, %i1
sra %i2, 0, %i2
mov %i0, %o0
mov %i1, %o1
call ompi_atomic_cmpset_32, 0
mov %i2, %o2
ret
restore %g0, %o0, %o0
membar #StoreStore
casa [%o0] 0x80, %o1, %o2
xor %o2, %o1, %o2
subcc %g0, %o2, %g0
retl
subx %g0, -1, %o0
END_FUNC(ompi_atomic_cmpset_rel_32)
START_FUNC(ompi_atomic_cmpset_64)
!#PROLOGUE# 0
!#PROLOGUE# 1
mov %o2, %g1
casxa [%o0] 0x80, %o1, %g1
xor %g1, %o1, %g1
mov 0, %o0
casxa [%o0] 0x80, %o1, %o2
mov 0, %o0
xor %o2, %o1, %o2
retl
movre %g1, 1, %o0
movre %o2, 1, %o0
END_FUNC(ompi_atomic_cmpset_64)
START_FUNC(ompi_atomic_cmpset_acq_64)
!#PROLOGUE# 0
save %sp, -192, %sp
!#PROLOGUE# 1
mov %i0, %o0
mov %i1, %o1
call ompi_atomic_cmpset_64, 0
mov %i2, %o2
call ompi_atomic_rmb, 0
mov %o0, %i0
return %i7+8
sra %o0, 0, %o0
casxa [%o0] 0x80, %o1, %o2
mov 0, %o0
xor %o2, %o1, %o2
movre %o2, 1, %o0
membar #LoadLoad
retl
sra %o0, 0, %o0
END_FUNC(ompi_atomic_cmpset_acq_64)
START_FUNC(ompi_atomic_cmpset_rel_64)
!#PROLOGUE# 0
save %sp, -192, %sp
!#PROLOGUE# 1
call ompi_atomic_wmb, 0
nop
mov %i0, %o0
mov %i1, %o1
call ompi_atomic_cmpset_64, 0
mov %i2, %o2
ret
restore %g0, %o0, %o0
membar #StoreStore
casxa [%o0] 0x80, %o1, %o2
mov 0, %o0
xor %o2, %o1, %o2
retl
movre %o2, 1, %o0
END_FUNC(ompi_atomic_cmpset_rel_64)