· kaynak Hacker News – Front Page (hnrss.org)
vfmaddrnd231pd: Intel, hiç piyasaya çıkmamış bir FMA yuvarlama instruction'ını belgelemiş
Bir geliştiricinin vfmaddrnd231pd üzerine yaptığı araştırma: assembler'ların reddettiği, CPU'ların tanımsız saydığı ve 2026 manual'ından silinen, talimat başına yuvarlama yapan FMA için Intel manual'ındaki bir giriş.

Manual'da hayalet bir giriş
Hacker News ana sayfasına çıkan purplesyringa'nın blog yazısı, Intel dokümantasyonunun garip bir köşesini ele alıyor: Intel Software Development Manual'da ayrıntılarıyla açıklanan, ancak hiçbir piyasaya çıkmış CPU'da var olmamış gibi görünen vfmaddrnd231pd adlı bir x86 instruction'ı.
Yazıya göre SDM'nin 2024 baskısı, bu instruction için tam kapsamlı bir giriş içeriyor; packed double-precision değerler üzerinde, davranışı bir immediate byte tarafından yönlendirilen bir fused multiply-add tanımlıyor. Manual'a göre bu immediate, yuvarlama modunu, denormals-are-zero (DAZ), flush-to-zero (FTZ) ve exception bastırmayı kapsayan birkaç bit alanını barındırıyor. Mnemonic'teki "rnd" kısmı, bu instruction'ı üyeleri vfmadd231pd gibi görünen sıradan FMA ailesinden ayırıyor.
Tarif ettiği yetenek gerçekten çekici. Sıradan x86 floating-point kodu yuvarlama modunu global bir kontrol ayarından devralır ve bu ayarı değiştirmek nispeten yavaştır. Yuvarlamanın bir immediate içine gömüldüğü bir instruction bu maliyeti ortadan kaldırırdı. Yazar, bir FMA'nın düz toplama, çıkarma ve çarpmannın yerine geçebildiği için böyle tek bir instruction'ın, AVX-512 bulunmayan donanımda neredeyse tüm floating-point aritmetiğine kontrollü yuvarlama kazandıracağını; yazının iddiasına göre bu da bazı yuvarlamaya bağımlı algoritmaları çarpıcı biçimde hızlandırırdı.
Her kontrol olumsuz çıkıyor
Instruction, yazarın uyguladığı her pratik testte başarısız oluyor:
- GNU assembler mnemonic'i tanımıyor.
- Manual'ın adını verdiği intrinsic'ler, _mm_fmaddround_pd ve _mm256_fmaddround_pd, yalnızca Clang'da değil Intel'in kendi derleyicisi ICC'de de yok.
- Manual'daki opcode girişinden kodlamayı elle oluşturmak, VEX.DDS.128.66.0F3A.W1 B8 /r /ib, dokümanın başka hiçbir yerinde görünmeyen garip bir "DDS" gösterimiyle karşılaşıyor. Yazarın alıntıladığı bir Stack Overflow cevabına göre DDS yalnızca dokümantasyon amaçlıydı ve sonraki SDM revizyonlarından çıkarıldı.
- FMA setini gerçekten uygulayan bir Haswell makinesinde instruction'ı çalıştırmak #UD, yani tanımsız instruction exception'ı tetikliyor.
İki garip detay daha öne çıkıyor. Manual, gerçek FMA instruction'larında olduğu gibi ps/pd/sd/ss operand genişlikleri ile 132/213/231 operand sıralarının alışıldık matrisi yerine yalnızca bu tek pd/231 varyantını belgeliyor. Ve giriş, 2024 baskısında mevcut olmasına rağmen SDM'nin 2026 baskısından tamamen kayboluyor.
Muhtemelen ne oldu
Yazar basit bir yazım hatası fikrini reddediyor, çünkü giriş başka hiçbir instruction'ın açıklamasına benzemeyen özel tablolar ve pseudocode ile geliyor. Öne sürülen en iyi açıklama, Intel'in bir vfmaddrnd* ailesi planladığı, geliştirmenin ilerleyen aşamalarında bir sorunla karşılaştığı, bunu silikondan çıkardığı ama yıllarca manual'ı temizlemeyi başaramadığı. Yazar bu hipotezi doğrulamanın bir yolu olmadığını kabul ediyor ve Intel içinde tanıdığı olan herkese gerçek hikayeyi sorarak bitiriyor.
Neden önemli
Düşük seviyeli geliştiriciler için SDM, normalde x86 silikondunun ne yaptığının nihai beyanı olarak kabul edilir. Benzersiz pseudocode, adlandırılmış intrinsic'ler ve alışılmadık bir kodlama gösterimiyle yıllarca varlığını sürdüren bir hayalet giriş, bu kaynağın bile işlemcilerin gerçekte kabul ettiğinden sapabileceğini ve dokümantasyondan türetilen davranışın gerçek donanıma karşı doğrulanması gerektiğini gösteriyor.
Hikaye ayrıca görünüşe göre kaybedilen şeyi de gözler önüne seriyor. AVX-512 gerektirmeyen talimat başına yuvarlama, doğruluğu ya da hızı yuvarlamayı kontrol etmeye bağlı kodlar için — özellikle de AVX-512 desteği hiç kazanmamış geniş kurulu makine tabanında — anlamlı bir yetenek olurdu.
Son olarak, manual baskıları arasındaki sessiz kaldırma başlı başına önemli. Eşlik eden bir not olmadan, 2024 SDM'sini okuyan biri bu instruction'ın hiç çıkmadığını bilemezken 2026 baskısını okuyan biri de bunun bir zamanlar vaat edildiğini bilemez.
- #x86
- #intel
- #assembly
- #floating-point
- #cpu-architecture