# Safe CFLAGS - Opciones especificas de la CPU

## Fitap

Hola foro,

siguiendo la wiki Safe CFLAGS, me dispuse a buscar los flags especificos para mi CPU, y como no me dio "empty" diff march.s native.s, hay que sacar las flags que no se repiten, en mi caso es el flag -mpclmul, pero al volver a procesar 

```
gcc -fverbose-asm -march=westmere -mpclmul march.cc -S

sed -i 1,/options\ enabled/d march.s

diff march.s native.s
```

Sigue apareciendo ese flag.

Ahora, mi procesador tengo entendido que es un westmere (Intel Core i3 CPU M 370 @ 2.40GHz), y en la wiki si utilizo el -march para westmere, que es corei7, obtengo "empty" en  diff march.s native.s.

Porque siguiendo enteonces la wiki no puedo sacar el flag mpclmul usando westmere en vez de corei7? o quizas no tenga importancia, no lo se.

Saludos.

----------

## quilosaq

 *Fitap wrote:*   

> ...
> 
> hay que sacar las flags que no se repiten.
> 
> ..

 

No exactamente. Hay que buscar las opciones que usa gcc cuando pones -march=westmere y que no aparecen cuando usas -march=native. Y probar a desactivarlas.. En tu caso debería ser:

```
gcc -fverbose-asm -march=westmere -mno-pclmul march.cc -S

sed -i 1,/options\ enabled/d march.s

diff march.s native.s
```

----------

## Fitap

Gracias quilosaq por responder, me falto agregar lo siguiente cuando ejecuto con westmere:

```

# options passed:  -D_GNU_SOURCE native.cc -march=westmere -mmmx -mno-3dnow

18c18

< # -m128bit-long-double -m64 -m80387 -maes -malign-stringops

---

> # -m128bit-long-double -m64 -m80387 -malign-stringops

21,23c21,22

< # -mlong-double-80 -mmmx -mpclmul -mpopcnt -mpush-args -mred-zone -msahf

< # -msse -msse2 -msse3 -msse4 -msse4.1 -msse4.2 -mssse3

< # -mtls-direct-seg-refs

---

> # -mlong-double-80 -mmmx -mpopcnt -mpush-args -mred-zone -msahf -msse

> # -msse2 -msse3 -msse4 -msse4.1 -msse4.2 -mssse3 -mtls-direct-seg-refs

```

Entonces hay que sacar lo que esta en westmere para acercarse a lo que esta en native ?

Y esto que me arroja la primer prueba para detectar el CPU, osea, -mmmx -mno-3dnow , no habria que agregarlo en CFLAGS?

Siguiendo tu recomendacion de sacar -mno-pclmul obtengo lo siguiente:

```

18c18

< # -m128bit-long-double -m64 -m80387 -maes -malign-stringops

---

> # -m128bit-long-double -m64 -m80387 -malign-stringops

```

Tendria que sacar -maes? pero me lo sigue largando.

Saludos.

----------

## Fitap

 *Fitap wrote:*   

> Gracias quilosaq por responder, me falto agregar lo siguiente cuando ejecuto con westmere:
> 
> ```
> 
> # options passed:  -D_GNU_SOURCE native.cc -march=westmere -mmmx -mno-3dnow
> ...

 

Me respondo a mi mismo, como es de suponer soy un NB en esto,

En vez de sacar -maes saque -mno-aes y ahora obtengo cero diff.

Saludos.

----------

## cameta

Hola,

mi consejo como cflags es que si usas un procesador Intel pongas esto

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

En el caso de las cflags normalmente menos es mejor.

----------

## Fitap

Gracias por el consejo cameta, asi viene por default en el handbook, has tenido algun problema con los procesadores Intel ?

En la desktop tambien es un Intel i7 4790 (Haswell), en CFLAGS reemplazo solamente native por haswell.

Saludos.

----------

## cameta

No he tenido problemas con los intel.

Si pones un procesador un poco más especifico mientras sea el correcto también te irá bien.

----------

