* 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.
Этот коммит содержится в:
родитель
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)
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user