gcc Оптимизация - "перемешивание" инструкций
От: enji  
Дата: 11.11.14 07:06
Оценка:
Есть код
nand::IFlashOps::ReadPage rp;
rp.block = d3;
rp.page = 0;
rp.data = d_buf;
rp.dataLen = 2048;
rp.spare = rp.data+2048;
rp.spareLen = 63;
nandDriver1->readPage(rp);


При компиляции с флагом -O2 он превращается в
394           nandDriver1->readPage(rp);
08013ec6:   ldr r3, [pc, #168]      ; (0x8013f70 <nandTest()+604>)
390           rp.data = d_buf;
08013ec8:   ldr r7, [pc, #168]      ; (0x8013f74 <nandTest()+608>)
394           nandDriver1->readPage(rp);
08013eca:   ldr r0, [r3, #0]
388           rp.block = d3;
08013ecc:   ldr.w r1, [r8]
394           nandDriver1->readPage(rp);
08013ed0:   ldr r2, [r0, #0]
390           rp.data = d_buf;
08013ed2:   str r7, [sp, #124]      ; 0x7c
08013ed4:   movs r3, #0
08013ed6:   str r3, [sp, #132]      ; 0x84
392           rp.spare = rp.data+2048;
08013ed8:   add.w r7, r7, #2048     ; 0x800
08013edc:   str r3, [sp, #116]      ; 0x74
08013ede:   str r3, [sp, #120]      ; 0x78
391           rp.dataLen = 2048;
08013ee0:   mov.w r3, #2048 ; 0x800
392           rp.spare = rp.data+2048;
08013ee4:   str r7, [sp, #136]      ; 0x88
391           rp.dataLen = 2048;
08013ee6:   str r3, [sp, #128]      ; 0x80
393           rp.spareLen = 63;
08013ee8:   movs r3, #63    ; 0x3f
388           rp.block = d3;
08013eea:   str r1, [sp, #112]      ; 0x70
393           rp.spareLen = 63;
08013eec:   str r3, [sp, #140]      ; 0x8c
394           nandDriver1->readPage(rp);
08013eee:   add r1, sp, #112        ; 0x70
08013ef0:   ldr r3, [r2, #8]
08013ef2:   blx r3


Отлаживать неудобно — отладчик прыгает по строчкам, если не смотреть в ассемблер — неясно что сейчас делается.

Может быть есть отдельный флаг оптимизации, который отключает такое "перемешивание", не отключая остальные оптимизации?
Re: gcc Оптимизация - "перемешивание" инструкций
От: jazzer Россия Skype: enerjazzer
Дата: 11.11.14 07:27
Оценка:
Здравствуйте, enji, Вы писали:

E>Отлаживать неудобно — отладчик прыгает по строчкам, если не смотреть в ассемблер — неясно что сейчас делается.


Вообще, задавая подобные вопросы, неплохо бы указывать версию компилятора.
Посмотри, может, в твоей версии работает такой вот ключик:

-Og Optimize debugging experience.
-Og enables optimizations that do not interfere with debugging. It should be the optimization level of choice for the standard edit-compile-debug cycle, offering a reasonable level of optimization while maintaining fast compilation and a good debugging experience.

jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.