C'est probablement une chose simple et évidente que je ne vois pas, mais comment charger une adresse dans un processeur MIPS64? Dans un processeur MIPS32 la pseudo-instruction assembleur suivante:Chargement d'une adresse dans MIPS64
la $at, LabelAddr
se développe dans:
lui $at, LabelAddr[31:16]
ori $at,$at, LabelAddr[15:0]
regardant le jeu d'instructions MIPS64, je vois que lui
charges encore immédiate de 16 bits dans la moitié supérieure d'un mot de 32 bits. Il ne semble y avoir aucune sorte d'instruction étendue qui charge immédiatement n'importe où dans la zone supérieure d'un mot de 64 bits. Cela semble donc que pour faire l'équivalent d'un pseudo-instruction la
je besoin de se développer dans le code quelque chose comme:
lui $at, LabelAddr[63:48]
ori $at, $at, LabelAddr[47:32]
sll $at, 16
ori $at, $at, LabelAddr[31:16]
sll $at, 16
ori $at, $at, LabelAddr[15:0]
Cela me semble un peu ... alambiquée pour quelque chose aussi simple que le chargement une adresse donc ça me laisse convaincu que j'ai oublié quelque chose.
Qu'est-ce que j'ai oublié (si quelque chose)?
Ceci est un problème commun avec les architectures RISC - PowerPC prend également un nombre similaire d'instructions pour charger une adresse immédiatement 64 bits/valeur. Vous aurez probablement besoin d'une macro pour cela. –
Donc, en bref, je n'ai rien oublié. C'est en fait un peu un soulagement. –
Probablement pas - il pourrait y avoir une façon un peu plus succincte de le faire sur MIPS64, donc si vous le cachez dans une macro pour l'instant, vous pouvez toujours l'améliorer plus tard. –