라벨이 arm인 게시물 표시

ARM NEON asm memcpy 코드

이미지
ARM NEON 어셈블리 코드를 이용한 memcpy 이다. D0~D7 레지스터를 사용하여 src 포인터의 데이터를 dest 포인터로 복사한다.  ARM NEON 레지스터 < 출처 :  https://developer.arm.com/documentation/dht0002/a/Introducing-NEON/NEON-architecture-overview/NEON-registers > memcpy  코드 void __attribute__ ((noninline)) memcpy_neon(void *dest, const void *src, size_t n) {    // r0 : dest    // r1 : src    // r2 : n    asm(    "_copy_inner_loop:\n"    " pld [r1,#0xC00]\n" // cache preload    " vldm r1!,{d0-d7}\n" // load r1 point data do d0-d7 neno register, size is 64*8 bits = 64 bytes. and increase r1 pointer.    " vstm r0!,{d0-d7}\n" // store d0-d7 register to r0(dest) pointer, and increase r0 pointer    " subs r2,r2,#0x40\n" // decrease size of remains to copy    " bgt _copy_inner_loop\n" // continue loop until complete    ); } 빌드 옵션에 -mfpu=neon 을 ...