Посмеяться хотите?
Потратил пару часов - скачал расхваливаемый в данной ветке Keil 4.12, и провел сравнение с IAR 5.41 и гонимым GCC 4.4.3, компилируя Dhrystone 2.1 для платы на LPC1768 (Cortex-M3).
Результаты такие:
Максимальная оптимизация по размеру:
Keil: -O3 -Ospace, 1816 байт, 95066 dps
IAR: -Ohz, 1886 байт, 95434 dps
GCC: -Os, 1966 байт, 108931 dps
В прошивку входит много чего HAL, операционка, и прочее, это все я компилировал IAR, менял только один объектник собственно с dhrystone, размер приведен именно для тестовой функции+ее константные данные. Итого: разницы в размере и скорости почти нет - в пределах зависимости от выравнивания кода во флеш.
Максимальная оптимизация по скорости:
Keil: -O3 -Otime, 2132 байт, 122243 dps
IAR: -Ohs, 1974 байт, 123734 dps
GCC: -O3, 2506 байт, 128803 dps
Итого: тожe практически паритет
А вот с GCC все было весело - для Кортекса я им не пользуюсь - последний у меня 4.1.1 для ARM. Cначала скачал готовую сборку от Macraigor 4.4.3 - я всегда оттуда беру. Установил - компилятор молча не работает. После получаса разборок выяснилось что ему не хватает некоторых библиотек - Цигвин у меня староват оказался для него, скачал, поковырялся, нашел нехватающее (почти гиг скачать пришлось), поставил, заработало, с матюками. И общий итог печальный - файл хоть компилируется и линкуется, но работать на плате оно не хочет - выходит с произвольным результатом. По итогам разбирательств - похоже проблема в сборке, она не поддерживает генерацию нового EABI от ARM-а, во всяком случае ключик -meabi=4 не жрется, а при компиляции без него IAR-овский линкер выдает варнинг - после потерянных двух часов мне уже дальше разбираться, искать другие сборки (не факт что совместимые) итд итп, стало лень. Для сравнения - на Кейл никогда не виданный в глаза было потрачено 15 минут. На GCC которым я пользуюсь лет 8 - более 2 часов и результата все еще нет, зато фана - полные штаны.
Утренний upd: частично разобрался с проблемой - почему-то линкер считал что последняя глобальная переменная объявленная в объектнике GCC свободна и лепил туда первую подходящую из IAR-овских объектников. Крупно не повезло что это была переменная обновляемая раз в 128 мс в прерывании значением прошедших тиков (профайлер) - быстро такое не обнаружить

. Кто там виноват в совмещении переменных уже на разбирался - добавил еще одну липовую переменную в файле теста и все заработало. А вот результаты уже интересные - GCC проигрывает по размеру кода и немного выигрывает по скорости. Так что - не так уж оно мрачно все, после некоторых усилий GCC вполне юзабелен.