diff options
| author | Ralf Baechle <ralf@linux-mips.org> | 2015-02-19 10:00:34 -0500 |
|---|---|---|
| committer | Ralf Baechle <ralf@linux-mips.org> | 2015-02-19 10:00:34 -0500 |
| commit | 661af35e5fd878f915ed05dbbfe383f64133f98c (patch) | |
| tree | 956b7efd662b682224e61060552fdcf4201101bf /arch/mips/lib/memset.S | |
| parent | ca5d25642e212f73492d332d95dc90ef46a0e8dc (diff) | |
| parent | f296e7c48d3155991b99f41372e1786c5be03457 (diff) | |
Merge branch 'mipsr6-for-3.20' of git://git.linux-mips.org/pub/scm/mchandras/linux into mips-for-linux-next
Diffstat (limited to 'arch/mips/lib/memset.S')
| -rw-r--r-- | arch/mips/lib/memset.S | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/arch/mips/lib/memset.S b/arch/mips/lib/memset.S index c8fe6b1968fb..b8e63fd00375 100644 --- a/arch/mips/lib/memset.S +++ b/arch/mips/lib/memset.S | |||
| @@ -111,6 +111,7 @@ | |||
| 111 | .set at | 111 | .set at |
| 112 | #endif | 112 | #endif |
| 113 | 113 | ||
| 114 | #ifndef CONFIG_CPU_MIPSR6 | ||
| 114 | R10KCBARRIER(0(ra)) | 115 | R10KCBARRIER(0(ra)) |
| 115 | #ifdef __MIPSEB__ | 116 | #ifdef __MIPSEB__ |
| 116 | EX(LONG_S_L, a1, (a0), .Lfirst_fixup\@) /* make word/dword aligned */ | 117 | EX(LONG_S_L, a1, (a0), .Lfirst_fixup\@) /* make word/dword aligned */ |
| @@ -120,6 +121,30 @@ | |||
| 120 | PTR_SUBU a0, t0 /* long align ptr */ | 121 | PTR_SUBU a0, t0 /* long align ptr */ |
| 121 | PTR_ADDU a2, t0 /* correct size */ | 122 | PTR_ADDU a2, t0 /* correct size */ |
| 122 | 123 | ||
| 124 | #else /* CONFIG_CPU_MIPSR6 */ | ||
| 125 | #define STORE_BYTE(N) \ | ||
| 126 | EX(sb, a1, N(a0), .Lbyte_fixup\@); \ | ||
| 127 | beqz t0, 0f; \ | ||
| 128 | PTR_ADDU t0, 1; | ||
| 129 | |||
| 130 | PTR_ADDU a2, t0 /* correct size */ | ||
| 131 | PTR_ADDU t0, 1 | ||
| 132 | STORE_BYTE(0) | ||
| 133 | STORE_BYTE(1) | ||
| 134 | #if LONGSIZE == 4 | ||
| 135 | EX(sb, a1, 2(a0), .Lbyte_fixup\@) | ||
| 136 | #else | ||
| 137 | STORE_BYTE(2) | ||
| 138 | STORE_BYTE(3) | ||
| 139 | STORE_BYTE(4) | ||
| 140 | STORE_BYTE(5) | ||
| 141 | EX(sb, a1, 6(a0), .Lbyte_fixup\@) | ||
| 142 | #endif | ||
| 143 | 0: | ||
| 144 | ori a0, STORMASK | ||
| 145 | xori a0, STORMASK | ||
| 146 | PTR_ADDIU a0, STORSIZE | ||
| 147 | #endif /* CONFIG_CPU_MIPSR6 */ | ||
| 123 | 1: ori t1, a2, 0x3f /* # of full blocks */ | 148 | 1: ori t1, a2, 0x3f /* # of full blocks */ |
| 124 | xori t1, 0x3f | 149 | xori t1, 0x3f |
| 125 | beqz t1, .Lmemset_partial\@ /* no block to fill */ | 150 | beqz t1, .Lmemset_partial\@ /* no block to fill */ |
| @@ -159,6 +184,7 @@ | |||
| 159 | andi a2, STORMASK /* At most one long to go */ | 184 | andi a2, STORMASK /* At most one long to go */ |
| 160 | 185 | ||
| 161 | beqz a2, 1f | 186 | beqz a2, 1f |
| 187 | #ifndef CONFIG_CPU_MIPSR6 | ||
| 162 | PTR_ADDU a0, a2 /* What's left */ | 188 | PTR_ADDU a0, a2 /* What's left */ |
| 163 | R10KCBARRIER(0(ra)) | 189 | R10KCBARRIER(0(ra)) |
| 164 | #ifdef __MIPSEB__ | 190 | #ifdef __MIPSEB__ |
| @@ -166,6 +192,22 @@ | |||
| 166 | #else | 192 | #else |
| 167 | EX(LONG_S_L, a1, -1(a0), .Llast_fixup\@) | 193 | EX(LONG_S_L, a1, -1(a0), .Llast_fixup\@) |
| 168 | #endif | 194 | #endif |
| 195 | #else | ||
| 196 | PTR_SUBU t0, $0, a2 | ||
| 197 | PTR_ADDIU t0, 1 | ||
| 198 | STORE_BYTE(0) | ||
| 199 | STORE_BYTE(1) | ||
| 200 | #if LONGSIZE == 4 | ||
| 201 | EX(sb, a1, 2(a0), .Lbyte_fixup\@) | ||
| 202 | #else | ||
| 203 | STORE_BYTE(2) | ||
| 204 | STORE_BYTE(3) | ||
| 205 | STORE_BYTE(4) | ||
| 206 | STORE_BYTE(5) | ||
| 207 | EX(sb, a1, 6(a0), .Lbyte_fixup\@) | ||
| 208 | #endif | ||
| 209 | 0: | ||
| 210 | #endif | ||
| 169 | 1: jr ra | 211 | 1: jr ra |
| 170 | move a2, zero | 212 | move a2, zero |
| 171 | 213 | ||
| @@ -186,6 +228,11 @@ | |||
| 186 | .hidden __memset | 228 | .hidden __memset |
| 187 | .endif | 229 | .endif |
| 188 | 230 | ||
| 231 | .Lbyte_fixup\@: | ||
| 232 | PTR_SUBU a2, $0, t0 | ||
| 233 | jr ra | ||
| 234 | PTR_ADDIU a2, 1 | ||
| 235 | |||
| 189 | .Lfirst_fixup\@: | 236 | .Lfirst_fixup\@: |
| 190 | jr ra | 237 | jr ra |
| 191 | nop | 238 | nop |
