2012-12-10 3 views
1

Cortex-A8 프로세서의 Windows Embedded Compact 7 ARM 어셈블러와 함께 ARM 웹 사이트의 NEON memory copy with preload 구현을 사용하고 있습니다.ARM memcpy 및 정렬

; NEON memory copy with preload 
ALIGN 
LEAF_ENTRY NEONCopyPLD 
    PLD [r1, #0xC0] 
    VLDM r1!,{d0-d7} ;datatype misalignment 
    VSTM r0!,{d0-d7} 
    SUBS r2,r2,#0x40 
    MOV R0, #0 
    MOV PC, LR 
ENTRY_END 

size_t size = /* arbitrary */; 
size_t offset = 1; 
char* src = new char[ size + offset ]; 
char* dst = new char[ size ]; 

NEONCopyPLD(dst, src + offset, size); 

memcpy(dst, src + offset, size); /* works perfectly */ 

는 VLDM 명령에 대한 예상이된다

나는 비 단어 정렬 값 예를 들어

와 해당 기능을 제공 할 때이 데이터 형식 어긋남에 예외를 얻을 것을 알? 이 구현은 단어 맞춤 값으로 제한된다는 언급이 없습니다. 고칠 수 있습니까? 그렇다면 어떻게?

+1

해결 방법은 http://review.android.git.linaro.org/gitweb?p=platform/bionic.git;a=commitdiff;h=f1dd5e8c215b080bb2f4cf22 – auselen

답변

0

명시 적 정렬 요구 사항을 지정하지 않은 경우에도 요소 경계 (즉, 더블 워드 경계)에 데이터를 정렬해야합니다. 이 규칙에는 몇 가지 예외가 있지만, 그렇게할만한 이유가 없다면 그 규칙에 의존하지 않는 것이 가장 좋습니다.

자세한 내용은 Cortex-A8 기술 참조 설명서 (ARM DDI 0344J)를 참조하십시오.

+0

에서 확인하십시오. 알겠습니다. A3.2.1의 표 VLDM은 단어 정렬이 필요하다고 말합니다. 그러나 정렬되지 않은 액세스를 허용하는 다른 변종 (VLD1..4)이 있습니다. VLDM을 그 중 하나와 교체하고 memcpy에서 기대하는 동작을 얻을 수 있습니까? – PaulH

+0

참조 설명서의 "4.2.1 NEON 데이터 정렬"절에 따라 요소 정렬 요구 사항이 모든 지침에 적용될 것으로 기대됩니다. 나는 그것에 맹세하지 않을 것이다. – Michael