2010-10-12 13 views
7

Bu muhtemelen göremediğim basit, açık bir şey, ancak MIPS64 işlemcisine nasıl adres yüklerim? Bir MIPS32 işlemcisinde aşağıdaki montajcı sözde talimat: içineMIPS64'de adres yükleme

la $at, LabelAddr 

genişletir:

lui $at, LabelAddr[31:16] 
ori $at,$at, LabelAddr[15:0] 

MIPS64 komut kümesi bakınca lui hala üst yarısında içine 16 bit hemen yükler görüyoruz 32 bitlik bir kelime. Herhangi bir yerde, 64 bitlik bir kelimenin üst kısmına anında yüklenen herhangi bir genişletilmiş talimat görünmüyor.

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] 

Bu biraz olarak beni vurur ... yükleme gibi temel olarak bir şey için dolambaçlı: Bu daha sonra, ben gibi kod içine bir şey genişletmek gerekiyordu bir la sözde talimat eşdeğer yapmak, görünüyor bir adres bu yüzden beni bir şey gözden kaçırdığına inandırdı.

Neyi göz ardı ettim (bir şey varsa)?

+0

Bu RISC mimarileri ile ortak bir sorundur - PowerPC da 64 bit acil adres/değer yüklemek için talimatlar benzer sayıda sürer. Bunun için muhtemelen bir makro isteyeceksiniz. –

+0

Kısacası, aslında hiçbir şeyi gözden kaçırmadım. Bu aslında biraz rahatlama. –

+0

Muhtemelen hayır - MIPS64'te bunu yapmanın biraz daha özlü bir yolu olabilir, bu yüzden şimdilik bir makroda saklarsanız, daha sonra her zaman iyileştirebilirsiniz. –

cevap

3

Çok fazla sabit yüklemeniz gerekiyorsa, sabit bir havuza (A.K.A "literal pool") koymanız ve sonra bir ld yönergesiyle yüklemeniz gerekir.

Örneğin

: Eğer talimat ld $t1, 48($s0)

Bu teknik ile $t1 için yükleyebilirsiniz, ARM, nerede çok yaygın olan $s0 havuzunun taban adresini içerir ve yüklemek istediğiniz sabit 48 ofset eklemek edilir Talimatlar sadece 12 bit yükleyebilir. Ve Java da kullanılmaktadır.

Sadece basit MIPS32'yi biliyorum, bu nedenle komut sözdizimi çok doğru olmayabilir, ama bu fikir.


düzenleme: ben bir şey gözden ettik beni inandırıyor işte bir örnek here

0

adres var. Ne gözardı ettim (eğer bir şey varsa)?

Ne eksik olsa Mips64 içinde talimat boyutu 32bit (4bytes) kalır olmasıdır. Bu 32bit kodlu kodlama sisteminde 'l' 'lui' + 'ori' kombinasyonuna çevrilen 'max' maksimum 32 bit değeri (adres) kullanabilir. Bir 64bit adresi kolayca kodlamak için 4byte makine talimatında yeterli bit yoktur. 64bit adresiyle ilgilenmek için, vardiyalarla (dsll) birlikte aynı (lui + ori) daha fazla yineleme kullanılır.

Paxym

+0

Bu şekilde, her yerde kullanıldığında çok verimsiz tek bir değer yüklemek için 6 talimata ihtiyacınız vardır –