[mdk-re] gcc & -march
Yura Zotov
=?iso-8859-1?q?yznews_=CE=C1_hotbox=2Eru?=
Вс Май 20 15:33:01 MSD 2001
On Sun, May 20, 2001 at 02:19:55PM +0300, Alexander Bokovoy wrote:
> On Sun, May 20, 2001 at 02:50:38PM +0400, Yura Zotov wrote:
> > On Sun, May 20, 2001 at 01:23:46PM +0300, Alexander Bokovoy wrote:
> > > On Sun, May 20, 2001 at 01:54:07AM +0400, Баталов Григорий wrote:
> > > > On Sun, 20 May 2001 01:17:18 +0400
> > > > Yura Zotov <yznews на hotbox.ru> wrote:
> > > >
> > > > > Скажите, пожалуйста, а как gcc узнает, под какую архитектуру делать
> > > > > объектники, если не задан явно параметр -march? Под какой процессор он при
> > > > > этом генерит код?
> > > >
> > > > Неужели под ту, которая в $HOSTTYPE? :)
> > > Нет. Если не указана явно архитектура, то на ia32 генерируется код,
> > > который гарантированно будет работать с i386. Даже если Вы укажете
> > > -mcpu=i686, но не укажете -march=i686, то все равно код сгенерируется
> > > только такой, который можно выполнить на i386, хотя вызовы и распределение
> > > переменных по регистрам будут оптимизированы под i686.
> > >
> > > Аналогично и для других архитектур -- по умолчанию код генерируется так,
> > > чтобы работать на самой слабой машине в серии.
> >
> > Я тут взял и попробовал скомпилировать ОЧЕНЬ простую программу для разных
> > -march=i386|i486|i586|i686|athlon и без явного указания -march. Получилось
> > 6 *.o по ~1.3K, причем 5 из них были по размеру одинаковы и при беглом взгляде
> > внутрь тоже. Отличался от всех только полученный с -march=i386.
> > В чем прикол?
> Попробуйте приложенный тест -- это реализация алгоритма MD5, достаточно
> затратная с точки зрения вычислений. В архиве есть уже скомпилированные
> ассемблерные фрагменты и исходный md5.c. Получить ассемблерный код для
> конкретной архитектуры можно, пользуясь скриптом maketest.
>
> Обратите внимание, например, на md5-i386.s и md5-pentiumpro.s. Проще всего
> сравнить через diff -u md5-i386.s md5-pentiumpro.s
>
> Одинаковый код, кстати, не получился ни в одном из случаев.
Я перегенерил все md5-*.s. Действительно, все разные.
Команда "gcc -S md5.c" сгенерила код, идентичный md5-i586.s (согласно diff).
> --
> Sincerely yours, Alexander Bokovoy
> The Midgard Project | ALT Linux Team | Minsk Linux Users Group
> www.midgard-project.org | www.altlinux.ru | www.minsk-lug.net
> -- You won't skid if you stay in a rut.
> -- Frank Hubbard
--
Юрий А. Зотов
Подробная информация о списке рассылки community