Esto es probablemente algo simple y obvio que simplemente no veo, pero ¿cómo cargo una dirección en un procesador MIPS64? En un procesador de MIPS32 la siguiente ensamblador pseudo-instrucción:Cargando una dirección en MIPS64
la $at, LabelAddr
se expande en:
lui $at, LabelAddr[31:16]
ori $at,$at, LabelAddr[15:0]
Mirando el conjunto de instrucciones MIPS64, veo que lui
aún carga un 16 bits inmediata en la mitad superior de una palabra de 32 bits. No parece haber ningún tipo de instrucción expandida que cargue un inmediato en cualquier lugar en el área superior de una palabra de 64 bits. Esto parece, entonces, que para hacer el equivalente de un pseudo-instrucción la
que había necesidad de ampliar en un 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]
Esto me parece un poco complicado ... por algo tan básico como la carga una dirección por lo que me deja convencido de que he pasado por alto algo.
¿Qué es lo que he pasado por alto (si acaso)?
Este es un problema común con las arquitecturas RISC - PowerPC también tiene un número similar de instrucciones para cargar un 64 bits inmediata dirección/valor. Probablemente quieras una macro para esto. –
Entonces, en resumen, no he pasado por alto nada. Eso es realmente un alivio. –
Probablemente no; puede haber una manera un poco más sucinta de hacerlo en MIPS64, por lo que si lo oculta en una macro por ahora, siempre puede mejorarlo más adelante. –