これはおそらく私が見ているのではない単純で明白なことですが、MIPS64プロセッサにアドレスをロードするにはどうすればよいですか?MIPS32プロセッサでは、次のアセンブラ疑似命令:
la $at, LabelAddr
に展開:
lui $at, LabelAddr[31:16]
ori $at,$at, LabelAddr[15:0]
MIPS64命令セットを見るとlui
、32ビットワードの上半分に16ビットのイミディエートがロードされていることがわかります。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]
これは私を少し驚かせます...アドレスをロードするのと同じくらい基本的な何かのために複雑なので、私は何かを見落としていると確信します。
私が見落としているのは何ですか(もしあれば)?