도와주세요!!
부트로드에서 arch_s3c2440startstart.S 파일내에서
중간쯤에 보시면 아래와 같이 CPWAIT 매크로를 아래 코드에 중간 중간에 사용하고 있는 부분이 있습니다.
//-------------------------------------------
// Active I-Chache
//-------------------------------------------
// I-Cache 비활성화
mcr p15, 0, r1, c7, c5, 0
CPWAIT
// I-Cache 활성화
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #0x1000
mcr p15, 0, r0, c1, c0, 0
CPWAIT
그리고, 57째 줄에 보시면 아래와 같은 매크로 정의가 있습니다.
//------------------------------------------------------------------------------------------------
//
// 캐쉬에 관련된 코프로세스 명령을 적용할때의 지연
//
//------------------------------------------------------------------------------------------------
.macro CPWAIT
mrc p15, 0, r0, c2, c0, 0
mov r0, r0
sub pc, pc, #4
.endm
이와 같이 매크로가 정의되어 있었습니다.
제가 질문을 드리고자 하는 내용은 크게 2가지 입니다.
첫째는 왜 캐쉬에 관련된 코프로세스 명령을 적용할때의 지연을 하는데 하필 mrc p15, 0, r0, c2, c0, 0 을 사용했는지가
첫번째 의문입니다. 다른 방식으로 nop 같은 것을 여러번 사용해도 될것 같은데, 왜 이런식으로 했는지 의문이 갔습니다.
둘째는 sub pc, pc, #4 를 왜 실행하는가 입니다. 여기서 프로그램 카운터를 4바이트 만큼 빼야 되는 이유가 정확히 왜 그렇게
매크로가 종료되는 부분에서 pc 의 위치가 어떤 영향을 주는지 의문이 가서 이렇게 질문을 드립니다.
여기에 대해 자세히 알려주시면 정말 감사하겠습니다.