這可能是一個簡單但明顯的事情,我只是沒有看到,但我如何在MIPS64處理器中加載地址?在MIPS32處理器以下彙編僞指令:在MIPS64中加載地址
la $at, LabelAddr
擴展爲:
lui $at, LabelAddr[31:16]
ori $at,$at, LabelAddr[15:0]
望着MIPS64指令集,我看到lui
仍然加載16位立即進入上半的32位字。似乎沒有任何類型的擴展指令將立即加載到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]
這令我有點...令人費解的東西一樣基本負荷一個地址,所以它讓我相信我忽略了一些東西。
我忽略了什麼(如果有的話)?
這與RISC架構一個共同的問題 - 也PowerPC的採取類似的指令數來加載一個64位立即地址/值。你可能會想要一個宏。 – 2010-10-12 12:09:21
因此,總之,我沒有真正忽視任何事情。這實際上是一種解脫。 – 2010-10-12 12:17:30
可能不會 - 在MIPS64上做這件事可能會稍微簡潔一些,所以如果您現在將它隱藏在宏中,那麼您以後可以隨時對其進行改進。 – 2010-10-12 20:59:37