📄 memcpy.s
字号:
/* * Copyright (C) 2004-2006 Atmel Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ /* * void *memcpy(void *to, const void *from, unsigned long n) * * This implementation does word-aligned loads in the main loop, * possibly sacrificing alignment of stores. * * Hopefully, in most cases, both "to" and "from" will be * word-aligned to begin with. */ .text .global memcpy .type memcpy, @functionmemcpy: mov r9, r11 andl r9, 3, COH brne 1f /* At this point, "from" is word-aligned */2: sub r10, 4 mov r9, r12 brlt 4f3: ld.w r8, r11++ sub r10, 4 st.w r12++, r8 brge 3b4: neg r10 reteq r9 /* Handle unaligned count */ lsl r10, 2 add pc, pc, r10 ld.ub r8, r11++ st.b r12++, r8 ld.ub r8, r11++ st.b r12++, r8 ld.ub r8, r11++ st.b r12++, r8 retal r9 /* Handle unaligned "from" pointer */1: sub r10, 4 brlt 4b add r10, r9 lsl r9, 2 add pc, pc, r9 ld.ub r8, r11++ st.b r12++, r8 ld.ub r8, r11++ st.b r12++, r8 ld.ub r8, r11++ st.b r12++, r8 rjmp 2b
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -