1

Hum je n'ai pas le code d'origine, mais quand meme :

  a4ac:	e3a02010 	mov	r2, #16	; 0x10
    a4b0:	e1a01002 	mov	r1, r2
    a4b4:	e5c31000 	strb	r1, [r3]
    a4b8:	e3e03bea 	mvn	r3, #239616	; 0x3a800
    a4bc:	e2433f71 	sub	r3, r3, #452	; 0x1c4
    a4c0:	e2433003 	sub	r3, r3, #3	; 0x3
    a4c4:	e3a02008 	mov	r2, #8	; 0x8
    a4c8:	e08b1003 	add	r1, fp, r3
    a4cc:	e241300c 	sub	r3, r1, #12	; 0xc


Moi je le trouve vraiment tres fort ce petit GCC sur l'allocation des registres...

pour ceux qui parlent pas l'ARM:
- on commence par mettre 16 dans le registre R2
- on met R2 dans R1
- on stoque r1 dans l'adresse mémoire pointé par r3
- on fait quelques mumuse avec r3
- on met 8 dans r2
etc...


Hum autre exemple sympa un poil plus bas:

    a584:	eaffffff 	b	a588 <Function+0x110>
    a588:	e91ba800 	ldmdb	fp, {fp, sp, pc}


en gros, saute a l'instruction juste après trigic Pour les non ARM-iste, b est l'équivalent d'un jmp du 68k, en gros saute a l'adresse, sans rien modifier de tes registres pile & co)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2

C'est p't'êt'e pour aligner le code sur des multiples de 16 (cache align, toussa) ? M'enfin avec des nop ça aurait été compressible...

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

3

Mouais ça me parait douteux ça. A priori optimiser le code n'est pas une tâche facile, on est d'accord. Et ici l'optimisation est complètement pourrave (si tant est qu'il y ait de l'optimisation là dedans, ça ressemble plus à un code pas (encore) optimisé). Mais heu, désoptimiser du code pour le faire tenir dans plus d'espace, ça c'est peut être encore plus difficile, enfin si c'était le cas il aurait juste rajouté des nop comme tu le suggères, car ça ne coûte rien. (et sans doute que ça consomme moins d'énergie/produit moins de chaleur mais ça je sais pas trop)

Sinon j'ai jamais accordé aucune confiance à gcc donc je suis pas vraiment choqué (ouais j'aime pas les usines à gaz open source c pas un secret wink ) mais il me semble avoir lu il y a longtemps que ARM étant le mainteneur de la partie ARM de gcc, faisait exprès de garder gcc en retard sur son propre compilateur, je sais pas quel est l'état des choses actuellement, mais ça pourrait expliquer quelques trucs éventuellement.
Enfin pour un processeur si souvent utilisé dans l'embarqué c clairement mauvais (tout comme le compilateur de TI pour AMS cela dit tongue), ça ne fait que diminuer l'autonomie des appareils fonctionnant sur batterie :/

Et pour le saut moisi, il me semble que certaines fonctionnalités (je pense à la liaison incrémentale mais je sais pas si gcc/gcc-arm le fait) peuvent produire ce genre de code inutile. Mais après c'est clair que ce genre de choses ne devrait jamais apparaître ailleurs que dans un build debug, quelle qu'en soit la raison sorry
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

4

Je n'ai pas la source du truc, je ne sais pas comment il a été compilé, je n'ai que objdump pour tenter de dessasembler, et j'ai mal a la tete
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

5

GoldenCrystal (./3) :
(tout comme le compilateur de TI pour AMS cela dit tongue)

Dans le cas de TI, même le code C est mauvais grin
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

6

grin

7

ETP fait mieux que ./1
[/troll]
Tout ce qui passe pas par le port 80, c'est de la triche.

8

Sinon pour le désassemblage tu as pensé à convertir le code immonde en C (dans un main gigantesque avec des variables r0 .. r15 et des goto / label de partout) et à le recompiler avec un compilateur qui optimise à mort (puis éventuellement le re-décompiler) pour débrousailler un peu ? xD
(Le souci principal doit être la conversion originale je sais pas si il existe des outils pour ça avec l'assembleur ARM)
Et si c'est pas indiscret, ce désassemblage c'est plutôt du genre boulot ou plutôt du genre hobbie ? tongue
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

9

Et d'ailleurs comment tu sais que c'est fait par GCC? :s
Tout ce qui passe pas par le port 80, c'est de la triche.

10

Il s'en servait ptêt.
avatar
"- Nigga you know what the fuck I want, nigga: I want your motherfuckin' Daytons, and your motherfuckin' stereo! And I'll take a double burger with cheese!
- WHUT?"
I LOVE TO HATE/I HATE YOUR LOVE -AND I CAN'T FEEL AFFECTION FOR PEOPLE LIKE YOU!
CAALGOOONNNNN [TELLMESOMETHINGIDONTKNOW SHOWMESOMETHINGICANTUSE PUSHTHEBUTTONS CONNECTTHEGODDAMNDOTS] (Si Dieu existe il doit me détester...)

11

./onur: parceque c'est sous linux, et que je sais quelle toolchain a été utilisé
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

12

Mais le code pourri est peut-être de l'assembleur inline.

Et sinon, ça a peut-être été compilé sans flags d'optimisation, et dans ce cas c'est normal que le code est pourri, GCC n'optimise pas par défaut, il faut obligatoirement passer un flag d'optimisation. Malheureusement, on trouve toujours des gens qui utilisent GCC sans connaître son fonctionnement.
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é

13

Kevin Kofler (./12) :
Mais le code pourri est peut-être de l'assembleur inline.
Ben voyons... c'est bien connu que les gens qui utilisent de l'assembleur inline sont des newbies qui codent très mal, et qu'ils s'en servent pour remplacer du code tout simple...
Fallait vraiment oser la faire celle-là tongue
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

14

Moi j'ai une autre théorie sinon: Et si le code avait été produit par un singe ?
J'avoue je vous ai foutu un lien vers wikipédia c lame, mais vous devriez pas avoir de mal à comprendre où je veux en venir cheeky

Sinon je pense pas que ce que KK ait avancé soit complètement débile. Quasi certainement faux, mais pas impossible. (Tout dépend de comment GCC gère l'assembleur inline, et là de toutes façons j'en sais rien, et ça doit varier selon la plateforme)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

15

C'est pas impossible en effet, c'est juste extrêmement peu probable. Et ça illustre merveilleusement bien le fait que Kevin ne puisse même pas envisager que son GCC favori ait pu générer du code minable cheeky

C'est d'autant plus amusant que sa deuxième hypothèse (que ç'ait été compilé sans optimisation) est déjà nettement plus vraisemblable.
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

16

D'expérience GCC génère du code vraiment bon pour ARM. Ca n'a pas l'air d'être le cas ici mais ça aurait aussi pu être tout simplement des données immédiates (un pool par exemple).
Je pense que Kevin a raison, le code a certainement dû être compilé sans optimisation...
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

17

ca par contre c'est tres possible, j'ai deja vu des collegues me demader a quoi servait le code -O2 que j'avais rajoute partout dans un makefile (bah oue du coup ils connaissaient pas les regles generiques non plus)

18

Personnellement, je n'ai pas remarqué de différence entre -O1 et -O2... -O3, par contre, change beaucoup la donne...
Je me souviens
Ad mari usque ad mare

GENERATION 23: The first time you see this, copy it into your sig on any forum and add 1 to the generation. Social experiment.

19

Et la différence entre rien du tout et -O1/2 est encore bien plus sensible.
avatar