# [solved] Kein automatisch aktiviertes SSE?

## Necoro

Hi,

ich habe erst heute morgen von dem schönen Aufruf gcc -c -Q -march=native --help=target erfahren, der einem anzeigt, welche Flags vom gcc automatisch gesetzt werden. Und erstaunlicherweise muss ich feststellen: SSE-Flags (sse, sse2, sse3, mmx) sind nicht dabei  :Shocked: 

Da ich bisher immer ausgegangen bin, dass dem so ist (so wird es auch von jeder Doku behauptet), schockt mich das ein wenig. Hat da jemand evtl Infos zu?

Meine /proc/cpuinfo:

```
processor   : 0

vendor_id   : GenuineIntel

cpu family   : 15

model      : 4

model name   : Intel(R) Pentium(R) D CPU 2.80GHz

stepping   : 7

cpu MHz      : 2811.172

cache size   : 1024 KB

physical id   : 0

siblings   : 2

core id      : 0

cpu cores   : 2

apicid      : 0

initial apicid   : 0

fdiv_bug   : no

hlt_bug      : no

f00f_bug   : no

coma_bug   : no

fpu      : yes

fpu_exception   : yes

cpuid level   : 5

wp      : yes

flags      : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pebs bts pni dtes64 monitor ds_cpl cid cx16 xtpr lahf_lm

bogomips   : 5622.34

clflush size   : 64

cache_alignment   : 128

address sizes   : 36 bits physical, 48 bits virtual

power management:
```

Und die Ausgabe des obigen Befehls:

```
The following options are target specific:

  -m128bit-long-double              [disabled]

  -m32                              [enabled]

  -m3dnow                           [disabled]

  -m3dnowa                          [disabled]

  -m64                              [disabled]

  -m80387                           [enabled]

  -m96bit-long-double               [enabled]

  -mabm                             [disabled]

  -maccumulate-outgoing-args        [disabled]

  -maes                             [disabled]

  -malign-double                    [disabled]

  -malign-functions=                

  -malign-jumps=                    

  -malign-loops=                    

  -malign-stringops                 [enabled]

  -march=                           nocona

  -masm=                            

  -mavx                             [disabled]

  -mbranch-cost=                    

  -mcld                             [disabled]

  -mcmodel=                         

  -mcx16                            [enabled]

  -mfancy-math-387                  [enabled]

  -mfma                             [disabled]

  -mforce-drap                      [disabled]

  -mfp-ret-in-387                   [enabled]

  -mfpmath=                         

  -mfused-madd                      [enabled]

  -mglibc                           [enabled]

  -mhard-float                      [enabled]

  -mieee-fp                         [enabled]

  -mincoming-stack-boundary=        

  -minline-all-stringops            [disabled]

  -minline-stringops-dynamically    [disabled]

  -mintel-syntax                    [disabled]

  -mlarge-data-threshold=           

  -mmmx                             [disabled]

  -mms-bitfields                    [disabled]

  -mno-align-stringops              [disabled]

  -mno-fancy-math-387               [disabled]

  -mno-fused-madd                   [disabled]

  -mno-push-args                    [disabled]

  -mno-red-zone                     [disabled]

  -mno-sse4                         [enabled]

  -momit-leaf-frame-pointer         [disabled]

  -mpc                              

  -mpclmul                          [disabled]

  -mpopcnt                          [disabled]

  -mpreferred-stack-boundary=       

  -mpush-args                       [enabled]

  -mrecip                           [disabled]

  -mred-zone                        [enabled]

  -mregparm=                        

  -mrtd                             [disabled]

  -msahf                            [enabled]

  -msoft-float                      [disabled]

  -msse                             [disabled]

  -msse2                            [disabled]

  -msse2avx                         [disabled]

  -msse3                            [disabled]

  -msse4                            [disabled]

  -msse4.1                          [disabled]

  -msse4.2                          [disabled]

  -msse4a                           [disabled]

  -msse5                            [disabled]

  -msseregparm                      [disabled]

  -mssse3                           [disabled]

  -mstack-arg-probe                 [disabled]

  -mstackrealign                    [enabled]

  -mstringop-strategy=              

  -mtls-dialect=                    

  -mtls-direct-seg-refs             [enabled]

  -mtune=                           nocona

  -muclibc                          [disabled]

  -mveclibabi=
```

(Interessanterweise stell ich auch fest, dass er intern denn  "march" auf "nocona" setzt, obwohl "prescott" eigentlich das richtige wäre -- aber evtl mappt er das intern auch auf das gleiche...)

----------

## firefly

nocona ist im grunde das gleiche wie prescott nur mit 64Bit extension support

 *man gcc wrote:*   

> prescott
> 
>                Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and
> 
>                SSE3 instruction set support.
> ...

 

Und wegen der Ausgabe des commandos:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43718

Aber ganz schlau werde ich aus den Kommentaren auch nicht. Scheinbar bekommt --help=target nicht mit, wenn optionen/cpu-features durch die -march option implizit aktiviert werden.

----------

## Necoro

Ah - also nur ein Problem der Darstellung, wenn man diesen Bug liest? Wundert mich, dass die sowas denn nicht einfach gefixt haben (andererseits: Wenn das stärkere Auswirkungen hätte, liefe der sicherlich nicht als "minor")

/edit: Wunder mich, wie man jetzt eindeutig rausbekommen kann, ob der SSE3 nutzt oder net ...

----------

## Necoro

So - habs für mich jetzt mit "ist wirklich nur ein Anzeigebug" abgeschlossen.

Grund:

Wenn man ein kleines Testprogramm schreibt, was Floating Point-Arithmetik benutzt und mit "-mfpmath=sse" die SSE-Befehle für jegliche FP-Arithmetik erzwingt, so liefert er mit "-march=native" Assembler-Code, der nach SSE aussieht (und sich auf jeden Fall von dem ohne SSE unterscheidet). Wenn man das "-march" dagegen weglässt, kommt hingegen "warning: SSE instruction set disabled, using 387 arithmetics".

Insofern: Solved.

----------

## mastacloak

Aus http://en.gentoo-wiki.com/wiki/Hardware_CFLAGS kenne ich noch diesen Test:

```
 $ echo "" | gcc -march=native -v -E - 2>&1 | grep cc1
```

Bei mir stimmt die Ausgabe auf den ersten Blick mit

```
$ gcc -c -Q -march=native --help=target
```

überein.

----------

## Josef.95

Die Ausgabe von 

```
$ gcc -c -Q -march=native --help=target
```

 würde hier, mit einer AMD CPU auch nicht stimmen.

Eine sehr ausführliche Ausgabe (die auch stimmt) kann man sich zb mit 

```
$ cd /tmp

$ echo 'int main() {return 0;}' > test.c && gcc -v -Q -march=native -O2 test.c -o test && rm test.c test
```

 ausgeben lassen.

----------

## Necoro

 *Josef.95 wrote:*   

> Die Ausgabe von 
> 
> ```
> $ gcc -c -Q -march=native --help=target
> ```
> ...

 

Ah super  :Smile:  Danke

----------

## mv

 *Josef.95 wrote:*   

> Eine sehr ausführliche Ausgabe...

 

Wer will dazu schon eine /tmp-Datei erstellen? Da ich mich jetzt nicht erinnern kann, ob ich das schon mal gepostet habe: 

```
#! /bin/sh

Usage() {

        printf '%s\n' "Usage: ${0##*/} c|o [gcc-Flags e.g. -march=native -O2]

Show which compile|optimization flags are selected when you chose gcc-Flags"

        exit ${1:-1}

}

case "${1}" in

c)      shift

        exec gcc -v -c -Q "${@}" -o /dev/null -x c - 2>&1 <<PROG

int main(){return 0;}

PROG

        ;;

o)      shift

        exec gcc -c -Q "${@}" -o /dev/null --help=optimizer 2>&1;;

*)      Usage;;

esac
```

----------

## Necoro

Danke  :Smile:  Die Funktion fand Einzug in meine Zsh-Funktionssammlung  :Smile: 

----------

## kernelOfTruth

@Josef.95, mv:

danke euch beiden   :Smile: 

----------

