2 * arch/alpha/lib/memmove.S
4 * Barely optimized memmove routine for Alpha EV5.
6 * This is hand-massaged output from the original memcpy.c. We defer to
7 * memcpy whenever possible; the backwards copy loops are not unrolled.
23 br $31, memmove !samegp
37 cmpule $4,$17,$1 /* dest + n <= src */
38 cmpule $5,$16,$2 /* dest >= src + n */
45 and $2,7,$2 /* Test for src/dest co-alignment. */
48 bne $3,$memmove_up /* dest < src */
53 beq $1,$skip_aligned_byte_loop_head_dn
55 $aligned_byte_loop_head_dn:
72 bne $6,$aligned_byte_loop_head_dn
74 $skip_aligned_byte_loop_head_dn:
76 blt $18,$skip_aligned_word_loop_dn
78 $aligned_word_loop_dn:
87 bge $18,$aligned_word_loop_dn
89 $skip_aligned_word_loop_dn:
91 bgt $18,$byte_loop_tail_dn
115 bgt $18,$byte_loop_tail_dn
121 bne $2,$misaligned_up
122 beq $1,$skip_aligned_byte_loop_head_up
124 $aligned_byte_loop_head_up:
141 bne $6,$aligned_byte_loop_head_up
143 $skip_aligned_byte_loop_head_up:
145 blt $18,$skip_aligned_word_loop_up
147 $aligned_word_loop_up:
156 bge $18,$aligned_word_loop_up
158 $skip_aligned_word_loop_up:
160 bgt $18,$byte_loop_tail_up
185 bgt $18,$byte_loop_tail_up