>почему же OpenSolaris собирают без этого флага?OpenSolaris собирают разные файлы с разными флагами.
Ядро одно дело, стандарный user land - другое, прикладные программы из поставки третье.
-fast - это макрос который раскрывается в набор опций (для вудкреста пример).
-xlibmil -xlibmopt -D__MATHERR_ERRNO_DONTCARE
Это флаги регулирующие поведение функций из math.h/libm.so
Замену на более быстрые функции или оптимизированные последовательности.
Ядро с libm не линкуется - поэтому они ему не нужны.
-fns -nofstore -fsimple=2 -fsingle
это все упрощения плавающей точки. в ядре в основном целочисленный код.
-xarch=ssse3
это выбор архитектуры SSSE3. Очевидно не подходит для сборки билда общего назначения операционной системы (если б это была gentoo - это было бы приемлимо).
Для amd64 использовался флаг -xarch=amd64 (сейчас, наверное, пишут -m64).
-xcache=32/64/8:4096/64/16 -xchip=core2
это заточки под конкретное железо на котором производится компиляция.
-xbuiltin=%all
Этот флаг говорит компилятору заменять известные функции из libc.so и
других стандартных библиотек на оптимизированные последовательности.
Ядро с этими библиотеками, понятное дело, не линкуется - поэтому и тут мимо.
-xdepend=yes
Включить dependence analysis циклов.
Вполне подходит для ядра.
Ну и соответственно по крайней мере в /usr/src/Makefile.master он упоминается.
-xregs=frameptr
Это аналог omit-frame-pointer из gcc. Использование регистра BP как регистра общего назначения, а не в качестве указателя кадра стека.
Солярис - система в которой очень ценят наблюдаемость - "observability".
Поэтому этот флаг не используется.
Более того на amd64 используется -Wu,-save_args флаг который говорит компилятору складывать аргументы функций которые по соглашениям о вызовах едут на регистрах
в специально отведенное место на стеке.
-xO5
При сборках соляриса используется -xO3.
По сути -xO4 добавляет агрессивный инлайнинг,
а -xO5 может сильно раздуть результирующий код, но не принести реального выирыша.
Инлайнинг в ядре штука мешающая отладке, наблюдаемости и анализу post mortem.
И раздутый код тоже ни к чему. Поэтому, ЕМНИП, используется -xO3.
-xalias_level=basic
это обещание компилятору что указатели базовые типы (int*, float*) указывают именно на те
типы на которые написано. Производительность разные подфлаги -xalias_level могут
поднять очень существенно. Но нужно очень внимательно следить за тем что написано в вашем коде. Этот флаг советует компилятору более буквально следовать семантике
записаной в стандарте языка, что часто не соответствует ожиданиям программиста.
Поэтому во избежание.
Тем не менее все эти опции так или иначе используются для сборки стандартного user land'а
и прочих программ.
-fast задокументирован как отправная точка настройки вашей программы, некоторый общий знаменатель для получения хорошей производительности.
Стартуя от нее можно заниматься профилировкой и что-то добавлять, а что-то убирать.