Вероятно, это простая и очевидная вещь, которую я просто не вижу, но как мне загрузить адрес в процессор MIPS64? В процессоре MIPS32 следующая псевдо-инструкция ассемблера:
la $at, LabelAddr
расширяется до:
lui $at, LabelAddr[31:16]
ori $at,$at, LabelAddr[15:0]
Глядя на набор инструкций MIPS64, я вижу, что lui
по-прежнему загружает 16-битные данные непосредственно в верхнюю половину 32-битное слово. Нет t выглядит как любая расширенная инструкция, которая немедленно загружает в верхнюю часть 64-битного слова. Таким образом, мне кажется, что для выполнения эквивалента псевдо-инструкции la
мне нужно было бы преобразовать в код примерно такой:
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]
Это кажется мне немного ... запутанным для чего-то столь же простого. при загрузке адреса, чтобы я был убежден, что я что-то упустил.
Что я упустил (если что-нибудь)?