diff options
Diffstat (limited to 'arch/tile/lib/memcpy_32.S')
-rw-r--r-- | arch/tile/lib/memcpy_32.S | 20 |
1 files changed, 4 insertions, 16 deletions
diff --git a/arch/tile/lib/memcpy_32.S b/arch/tile/lib/memcpy_32.S index f92984bf60ec..30c3b7ebb55d 100644 --- a/arch/tile/lib/memcpy_32.S +++ b/arch/tile/lib/memcpy_32.S | |||
@@ -17,10 +17,6 @@ | |||
17 | 17 | ||
18 | #include <arch/chip.h> | 18 | #include <arch/chip.h> |
19 | 19 | ||
20 | #if CHIP_HAS_WH64() || defined(MEMCPY_TEST_WH64) | ||
21 | #define MEMCPY_USE_WH64 | ||
22 | #endif | ||
23 | |||
24 | 20 | ||
25 | #include <linux/linkage.h> | 21 | #include <linux/linkage.h> |
26 | 22 | ||
@@ -160,7 +156,7 @@ EX: { sw r0, r3; addi r0, r0, 4; addi r2, r2, -4 } | |||
160 | 156 | ||
161 | { addi r3, r1, 60; andi r9, r9, -64 } | 157 | { addi r3, r1, 60; andi r9, r9, -64 } |
162 | 158 | ||
163 | #ifdef MEMCPY_USE_WH64 | 159 | #if CHIP_HAS_WH64() |
164 | /* No need to prefetch dst, we'll just do the wh64 | 160 | /* No need to prefetch dst, we'll just do the wh64 |
165 | * right before we copy a line. | 161 | * right before we copy a line. |
166 | */ | 162 | */ |
@@ -173,7 +169,7 @@ EX: { lw r6, r3; addi r3, r3, 64 } | |||
173 | /* Intentionally stall for a few cycles to leave L2 cache alone. */ | 169 | /* Intentionally stall for a few cycles to leave L2 cache alone. */ |
174 | { bnzt zero, . } | 170 | { bnzt zero, . } |
175 | EX: { lw r7, r3; addi r3, r3, 64 } | 171 | EX: { lw r7, r3; addi r3, r3, 64 } |
176 | #ifndef MEMCPY_USE_WH64 | 172 | #if !CHIP_HAS_WH64() |
177 | /* Prefetch the dest */ | 173 | /* Prefetch the dest */ |
178 | /* Intentionally stall for a few cycles to leave L2 cache alone. */ | 174 | /* Intentionally stall for a few cycles to leave L2 cache alone. */ |
179 | { bnzt zero, . } | 175 | { bnzt zero, . } |
@@ -288,15 +284,7 @@ EX: { lw r7, r3; addi r3, r3, 64 } | |||
288 | /* Fill second L1D line. */ | 284 | /* Fill second L1D line. */ |
289 | EX: { lw r17, r17; addi r1, r1, 48; mvz r3, r13, r1 } /* r17 = WORD_4 */ | 285 | EX: { lw r17, r17; addi r1, r1, 48; mvz r3, r13, r1 } /* r17 = WORD_4 */ |
290 | 286 | ||
291 | #ifdef MEMCPY_TEST_WH64 | 287 | #if CHIP_HAS_WH64() |
292 | /* Issue a fake wh64 that clobbers the destination words | ||
293 | * with random garbage, for testing. | ||
294 | */ | ||
295 | { movei r19, 64; crc32_32 r10, r2, r9 } | ||
296 | .Lwh64_test_loop: | ||
297 | EX: { sw r9, r10; addi r9, r9, 4; addi r19, r19, -4 } | ||
298 | { bnzt r19, .Lwh64_test_loop; crc32_32 r10, r10, r19 } | ||
299 | #elif CHIP_HAS_WH64() | ||
300 | /* Prepare destination line for writing. */ | 288 | /* Prepare destination line for writing. */ |
301 | EX: { wh64 r9; addi r9, r9, 64 } | 289 | EX: { wh64 r9; addi r9, r9, 64 } |
302 | #else | 290 | #else |
@@ -340,7 +328,7 @@ EX: { lw r18, r1; addi r1, r1, 4 } /* r18 = WORD_8 */ | |||
340 | EX: { sw r0, r16; addi r0, r0, 4; add r16, r0, r2 } /* store(WORD_0) */ | 328 | EX: { sw r0, r16; addi r0, r0, 4; add r16, r0, r2 } /* store(WORD_0) */ |
341 | EX: { sw r0, r13; addi r0, r0, 4; andi r16, r16, -64 } /* store(WORD_1) */ | 329 | EX: { sw r0, r13; addi r0, r0, 4; andi r16, r16, -64 } /* store(WORD_1) */ |
342 | EX: { sw r0, r14; addi r0, r0, 4; slt_u r16, r9, r16 } /* store(WORD_2) */ | 330 | EX: { sw r0, r14; addi r0, r0, 4; slt_u r16, r9, r16 } /* store(WORD_2) */ |
343 | #ifdef MEMCPY_USE_WH64 | 331 | #if CHIP_HAS_WH64() |
344 | EX: { sw r0, r15; addi r0, r0, 4; addi r13, sp, -64 } /* store(WORD_3) */ | 332 | EX: { sw r0, r15; addi r0, r0, 4; addi r13, sp, -64 } /* store(WORD_3) */ |
345 | #else | 333 | #else |
346 | /* Back up the r9 to a cache line we are already storing to | 334 | /* Back up the r9 to a cache line we are already storing to |