.. | .. |
---|
78 | 78 | #endif |
---|
79 | 79 | .endm |
---|
80 | 80 | |
---|
81 | | - .set noreorder |
---|
82 | 81 | .align 5 |
---|
83 | 82 | |
---|
84 | 83 | /* |
---|
.. | .. |
---|
94 | 93 | .endif |
---|
95 | 94 | |
---|
96 | 95 | sltiu t0, a2, STORSIZE /* very small region? */ |
---|
| 96 | + .set noreorder |
---|
97 | 97 | bnez t0, .Lsmall_memset\@ |
---|
98 | 98 | andi t0, a0, STORMASK /* aligned? */ |
---|
| 99 | + .set reorder |
---|
99 | 100 | |
---|
100 | 101 | #ifdef CONFIG_CPU_MICROMIPS |
---|
101 | 102 | move t8, a1 /* used by 'swp' instruction */ |
---|
102 | 103 | move t9, a1 |
---|
103 | 104 | #endif |
---|
| 105 | + .set noreorder |
---|
104 | 106 | #ifndef CONFIG_CPU_DADDI_WORKAROUNDS |
---|
105 | 107 | beqz t0, 1f |
---|
106 | 108 | PTR_SUBU t0, STORSIZE /* alignment in bytes */ |
---|
.. | .. |
---|
111 | 113 | PTR_SUBU t0, AT /* alignment in bytes */ |
---|
112 | 114 | .set at |
---|
113 | 115 | #endif |
---|
| 116 | + .set reorder |
---|
114 | 117 | |
---|
115 | | -#ifndef CONFIG_CPU_MIPSR6 |
---|
| 118 | +#ifndef CONFIG_CPU_NO_LOAD_STORE_LR |
---|
116 | 119 | R10KCBARRIER(0(ra)) |
---|
117 | 120 | #ifdef __MIPSEB__ |
---|
118 | 121 | EX(LONG_S_L, a1, (a0), .Lfirst_fixup\@) /* make word/dword aligned */ |
---|
.. | .. |
---|
122 | 125 | PTR_SUBU a0, t0 /* long align ptr */ |
---|
123 | 126 | PTR_ADDU a2, t0 /* correct size */ |
---|
124 | 127 | |
---|
125 | | -#else /* CONFIG_CPU_MIPSR6 */ |
---|
| 128 | +#else /* CONFIG_CPU_NO_LOAD_STORE_LR */ |
---|
126 | 129 | #define STORE_BYTE(N) \ |
---|
127 | 130 | EX(sb, a1, N(a0), .Lbyte_fixup\@); \ |
---|
| 131 | + .set noreorder; \ |
---|
128 | 132 | beqz t0, 0f; \ |
---|
129 | | - PTR_ADDU t0, 1; |
---|
| 133 | + PTR_ADDU t0, 1; \ |
---|
| 134 | + .set reorder; |
---|
130 | 135 | |
---|
131 | 136 | PTR_ADDU a2, t0 /* correct size */ |
---|
132 | 137 | PTR_ADDU t0, 1 |
---|
.. | .. |
---|
145 | 150 | ori a0, STORMASK |
---|
146 | 151 | xori a0, STORMASK |
---|
147 | 152 | PTR_ADDIU a0, STORSIZE |
---|
148 | | -#endif /* CONFIG_CPU_MIPSR6 */ |
---|
| 153 | +#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */ |
---|
149 | 154 | 1: ori t1, a2, 0x3f /* # of full blocks */ |
---|
150 | 155 | xori t1, 0x3f |
---|
| 156 | + andi t0, a2, 0x40-STORSIZE |
---|
151 | 157 | beqz t1, .Lmemset_partial\@ /* no block to fill */ |
---|
152 | | - andi t0, a2, 0x40-STORSIZE |
---|
153 | 158 | |
---|
154 | 159 | PTR_ADDU t1, a0 /* end address */ |
---|
155 | | - .set reorder |
---|
156 | 160 | 1: PTR_ADDIU a0, 64 |
---|
157 | 161 | R10KCBARRIER(0(ra)) |
---|
158 | 162 | f_fill64 a0, -64, FILL64RG, .Lfwd_fixup\@, \mode |
---|
159 | 163 | bne t1, a0, 1b |
---|
160 | | - .set noreorder |
---|
161 | 164 | |
---|
162 | 165 | .Lmemset_partial\@: |
---|
163 | 166 | R10KCBARRIER(0(ra)) |
---|
.. | .. |
---|
173 | 176 | PTR_SUBU t1, AT |
---|
174 | 177 | .set at |
---|
175 | 178 | #endif |
---|
| 179 | + PTR_ADDU a0, t0 /* dest ptr */ |
---|
176 | 180 | jr t1 |
---|
177 | | - PTR_ADDU a0, t0 /* dest ptr */ |
---|
178 | 181 | |
---|
179 | | - .set push |
---|
180 | | - .set noreorder |
---|
181 | | - .set nomacro |
---|
182 | 182 | /* ... but first do longs ... */ |
---|
183 | 183 | f_fill64 a0, -64, FILL64RG, .Lpartial_fixup\@, \mode |
---|
184 | | -2: .set pop |
---|
185 | | - andi a2, STORMASK /* At most one long to go */ |
---|
| 184 | +2: andi a2, STORMASK /* At most one long to go */ |
---|
186 | 185 | |
---|
| 186 | + .set noreorder |
---|
187 | 187 | beqz a2, 1f |
---|
188 | | -#ifndef CONFIG_CPU_MIPSR6 |
---|
| 188 | +#ifndef CONFIG_CPU_NO_LOAD_STORE_LR |
---|
189 | 189 | PTR_ADDU a0, a2 /* What's left */ |
---|
| 190 | + .set reorder |
---|
190 | 191 | R10KCBARRIER(0(ra)) |
---|
191 | 192 | #ifdef __MIPSEB__ |
---|
192 | 193 | EX(LONG_S_R, a1, -1(a0), .Llast_fixup\@) |
---|
193 | 194 | #else |
---|
194 | 195 | EX(LONG_S_L, a1, -1(a0), .Llast_fixup\@) |
---|
195 | 196 | #endif |
---|
196 | | -#else |
---|
| 197 | +#else /* CONFIG_CPU_NO_LOAD_STORE_LR */ |
---|
197 | 198 | PTR_SUBU t0, $0, a2 |
---|
| 199 | + .set reorder |
---|
198 | 200 | move a2, zero /* No remaining longs */ |
---|
199 | 201 | PTR_ADDIU t0, 1 |
---|
200 | 202 | STORE_BYTE(0) |
---|
.. | .. |
---|
209 | 211 | EX(sb, a1, 6(a0), .Lbyte_fixup\@) |
---|
210 | 212 | #endif |
---|
211 | 213 | 0: |
---|
212 | | -#endif |
---|
213 | | -1: jr ra |
---|
214 | | - move a2, zero |
---|
| 214 | +#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */ |
---|
| 215 | +1: move a2, zero |
---|
| 216 | + jr ra |
---|
215 | 217 | |
---|
216 | 218 | .Lsmall_memset\@: |
---|
| 219 | + PTR_ADDU t1, a0, a2 |
---|
217 | 220 | beqz a2, 2f |
---|
218 | | - PTR_ADDU t1, a0, a2 |
---|
219 | 221 | |
---|
220 | 222 | 1: PTR_ADDIU a0, 1 /* fill bytewise */ |
---|
221 | 223 | R10KCBARRIER(0(ra)) |
---|
| 224 | + .set noreorder |
---|
222 | 225 | bne t1, a0, 1b |
---|
223 | 226 | EX(sb, a1, -1(a0), .Lsmall_fixup\@) |
---|
| 227 | + .set reorder |
---|
224 | 228 | |
---|
225 | | -2: jr ra /* done */ |
---|
226 | | - move a2, zero |
---|
| 229 | +2: move a2, zero |
---|
| 230 | + jr ra /* done */ |
---|
227 | 231 | .if __memset == 1 |
---|
228 | 232 | END(memset) |
---|
229 | 233 | .set __memset, 0 |
---|
230 | 234 | .hidden __memset |
---|
231 | 235 | .endif |
---|
232 | 236 | |
---|
233 | | -#ifdef CONFIG_CPU_MIPSR6 |
---|
| 237 | +#ifdef CONFIG_CPU_NO_LOAD_STORE_LR |
---|
234 | 238 | .Lbyte_fixup\@: |
---|
235 | 239 | /* |
---|
236 | 240 | * unset_bytes = (#bytes - (#unaligned bytes)) - (-#unaligned bytes remaining + 1) + 1 |
---|
237 | 241 | * a2 = a2 - t0 + 1 |
---|
238 | 242 | */ |
---|
239 | 243 | PTR_SUBU a2, t0 |
---|
| 244 | + PTR_ADDIU a2, 1 |
---|
240 | 245 | jr ra |
---|
241 | | - PTR_ADDIU a2, 1 |
---|
242 | | -#endif /* CONFIG_CPU_MIPSR6 */ |
---|
| 246 | +#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */ |
---|
243 | 247 | |
---|
244 | 248 | .Lfirst_fixup\@: |
---|
245 | 249 | /* unset_bytes already in a2 */ |
---|
246 | 250 | jr ra |
---|
247 | | - nop |
---|
248 | 251 | |
---|
249 | 252 | .Lfwd_fixup\@: |
---|
250 | 253 | /* |
---|
.. | .. |
---|
255 | 258 | andi a2, 0x3f |
---|
256 | 259 | LONG_L t0, THREAD_BUADDR(t0) |
---|
257 | 260 | LONG_ADDU a2, t1 |
---|
| 261 | + LONG_SUBU a2, t0 |
---|
258 | 262 | jr ra |
---|
259 | | - LONG_SUBU a2, t0 |
---|
260 | 263 | |
---|
261 | 264 | .Lpartial_fixup\@: |
---|
262 | 265 | /* |
---|
.. | .. |
---|
267 | 270 | andi a2, STORMASK |
---|
268 | 271 | LONG_L t0, THREAD_BUADDR(t0) |
---|
269 | 272 | LONG_ADDU a2, a0 |
---|
| 273 | + LONG_SUBU a2, t0 |
---|
270 | 274 | jr ra |
---|
271 | | - LONG_SUBU a2, t0 |
---|
272 | 275 | |
---|
273 | 276 | .Llast_fixup\@: |
---|
274 | 277 | /* unset_bytes already in a2 */ |
---|
275 | 278 | jr ra |
---|
276 | | - nop |
---|
277 | 279 | |
---|
278 | 280 | .Lsmall_fixup\@: |
---|
279 | 281 | /* |
---|
280 | 282 | * unset_bytes = end_addr - current_addr + 1 |
---|
281 | 283 | * a2 = t1 - a0 + 1 |
---|
282 | 284 | */ |
---|
283 | | - .set reorder |
---|
284 | 285 | PTR_SUBU a2, t1, a0 |
---|
285 | 286 | PTR_ADDIU a2, 1 |
---|
286 | 287 | jr ra |
---|
287 | | - .set noreorder |
---|
288 | 288 | |
---|
289 | 289 | .endm |
---|
290 | 290 | |
---|
.. | .. |
---|
298 | 298 | |
---|
299 | 299 | LEAF(memset) |
---|
300 | 300 | EXPORT_SYMBOL(memset) |
---|
| 301 | + move v0, a0 /* result */ |
---|
301 | 302 | beqz a1, 1f |
---|
302 | | - move v0, a0 /* result */ |
---|
303 | 303 | |
---|
304 | 304 | andi a1, 0xff /* spread fillword */ |
---|
305 | 305 | LONG_SLL t1, a1, 8 |
---|