Site WWW de Laurent Bloch
Slogan du site

ISSN 2271-3905
Cliquez ici si vous voulez visiter mon autre site, orienté vers des sujets moins techniques.

Pour recevoir (au plus une fois par semaine) les nouveautés de ce site, indiquez ici votre adresse électronique :

Forum de l’article

Mon premier programme en assembleur RISC-V

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par les responsables.

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.
Attention ! Si votre message contient un lien, il devra être validé par le webmestre. Inutile de le poster à nouveau ;-)

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rappel de la discussion
Mon premier programme en assembleur RISC-V
Robert Ehrlich - le 20 décembre 2021

Avec beaucoup de retard, puisqu’on t’a proposé des améliorations, j’y vais aussi de la mienne. Elle repose essentiellement sur ta remarque : Un accès mémoire, en 2021, c’est le temps de 100 à 200 instructions.

Dans ta dernière version, les deux premières instructions de la boucle principale sont deux accès mémoire, le second étant dépendant du premier, il ne peut s’exécuter que quand le premier est terminé et que l’octet souhaité est donc bien présent dans x28. L’exécution de la deuxième instruction reste donc bloquée le temps d’un accès mémoire. Vu l’architecture pipe-line, il n’est pas clair que ça bloque aussi les suivantes, mais on a plus de chances que ça marche si les instructions qui suivent la première ne nécessitent pas la présence de l’octet dans x28.

Je suggère donc de remonter les 2 instructions d’incrémentation "addi x12, x12, 1" et "addi x13, x13, 1" entre le "lbu" et le "sb". Evidemment, comme entre temps x13 a été incrémenté, la dernière devient "sb x28, -1(x13)".

Il semble d’ailleurs, d’après la réponse de Michel Billaud, que le compilateur C soit adepte de cette stratégie, mais pas à fond, puisqu’il insère une incrémentation entre les deux accès alors qu’il aurait pu en caser deux. Je ne comprends pas bien sa remarque sur les pointeurs sur les précédents, de toute façon l’addition du déplacement au registre d’adresse s’effectue, elle prend le même temps, que le déplacement soit positif, négatif ou nul.

Mon premier programme en assembleur RISC-V
Laurent Bloch - le 20 décembre 2021

Robert, je savais que je pouvais m’attendre de ta part à une lecture attentive et à des corrections. Merci !

Derniers commentaires

À la Commission de développement de l’informatique du Ministère des Finances
Bonjour, Sur Noël Aucagne, je vous recommande ceci : https://www.afsp.info/archives/congres/congres

Premiers programmes en Rust
Bonjour, Si vous saviez comme vos messages me font plaisir !! J’ai enseigné et pratiqué (…)

Une sacrée envie de foutre le bordel
D’accord avec le commentaire précédent... très élogieux comme portrait, qui passe un peu vite (…)

Programmation de droite à gauche et vice-versa
Bonsoir, Plongé dans ma biblio de l’histoire des méthodes, je suis allé faire un tour à la bib (…)

Prospérité, puissance et pauvreté : pourquoi certains pays réussissent mieux que d’autres
Bonjour Frédéric, merci de ce message. Alors, Acemoğlu et Robinson ne disent pas explicitement (…)