-
- Есть такое предположение: il-2(711 знак., 30.06.2020 14:35)
- // PultFlags = (PultFlags & (~( 1<<3 | 1<<4 |
1<<LOC_CONTR ))) | ( PORTB & ( 1<<3 |
1<<4 )); Andrey190(195 знак., 30.06.2020 14:12)
- Поставил последнюю 7301 - помогло, без всяких танцев! - maleon(01.07.2020 08:46)
- Попробуй сделать временную переменную, vpv.vpv(168 знак., 30.06.2020 13:35)
- а если так PultFlags = (PultFlags & (~( 1<<3 | 1<<4
| 1<<LOC_CONTR ))) | ( PORTE & ( 1<<3 |
1<<4 )); - Andrey190(30.06.2020 11:31)
- При макс оптимизации по скорости короче, но тоже лишний STD Z+3, R16 зачем-то maleon(393 знак., 30.06.2020 11:52)
- Пробовал, только скобочек лишних не ставил, то же самое получается maleon(442 знак., 30.06.2020 11:46)
- А так, будет влияние константы на длину? Дoктyp77(163 знак., 30.06.2020 12:01, )
- самое клевое что лишняя добавка это Nikolay801_(132 знак., 30.06.2020 11:28)
- Это же
бубльгумпульт! Нафиг скорость? Там наоборот лучше помедленнее :-) - SciFi(30.06.2020 11:53)- Это не пульт, это для пульта - maleon(30.06.2020 11:58)
- Это же
- Есть ли смысл в этом разбираться? Код корректный в обоих случаях, а
генерировать его в рамках вашего представления о прекрасном никто
не обещал. - SciFi(30.06.2020 10:49)
- Попробовал усилить оптимизацию, ради того, чтобы разобраться на
будующее. Получилось лучше, но хуже чем первый раз maleon(507 знак., 30.06.2020 11:24, картинка)
- Покажи определение PultFlags. Не volatile ли случайно? - fk0(30.06.2020 11:35)
- Если бы volatile, то было бы логично. Остановился на максимальной оптимизации по скорости, обём бинарника тоже не хило меньше maleon(9 знак., 30.06.2020 11:41, ссылка)
- Покажи определение PultFlags. Не volatile ли случайно? - fk0(30.06.2020 11:35)
- Это же хвалёный ИАР. Конечно, приму результат как есть, но осадочек
остался maleon(180 знак., 30.06.2020 11:06)
- Яр яру рознь. Имею неоднозначный опыт с яром для Coldfire и STM8. В первом случае бывает просто неправильный код. Во втором да, высокоуровневые оптимизации и всё такое, но когда доходит до генерации машинного кода, всё становится оч. печально. Простой, как гвоздь, Cosmic выдаёт результаты получше. - SciFi(30.06.2020 11:22)
- Короче, без рогов плохо :) Гyдвин(1 знак., 30.06.2020 11:16, картинка)
- "История одного байта"/ - Гyдвин(30.06.2020 10:55)
- Попробовал усилить оптимизацию, ради того, чтобы разобраться на
будующее. Получилось лучше, но хуже чем первый раз maleon(507 знак., 30.06.2020 11:24, картинка)
- Вангую. PultFlag 16 бит, а LOC_CONTR > 8. Два совета:
используй восьмибитные данные в восьмибитниках. Больше доверяй
компилятору. - VLLV(30.06.2020 10:43)
- Не угадал. Там оптимизация -- без операции с LOC_CONTR получается
два раза подряд AND с одной константой, который оптимизируется до
одного раз. При наличии LOC_CONTR константы разные и есть два AND.
Но common subexpression elimination явно не дорабатывает, потому,
что во втором случае можно объединить два AND в один и выкинуть
STD/LDD. Возможно, автор отключил оптимизацию... - fk0(30.06.2020 10:48)
- Пробовал заменить на PultFlags &=0xE6; в результате та же фигня, один в один. Откуда второй ANDI R16, 0xE7 непонятно - maleon(30.06.2020 11:09)
- Первого ANDI R16, 0xE6 ведь достаточно, откуда и зачем ANDI R16, 0xE7? - maleon(30.06.2020 10:54)
- Не трогал опции maleon(30.06.2020 10:51, картинка)
- Да вроде нет maleon(282 знак., 30.06.2020 10:47)
- Не угадал. Там оптимизация -- без операции с LOC_CONTR получается
два раза подряд AND с одной константой, который оптимизируется до
одного раз. При наличии LOC_CONTR константы разные и есть два AND.
Но common subexpression elimination явно не дорабатывает, потому,
что во втором случае можно объединить два AND в один и выкинуть
STD/LDD. Возможно, автор отключил оптимизацию... - fk0(30.06.2020 10:48)