📄 memcpy.s
字号:
;;; memcpy.S#include <asm/linkage.h>#if defined(__H8300H__) .h8300h#endif#if defined(__H8300S__) .h8300s#endif .text.global SYMBOL_NAME(memcpy);;; void *memcpy(void *to, void *from, size_t n)SYMBOL_NAME_LABEL(memcpy) mov.l er2,er2 bne 1f rts 1: ;; address check bld #0,r0l bxor #0,r1l bcs 4f mov.l er4,@-sp mov.l er0,@-sp btst #0,r0l beq 1f ;; (aligned even) odd address mov.b @er1,r3l mov.b r3l,@er0 adds #1,er1 adds #1,er0 dec.l #1,er2 beq 3f1: ;; n < sizeof(unsigned long) check sub.l er4,er4 adds #4,er4 ; loop count check value cmp.l er4,er2 blo 2f ;; unsigned long copy1: mov.l @er1,er3 mov.l er3,@er0 adds #4,er0 adds #4,er1 subs #4,er2 cmp.l er4,er2 bcc 1b ;; rest2: mov.l er2,er2 beq 3f1: mov.b @er1,r3l mov.b r3l,@er0 adds #1,er1 adds #1,er0 dec.l #1,er2 bne 1b3: mov.l @sp+,er0 mov.l @sp+,er4 rts ;; odd <- even / even <- odd4: mov.l er4,er3 mov.l er2,er4 mov.l er5,er2 mov.l er1,er5 mov.l er6,er1 mov.l er0,er61: eepmov.w mov.w r4,r4 bne 1b dec.w #1,e4 bpl 1b mov.l er1,er6 mov.l er2,er5 mov.l er3,er4 rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -