| .. | .. |
|---|
| 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 |
|---|