Ben bir trivia soruya bir cevap arıyorum düşünüyorum. MIPS mimarisinin neden sadece XOR'ing kendisine karşı XOR'ing ile aynı şeyi elde edebilirsiniz bir kayıtta açık "sıfır" değeri kullandığını anlamaya çalışıyorum. Operasyonun sizin için zaten yapıldığını söyleyebiliriz; ancak, çok fazla "sıfır" değer kullanacağınız bir durumu hayal bile edemiyorum. Hennessey'in orijinal makalelerini okudum ve gerçek bir gerekçe olmadan sadece bir sıfır olarak atar.
Sabit kodlu ikili atamanın sıfır olması için mantıklı bir neden var mı?
Güncelleme: PIC32MZ MIPS çekirdeği için xc32-gcc bir yürütülebilir dosya 8k, "sıfır" tek bir örneğim var.
add t3,t1,zero
asıl cevap: MIPS ve koşul kodları hakkında bilgi sahibi olan kişiye lütuf verdim. Cevap aslında koşullar için MIPS mimarisinde yatmaktadır. Başlangıçta buna zaman ayırmak istemememe rağmen, opensparc , MIPS-V ve OpenPOWER (bu belge dahili idi) için mimariyi gözden geçirdim ve işte özet bulgular. Boru hattının mimarisi nedeniyle dalların karşılaştırılması için gerekli R0 kaydı.
- sıfır ve dal ile tam sayı karşılaştırması (bgez, bgtz, blez, bltz)
- tamsayı iki kayıt ve şube karşılaştırmak (beq, bne)
- tamsayı iki yazmaç ve tuzağı karşılaştır (teq, tge, tlt, tne)
- tamsayı karşılaştırma kayıt ve hemen ve tuzak (teqi, tgei, tlti, tnei)
Sadece donanımın uygulamada nasıl göründüğüne gelir. MIPS-V kılavuzundan sayfa 68'de referans verilmemiş bir teklif var:
Koşullu dallar, koşul kodlarını (x86, ARM, SPARC, PowerPC) kullanmak yerine iki kayıt arasındaki (PA-RISC ve Xtensa ISA'da olduğu gibi) aritmetik karşılaştırma işlemlerini içerecek veya yalnızca bir kaydı sıfıra ( Alfa, MIPS) veya yalnızca eşitlik için iki kayıt (MIPS). Bu tasarım, kombine bir karşılaştırma ve şube talimatının normal bir boru hattına girdiği, ek koşul kodu durumunu veya geçici bir kayıt kullanılmasını önlediği ve statik kod boyutunu ve dinamik komut alma izini azalttığı gözlemiyle motive edilmiştir. Bir başka nokta, sıfır ile karşılaştırmanın önemsiz olmayan devre gecikmesi gerektirmesidir (özellikle gelişmiş işlemlerde statik mantığa geçtikten sonra) ve bu nedenle neredeyse aritmetik büyüklük karşılaştırması kadar pahalıdır. Kaynaşmış bir karşılaştırma ve dallama talimatının bir başka avantajı da dalların ön uç talimat akışında daha önce gözlemlenmesidir ve bu nedenle daha önce tahmin edilebilir. Aynı koşul kodlarına dayanarak birden fazla dalın alınabilmesi durumunda, koşul kodları olan bir tasarıma belki de bir avantaj vardır, ancak bu durumun nispeten nadir olduğuna inanıyoruz.
MIPS-V belgesi alıntılanan bölümün yazarına çarpmaz. Herkese zamanları ve ilgileri için teşekkür ediyorum.