Техника оптимизации под линуха

Отказ от branch-count-reg


Многие микропроцессоры имеют специальную команду: уменьши-регистр-на-единицу-и-ветвись-если-нуль (branch-count-reg). На x86-процессорах этим занимается LOOP, часто встречающаяся в ассемблерных вставках начинающих программистов, но практически никогда в коде, сгенерированном компилятором. И вовсе не потому, что компилятор "тупой", а потому, что эта инструкция медленная, хотя и компактная.

Компиляторы msvc и icl никогда ее не используют, а gcc предоставляет специальный ключ -fbranch-count-reg, предписывающий выбирать LOOP вместо DECreg/JNZ begin_loop, правда, до машинного когда она все равно не доживает и уничтожается оптимизатором.

* msvc:  не использует branch-count-reg

* icl:       не использует branch-count-reg

* gcc:     не использует branch-count-reg



Содержание раздела