CFLAGS для x86_64

Это как в суде - дело не может быть принято к рассмотрению, т.к. были выявлены нарушения в ходе проведения следствия - превышение полномочий :slight_smile:

It's like doing "-march=i386" on an i386. The
features you're "unlocking" by using -march=x86-64 are exactly those that
are common to the platform. This is probably the reason it's undocumented
to begin with. It makes sense for the i386-port, but it's probably stale
code in the x86-64 port of gcc. 

In fact, for all we know, this triggers all kind of undocumented features
and (possibly undesired) behaviour, since it's an undocumented option and
all, including crashing horribly and generating broken code.

http://mail-index.netbsd.org/port-amd64/2007/04/09/0001.html
Почитал, поржал))))))))))))

-march=x86-64 добавлен 2008-03-08

gcc-4.3.4 changelog

2008-03-08  H.J. Lu  <hongjiu.lu@intel.com>

    Backport from mainline:
    2008-03-08  H.J. Lu  <hongjiu.lu@intel.com>

    PR target/35350
    * gcc.target/i386/isa-1.c: Add -march=x86-64.

Оптимизация

{"x86-64", PROCESSOR_K8, (PTA_64BIT
                | PTA_MMX | PTA_SSE | PTA_SSE2
                | PTA_NO_SAHF)},
enum pta_flags
    {
      PTA_SSE = 1 << 0,
      PTA_SSE2 = 1 << 1,
      PTA_SSE3 = 1 << 2,
      PTA_MMX = 1 << 3,
      PTA_PREFETCH_SSE = 1 << 4,
      PTA_3DNOW = 1 << 5,
      PTA_3DNOW_A = 1 << 6,
      PTA_64BIT = 1 << 7,
      PTA_SSSE3 = 1 << 8,
      PTA_CX16 = 1 << 9,
      PTA_POPCNT = 1 << 10,
      PTA_ABM = 1 << 11,
      PTA_SSE4A = 1 << 12,
      PTA_NO_SAHF = 1 << 13,
      PTA_SSE4_1 = 1 << 14,
      PTA_SSE4_2 = 1 << 15,
      PTA_SSE5 = 1 << 16
    };

gcc-4.3.4/gcc/config/i386
i386.md

;; Processor type.  This attribute must exactly match the processor_type
;; enumeration in i386.h.
(define_attr "cpu" "i386,i486,pentium,pentiumpro,geode,k6,athlon,pentium4,k8,
                    nocona,core2,generic32,generic64,amdfam10"
  (const (symbol_ref "ix86_tune")))

i386.h

/* Which processor to schedule for. The cpu attribute defines a list that
   mirrors this list, so changes to i386.md must be made at the same time.  */

enum processor_type
{
  PROCESSOR_I386 = 0,                        /* 80386 */
  PROCESSOR_I486,                        /* 80486DX, 80486SX, 80486DX[24] */
  PROCESSOR_PENTIUM,
  PROCESSOR_PENTIUMPRO,
  PROCESSOR_GEODE,
  PROCESSOR_K6,
  PROCESSOR_ATHLON,
  PROCESSOR_PENTIUM4,
  PROCESSOR_K8,
  PROCESSOR_NOCONA,
  PROCESSOR_CORE2,
  PROCESSOR_GENERIC32,
  PROCESSOR_GENERIC64,
  PROCESSOR_AMDFAM10,
  PROCESSOR_max
};

i386.c

      {"core2", PROCESSOR_CORE2, (PTA_64BIT
                                  | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
                                  | PTA_SSSE3
                                  | PTA_CX16)},
...
      {"x86-64", PROCESSOR_K8, (PTA_64BIT
                                | PTA_MMX | PTA_SSE | PTA_SSE2
                                | PTA_NO_SAHF)},
      {"k8", PROCESSOR_K8, (PTA_64BIT
                            | PTA_MMX | PTA_3DNOW | PTA_3DNOW_A
                            | PTA_SSE | PTA_SSE2
                            | PTA_NO_SAHF)},

Посмотрел. Успокоился. x86-64 != k8. )))))