| |
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 un administrateur du site.

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

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

Alléger le noyau !
Pardon Laurent, j’avais effectivement mal lu. Merci à toi pour cet espace d’échange bienveillant et (...)

Alléger le noyau !
Bonjour Stéphane, merci de ta contribution ! Non, les auteurs de l’article ne proposent pas (...)

Alléger le noyau !
Bonjour à tous, Tout d’abord, je salue Nat, avec qui j’ai eu longtemps le plaisir d’échanger dès (...)

Alléger le noyau !
Merci ! Pistes pertinentes : – le BMC, en général, est encore dynamique. Exemple : (...)

Alléger le noyau !
Excellent article écrit par une personne qui peut parler des OS en sachant de quoi il retourne. (...)