aboutsummaryrefslogtreecommitdiffstats
path: root/arch/avr32
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <bigeasy@breakpoint.cc>2009-07-26 08:57:54 -0400
committerHaavard Skinnemoen <haavard.skinnemoen@atmel.com>2009-07-27 06:37:27 -0400
commit505d62d073b528859b43bfb463a6ceaf3581469e (patch)
tree482d391e4f557223e6ea53de27f9c4da859fd156 /arch/avr32
parent4be3bd7849165e7efa6b0b35a23d6a3598d97465 (diff)
avr32/lib: fix unaligned memcpy()
memcpy(p, unaligned, 4..) returns (p + num_of_unaligned_by_copied) instead of p because p is not preserved in the unaligned case. Noticed by Herbert Xu's superior parameter recycling coding technique which let the md4 self-test fail on avr32. Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc> Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
Diffstat (limited to 'arch/avr32')
-rw-r--r--arch/avr32/lib/memcpy.S15
1 files changed, 12 insertions, 3 deletions
diff --git a/arch/avr32/lib/memcpy.S b/arch/avr32/lib/memcpy.S
index 0abb26142b64..93e74b6fcdb6 100644
--- a/arch/avr32/lib/memcpy.S
+++ b/arch/avr32/lib/memcpy.S
@@ -24,8 +24,8 @@ memcpy:
24 brne 1f 24 brne 1f
25 25
26 /* At this point, "from" is word-aligned */ 26 /* At this point, "from" is word-aligned */
272: sub r10, 4 272: mov r9, r12
28 mov r9, r12 285: sub r10, 4
29 brlt 4f 29 brlt 4f
30 30
313: ld.w r8, r11++ 313: ld.w r8, r11++
@@ -59,4 +59,13 @@ memcpy:
59 st.b r12++, r8 59 st.b r12++, r8
60 ld.ub r8, r11++ 60 ld.ub r8, r11++
61 st.b r12++, r8 61 st.b r12++, r8
62 rjmp 2b 62 mov r8, r12
63 add pc, pc, r9
64 sub r8, 1
65 nop
66 sub r8, 1
67 nop
68 sub r8, 1
69 nop
70 mov r9, r8
71 rjmp 5b