GCC 컴파일에서 instruction cost를 어떻게 할당해야 할 지 모르겠습니다.
안녕하세요, 작업을 하다가 도저히 모르겠어서 질문하러온 뉴비입니다.
지금 제가 하고있는 일은 Android Kernel(Kitkat 4.4.2_r2)을 빌드할 때 사용하는 prebuilt gcc를 Linaro gcc로 대체하는 작업입니다. Linaro gcc를 모르신다면 단순히 customized gcc로 생각하시면 됩니다.
여기서 왜 customized라 하냐면, 사용하는 기기의 프로세서에 해당하는 ARM processor의 instruction cost를 반영하여 gcc를 수정한 뒤 compile한 결과물을 넣을 것이기 때문입니다.
이 때 사용기기는 Nexus 7, 프로세서는 ARM Cortex-A15기반 APQ8064 입니다.
아래 주소는 gcc에서 instruction cost를 반영하는 방법에 대한 설명입니다.
http://www.delorie.com/gnu/docs/gcc/gccint_140.html
아래 주소는 ARM Cortex-A9의 instruction cost입니다. (Cortex-A15에 대한 cost는 공개되지 않았기 때문에 가장 유사한 A9의 정보를 사용합니다)
Appendix B를 참고하시면 됩니다.
http://infocenter.arm.com/help/topic/com.arm.doc.ddi0388i/DDI0388I_cortex_a9_r4p1_trm.pdf
여기서 문제가 생겼습니다. 표시된 instruction cost에 따르면 MOV, AND, QADD 등 실제 사용하는 instruction에 대한 cost가 표기되어 있는 반면에 gcc에서 instruction cost를 서술하는 방법은 CONST_COSTS (x, code, outer_code), REGISTER_MOVE_COST (mode, from, to) 와 같이 processor에서 일어나는 각 operation에 대한 cost를 설정하게끔 되어있습니다.
이럴 경우 어떻게 cost를 반영해야 할 지 막막합니다. 각 instruction에서 행해지는 operation을 계산해서 설정해줘야 하는걸까요?
댓글 달기