diff options
| author | Mikulas Patocka <mpatocka@redhat.com> | 2010-08-18 04:03:37 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2010-08-19 01:51:08 -0400 |
| commit | 6ec274750c99448c3412bbc10c97ce0c993f8a4e (patch) | |
| tree | 1ec5f1b5a964d893dee6f2b4ba3eb691a3dc78a7 /arch | |
| parent | 9b3bb86acabe0c05923cea1ed3b0bee9439fef4b (diff) | |
sparc64: simple microoptimizations for atomic functions
Simple microoptimizations for sparc64 atomic functions:
Save one instruction by using a delay slot.
Use %g1 instead of %g7, because %g1 is written earlier.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/sparc/lib/atomic_64.S | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/arch/sparc/lib/atomic_64.S b/arch/sparc/lib/atomic_64.S index 0268210ca168..703c9c3935b7 100644 --- a/arch/sparc/lib/atomic_64.S +++ b/arch/sparc/lib/atomic_64.S | |||
| @@ -52,10 +52,9 @@ atomic_add_ret: /* %o0 = increment, %o1 = atomic_ptr */ | |||
| 52 | cas [%o1], %g1, %g7 | 52 | cas [%o1], %g1, %g7 |
| 53 | cmp %g1, %g7 | 53 | cmp %g1, %g7 |
| 54 | bne,pn %icc, 2f | 54 | bne,pn %icc, 2f |
| 55 | add %g7, %o0, %g7 | 55 | add %g1, %o0, %g1 |
| 56 | sra %g7, 0, %o0 | ||
| 57 | retl | 56 | retl |
| 58 | nop | 57 | sra %g1, 0, %o0 |
| 59 | 2: BACKOFF_SPIN(%o2, %o3, 1b) | 58 | 2: BACKOFF_SPIN(%o2, %o3, 1b) |
| 60 | .size atomic_add_ret, .-atomic_add_ret | 59 | .size atomic_add_ret, .-atomic_add_ret |
| 61 | 60 | ||
| @@ -68,10 +67,9 @@ atomic_sub_ret: /* %o0 = decrement, %o1 = atomic_ptr */ | |||
| 68 | cas [%o1], %g1, %g7 | 67 | cas [%o1], %g1, %g7 |
| 69 | cmp %g1, %g7 | 68 | cmp %g1, %g7 |
| 70 | bne,pn %icc, 2f | 69 | bne,pn %icc, 2f |
| 71 | sub %g7, %o0, %g7 | 70 | sub %g1, %o0, %g1 |
| 72 | sra %g7, 0, %o0 | ||
| 73 | retl | 71 | retl |
| 74 | nop | 72 | sra %g1, 0, %o0 |
| 75 | 2: BACKOFF_SPIN(%o2, %o3, 1b) | 73 | 2: BACKOFF_SPIN(%o2, %o3, 1b) |
| 76 | .size atomic_sub_ret, .-atomic_sub_ret | 74 | .size atomic_sub_ret, .-atomic_sub_ret |
| 77 | 75 | ||
| @@ -114,10 +112,9 @@ atomic64_add_ret: /* %o0 = increment, %o1 = atomic_ptr */ | |||
| 114 | casx [%o1], %g1, %g7 | 112 | casx [%o1], %g1, %g7 |
| 115 | cmp %g1, %g7 | 113 | cmp %g1, %g7 |
| 116 | bne,pn %xcc, 2f | 114 | bne,pn %xcc, 2f |
| 117 | add %g7, %o0, %g7 | ||
| 118 | mov %g7, %o0 | ||
| 119 | retl | ||
| 120 | nop | 115 | nop |
| 116 | retl | ||
| 117 | add %g1, %o0, %o0 | ||
| 121 | 2: BACKOFF_SPIN(%o2, %o3, 1b) | 118 | 2: BACKOFF_SPIN(%o2, %o3, 1b) |
| 122 | .size atomic64_add_ret, .-atomic64_add_ret | 119 | .size atomic64_add_ret, .-atomic64_add_ret |
| 123 | 120 | ||
| @@ -130,9 +127,8 @@ atomic64_sub_ret: /* %o0 = decrement, %o1 = atomic_ptr */ | |||
| 130 | casx [%o1], %g1, %g7 | 127 | casx [%o1], %g1, %g7 |
| 131 | cmp %g1, %g7 | 128 | cmp %g1, %g7 |
| 132 | bne,pn %xcc, 2f | 129 | bne,pn %xcc, 2f |
| 133 | sub %g7, %o0, %g7 | ||
| 134 | mov %g7, %o0 | ||
| 135 | retl | ||
| 136 | nop | 130 | nop |
| 131 | retl | ||
| 132 | sub %g1, %o0, %o0 | ||
| 137 | 2: BACKOFF_SPIN(%o2, %o3, 1b) | 133 | 2: BACKOFF_SPIN(%o2, %o3, 1b) |
| 138 | .size atomic64_sub_ret, .-atomic64_sub_ret | 134 | .size atomic64_sub_ret, .-atomic64_sub_ret |
