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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
.machine "ppc"
.toc
.csect .text[PR]
.align 2
.globl opal_atomic_mb
.globl .opal_atomic_mb
.csect [DS],3
opal_atomic_mb:
.long .opal_atomic_mb, TOC[tc0], 0
.csect [PR]
.align 2
.opal_atomic_mb:
sync
blr
.globl opal_atomic_rmb
.globl .opal_atomic_rmb
.csect [DS],3
opal_atomic_rmb:
.long .opal_atomic_rmb, TOC[tc0], 0
.csect [PR]
.align 2
.opal_atomic_rmb:
lwsync
blr
.globl opal_atomic_wmb
.globl .opal_atomic_wmb
.csect [DS],3
opal_atomic_wmb:
.long .opal_atomic_wmb, TOC[tc0], 0
.csect [PR]
.align 2
.opal_atomic_wmb:
eieio
blr
.globl opal_atomic_cmpset_32
.globl .opal_atomic_cmpset_32
.csect [DS],3
opal_atomic_cmpset_32:
.long .opal_atomic_cmpset_32, TOC[tc0], 0
.csect [PR]
.align 2
.opal_atomic_cmpset_32:
L1: lwarx 0, 0, 3
cmpw 0, 0, 4
bne- L2
stwcx. 5, 0, 3
bne- L1
L2:
xor 3,0,4
subfic 5,3,0
adde 3,5,3
blr
.globl opal_atomic_cmpset_acq_32
.globl .opal_atomic_cmpset_acq_32
.csect [DS],3
opal_atomic_cmpset_acq_32:
.long .opal_atomic_cmpset_acq_32, TOC[tc0], 0
.csect [PR]
.align 2
.opal_atomic_cmpset_acq_32:
L3: lwarx 0, 0, 3
cmpw 0, 0, 4
bne- L4
stwcx. 5, 0, 3
bne- L3
sync
L4:
xor 3,0,4
subfic 5,3,0
adde 3,5,3
lwsync
blr
.globl opal_atomic_cmpset_rel_32
.globl .opal_atomic_cmpset_rel_32
.csect [DS],3
opal_atomic_cmpset_rel_32:
.long .opal_atomic_cmpset_rel_32, TOC[tc0], 0
.csect [PR]
.align 2
.opal_atomic_cmpset_rel_32:
eieio
L5: lwarx 0, 0, 3
cmpw 0, 0, 4
bne- L6
stwcx. 5, 0, 3
bne- L5
sync
L6:
xor 3,0,4
subfic 5,3,0
adde 3,5,3
blr
.globl opal_atomic_add_32
.globl .opal_atomic_add_32
.csect [DS],3
opal_atomic_add_32:
.long .opal_atomic_add_32, TOC[tc0], 0
.csect [PR]
.align 2
.opal_atomic_add_32:
L13: lwarx 0, 0, 3
add 0, 4, 0
stwcx. 0, 0, 3
bne- L13
mr 3,0
blr
.globl opal_atomic_sub_32
.globl .opal_atomic_sub_32
.csect [DS],3
opal_atomic_sub_32:
.long .opal_atomic_sub_32, TOC[tc0], 0
.csect [PR]
.align 2
.opal_atomic_sub_32:
L14: lwarx 0,0,3
subf 0,4,0
stwcx. 0,0,3
bne- L14
mr 3,0
blr
.globl opal_sys_timer_get_cycles
.globl .opal_sys_timer_get_cycles
.csect [DS],3
opal_sys_timer_get_cycles:
.long .opal_sys_timer_get_cycles, TOC[tc0], 0
.csect [PR]
.align 2
.opal_sys_timer_get_cycles:
L15:
mftbu 0
mftb 11
mftbu 2
cmpw 7,2,0
bne+ 7,L15
li 4,0
li 9,0
or 3,2,9
or 4,4,11
blr
|