BRAS de montage en boucle
for (int i = 0; i < 10000; i++)
a[i] = b[i] + c[i]
Que fait le BRAS de montage pour ce langage de haut niveau?
Edit:
Je suis aussi en supposant que l'adresse de base de l'Un est en R8, la base
adresse de B est en R9, et de l'adresse de base de C est dans R10
et A,B,C sont tous les int des tableaux
Beaucoup apprécié
J'ai essayé:
MOV R0, #0 ; Init r0 (i = 0)
Loop:
a[i] = b[i] + c[i] //How to fix this?
ADD R0, R0, #1 ;Increment it
CMP R0, #1000 ;Check the limit
BLE Loop ;Loop if not finished
Qu'avez-vous tente?
Vous pourriez préciser ce que vous demandez ici - BRAS style de l'Assemblée et Android de programmation sont deux choses totalement différentes; Android est VM style de l'environnement comme Java; vous ne pouvez pas utiliser de Montage, car le code est interprété par le moteur d'exécution, de ne pas exécuter directement sur le processeur.
Concernant votre edit; qu'avez-vous essayer ASM; ce logiciel/de l'appareil utilisez-vous ?
Ce n'est pas forcément pour Android. Je veux juste de l'expérience avec le BRAS de montage comme il fonctionner sur des appareils mobiles..
Vous pourriez préciser ce que vous demandez ici - BRAS style de l'Assemblée et Android de programmation sont deux choses totalement différentes; Android est VM style de l'environnement comme Java; vous ne pouvez pas utiliser de Montage, car le code est interprété par le moteur d'exécution, de ne pas exécuter directement sur le processeur.
Concernant votre edit; qu'avez-vous essayer ASM; ce logiciel/de l'appareil utilisez-vous ?
Ce n'est pas forcément pour Android. Je veux juste de l'expérience avec le BRAS de montage comme il fonctionner sur des appareils mobiles..
OriginalL'auteur CyberShot | 2012-08-16
Vous devez vous connecter pour publier un commentaire.
En supposant que ce langage de haut niveau n'a rien contradictoires avec le C, vous pouvez utiliser un bras compilateur C pour créer le code d'assemblée à partir de votre extrait. Par exemple, si vous avez de la suite dans le test.c,
vous pouvez exécuter
pour créer un test.s de fichier qui contiendra le code d'assemblée pour ton test de la fonction ainsi que quelques trucs supplémentaires. Vous pouvez voir comment votre boucle ai compilé dans le montage ci-dessous.
Maintenant, le problème avec cette approche est confiant, le compilateur génère un code optimal pour votre étude, ce qui pourrait ne pas être toujours le cas, mais ce que vous obtenez des réponses rapides à vos questions, comme ci-dessus, au lieu d'attendre pour les gens 🙂
-- extra --
GCC permet de mettre des variables dans certains registres, voir la documentation connexe.
Vous pouvez obtenir des bras de l'instruction feuille de triche ici.
Des versions plus récentes de GCC crée un meilleur bras de code que l'on pourrait attendre. Au-dessus de ciselée est généré par la version 4.4.3, et je peux confirmer Linaro's 4.7.1 prouve ma demande. Donc, si vous prenez mon approche de l'utilisation la plus récente de l'outil de la chaîne que vous pouvez obtenir.
OriginalL'auteur auselen
http://www.peter-cockerell.net/aalp/html/ch-5.html
OriginalL'auteur alpera
OriginalL'auteur old_timer
De construire sur @alpera 's réponse - vous pouvez aussi dérouler la boucle de 4 ops à la fois - bien que si vous obtenez un avantage de performance dépend si l'accès à la mémoire ou le pipeline de décrochage autour de la branche est du plus grand effet
Si vous avez NÉON de l'unité à portée de main, nous pourrions le faire de cette façon - dans ce cas, il se paralléliser les charges, les magasins et ajoute de l'effet de réduire le problème à 5 instructions qui s'exécutent deux itérations de la boucle à la fois.
Un compilateur C est la volonté de ne pas générer de code serré par défaut (ou paralleize pour le NÉON), comme il se doit supposer que les tampons utilisés pour la lecture et l'écriture (r8,r10 et r11) peut éventuellement se chevaucher, de là, une écriture par le biais r8 peut être immédiatement lire dans la prochaine itération de la boucle à travers r9 ou r10. Vous pouvez utiliser le
restrict
(__restrict
en C++) modificateur de dire au compilateur que ce n'est pas le cas.OriginalL'auteur marko