Как отключить оптимизацию умножения в сдвиг на avr-gcc?

Обсуждаем контроллеры компании Atmel.
Ответить
Аватара пользователя
Artlav
Прорезались зубы
Сообщения: 225
Зарегистрирован: Пт апр 27, 2012 15:32:24
Откуда: Москва
Контактная информация:

Как отключить оптимизацию умножения в сдвиг на avr-gcc?

Сообщение Artlav »

Можно ли отключить у avr-gcc "оптимизацию" умножения на степени двойки в сдвиги, для отдельно взятого выражения?

Мне нужно фиксированное время выполнения с точностью до такта, что легко выходит при константе не равной степени 2, но не работает при равной.

При константе в 12 выходит внятное.
9 циклов, независимо ни от чего.

Код: Выделить всё

.L12:
	ld r30,X+
.LVL13:
	mul r30,r25
	movw r30,r0
	clr r1
Поставив константу в 8 получаю.
Переменное число циклов, большее чем раньше.
В чём "оптимизация" то?

Код: Выделить всё

.L12:
.LBB69:
.LM28:
	ld r30,X+
.LVL13:
	ldi r31,lo8(0)
	ldi r25,3
1:	lsl r30
	rol r31
	dec r25
	brne 1b
-O0 не помогает никак, и генерирует тонны мусора, который не влазит ни по времени, ни по памяти.
Реклама
Реклама
Аватара пользователя
Artlav
Прорезались зубы
Сообщения: 225
Зарегистрирован: Пт апр 27, 2012 15:32:24
Откуда: Москва
Контактная информация:

Re: Как отключить оптимизацию умножения в сдвиг на avr-gcc?

Сообщение Artlav »

И?
http://gcc.gnu.org/onlinedocs/gcc/Optim ... ze-Options я просмотрел, подходящей опции там не нашел.
Ответить

Вернуться в «AVR»