/[avr-libc]/avr-libc/libc/pmstring/memcpy_P.S
ViewVC logotype

Diff of /avr-libc/libc/pmstring/memcpy_P.S

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

revision 1.4 by joerg_wunsch, Tue Sep 13 13:29:54 2005 UTC revision 1.5 by aesok, Tue Nov 8 16:19:51 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 49  Line 51 
51          .global _U(memcpy_P)          .global _U(memcpy_P)
52          .type   _U(memcpy_P), @function          .type   _U(memcpy_P), @function
53  _U(memcpy_P):  _U(memcpy_P):
54          LOAD_Z(src_lo, src_hi)          X_movw  ZL, src_lo
55          LOAD_X(dest_lo, dest_hi)          X_movw  XL, dest_lo
56  #if OPTIMIZE_SPEED  #if OPTIMIZE_SPEED
57  ; 17 words, (14 + len * 9 - (len & 1)) cycles  ; 17 words, (14 + len * 9 - (len & 1)) cycles
58          sbrs    len_lo, 0          sbrs    len_lo, 0
59          rjmp    .memcpy_P_start          rjmp    .L_memcpy_P_start
60          rjmp    .memcpy_P_odd          rjmp    .L_memcpy_P_odd
61  .memcpy_P_loop:  .L_memcpy_P_loop:
62          LPM_R0_ZP          LPM_R0_ZP
63          st      X+, r0          st      X+, r0
64  .memcpy_P_odd:  .L_memcpy_P_odd:
65          LPM_R0_ZP          LPM_R0_ZP
66          st      X+, r0          st      X+, r0
67  .memcpy_P_start:  .L_memcpy_P_start:
68          subi    len_lo, lo8(2)          subi    len_lo, lo8(2)
69          sbci    len_hi, hi8(2)          sbci    len_hi, hi8(2)
70  #else  #else
71  ; 12 words, (13 + len * 11) cycles  ; 12 words, (13 + len * 11) cycles
72          rjmp    .memcpy_P_start          rjmp    .L_memcpy_P_start
73  .memcpy_P_loop:  .L_memcpy_P_loop:
74          LPM_R0_ZP          LPM_R0_ZP
75          st      X+, r0          st      X+, r0
76  .memcpy_P_start:  .L_memcpy_P_start:
77          subi    len_lo, lo8(1)          subi    len_lo, lo8(1)
78          sbci    len_hi, hi8(1)          sbci    len_hi, hi8(1)
79  #endif  #endif
80          brcc    .memcpy_P_loop          brcc    .L_memcpy_P_loop
81  ; return dest (unchanged)  ; return dest (unchanged)
82          ret          ret
83  .memcpy_P_end:  .L_memcpy_P_end:
84          .size   _U(memcpy_P), .memcpy_P_end - _U(memcpy_P)          .size   _U(memcpy_P), .L_memcpy_P_end - _U(memcpy_P)
85    
86  #endif /* not __DOXYGEN__ */  #endif /* not __DOXYGEN__ */

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

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