📄 memcpy.s
字号:
//****************************************************************************//// MEMCPY.S - Routine to implement the C library function "memcpy".//// Copyright (c) 1999,2000,2001 Cirrus Logic, Inc.////****************************************************************************#include "../../asmdefs.h"//****************************************************************************//// Read-only code area.////**************************************************************************** _TEXT_//****************************************************************************//// Standard C library function "memcpy".////**************************************************************************** _EXPORT_ __rt_memcpy__rt_memcpy _LABEL_ _EXPORT_ __rt_memcpy_w__rt_memcpy_w _LABEL_ _EXPORT_ memcpymemcpy _LABEL_ stmdb r13!, {r0, r14} subs r2, r2, _CONST_ 4 blt Up_TrailingBytes ands r12, r0, _CONST_ 3 bne Up_AlignDst ands r12, r1, _CONST_ 3 bne Up_SrcUnalignedUp_SrcDstAligned _LABEL_ subs r2, r2, _CONST_ 12-4 blt Up_TrailingWords subs r2, r2, _CONST_ 32-12 blt memcpy1 stmfd r13!, {r4}memcpy0 _LABEL_ ldmia r1!, {r3, r4, r12, r14} stmia r0!, {r3, r4, r12, r14} ldmia r1!, {r3, r4, r12, r14} stmia r0!, {r3, r4, r12, r14} subs r2, r2, _CONST_ 32 bge memcpy0 cmn r2, _CONST_ 16 ldmgeia r1!, {r3, r4, r12, r14} stmgeia r0!, {r3, r4, r12, r14} subge r2, r2, _CONST_ 16 ldmfd r13!, {r4}memcpy1 _LABEL_ adds r2, r2, _CONST_ 32-12memcpy2 _LABEL_ ldmgeia r1!, {r3, r12, r14} stmgeia r0!, {r3, r12, r14} subges r2, r2, _CONST_ 12 bge memcpy2Up_TrailingWords _LABEL_ adds r2, r2, _CONST_ 12-4 blt Up_TrailingBytes subs r2, r2, _CONST_ 4 ldrlt r3, [r1], _CONST_ 4 strlt r3, [r0], _CONST_ 4 ldmgeia r1!, {r3, r12} stmgeia r0!, {r3, r12} subge r2, r2, _CONST_ 4Up_TrailingBytes _LABEL_ adds r2, r2, _CONST_ 4 ldmeqia r13!, {r0, pc} cmp r2, _CONST_ 2 ldrb r3, [r1], _CONST_ 1 strb r3, [r0], _CONST_ 1 ldrgeb r3, [r1], _CONST_ 1 strgeb r3, [r0], _CONST_ 1 ldrgtb r3, [r1], _CONST_ 1 strgtb r3, [r0], _CONST_ 1 ldmia r13!, {r0, pc}Up_AlignDst _LABEL_ rsb r12, r12, _CONST_ 4 cmp r12, _CONST_ 2 ldrb r3, [r1], _CONST_ 1 strb r3, [r0], _CONST_ 1 ldrgeb r3, [r1], _CONST_ 1 strgeb r3, [r0], _CONST_ 1 ldrgtb r3, [r1], _CONST_ 1 strgtb r3, [r0], _CONST_ 1 subs r2, r2, r12 blt Up_TrailingBytes ands r12, r1, _CONST_ 3 beq Up_SrcDstAlignedUp_SrcUnaligned _LABEL_ bic r1, r1, _CONST_ 3 ldr r14, [r1], _CONST_ 4 cmp r12, _CONST_ 2 bgt Up_OneByte beq Up_TwoBytesUp_ThreeBytes _LABEL_ cmp r2, _CONST_ 16-4 blt memcpy4 sub r2, r2, _CONST_ 16-4 stmfd r13!, {r4, r5}memcpy3 _LABEL_ mov r3, r14, lsr _CONST_ 8 ldmia r1!, {r4, r5, r12, r14} orr r3, r3, r4, lsl _CONST_ 24 mov r4, r4, lsr _CONST_ 8 orr r4, r4, r5, lsl _CONST_ 24 mov r5, r5, lsr _CONST_ 8 orr r5, r5, r12, lsl _CONST_ 24 mov r12, r12, lsr _CONST_ 8 orr r12, r12, r14, lsl _CONST_ 24 stmia r0!, {r3, r4, r5, r12} subs r2, r2, _CONST_ 16 bge memcpy3 ldmfd r13!, {r4, r5} adds r2, r2, _CONST_ 16-4 blt memcpy5memcpy4 _LABEL_ mov r12, r14, lsr _CONST_ 8 ldr r14, [r1], _CONST_ 4 orr r12, r12, r14, lsl _CONST_ 24 str r12, [r0], _CONST_ 4 subs r2, r2, _CONST_ 4 bge memcpy4memcpy5 _LABEL_ sub r1, r1, _CONST_ 3 b Up_TrailingBytesUp_TwoBytes _LABEL_ cmp r2, _CONST_ 16-4 blt memcpy7 sub r2, r2, _CONST_ 16-4 stmfd r13!, {r4, r5}memcpy6 _LABEL_ mov r3, r14, lsr _CONST_ 16 ldmia r1!, {r4, r5, r12, r14} orr r3, r3, r4, lsl _CONST_ 16 mov r4, r4, lsr _CONST_ 16 orr r4, r4, r5, lsl _CONST_ 16 mov r5, r5, lsr _CONST_ 16 orr r5, r5, r12, lsl _CONST_ 16 mov r12, r12, lsr _CONST_ 16 orr r12, r12, r14, lsl _CONST_ 16 stmia r0!, {r3, r4, r5, r12} subs r2, r2, _CONST_ 16 bge memcpy6 ldmfd r13!, {r4, r5} adds r2, r2, _CONST_ 16-4 blt memcpy8memcpy7 _LABEL_ mov r12, r14, lsr _CONST_ 16 ldr r14, [r1], _CONST_ 4 orr r12, r12, r14, lsl _CONST_ 16 str r12, [r0], _CONST_ 4 subs r2, r2, _CONST_ 4 bge memcpy7memcpy8 _LABEL_ sub r1, r1, _CONST_ 2 b Up_TrailingBytesUp_OneByte _LABEL_ cmp r2, _CONST_ 16-4 blt memcpy10 sub r2, r2, _CONST_ 16-4 stmfd r13!, {r4, r5}memcpy9 _LABEL_ mov r3, r14, lsr _CONST_ 24 ldmia r1!, {r4, r5, r12, r14} orr r3, r3, r4, lsl _CONST_ 8 mov r4, r4, lsr _CONST_ 24 orr r4, r4, r5, lsl _CONST_ 8 mov r5, r5, lsr _CONST_ 24 orr r5, r5, r12, lsl _CONST_ 8 mov r12, r12, lsr _CONST_ 24 orr r12, r12, r14, lsl _CONST_ 8 stmia r0!, {r3, r4, r5, r12} subs r2, r2, _CONST_ 16 bge memcpy9 ldmfd r13!, {r4, r5} adds r2, r2, _CONST_ 16-4 blt memcpy11memcpy10 _LABEL_ mov r12, r14, lsr _CONST_ 24 ldr r14, [r1], _CONST_ 4 orr r12, r12, r14, lsl _CONST_ 8 str r12, [r0], _CONST_ 4 subs r2, r2, _CONST_ 4 bge memcpy10memcpy11 _LABEL_ sub r1, r1, _CONST_ 1 b Up_TrailingBytes _END_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -