Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

GCC MIPS как да изключа една оптимизация...
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=10198
Страница 1 от 1

Автор:  CALL-151 [ Сря Юни 06, 2012 4:59 pm ]
Заглавие:  GCC MIPS как да изключа една оптимизация...

ползвам компилатор GCC za MIPS на codesourcery от последните версии.
При -O1 се включва някаква оптиомизация която рпави следното:
ако някоя константа има малка стойност обръщението към нея се замества с инструкция с непосредствен операнд, при това самата константа си остава записана в паметта там кадато и е мястото.
Знае ли някой как се казва тази оптимизация и как мога да я изключа?

Автор:  anrieff [ Сря Юни 06, 2012 10:31 pm ]
Заглавие:  Re: GCC MIPS как да изключа една оптимизация...

Пробвай -fno-forward-propagate -fno-tree-forwprop -fno-tree-copy-prop
изобщо, де що опция, която прави propagation можеш да пробваш да я махнеш.

това е само изстрел в тъмното де - тая оптимизация е супер базова, щом я има още на -O1. Интересно ми е какво точно правиш, че се налагат такива ограничения?

Автор:  miro_atc [ Сря Юни 06, 2012 11:21 pm ]
Заглавие:  Re: GCC MIPS как да изключа една оптимизация...

-O0 ?

Автор:  CALL-151 [ Чет Юни 07, 2012 11:24 am ]
Заглавие:  Re: GCC MIPS как да изключа една оптимизация...

нищо нестава! :(
какви ли не комбинации не съм пробвал!
накарах компилатора да листне кои оптимизации са включени при О1 и го сложих ръчно всичките!
кода стана по-голям отколкото при О0!?
явно степента на оптиомизация с -Ox не е просто съвкупност от отделни оптиимизации (което си го и пише в документацията).

Има и друг странен ефект който можеби има нещо общо със същата оптомизация. Имам една локална инициализирана структира с доста голям размер (няколко К). Стария компилатор както си му е реда и има копие в кодовата памет и при влизане във функцията я копира с memcpy(). Новия компилатор обаче решава да инициализира всеки елемент по отделнои с код! т.е. слага в регистър стойността и го записва на даден адрес. Даже го прави "оптимално"! т.е. ако има една и съща стойност я записва един пут в регъстъра и после я слага на колкото места трябва. Естественно резултата е няколко десетки пъти нарастване на кода!!!!
Абе, странно нещо е GCC!

Иначе О0 естественно няма проблем.

Аз разбирасе имам решения за моя приоблем. Или ползвам по-стар компилатор, или права констанитте volatile и после добавям сумати каствания че ме засипва с warning-i.

Крайната цел е че при компилация на даден адрес са записани някакви константи които после в бинарния файл подманям с други!

Автор:  woody [ Пет Юни 08, 2012 12:41 am ]
Заглавие:  Re: GCC MIPS как да изключа една оптимизация...

CALL-151

Хубав избор.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/