diff options
Diffstat (limited to 'arch/blackfin/lib/memmove.S')
-rw-r--r-- | arch/blackfin/lib/memmove.S | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/arch/blackfin/lib/memmove.S b/arch/blackfin/lib/memmove.S index c371585e9dbd..6ee6e206e77c 100644 --- a/arch/blackfin/lib/memmove.S +++ b/arch/blackfin/lib/memmove.S | |||
@@ -69,8 +69,17 @@ ENTRY(_memmove) | |||
69 | P2 = R2; /* set remainder */ | 69 | P2 = R2; /* set remainder */ |
70 | R1 = [I0++]; | 70 | R1 = [I0++]; |
71 | 71 | ||
72 | LSETUP (.Lquad_loop, .Lquad_loop) LC0=P1; | 72 | LSETUP (.Lquad_loops, .Lquad_loope) LC0=P1; |
73 | .Lquad_loop: MNOP || [P0++] = R1 || R1 = [I0++]; | 73 | #ifdef ANOMALY_05000202 |
74 | .Lquad_loops: | ||
75 | [P0++] = R1; | ||
76 | .Lquad_loope: | ||
77 | R1 = [I0++]; | ||
78 | #else | ||
79 | .Lquad_loops: | ||
80 | .Lquad_loope: | ||
81 | MNOP || [P0++] = R1 || R1 = [I0++]; | ||
82 | #endif | ||
74 | [P0++] = R1; | 83 | [P0++] = R1; |
75 | 84 | ||
76 | CC = P2 == 0; /* any remaining bytes? */ | 85 | CC = P2 == 0; /* any remaining bytes? */ |
@@ -93,6 +102,10 @@ ENTRY(_memmove) | |||
93 | R1 = B[P3--] (Z); | 102 | R1 = B[P3--] (Z); |
94 | CC = P2 == 0; | 103 | CC = P2 == 0; |
95 | IF CC JUMP .Lno_loop; | 104 | IF CC JUMP .Lno_loop; |
105 | #ifdef ANOMALY_05000245 | ||
106 | NOP; | ||
107 | NOP; | ||
108 | #endif | ||
96 | LSETUP (.Lol_s, .Lol_e) LC0 = P2; | 109 | LSETUP (.Lol_s, .Lol_e) LC0 = P2; |
97 | .Lol_s: B[P0--] = R1; | 110 | .Lol_s: B[P0--] = R1; |
98 | .Lol_e: R1 = B[P3--] (Z); | 111 | .Lol_e: R1 = B[P3--] (Z); |