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
|
#include <sys/asm.h>
#include <regdef.h>
.text
.align 3
LEAF(opal_atomic_mb)
sync
j ra
END(opal_atomic_mb)
.align 3
LEAF(opal_atomic_rmb)
sync
j ra
END(opal_atomic_rmb)
LEAF(opal_atomic_wmb)
sync
j ra
END(opal_atomic_wmb)
LEAF(opal_atomic_cmpset_32)
.set noreorder
retry1:
ll $3, 0($4)
bne $3, $5, done1
or $2, $6, 0
sc $2, 0($4)
beqz $2, retry1
done1:
.set reorder
xor $3,$3,$5
j ra
sltu $2,$3,1
END(opal_atomic_cmpset_32)
LEAF(opal_atomic_cmpset_acq_32)
.set noreorder
retry2:
ll $3, 0($4)
bne $3, $5, done2
or $2, $6, 0
sc $2, 0($4)
beqz $2, retry2
done2:
sync
.set reorder
xor $3,$3,$5
j ra
sltu $2,$3,1
END(opal_atomic_cmpset_acq_32)
LEAF(opal_atomic_cmpset_rel_32)
.set noreorder
sync
retry3:
ll $3, 0($4)
bne $3, $5, done3
or $2, $6, 0
sc $2, 0($4)
beqz $2, retry3
done3:
.set reorder
xor $3,$3,$5
j ra
sltu $2,$3,1
END(opal_atomic_cmpset_rel_32)
LEAF(opal_atomic_cmpset_64)
.set noreorder
retry4:
lld $3, 0($4)
bne $3, $5, done4
or $2, $6, 0
scd $2, 0($4)
beqz $2, retry4
done4:
.set reorder
xor $4,$3,$5
j ra
sltu $3,$4,1
END(opal_atomic_cmpset_64)
LEAF(opal_atomic_cmpset_acq_64)
.set noreorder
retry5:
lld $3, 0($4)
bne $3, $5, done5
or $2, $6, 0
scd $2, 0($4)
beqz $2, retry5
done5:
.set reorder
sync
xor $4,$3,$5
j ra
sltu $3,$4,1
END(opal_atomic_cmpset_acq_64)
LEAF(opal_atomic_cmpset_rel_64)
.set noreorder
sync
retry6:
lld $3, 0($4)
bne $3, $5, done6
or $2, $6, 0
scd $2, 0($4)
beqz $2, retry6
done6:
.set reorder
xor $4,$3,$5
j ra
sltu $3,$4,1
END(opal_atomic_cmpset_rel_64)
|