Carregando um endereço no MIPS64
Provavelmente é uma coisa simples e óbvia que simplesmente não estou vendo, mas como carregar um endereço em um processador MIPS64? Em um processador MIPS32, a seguinte pseudo-instrução do assembler:
la $at, LabelAddr
Expande para:
lui $at, LabelAddr[31:16]
ori $at,$at, LabelAddr[15:0]
Olhando para o conjunto de instruções MIPS64, vejo quelui
ainda carrega um imediato de 16 bits na metade superior de uma palavra de 32 bits. Não parece haver nenhum tipo de instrução expandida que carrega um imediato em qualquer lugar na área superior de uma palavra de 64 bits. Parece, então, que fazer o equivalente a umla
pseudo-instrução eu precisaria expandir no código algo como:
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]
Isso me parece um pouco ... complicado para algo tão básico quanto carregar um endereço, para que eu me deixe convencido de que esqueci algo.
O que é que eu tenho esquecido (se alguma coisa)?