之前有做avin優化,降低cpu的使用率時。有自己用arm彙編來實現一個內存拷貝的函數,主要是用來替換原來驅動程序中memcpy函數。現在將源碼貼在這裏,怕自己以後遺忘。呵呵。
1.知識要點:
arm彙編
arm體系架構下的apcs
vs2005的編譯器不支持內嵌彙編,但可以編譯arm彙編文件,生成obj文件。
2.源代碼:
因爲這個函數是爲avin驅動專門寫的,所以這個現在只支持長度是4字節倍數的拷貝。
函數原型:void _avin_memcpy(unsigned char* dst,unsigned char *src,unsigned int length);
;;benson_20110315 modify for avin T_fpga_fw
INCLUDE kxarm.h
TEXTAREA
LEAF_ENTRY _avin_memcpy
stmfd sp!, {r4 - r11}
and r3,r2,#31
mov r2,r2,LSR #5
cmp r2,#0
beq %F2
1
ldmia r1!, {r4 - r11}
stmia r0!, {r4 - r11}
subs r2, r2, #1
bne %B1
2
add pc, pc, r3
b MEMCPY_END ;0*4
b MEMCPY4 ;1*4
b MEMCPY8 ;2*4
b MEMCPY12 ;3*4
b MEMCPY16 ;4*4
b MEMCPY20 ;5*4
b MEMCPY24 ;6*4
b MEMCPY28 ;7*4
MEMCPY28
ldmia r1!,{r4 - r10}
stmia r0!,{r4 - r10}
b MEMCPY_END
MEMCPY24
ldmia r1!,{r4 - r9}
stmia r0!,{r4 - r9}
b MEMCPY_END
MEMCPY20
ldmia r1!,{r4 - r8}
stmia r0!,{r4 - r8}
b MEMCPY_END
MEMCPY16
ldmia r1!,{r4 - r7}
stmia r0!,{r4 - r7}
b MEMCPY_END
MEMCPY12
ldmia r1!,{r4 - r6}
stmia r0!,{r4 - r6}
b MEMCPY_END
MEMCPY8
ldmia r1!,{r4 - r5}
stmia r0!,{r4 - r5}
b MEMCPY_END
MEMCPY4
ldmia r1!,{r4}
stmia r0!,{r4}
b MEMCPY_END
MEMCPY_END
ldmfd sp!, {r4 - r11}
IF Interworking :LOR: Thumbing
bx lr ; Return with Thumb mode
ELSE
mov pc, lr ; Return
ENDIF
END