1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
.text
.align 2
.globl _opal_atomic_mb
_opal_atomic_mb:
sync
blr
.globl _opal_atomic_rmb
_opal_atomic_rmb:
lwsync
blr
.globl _opal_atomic_wmb
_opal_atomic_wmb:
eieio
blr
.globl _opal_atomic_cmpset_32
_opal_atomic_cmpset_32:
L1: lwarx r0, 0, r3
cmpw 0, r0, r4
bne- L2
stwcx. r5, 0, r3
bne- L1
L2:
xor r3,r0,r4
subfic r5,r3,0
adde r3,r5,r3
blr
.globl _opal_atomic_cmpset_acq_32
_opal_atomic_cmpset_acq_32:
L3: lwarx r0, 0, r3
cmpw 0, r0, r4
bne- L4
stwcx. r5, 0, r3
bne- L3
sync
L4:
xor r3,r0,r4
subfic r5,r3,0
adde r3,r5,r3
lwsync
blr
.globl _opal_atomic_cmpset_rel_32
_opal_atomic_cmpset_rel_32:
eieio
L5: lwarx r0, 0, r3
cmpw 0, r0, r4
bne- L6
stwcx. r5, 0, r3
bne- L5
sync
L6:
xor r3,r0,r4
subfic r5,r3,0
adde r3,r5,r3
blr
.globl _opal_atomic_add_32
_opal_atomic_add_32:
L13: lwarx r0, 0, r3
add r0, r4, r0
stwcx. r0, 0, r3
bne- L13
mr r3,r0
blr
.globl _opal_atomic_sub_32
_opal_atomic_sub_32:
L14: lwarx r0,0,r3
subf r0,r4,r0
stwcx. r0,0,r3
bne- L14
mr r3,r0
blr
.globl _opal_sys_timer_get_cycles
_opal_sys_timer_get_cycles:
L15:
mftbu r0
mftb r11
mftbu r2
cmpw cr7,r2,r0
bne+ cr7,L15
li r4,0
li r9,0
or r3,r2,r9
or r4,r4,r11
blr
|