1

J'aimerai utiliser les possibilités MMX avec MINGW.
J'essaye de compiler un code contenant la ligne suivante :

__m64 m128;
m128.m64_u64 = 0x8080808080808080;

Mais j'obtiens les erreurs de compilation suivantes. La première erreur m'est incompréhensible. sad

src/Filters/basefwt.cpp:387: error: request for member `m64_u64' in `m128', which is of non-class type `int __vector__'
src/Filters/basefwt.cpp:387: error: integer constant is too large for "long" type
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

2

est ce que __m64 est bien défini qq part ? pb d'include ? je dis ça parce qu'il me semble qu'integer est le type par défaut ?
et 0x8080808080808080L ?

3

Alors déjà le nombre est trop grand pour un long, faut un long long, bref 0x8080808080808080ULL.
Et ensuite la notation .m64_u64 n'est pas gérée par GCC. À mon avis, ce que tu veux est:
unsigned long long m128 __attribute__((vector_size(16))) = {0x8080808080808080ULL, 0x8080808080808080ULL};
ou:
unsigned long long m128 __attribute__((vector_size(16)));
m128 = (unsigned long long __attribute__((vector_size(16)))) {0x8080808080808080ULL, 0x8080808080808080ULL};

Et enfin, pour activer le MMX, il faut compiler avec -mmmx.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

Alors les include semblent correcte car __m64 est connus du compilateur.
J'ai bien activé le flag -mmmx naturellement.
J'avais aussi essayé avec 0x8080808080808080ULL;

J'vais essayer avec tes déclarations Kevin.

A savoir que j'ai un autre code C qui utilises les registres MMX qui compile et qui malheureusement à l'exécution plante. J'espère que le problème ne vient pas de MINGW. sad
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

5

J'ai essayé ceci:

unsigned long long m128 __attribute__((vector_size(16)));
m128 = (unsigned long long __attribute__((vector_size(16)))) {0x8080808080808080ULL, 0x8080808080808080ULL};

//char to uchar
even = _mm_add_pi8(even, m128);

Et j'obtiens comme erreur:
haar.h:66: error: cannot convert `long long unsigned int __vector__' to `int __vector__' for argument `2' to `int __vector__ _mm_add_pi8(int __vector__, int __vector__)'

Je commence à déprimer là.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

6

Et avec :
__m64 m128;
m128 = (int __attribute__((vector_size(16)))) {0x8080808080808080ULL, 0x8080808080808080ULL};

Alors là cerise sur le gâteau :
haar.h:62: error: cannot convert `int __vector__' to `int __vector__' in assignment
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

7

geogeo (./4) :
A savoir que j'ai un autre code C qui utilises les registres MMX qui compile et qui malheureusement à l'exécution plante.
Attention, si tu utilises le MMX, il faut exécuter l'instruction EMMS une fois que tu as fini pour pouvoir réutiliser des flottants "normaux" ensuite, sinon tu va avoir un comportement anormal voire des exceptions (plantages). J'imagine que le compilo le fait tout seul, mais au cas où...
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

8

C'est écrit en C donc c'est fait automatiquement.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

9

Le problème est résolu il suffisait tout simplement d'écrire.
m01 = _mm_set_pi8(0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01);

Néanmoins, la compilation en mode debug avec gdb fait planter le programme. On dirait que GDB n'aime pas quand on utilise du MMX.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

10

Pour l'erreur bizarre, int __attribute__((vector_size(16))) est un vecteur de 4 int, __m64 doit être autre chose (vecteur de 2 int seulement? C'est probablement un int __attribute__((vector_size(8)))).

Tu devrais aussi éviter d'appeler ton __m64 "m128"...

Essaie:
__m64 m128;
m128 = (__m64) {0x80808080, 0x80808080};
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité