2016-12-31 1 views
0

가능한 경우 엄지 손가락 32 비트 명령어를 강제로 생성 할 수 있습니까?강제로 gcc가 엄지 손가락 32 비트 명령어를 생성하는 방법?

int main(void) { 
8000280: b480  push {r7} 
8000282: b085  sub sp, #20 
8000284: af00  add r7, sp, #0 
    uint32_t a, b, c; 

    a = 1; 
8000286: 2301  movs r3, #1 
8000288: 60fb  str r3, [r7, #12] 
    b = 1; 
800028a: 2301  movs r3, #1 
800028c: 60bb  str r3, [r7, #8] 
    c = a+b; 
800028e: 68fa  ldr r2, [r7, #12] 
8000290: 68bb  ldr r3, [r7, #8] 
8000292: 4413  add r3, r2 
8000294: 607b  str r3, [r7, #4] 

    while (1) ; 
8000296: e7fe  b.n 8000296 <main+0x16> 

그러나 그들은 모두 엄지 손가락 16 비트입니다

예를 들어 내가있다. 테스트 목적으로 나는 엄지 손가락 32 비트 명령을 원한다.

+1

나는 엄지 손가락의 모든 부분이 16 비트 명령어를 선호한다고 생각 했습니까? –

+0

아마도. 그러나 가능한 경우 엄지 32 지침을 생성하고 싶습니다. (Cortex M4) – jsmith

+0

저는 여기 전문가가 아니며 ARM 프로세서도 소유하고 있지 않습니다. [찾을 수있는 지침] (http://stackoverflow.com/questions/10638130/what-is-the-arm -thumb-instruction-set)은 당신이 불가능한 일을 추구하고 있음을 나에게 꽤 분명하게 보여줍니다. 32 비트 명령어를 내보내려면 표준 ARM 명령어 세트 만 컴파일하면됩니다. 만족스럽지 않으면 * 왜 * 당신이 이것을하려고하는지 설명해보십시오. 아마도 누군가가 당신에게 더 나은 해결 방법을 줄 수 있습니다. –

답변

1

글쎄, 나는 당신이 직접 그렇게 할 수 있다고 생각하지 않지만 매우 간접적 인 방법으로 그것을 달성하는 아주 이상한 방법이있다. 불과 며칠 전 컴파일 과정이 단순한 것이 아니었던 프로젝트를 보았습니다 arm-none-eabi-gcc ... -c file.c -o file.o. 이 프로젝트는 arm-none-eabi-gcc을 호출하여 확장 어셈블리 목록을 생성했으며 나중에 수동으로 arm-none-eabi-as을 사용하여 개체 파일에 어셈블했습니다. 이 두 단계 사이에서 광범위한 지침 만 갖도록 어셈블리 목록을 수정할 수 있습니다. 대다수의 경우 모두 sed을 사용하여 지침에 접미사 .w을 추가 할 수 있습니다 (add r3, r2add.w r3, r2으로 변경). 곧). 빌드 합병증과 같은 수준의 가치가 있는지 여부는 당신에게 달린 것입니다 ...

관련 문제