Questa è probabilmente una cosa semplice e ovvia che non vedo, ma come caricare un indirizzo in un processore MIPS64? In un processore MIPS32 seguente assemblatore pseudo-istruzione:Caricamento di un indirizzo in MIPS64
la $at, LabelAddr
espande in:
lui $at, LabelAddr[31:16]
ori $at,$at, LabelAddr[15:0]
Guardando il set di istruzioni MIPS64, vedo che lui
carichi ancora a 16 bit immediato nella metà superiore di una parola a 32 bit. Non sembra esserci alcun tipo di istruzione espansa che carichi un'immediata ovunque nell'area superiore di una parola a 64 bit. Questo sembra, dunque, che per fare l'equivalente di un la
pseudo-istruzioni che avevo bisogno di espandersi in codice di qualcosa di simile:
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]
Questo mi sembra un po '... contorto per qualcosa di così fondamentale come il caricamento un indirizzo quindi mi lascia convinto di aver trascurato qualcosa.
Che cosa ho trascurato (semmai)?
Questo è un problema comune con architetture RISC - PowerPC prende anche un numero simile di istruzioni per caricare un 64 bit immediato indirizzo/valore. Probabilmente vorrai una macro per questo. –
Quindi, in breve, non ho davvero trascurato nulla. Questo è in realtà un po 'di sollievo. –
Probabilmente no - potrebbe esserci un modo leggermente più succinto di farlo su MIPS64 quindi se lo nascondi in una macro per ora puoi sempre migliorarlo in seguito. –