9 MOVW n+8(FP), R3 /* R3 is count */
10 MOVW R1, R4 /* R4 is to-pointer */
13 MOVW (R0), R0 /* abort if negative count */
15 MOVW s2+4(FP), R5 /* R5 is from-pointer */
16 ADDU R3,R5, R7 /* R7 is end from-pointer */
17 ADDU R3,R4, R6 /* R6 is end to-pointer */
20 * easiest test is copy backwards if
21 * destination string has higher mem address
28 * if not at least 4 chars,
29 * don't even mess around.
30 * 3 chars to guarantee any
31 * rounding up to a word
32 * boundary and 4 characters
33 * to get at least maybe one
40 * byte at a time to word align destination
52 * test if source is now word aligned
58 * turn R3 into to-end pointer-15
59 * copy 16 at a time while theres room.
60 * R6 is smaller than R7 --
61 * there are problems if R7 is 0.
80 * turn R3 into to-end pointer-3
81 * copy 4 at a time while theres room
95 * forward copy, unaligned
96 * turn R3 into to-end pointer-15
97 * copy 16 at a time while theres room.
98 * R6 is smaller than R7 --
99 * there are problems if R7 is 0.
123 * turn R3 into to-end pointer-3
124 * copy 4 at a time while theres room
139 * last loop, copy byte at a time
150 * whole thing repeated for backwards