diff options
author | Yi Li <yi.li@analog.com> | 2007-12-21 08:12:21 -0500 |
---|---|---|
committer | Bryan Wu <bryan.wu@analog.com> | 2007-12-21 08:12:21 -0500 |
commit | c50e19f49830fb651b4b702ad2c3abcdf110b576 (patch) | |
tree | 5ebce02ba1dd8d394982d83b9561493f9b0542a3 /arch/blackfin/lib | |
parent | a5bb85dfffd38714d83cf7798886462d7314b90a (diff) |
[Blackfin] arch: fix bug - make memcpy return the dest addr.
The memcpy() function returns the src pointer instead of the dst pointer.
This patch fix this bug.
Signed-off-by: Yi Li <yi.li@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
Diffstat (limited to 'arch/blackfin/lib')
-rw-r--r-- | arch/blackfin/lib/memcpy.S | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/arch/blackfin/lib/memcpy.S b/arch/blackfin/lib/memcpy.S index 2e6336492b4b..e654a18a0754 100644 --- a/arch/blackfin/lib/memcpy.S +++ b/arch/blackfin/lib/memcpy.S | |||
@@ -70,8 +70,8 @@ ENTRY(_memcpy) | |||
70 | /* Check for aligned data.*/ | 70 | /* Check for aligned data.*/ |
71 | 71 | ||
72 | R3 = R1 | R0; | 72 | R3 = R1 | R0; |
73 | R0 = 0x3; | 73 | R1 = 0x3; |
74 | R3 = R3 & R0; | 74 | R3 = R3 & R1; |
75 | CC = R3; /* low bits set on either address? */ | 75 | CC = R3; /* low bits set on either address? */ |
76 | IF CC JUMP .Lnot_aligned; | 76 | IF CC JUMP .Lnot_aligned; |
77 | 77 | ||
@@ -83,7 +83,6 @@ ENTRY(_memcpy) | |||
83 | /* less than eight bytes... */ | 83 | /* less than eight bytes... */ |
84 | P2 = R2; | 84 | P2 = R2; |
85 | LSETUP(.Lthree_start, .Lthree_end) LC0=P2; | 85 | LSETUP(.Lthree_start, .Lthree_end) LC0=P2; |
86 | R0 = R1; /* setup src address for return */ | ||
87 | .Lthree_start: | 86 | .Lthree_start: |
88 | R3 = B[P1++] (X); | 87 | R3 = B[P1++] (X); |
89 | .Lthree_end: | 88 | .Lthree_end: |
@@ -95,7 +94,6 @@ ENTRY(_memcpy) | |||
95 | /* There's at least eight bytes to copy. */ | 94 | /* There's at least eight bytes to copy. */ |
96 | P2 += -1; /* because we unroll one iteration */ | 95 | P2 += -1; /* because we unroll one iteration */ |
97 | LSETUP(.Lword_loops, .Lword_loope) LC0=P2; | 96 | LSETUP(.Lword_loops, .Lword_loope) LC0=P2; |
98 | R0 = R1; | ||
99 | I1 = P1; | 97 | I1 = P1; |
100 | R3 = [I1++]; | 98 | R3 = [I1++]; |
101 | #if ANOMALY_05000202 | 99 | #if ANOMALY_05000202 |
@@ -120,7 +118,6 @@ ENTRY(_memcpy) | |||
120 | .Lnot_aligned: | 118 | .Lnot_aligned: |
121 | /* From here, we're copying byte-by-byte. */ | 119 | /* From here, we're copying byte-by-byte. */ |
122 | LSETUP (.Lbyte_start, .Lbyte_end) LC0=P2; | 120 | LSETUP (.Lbyte_start, .Lbyte_end) LC0=P2; |
123 | R0 = R1; /* Save src address for return */ | ||
124 | .Lbyte_start: | 121 | .Lbyte_start: |
125 | R1 = B[P1++] (X); | 122 | R1 = B[P1++] (X); |
126 | .Lbyte_end: | 123 | .Lbyte_end: |
@@ -135,7 +132,6 @@ ENTRY(_memcpy) | |||
135 | * Don't bother to work out alignment for | 132 | * Don't bother to work out alignment for |
136 | * the reverse case. | 133 | * the reverse case. |
137 | */ | 134 | */ |
138 | R0 = R1; /* save src for later. */ | ||
139 | P0 = P0 + P2; | 135 | P0 = P0 + P2; |
140 | P0 += -1; | 136 | P0 += -1; |
141 | P1 = P1 + P2; | 137 | P1 = P1 + P2; |