Écrit à l'origine par Richard Stallman, le logiciel GCC (GNU Compiler Collection) est le compilateur de référence du monde du logiciel libre. Il accepte des codes source écrits en C, C++, Objective-C, Fortran, Java et Ada et fonctionne sur une multitude d'architectures.
La sortie de GCC 4.4 a été grandement retardée par des questions d'ordre juridiques. En effet la FSF a dû se prononcer sur la nouvelle "Runtime Library Exception" qui autorise le passage des diverses bibliothèques sous licence GPLv3 ainsi que l'arrivée prochaine des greffons dans l'architecture de GCC. La FSF étant connue pour sa hâte toute relative sur les questions juridiques il a fallu patienter ce qui a provoqué un certain mécontentement chez plusieurs développeurs. Néanmoins le comité directeur de GCC a préféré jouer la prudence (better safe than fast) et attendre d'avoir l'aval des juristes de la FSF avant d'autoriser la sortie tant attendue.
Dans la suite de la dépêche, vous pourrez découvrir les nouveautés et les optimisations mises en œuvre dans cette version 4.4 de GCC.
NdM : pour l'anecdote, cette dépêche a été initialement soumise le 18 décembre 2008, a attendu la sortie officielle de GCC 4.4, et à ce titre remporte le titre de dépêche restée le plus longtemps en modération (le record précédent étant de 70 jours). Nouvel allocateur de registres
Un nouvel allocateur de registres sophistiqué est incorporé dans la version 4.4 de GCC.
L'allocation de registres est une tâche très importante qu'effectue le compilateur. En effet il doit arriver à assigner aux variables du programme un « endroit » où elles seront stockées pour exécution. Ce sont les registres du processeur qui vont accueillir ces variables mais, petit problème, ces registres sont fort peu nombreux alors que les variables d'un programme sont souvent très nombreuses. Typiquement un processeur x86 possède seulement 8 registres, la variante x86-64 en possède 16 et un processeur PowerPC jouit de 32 registres.
Pour trouver la solution optimale afin de « masquer » ce faible nombre de registres le compilateur doit s'appuyer sur des algorithmes très complexes souvent liés à la théorie des graphes et notamment au coloriage de graphes.
Le compilateur GCC 4.4 propose l'allocateur IRA (Integrated Register Allocator) qui est le résultat de plusieurs d'années d'expérimentation avec la branche YARA (Yet Another Register Allocator) par le développeur Vladimir Makarov qui travaille pour Red Hat.
Cet allocateur intégré ultra-moderne permet de choisir entre plusieurs algorithmes et plusieurs paramètres (avec les options -fira-algorithm et -fira-region).
En ce qui concerne les choix de -fira-algorithm on peut opter pour "CB" qui est un allocateur basé sur l'algorithme de Chaitin-Briggs ou pour "Priority" qui utilise l'algorithme de Chow. "CB" est utilisé par défaut.
Pour la région il est possible de choisir entre "All", "One" et "Mixed". L'option "All" fonctionne bien avec les processeurs n'ayant que peu de registres alors que l'option "One" considère toute la fonction comme une seule région et est bien adaptée aux architectures dotées d'un grand nombre de registres. Le troisième choix est un mélange des deux précédents (ce qui explique son nom "Mixed") et c'est celui qui est utilisé par défaut puisqu'il propose les meilleures performances dans la plupart des cas et sur la plupart des architectures de processeurs.
Pour avoir une idée du gain en performances il est possible de consulter cet article au format pdf de Vladimir Makarov. Les considérations techniques sont extrêmement absconses mais le paragraphe 3 propose un graphe comparant les scores des allocateurs de "Chaitin-Briggs" (sans région), de "Callahan-Koblenz" et du nouvel allocateur de GCC 4.4 (nommé "Regional" dans l'article). Que ce soit en terme de rapidité ou de taille de code la victoire du nouvel allocateur IRA est sans appel.
Branche Graphite
Après IRA la seconde grande nouveauté de GCC 4.4 est l'intégration de la branche "Graphite" qui permet d'optimiser l'exécution des boucles de code.
Cette étape d'optimisation des boucles effectuée par le compilateur est une tâche importante puisque le bénéfice en terme de temps d'exécution est souvent très visible. Du fait de ces optimisations savantes effectuées par le compilateur la pression sur la mémoire cache peut être réduite et le travail peut être mieux distribué entre les processeurs.
L'orientation choisie par la branche Graphite relève de la méthode des polytopes qui est une approche très mathématisée de la théorie des compilateurs. Pour résumer ce soubassement théorique on peut dire que cela consiste à transformer les boucles de code en figures géométriques complexes afin de trouver des optimisations puis à transformer à nouveau les figures en code optimisé.
Plus techniquement : un polygone est une figure fermée sur le plan et qui est délimitée par des segments de droite, un polyèdre c'est la même chose en trois dimensions et un polytope c'est la même chose en dimension n.
La méthode des polytopes consiste à transformer les boucles des programmes en polytopes (les itérations d'une boucle de code sont représentées comme des points à la "surface" de la figure multidimensionnelle), appliquer diverses opérations mathématiques sur ces polytopes (des transfomations affines) puis à transformer à nouveau les polytopes en boucles sémantiquement équivalentes aux boucles initiales mais super-optimisées.
On voit bien que le sujet est complexe et on ne s'étonnera donc pas que cette méthode ait surtout été développée par des universitaires dans diverses bibliothèques de programmes. Ainsi la bibliothèque Graphite qui est intégré dans GCC 4.4 est décrite en détail dans ce fichier pdf par des chercheurs de l'École des mines de Paris, de L'INRIA et de l'université d'Orsay. Selon ce document, GCC 4.4 est le tout premier compilateur de production au monde qui intègre une optimisation par la méthode des polytopes.
Les passes d'optimisation qui sont prises en charge par Graphite se déroulent quand le code source a été transformé dans la représentation générique GIMPLE. On fait ainsi une transformation GIMPLE -> Graphite -> GIMPLE pour optimiser toutes les boucles avec la méthode des polytopes ce qui explique le nom choisi pour Graphite (GIMPLE Represented as Polyhedra with Interchangeable Envelopes).
Actuellement ces passes d'optimisations sont mises en œuvre à l'aide des commandes "-floop-block", "-floop-interchange", "-floop-stripmine" et "-fgraphite" mais la discussion a été vive afin de trouver les conventions de nommages les plus explicites.
Le résultat brut est très impressionnant puisque selon Sebastian Pop (premier auteur de l'article sur Graphite et auteur de plusieurs autres présentations) le gain apporté par cette optimisation est inégalé (test effectué sur le benchmark spécifique swim du comparatif standard SPEC2000) : "Comparé aux performances du meilleur compilateur disponible, PathScale EKOPath (V2.1) avec l'option d'optimisation peak-SPEC, notre outil permet d'obtenir un gain de vitesse de 32% sur Athlon XP et de 38% sur Athlon 64. Nous ne sommes pas au courant d'un autre projet d'optimisation - manuel ou automatique - qui permettrait au benchmark swim d'atteindre ce niveau de performance sur processeur x86".
D'autres nouveautés en bref...
- La nouvelle version 3 d'OpenMP (sortie en mai 2008) est gérée par GCC 4.4. OpenMP est une interface de programmation permettant d'écrire des programmes parallèles et cette version 3 apporte de nombreuses nouveautés (dont le très attendu tasking évoqué ici avec un comparatif des performances).
- En ce qui concerne le langage C++ le travail sur le support de la future norme ISO C++0x continue vigoureusement et GCC 4.4 améliore encore la compatibilité avec ce nouveau standard. Ces nouvelles fonctions sont activables avec -std=c++0x et les progrès peuvent être suivis sur la page spéciale consacrée à C++0x du site GCC.
- Côté Fortran on note l'amélioration du support de la norme Fortran 2003 avec l'introduction, par exemple, des entrées/sorties asynchrones ou des entrées/sorties en UTF-8. GCC 4.4 apporte également le tout début du support de Fortran 2008 (accessible avec -std=f2008) et on peut donc utiliser, entre autres, les nouvelles primitives mathématiques (ASINH, ACOSH, ATANH, BESSEL, etc).
- En utilisant __attribute__ on peut profiter de nombreuses extensions spécifiques à GCC. La version 4.4 introduit la possibilité de changer le niveau d'optimisation pour certaines fonctions bien spécifiques dans son code. Il suffit d'utiliser pour ces fonctions l'attribut optimize et de spécifier un niveau d'optimisation. Cela peut être très utile pour optimiser dans son code une fonction qui est appelée fréquemment afin qu'elle s'exécute plus rapidement (-O3) alors qu'on préfère que les autres fonctions soient optimisées pour la taille (-Os).
- Les processeurs Intel Itanium profitent, quand on sélectionne le niveau d'optimisation -O3, d'un tout nouvel ordonnanceur d'instructions. On sait que l'architecture VLIW est très sensible à la qualité du code généré par le compilateur car tout le pari de cette architecture est de simplifier la partie hardware pour déporter la complexité coté génération de code. Le nouvel ordonnanceur permet de mieux fusionner les instructions, de renommer les registres et de faire de la spéculation d'exécution pendant la phase d'ordonnancement.
- GCC 4.4 apporte le support des dernières nouveautés du monde des processeurs. L'accélération matérielle du chiffrage AES est accessible (en ayant pour cible les processeurs Intel récents) avec l'option -maes tandis que les futures instructions vectorielles 256 bits AVX d'Intel, qui seront disponibles avec l'architecture Sandy Bridge prévue pour 2010/2011, sont accessibles avec l'option -mavx.
- Le code généré pour l'architecture de processeur ARM est largement optimisé par rapport aux versions antérieures. Il est maintenant possible d'optimiser spécifiquement pour des cibles telles que la version ARM Cortex-A9 (dont le support a été introduit dans le dernier noyau 2.6.29) ou la version Cortex-R4(F).
- Le support de l'architecture MIPS est significativement amélioré dans cette nouvelle version de GCC. Outre la génération de code pour les processeurs R10K, R12K, R14K et R16K on peut noter la possibilité d'optimiser le binaire pour les processeurs Cavium Octeon et pour les Loongson 2E/2F (du type de ceux qui se trouvent dans l'ultra-portable Gdium).
- Les processeurs de type Picochip font leur entrée dans la très longue liste des architectures supportées par GCC. Picochip est un processeur 16 bits multi-cœur qui regroupe plusieurs centaines de cœurs DSP sur une seule puce afin d'accélérer les traitements réseaux.
- Comme d'habitude avec chaque nouvelle version de GCC, la tolérance envers un code fautif est diminuée et le compilateur générera maintenant des erreurs alors que de simples alertes étaient signalées précédemment. On citera par exemple la sensibilité accrue du préprocesseur (chargé de lire les directives d'inclusions) qui refuse maintenant les #elif sans argument. Le développeur Debian Martin Michlmayr a listé les changements du préprocesseur ainsi que les nouveaux tests des includes manquants. Si vous êtes le mainteneur d'un paquet Debian alors Martin a déjà fait pour vous la déclaration de ces bugs triviaux (plus de 220 on été ouverts) et il ne vous reste plus qu'à corriger votre paquet pour que la compilation avec GCC 4.4 se déroule normalement.
L'infrastructure du projet...
La ferme de compilation du projet GCC a grandement augmenté ces derniers mois sa couverture des architectures supportées par le compilateur libre. Ce sont maintenant 12 architectures différentes qui sont représentées et on peut noter la présence de plusieurs bêtes de guerre (serveurs x86-64 bi-quad-cores avec 16 Go de mémoire vive).
Laurent Guerby est très impliqué dans la mise en place et l'organisation de cette ferme de compilation alors n'hésitez pas à prendre contact avec lui si vous pouvez faire un don de matériel ou obtenir des rabais auprès de vendeurs. Des machines puissantes en architecture mips, arm, powerpc64 ou sparc64 sont recherchées.
Pour finir...
Le compte rendu complet du sommet annuel GCC 2008 permet d'avoir une bonne idée du travail en cours sur le compilateur libre et de connaître à l'avance les nouveautés qui rentreront dans les futures versions. Les articles (très techniques) au format PDF sont disponibles sur le site du projet Fedora.
On y trouve notamment l'utilisation de GCC en tant qu'outil de vérification statique du code par les développeurs de Mozilla (Using GCC Instead of Grep and Sed), le travail sur la compilation incrémentale afin d'accélérer le cycle de développement (Incremental Compilation for GCC) ou encore l'inclusion de règles de codage directement dans le compilateur afin d'interdire la compilation de code non conforme aux normes édictées par un projet (Adding Coding Rule Checking Capabilities to the GCC Toolchain).
Aller plus loin
- Les nouveautés de GCC 4.4 (0 clic)
- La branche Graphite (0 clic)
- L'allocateur IRA (pdf) (0 clic)
- DLFP : Conférence Parinux : Le compilateur GCC vu de l'intérieur, et son évolution (0 clic)
- DLFP : Sortie de GCC 4.3 (0 clic)

# lorem ipsum 0.9104259963244442 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 9.
[^] # lorem ipsum 0.2694615584513746 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.9259359202589242 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
[^] # lorem ipsum 0.35110387238776675 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.1988387519482884 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 10.
# lorem ipsum 0.00014790333821242986 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 5.
[^] # Re: POISSON D'AVRIL !!!!!!
Posté par Nÿco . Évalué à 2.
(Bon, on va pouvoir parler du 755 maintenant...)
# lorem ipsum 0.3468641129758806 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
[^] # lorem ipsum 0.1676287354599952 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # Re: Gains de performance
Posté par patrick_g . Évalué à 10.
Jai pourtant bien pris soin de faire une importante précision : "test effectué sur le benchmark spécifique swim du comparatif standard SPEC2000".
L'ampleur du gain n'est donc pas généralisable.
[^] # lorem ipsum 0.07088182873174718 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 5.
[^] # lorem ipsum 0.21648212542429765 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 1.
[^] # lorem ipsum 0.5119489147439124 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
[^] # lorem ipsum 0.9939127946215801 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 8.
[^] # lorem ipsum 0.044969384600379865 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.045304191340975644 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 10.
[^] # lorem ipsum 0.28981200166960436 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
[^] # lorem ipsum 0.6568496410333082 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.6955039107198864 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 5.
[^] # lorem ipsum 0.8952952780717008 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 10.
[^] # lorem ipsum 0.925460167159755 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 1.
[^] # lorem ipsum 0.23731821704406125 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 8.
[^] # lorem ipsum 0.353028474704389 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
[^] # Re: Gains de performance
Posté par Ontologia . Évalué à 3.
Par exemple, Inria transfert, qui s'occupe de valoriser industriellement des technos développées au sein de l'inria, n'a pas la possibilité, le droit, d'embaucher en CDI un chercheur qui les intéresse au sein de l'Inria. Il doit passer par le concours classique, ou seul le théorique compte, sans compter les petites histoires existantes au sein de ce petit monde...
[^] # lorem ipsum 0.8747036325509694 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # Re: Gains de performance
Posté par Ontologia . Évalué à 4.
La recherche fondamentale et appliquée sont complémentaires, pas opposées.
Je vois pas ce qui te dérange...
[^] # lorem ipsum 0.8005784058948777 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.6968643820815388 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.2297785898947889 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.6932265103731551 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
[^] # Re: Gains de performance
Posté par Anonyme . Évalué à 5.
[^] # lorem ipsum 0.7529580767759663 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.5854130821166682 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.587817074347117 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.44452338520858753 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 10.
[^] # lorem ipsum 0.6693219045822713 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
[^] # lorem ipsum 0.7208707180999878 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.4061902513785197 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
[^] # lorem ipsum 0.6798833922295676 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 5.
[^] # lorem ipsum 0.7461597628390042 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.3172225433562161 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.0884916038145233 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.3476334589977129 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
[^] # lorem ipsum 0.7736636537813243 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.06884912500982092 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 1.
[^] # lorem ipsum 0.9964259527590368 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.15636645365168012 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 5.
[^] # lorem ipsum 0.38596159721348583 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.20833108966083366 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.7864996956535613 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.6028434881966966 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 1.
[^] # lorem ipsum 0.944874335960368 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 7.
[^] # lorem ipsum 0.5137604749889676 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 1.
[^] # lorem ipsum 0.5107559650305249 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 8.
[^] # lorem ipsum 0.6481366107688626 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.06226183386730201 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 5.
[^] # lorem ipsum 0.36689936776356713 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.6477113679495746 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.1378587671908166 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
[^] # lorem ipsum 0.7164059967886712 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 8.
[^] # lorem ipsum 0.7474070067958971 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.6608551681608476 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 5.
[^] # lorem ipsum 0.4896698626593406 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.726140416903552 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.6817124529571389 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.30233012261086156 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 1.
# Record
Posté par patrick_g . Évalué à 10.
Ahahaha ! Avec une performance aussi titanesque que celle-là je ne risque pas d'être battu et j'emporterai le record dans ma tombe !
PS : Interdiction aux petits malins de poster dès demain une news sur la sortie de Debian Squeeze...ce serait de la triche pure et simple ;-)
[^] # lorem ipsum 0.6702780496983585 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.023349041140963363 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 10.
[^] # lorem ipsum 0.48515797637883384 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.5179215870033219 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 6.
[^] # Re: Record
Posté par patrick_g . Évalué à 2.
[^] # lorem ipsum 0.12037970788812237 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # Re: Record
Posté par patrick_g . Évalué à 4.
[^] # lorem ipsum 0.9580732220393356 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 5.
[^] # lorem ipsum 0.42353618929491954 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
[^] # lorem ipsum 0.0033543966741807728 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 1.
[^] # lorem ipsum 0.40037633702193975 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 5.
# lorem ipsum 0.07157650876005786 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.24712100368656312 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 5.
[^] # lorem ipsum 0.7100812221971166 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
# lorem ipsum 0.7084361982610414 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
# lorem ipsum 0.28987733860488735 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 9.
[^] # lorem ipsum 0.09993198802688344 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
[^] # lorem ipsum 0.6070404160833363 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 6.
[^] # lorem ipsum 0.5793520357267484 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
[^] # lorem ipsum 0.8638424629940116 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 6.
[^] # lorem ipsum 0.9263796200290132 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 1.
[^] # lorem ipsum 0.1199741243570802 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 5.
[^] # lorem ipsum 0.9395398497018402 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
[^] # lorem ipsum 0.8895981320083124 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 1.
[^] # lorem ipsum 0.6576021180093308 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 4.
# lorem ipsum 0.2741850458776439 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 1.
[^] # lorem ipsum 0.17932657821041212 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 3.
[^] # lorem ipsum 0.6564568734322273 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 2.
# lorem ipsum 0.6111875470831875 Dolore molestias recusandae quam
Posté par Anonyme . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.