2016-12-31 22 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

Я думал, что весь смысл Thumb заключается в том, что он предпочитает 16-битные инструкции? –

+0

Возможно. Однако, если возможно, я хотел бы генерировать указатели большого пальца. (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, r2 на add.w r3, r2 и скоро). Независимо от того, стоит ли такой уровень сложности сборки, зависит от вас ...