/[avr-libc]/avr-libc/libc/string/memmove.S
ViewVC logotype

Diff of /avr-libc/libc/string/memmove.S

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.5 by joerg_wunsch, Tue Sep 13 13:29:54 2005 UTC revision 1.6 by aesok, Sun Oct 30 19:36:53 2005 UTC
# Line 26  Line 26 
26    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27    POSSIBILITY OF SUCH DAMAGE. */    POSSIBILITY OF SUCH DAMAGE. */
28    
29    /* $Id$ */
30    
31  #include "macros.inc"  #include "macros.inc"
32    
33  #define dest_hi r25  #define dest_hi r25
# Line 55  _U(memmove): Line 57  _U(memmove):
57  ; otherwise memcpy will do the right thing  ; otherwise memcpy will do the right thing
58          cp      src_lo, dest_lo          cp      src_lo, dest_lo
59          cpc     src_hi, dest_hi          cpc     src_hi, dest_hi
60          brcc    .memmove_fwd          brcc    .L_memmove_fwd
61          LOAD_Z(src_lo, src_hi)          X_movw  ZL, src_lo
62          LOAD_X(dest_lo, dest_hi)          X_movw  XL, dest_lo
63          add     ZL, len_lo          add     ZL, len_lo
64          adc     ZH, len_hi          adc     ZH, len_hi
65          add     XL, len_lo          add     XL, len_lo
66          adc     XH, len_hi          adc     XH, len_hi
67          rjmp    .memmove_start          rjmp    .L_memmove_start
68  .memmove_loop:  .L_memmove_loop:
69          ld      __tmp_reg__, -Z          ld      __tmp_reg__, -Z
70          st      -X, __tmp_reg__          st      -X, __tmp_reg__
71  .memmove_start:  .L_memmove_start:
72          subi    len_lo, lo8(1)          subi    len_lo, lo8(1)
73          sbci    len_hi, hi8(1)          sbci    len_hi, hi8(1)
74          brcc    .memmove_loop          brcc    .L_memmove_loop
75  ; return dest (unchanged)  ; return dest (unchanged)
76          ret          ret
77  .memmove_fwd:  .L_memmove_fwd:
78          XJMP    _U(memcpy)          XJMP    _U(memcpy)
79  .memmove_end:  .L_memmove_end:
80          .size   _U(memmove), .memmove_end - _U(memmove)          .size   _U(memmove), .L_memmove_end - _U(memmove)
81    
82  #endif /* not __DOXYGEN__ */  #endif /* not __DOXYGEN__ */

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26