CFLAGS для x86_64

В файле /usr/local/portage/layman/calculate/profiles/calculate/make.conf/amd64/make.defaults написано CFLAGS="-O2 -march=k8 -pipe". Атлоны, конечно, хорошо, но для Core2, как у меня, это не подходит. В Gentoo по дефолту стоит CFLAGS="-O2 -pipe". Чё буим делать? :slight_smile:

Ну так x86_64 это технология разработанная AMD (вспомним историю), которую интел 1 в 1 применяет у себя.
Когда мы выбираем как компилировать под 32 бита, что мы включаем? - i686, потому что таким образом мы сохраняем совместимость. Так и здесь.
После установки Вы уже можете пересобрать все пакеты под Core2. Благо march уже будет иметь значение “native”.

P.S. На вопрос “что делать?” есть короткий ответ - радоваться жизни, что интел не пошла своим путём :slight_smile:

Alexander Tratsevskiy wrote:

Ну так x86_64 это технология разработанная AMD (вспомним историю), которую интел 1 в 1 применяет у себя.
Когда мы выбираем как компилировать под 32 бита, что мы включаем? - i686, потому что таким образом мы сохраняем совместимость. Так и здесь.
После установки Вы уже можете пересобрать все пакеты под Core2. Благо march уже будет иметь значение “native”.

P.S. На вопрос “что делать?” есть короткий ответ - радоваться жизни, что интел не пошла своим путём :slight_smile:

Хм. i686 - это PentiumPro, который “держат” и Intel и AMD. Смущает K8 (Athlon64). Не думаю что он на 100% совместим с -march=nocona,core2 и т.д. В Catalyst’е для общей x86_64 архитектуры я{в,с}но прописано "-O2 pipe" и core2 c k8 для него разные. Ежу понятно, что “технология x86_64” не одно и то же, что ABI для Core2 и Athlon64. >:-E

Если на Вашем Core2 что-либо работает некорректно, напишите. Зачем ежа в пример приводить.

Позиция ясна. Придёться править make.defaults после каждого обновления :-

Зачем же так? У Вас есть файл /etc/make.conf, в котором после установки системы прописано:

CFLAGS="-O2 -march=native -pipe"

Alexander Tratsevskiy wrote:

Зачем же так? У Вас есть файл /etc/make.conf, в котором после установки системы прописано:

> CFLAGS="-O2 -march=native -pipe"

запускаем emerge --info

...
CFLAGS="-O2 -march=native -pipe"
...
CXXFLAGS="-O2 -pipe"
          ^^^^^^^^^
...

Надо либо дописать CXXFLAGS="${CFLAGS}", либо как в gentoo:

CFLAGS="-O2 -pipe"
CXXFLAGS="-O2 -pipe"*

Представте “зоопарк” 64-разрядных машин, где присутствует весь спектр 64-разрядных проессоров и от Интел и от АМД. А Вы - *march=k8* :)

Про CXXFLAGS спасибо. Планируем исправить обновлением 10.0.0.

Представте “зоопарк” 64-разрядных машин, где присутствует весь спектр 64-разрядных проессоров и от Интел и от АМД. А Вы - *march=k8* :)

AMD поддерживает mmx, sse инструкции. Почему Вы полагаете что intel будет не корректно работать с k8? Есть какой-то материал по этому поводу?

Для начала: gcc info 3.17.14 Intel 386 and AMD x86-64 Options:

 `-mtune=CPU-TYPE'
      Tune to CPU-TYPE everything applicable about the generated code,
      except for the ABI and the set of available instructions.
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      While picking a specific CPU-TYPE will schedule things
      appropriately for that particular chip, the compiler will not
      generate any code that does not run on the i386 without the
      `-march=CPU-TYPE' option being used.

 `-march=CPU-TYPE'
      Generate instructions for the machine type CPU-TYPE.  The choices
      for CPU-TYPE are the same as for `-mtune'.  Moreover, specifying
      `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.

     _core2_
           Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
           and SSSE3 instruction set support.
     _k8, opteron, athlon64, athlon-fx_
           AMD K8 core based CPUs with x86-64 instruction set support.
           (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and
           64-bit instruction set extensions.)

SSE3, SSSE3 <-> 3dNOW!, enhanced 3dNOW!

Возможно Вы имели ввиду mtune?

Intel announced EM64T, that the technology lacked certain instructions found in the AMD64 instruction set. That's right, there were two: LAHF and SAHF.

At the time, Microprocessor Report analysts speculated that this had happened because Intel based EM64T on a version of AMD's AMD64 documentation written down before AMD incorporated LAHF and SAHF into its own instruction set.

Intel has always admitted EM64T isn't 100 per cent compatible with AMD64

[[http://www.theregister.co.uk/2005/08/23/intel_fixes_em64t/]]

Supported CFLAGS are -O2 -march=k8 -pipe for AMD systems. Intel Core2-based systems (EM64T) should use -O2 -march=core2 -pipe.

http://www.gentoo.org/doc/en/gentoo-amd64-faq.xml#difference

так что:
dimone none wrote:

Позиция ясна. Придёться править make.defaults после каждого обновления :-\n

патч уже в шАрах :-

По поводу -march=native: стоит у меня Athlon XP, собираю пакеты с -march=native, то есть -march=athlon-xp, вышибает мать. Покупаю другую, камень - Pentium III. Оба процика - i686. Дальше догадаться нетрудно. Зачем для i686 оставили совместимость в виде -O2 -march=i686 -pipe, а для х84_64 - нет? Вот это не даёт покоя.

Много разного слышал, но чтобы опции сборки пакетов влияли на вылет материнки - это впервые. Вы уверены, что вылет матери связан с опциями сборки пакетов ?

shuher none wrote:

Много разного слышал, но чтобы опции сборки пакетов влияли на вылет материнки - это впервые. Вы уверены, что вылет матери связан с опциями сборки пакетов ?

Пытаемся острить? Вам сюда http://www.e1.ru/talk/forum/list.php?f=9 По теме: “мать” вышибло статикой, когда “флэшку” втыкал. А вот пересобирать систему пришлось.
З.Ы. /usr/calculate/share/profile ставит всё на свои места. :stuck_out_tongue:
З.Ы.Ы. Это мой Gentoo, и мне его курить. :wink:

Готово, заменил на:

CFLAGS="-O2 -march=x86-64 -pipe"

Нет такого параметра у -march!!! :))) -march вообще убрать надо, но и на том спасибо. при компиляции не ругается и ладно. Ж)))

Нет такого параметра у -march!!! :-)))

А это что?
http://www.tux.in.ua/wp-content/uploads/2010/01/make.conf_.png

Alexander Tratsevskiy wrote:

Нет такого параметра у -march!!! :-)))

А это что?
http://www.tux.in.ua/wp-content/uploads/2010/01/make.conf_.png

Это - самодеятельность

Ставим dev-util/catalyst
Смотрим /usr/lib/catalyst/arch/amd64.py

import builder

class generic_amd64(builder.generic):
        "abstract base class for all amd64 builders"
        def __init__(self,myspec):
                builder.generic.__init__(self,myspec)
                self.settings["CHROOT"]="chroot"

class arch_amd64(generic_amd64):
        "builder class for generic amd64 (Intel and AMD)"
        def __init__(self,myspec):
                generic_amd64.__init__(self,myspec)
                self.settings["CFLAGS"]="-O2 -pipe"
                self.settings["CHOST"]="x86_64-pc-linux-gnu"
                self.settings["HOSTUSE"]=["mmx","sse","sse2"]

class arch_nocona(generic_amd64):
        "improved version of Intel Pentium 4 CPU with 64-bit extensions, MMX, SSE, SSE2 and SSE3 support"
        def __init__(self,myspec):
                generic_amd64.__init__(self,myspec)
                self.settings["CFLAGS"]="-O2 -march=nocona -pipe"
                self.settings["HOSTUSE"]=["mmx","sse","sse2"]

 # Requires gcc 4.3 to use this class
class arch_core2(generic_amd64):
        "Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3 support"
        def __init__(self,myspec):
                generic_amd64.__init__(self,myspec)
                self.settings["CFLAGS"]="-O2 -march=core2 -pipe"
                self.settings["HOSTUSE"]=["mmx","sse","sse2","ssse3"]

class arch_k8(generic_amd64):
        "generic k8, opteron and athlon64 support"
        def __init__(self,myspec):
                generic_amd64.__init__(self,myspec)
                self.settings["CFLAGS"]="-O2 -march=k8 -pipe"
                self.settings["CHOST"]="x86_64-pc-linux-gnu"
                self.settings["HOSTUSE"]=["mmx","sse","sse2","3dnow"]

class arch_k8_sse3(generic_amd64):
        "improved versions of k8, opteron and athlon64 with SSE3 support"
        def __init__(self,myspec):
                generic_amd64.__init__(self,myspec)
                self.settings["CFLAGS"]="-O2 -march=k8-sse3 -pipe"
                self.settings["CHOST"]="x86_64-pc-linux-gnu"
                self.settings["HOSTUSE"]=["mmx","sse","sse2","3dnow"]

class arch_amdfam10(generic_amd64):
        "AMD Family 10h core based CPUs with x86-64 instruction set support"
        def __init__(self,myspec):
                generic_amd64.__init__(self,myspec)
                self.settings["CFLAGS"]="-O2 -march=amdfam10 -pipe"
                self.settings["CHOST"]="x86_64-pc-linux-gnu"
                self.settings["HOSTUSE"]=["mmx","sse","sse2","3dnow"]

def register():
        "inform main catalyst program of the contents of this plugin"
        return ({
                "amd64"                : arch_amd64,
                "k8"                : arch_k8,
                "opteron"        : arch_k8,
                "athlon64"        : arch_k8,
                "athlonfx"        : arch_k8,
                "nocona"        : arch_nocona,
 # uncomment when gcc 4.3 is stable and delete this line
 #                "core2"                : arch_core2,
 #                "k8-sse3"        : arch_k8_sse3,
 #                "opteron-sse3"        : arch_k8_sse3,
 #                "athlon64-sse3"        : arch_k8_sse3,
 #                "amdfam10"        : arch_amdfam10,
 #                "barcelona"        : arch_amdfam10
        }, ("x86_64","amd64","nocona"))

Наблюдаем разницу. Класса arch_x86-64 не наблюдаем.
P.S. Каталистом парни в Генту собирают стэйджи.

Хорошо, тогда наберите в гугле: “-march=x86-64” и “-march=x86_64” (в кавычках). По первому результату страниц будет будет найдено в 180 раз больше.

Alexander Tratsevskiy wrote:

Хорошо, тогда наберите в гугле: “-march=x86-64” и “-march=x86_64” (в кавычках). По первому результату страниц будет будет найдено в 180 раз больше.

Google != Gentoo way :)))