fence
lyszt.net couvre fence et d'autres instructions RISC-V plus en détail.
Description
Les instructions FENCE servent à ordonner les accès d'E/S aux dispositifs et les accès mémoire tels qu'ils sont vus par les autres harts RISC-V et les dispositifs externes ou coprocesseurs. Toute combinaison d'entrée de dispositif (I), de sortie de dispositif (O), de lectures mémoire (R) et d'écritures mémoire (W) peut être ordonnée par rapport à toute combinaison des mêmes opérations. De façon informelle, aucun autre hart RISC-V ni dispositif externe ne peut observer une opération de l'ensemble successor suivant un FENCE avant une opération de l'ensemble predecessor précédant le FENCE. memorymodel fournit une description précise du modèle de cohérence mémoire RISC-V.
Les instructions FENCE ordonnent également les lectures et écritures mémoire effectuées par le hart telles qu'observées par les lectures et écritures mémoire effectuées par un dispositif externe. Cependant, les instructions FENCE n'ordonnent pas les observations d'événements effectuées par un dispositif externe au moyen de tout autre mécanisme de signalisation.
L'EEI définira quelles opérations d'E/S sont possibles et, en particulier, quelles adresses mémoire, lorsqu'elles sont accédées par des instructions de chargement et de stockage, seront traitées et ordonnées comme des opérations d'entrée de dispositif et de sortie de dispositif respectivement plutôt que comme des lectures et écritures mémoire. Par exemple, les dispositifs d'E/S mappés en mémoire seront généralement accédés avec des chargements et des stockages non mis en cache qui sont ordonnés à l'aide des bits I et O plutôt que des bits R et W. Des extensions du jeu d'instructions peuvent également décrire de nouvelles instructions d'E/S qui seront également ordonnées à l'aide des bits I et O dans une instruction FENCE.
Encodage du mode Fence
Le champ de mode FENCE fm définit la sémantique de l'instruction FENCE. Un FENCE (avec fm=0000) ordonne toutes les opérations mémoire de son ensemble prédécesseur avant toutes les opérations mémoire de son ensemble successeur.
Une instruction FENCE.TSO est encodée comme une instruction FENCE avec fm=1000, predecessor=RW et successor=RW. FENCE.TSO ordonne toutes les opérations de chargement de son ensemble prédécesseur avant toutes les opérations mémoire de son ensemble successeur, et toutes les opérations de stockage de son ensemble prédécesseur avant toutes les opérations de stockage de son ensemble successeur. Cela laisse les opérations de stockage non-AMO de l'ensemble prédécesseur de FENCE.TSO non ordonnées par rapport aux chargements non-AMO de son ensemble successeur.
Les champs inutilisés dans les instructions FENCE--rs1 and rd--sont réservés pour des fences à grain plus fin dans de futures extensions. Pour la compatibilité ascendante, les implémentations de base doivent ignorer ces champs#, et les logiciels standard doivent mettre ces champs à zéro. De même, de nombreux paramètres de fm et d'ensembles prédécesseur/successeur sont également réservés pour un usage futur. Les implémentations de base doivent traiter toutes ces configurations réservées comme des instructions FENCE (avec fm=0000), et les logiciels standard ne doivent utiliser que des configurations non réservées.