Ах, вот в чем дело - это у Вас компилятор так подвирает.

Жаль, я надеялся, Вы меня сейчас познакомите с каким-то новым хинтом.
Я вижу некую непоследовательность в Вашей позиции.
Знаете, лично я считаю в высшей степени нелогичной попытку сэкономить четыре слова там, где со спокойной душой наплевали на потерю сотен (или тысяч) других. А между тем, использование ЯВУ это всегда ощутимые потери в компактности (да и в быстродействии).
ЯВУ применяются для того (в частности), чтобы сэкономить время на написание кода, а не для экономии ресурсов системы.
Если в некоторой задаче, как Вы написали - "
выигрыш даже в несколько слов очень и очень критичен", - то решать эту задачу необходимо полностью на асме, ибо это единственный способ экономить так филигранно.
Если же (хороший) программист решает задачу на ЯВУ, то можно однозначно утверждать, что он не настолько ограничен в ресурсах, чтобы переживать из-за нескольких доп. слов в объеме кода.
Применяя свою позицию к конкретной ситуации, обсуждаемой здесь, я бы посоветовал
megasvintus'у
операцию побитового ИЛИ реализовывать
оператором побитового ИЛИ, тем более, что совершенно не факт, что он прикипит душой именно к CVAVR - есть и другие компиляторы (со своими шалабушками); да и версии компиляторов постоянно обновляются.
А буде он наткнется на недостаток ресурсов - купить контроллер с б
ольшими ресурсами, а не тратить свои (как правило, значительно более дорогостоящие) ресурсы на попытку ужаться на несколько слов в объеме кода. Благо, контроллеры сейчас достаточно дешевы.
Aheir писал(а):для "|" используется OR+MOV, а для "+" только ADD, вроде как...
Нет, там дело не в этом. Это он так накапливает результат, дурачок - вместо "OR R26,R30" он генерит "OR R30,R26 / MOV R26,R30". Замените второй вариант на первый и Вы получите именно то, о чем я говорил - абсолютно совпадающий во всем код, в котором отличаются только эти команды, в одном - AND, в дугом - ADD.
Оптимизаторы - штука несовершенная, компилятор Турбо-Си 2.0, например, генерил после вызова целых функций абсолютно глупейшую последовательность "mov bx,ax / mov ax,bx"...

Тот, кто захочет совместить несовместное, и гарантированно получать
наикратчайший код от оптимизирующих компиляторов с ЯВУ, должен:
а) знать назубок все "странности" оптимизации (в каждом режиме - свои),
б) после каждой компиляции выискивать в асм-листинге эти самые "странности" и править их, править, править...
Неблагодарное занятие, на мой взгляд, хотя, когда я писал драйверы на Турбо-Си, я именно так и делал.
Если честно, я бы и Вам советовал программировать "ИЛИ", как "ИЛИ", а не как "+", но чувствую, Вам религия не позволяет...
