Adding atomic operations for non-gcc on powerpc
This commit was SVN r2151.
Этот коммит содержится в:
родитель
2c84951869
Коммит
d0ff366809
232
src/include/sys/powerpc/atomic.s
Обычный файл
232
src/include/sys/powerpc/atomic.s
Обычный файл
@ -0,0 +1,232 @@
|
||||
.section __TEXT,__text,regular,pure_instructions
|
||||
.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
|
||||
.section __TEXT,__text,regular,pure_instructions
|
||||
.align 2
|
||||
.align 2
|
||||
.globl _ompi_atomic_mb
|
||||
.section __TEXT,__text,regular,pure_instructions
|
||||
.align 2
|
||||
_ompi_atomic_mb:
|
||||
stmw r30,-8(r1)
|
||||
stwu r1,-48(r1)
|
||||
mr r30,r1
|
||||
lwz r1,0(r1)
|
||||
lmw r30,-8(r1)
|
||||
blr
|
||||
.align 2
|
||||
.globl _ompi_atomic_rmb
|
||||
.section __TEXT,__text,regular,pure_instructions
|
||||
.align 2
|
||||
_ompi_atomic_rmb:
|
||||
stmw r30,-8(r1)
|
||||
stwu r1,-48(r1)
|
||||
mr r30,r1
|
||||
lwz r1,0(r1)
|
||||
lmw r30,-8(r1)
|
||||
blr
|
||||
.align 2
|
||||
.globl _ompi_atomic_wmb
|
||||
.section __TEXT,__text,regular,pure_instructions
|
||||
.align 2
|
||||
_ompi_atomic_wmb:
|
||||
stmw r30,-8(r1)
|
||||
stwu r1,-48(r1)
|
||||
mr r30,r1
|
||||
lwz r1,0(r1)
|
||||
lmw r30,-8(r1)
|
||||
blr
|
||||
.align 2
|
||||
.globl _ompi_atomic_cmpset_32
|
||||
.section __TEXT,__text,regular,pure_instructions
|
||||
.align 2
|
||||
_ompi_atomic_cmpset_32:
|
||||
stmw r30,-8(r1)
|
||||
stwu r1,-64(r1)
|
||||
mr r30,r1
|
||||
stw r3,88(r30)
|
||||
stw r4,92(r30)
|
||||
stw r5,96(r30)
|
||||
lwz r10,88(r30)
|
||||
lwz r11,88(r30)
|
||||
lwz r9,92(r30)
|
||||
lwz r0,96(r30)
|
||||
lwz r2,88(r30)
|
||||
1: lwarx r8, 0, r11
|
||||
cmpw 0, r8, r9
|
||||
bne- 2f
|
||||
stwcx. r0, 0, r11
|
||||
bne- 1b
|
||||
2:
|
||||
mr r0,r8
|
||||
stw r0,32(r30)
|
||||
lwz r2,32(r30)
|
||||
lwz r0,92(r30)
|
||||
cmpw cr7,r2,r0
|
||||
mfcr r0
|
||||
rlwinm r0,r0,31,1
|
||||
mr r3,r0
|
||||
lwz r1,0(r1)
|
||||
lmw r30,-8(r1)
|
||||
blr
|
||||
.align 2
|
||||
.globl _ompi_atomic_cmpset_acq_32
|
||||
.section __TEXT,__text,regular,pure_instructions
|
||||
.align 2
|
||||
_ompi_atomic_cmpset_acq_32:
|
||||
mflr r0
|
||||
stmw r30,-8(r1)
|
||||
stw r0,8(r1)
|
||||
stwu r1,-96(r1)
|
||||
mr r30,r1
|
||||
stw r3,120(r30)
|
||||
stw r4,124(r30)
|
||||
stw r5,128(r30)
|
||||
lwz r3,120(r30)
|
||||
lwz r4,124(r30)
|
||||
lwz r5,128(r30)
|
||||
bl _ompi_atomic_cmpset_32
|
||||
mr r0,r3
|
||||
stw r0,64(r30)
|
||||
bl _ompi_atomic_rmb
|
||||
lwz r0,64(r30)
|
||||
mr r3,r0
|
||||
lwz r1,0(r1)
|
||||
lwz r0,8(r1)
|
||||
mtlr r0
|
||||
lmw r30,-8(r1)
|
||||
blr
|
||||
.align 2
|
||||
.globl _ompi_atomic_cmpset_rel_32
|
||||
.section __TEXT,__text,regular,pure_instructions
|
||||
.align 2
|
||||
_ompi_atomic_cmpset_rel_32:
|
||||
mflr r0
|
||||
stmw r30,-8(r1)
|
||||
stw r0,8(r1)
|
||||
stwu r1,-80(r1)
|
||||
mr r30,r1
|
||||
stw r3,104(r30)
|
||||
stw r4,108(r30)
|
||||
stw r5,112(r30)
|
||||
bl _ompi_atomic_wmb
|
||||
lwz r3,104(r30)
|
||||
lwz r4,108(r30)
|
||||
lwz r5,112(r30)
|
||||
bl _ompi_atomic_cmpset_32
|
||||
mr r0,r3
|
||||
mr r3,r0
|
||||
lwz r1,0(r1)
|
||||
lwz r0,8(r1)
|
||||
mtlr r0
|
||||
lmw r30,-8(r1)
|
||||
blr
|
||||
.align 2
|
||||
.globl _ompi_atomic_cmpset_64
|
||||
.section __TEXT,__text,regular,pure_instructions
|
||||
.align 2
|
||||
_ompi_atomic_cmpset_64:
|
||||
stmw r30,-8(r1)
|
||||
stwu r1,-96(r1)
|
||||
mr r30,r1
|
||||
stw r3,120(r30)
|
||||
stw r4,32(r30)
|
||||
stw r5,36(r30)
|
||||
stw r6,40(r30)
|
||||
stw r7,44(r30)
|
||||
lwz r10,120(r30)
|
||||
lwz r0,120(r30)
|
||||
lwz r11,32(r30)
|
||||
lwz r12,36(r30)
|
||||
lwz r2,40(r30)
|
||||
lwz r3,44(r30)
|
||||
lwz r9,120(r30)
|
||||
1: ldarx r7, 0, r0
|
||||
cmpd 0, r7, r11
|
||||
bne- 2f
|
||||
stdcx. r2, 0, r0
|
||||
bne- 1b
|
||||
2:
|
||||
mr r2,r7
|
||||
mr r3,r8
|
||||
stw r2,64(r30)
|
||||
stw r3,68(r30)
|
||||
lfd f0,64(r30)
|
||||
stfd f0,48(r30)
|
||||
li r8,0
|
||||
stw r8,56(r30)
|
||||
lwz r2,48(r30)
|
||||
lwz r0,32(r30)
|
||||
cmpw cr7,r2,r0
|
||||
bne cr7,L8
|
||||
lwz r0,52(r30)
|
||||
lwz r2,36(r30)
|
||||
cmpw cr7,r0,r2
|
||||
bne cr7,L8
|
||||
li r0,1
|
||||
stw r0,56(r30)
|
||||
L8:
|
||||
lwz r0,56(r30)
|
||||
mr r3,r0
|
||||
lwz r1,0(r1)
|
||||
lmw r30,-8(r1)
|
||||
blr
|
||||
.align 2
|
||||
.globl _ompi_atomic_cmpset_acq_64
|
||||
.section __TEXT,__text,regular,pure_instructions
|
||||
.align 2
|
||||
_ompi_atomic_cmpset_acq_64:
|
||||
mflr r0
|
||||
stmw r30,-8(r1)
|
||||
stw r0,8(r1)
|
||||
stwu r1,-112(r1)
|
||||
mr r30,r1
|
||||
stw r3,136(r30)
|
||||
stw r4,64(r30)
|
||||
stw r5,68(r30)
|
||||
stw r6,72(r30)
|
||||
stw r7,76(r30)
|
||||
lwz r3,136(r30)
|
||||
lwz r4,64(r30)
|
||||
lwz r5,68(r30)
|
||||
lwz r6,72(r30)
|
||||
lwz r7,76(r30)
|
||||
bl _ompi_atomic_cmpset_64
|
||||
mr r0,r3
|
||||
stw r0,80(r30)
|
||||
bl _ompi_atomic_rmb
|
||||
lwz r0,80(r30)
|
||||
mr r3,r0
|
||||
lwz r1,0(r1)
|
||||
lwz r0,8(r1)
|
||||
mtlr r0
|
||||
lmw r30,-8(r1)
|
||||
blr
|
||||
.align 2
|
||||
.globl _ompi_atomic_cmpset_rel_64
|
||||
.section __TEXT,__text,regular,pure_instructions
|
||||
.align 2
|
||||
_ompi_atomic_cmpset_rel_64:
|
||||
mflr r0
|
||||
stmw r30,-8(r1)
|
||||
stw r0,8(r1)
|
||||
stwu r1,-96(r1)
|
||||
mr r30,r1
|
||||
stw r3,120(r30)
|
||||
stw r4,64(r30)
|
||||
stw r5,68(r30)
|
||||
stw r6,72(r30)
|
||||
stw r7,76(r30)
|
||||
bl _ompi_atomic_wmb
|
||||
lwz r3,120(r30)
|
||||
lwz r4,64(r30)
|
||||
lwz r5,68(r30)
|
||||
lwz r6,72(r30)
|
||||
lwz r7,76(r30)
|
||||
bl _ompi_atomic_cmpset_64
|
||||
mr r0,r3
|
||||
mr r3,r0
|
||||
lwz r1,0(r1)
|
||||
lwz r0,8(r1)
|
||||
mtlr r0
|
||||
lmw r30,-8(r1)
|
||||
blr
|
Загрузка…
x
Ссылка в новой задаче
Block a user