J'ai lu ici qu'une instruction jmpl doit être suivie de nop.

Le manuel SPARC V8 m'indique qu'une instruction rett doit toujours être précédée de une instruction jmpl.

Mais je n'ai pas pu trouver de relation entre les instructions jmpl et restore. Je travaille actuellement sur l'architecture SPARC V8 et l'un des fichiers ELF que j'ai rencontrés a un restore juste après jmpl, alors que je m'attendais à un nop. Je ne sais pas si c'est correct ou si l'ELF (et par extension le code SPARC) est faux.

Avoir restore juste après jmpl est-il correct?

1
SonOfEl 2 sept. 2020 à 16:08

2 réponses

Meilleure réponse

J'ai lu ici qu'une instruction jmpl doit être suivie de nop.

... et la page que vous avez liée vous explique pourquoi:

Ainsi, lorsque vous programmez en SPARC, suivez toutes les call et jmpl instructions avec une instruction nop pour éviter d'exécuter une instruction supplémentaire par inadvertance ...

Cela signifie: Le nop n'est pas une exigence du processeur, mais c'est un conseil de l'auteur de la page Web aux programmeurs pour éviter les erreurs.

Sur une autre page de le < strong> même cours l'auteur explique qu'un programmeur professionnel (ou un compilateur C) utiliserait la séquence suivante pour revenir d'une fonction:

jmpl %i7+8, %g0
restore

Cela signifie qu'il est non seulement autorisé à utiliser restore dans le créneau de retard de l'instruction jmpl, mais c'est même la séquence normale pour revenir d'une fonction.

6
Martin Rosenau 2 sept. 2020 à 14:22

Vous n'avez pas besoin d'un nop. Sachez simplement que l'instruction après jumpl sera exécutée, car elle est toujours dans le pipeline. Ainsi jmpl suivi de rett exécute le jumpl et le rett. Il s'agit probablement d'une routine de service d'interruption ou similaire?

2
TonyK 2 sept. 2020 à 13:16