VEX öneki - VEX prefix

VEX öneki ("vektör uzantılarından") ve VEX kodlama şeması bir uzantı içeriyor x86 ve x86-64 komut seti mimarisi için mikroişlemciler itibaren Intel, AMD ve diğerleri.

Özellikleri

VEX kodlama şeması, yeni komutların tanımlanmasına ve önceden var olanların genişletilmesine veya değiştirilmesine izin verir. talimat kodları. Bu, aşağıdaki amaçlara hizmet eder:

  • opcode harita, gelecekteki talimatlara yer açmak için genişletilmiştir.
  • Komut kodlarının dört işlenen (artı anlık) içermesine izin verir, burada orijinal şema yalnızca iki işlenen (artı anlık) sağlar.
  • Boyutuna izin verir SIMD vektör kayıtlar 128'den uzatılacakbitler XMM, YMM adlı 256 bitlik yazmaçlara kaydeder. Kayıt boyutunun daha fazla genişletilmesi için yer var.
  • Var olan iki işlenenli talimatların, hedef yazmacının her iki kaynak yazmacından farklı olduğu, tahribatsız üç işlenenli formlara dönüştürülmesini sağlar. Örneğin, c = a + b onun yerine a = a + b (nerede kayıt a talimatla değiştirilir).

VEX öneki yerine geçer en sık kullanılan talimat önek baytları ve kaçış kodları. Çoğu durumda, değiştirilen önek baytlarının ve kaçış baytlarının sayısı VEX önekindeki bayt sayısıyla aynıdır, böylece VEX kodlu talimatın toplam uzunluğu eski komut kodunun uzunluğu ile aynıdır. . Diğer durumlarda, VEX kodlu sürüm eski koddan daha uzun veya daha kısadır. 32 bit modunda VEX kodlu talimatlar yalnızca ilk 8 YMM / XMM yazmacına erişebilir; diğer kayıtların kodlamaları, 64 bit modunda desteklenmeyen eski LDS ve LES komutları olarak yorumlanacaktır.

İki baytlık VEX öneki aşağıdaki bileşenleri içerir:

  • R̅ biti, REX.R önek biti x86-64 komut seti uzantısı.
  • İkinci bir kaynak yazmaç işlenenini belirten v̅ adlı dört bit.
  • 256 bit vektör uzunluğunu belirten L adlı bir bit.
  • İşlenen boyutu öneklerini ve işlenen türü öneklerini (66, F2, F3) değiştirmek için p adlı iki bit.

Üç baytlık VEX öneki ayrıca şunları içerir:

  • Üç bit, X̅; B̅; ve W, aynı zamanda REX önekindeki karşılık gelen bitlere benzer.
  • M adlı beş bit. M bitlerinden ikisi, mevcut çıkış kodlarını değiştirmek ve komutun uzunluğunu belirlemek için kullanılır. Kalan üç m bit, vektör uzunluklarının> 256 bit belirtilmesi, farklı komut uzunluklarının belirtilmesi veya işlem kodu alanını genişletme gibi gelecekteki kullanım için ayrılmıştır, ancak 2013 itibariyle Intel yeni bir kodlama şeması sunmaya karar verdi, EVEX öneki, kalan m bitlerini genişletmek yerine.

Teknik Açıklama

VEX öneki kullanan Intel 64 talimat formatı
bayt sayısı0,2,3110,10,1,2,40,1
[Ön ekler][CANINI SIKMAK]OPCODEModR / M[SIB][DISP][IMM]

VEX kodlama şeması, iki veya üçten oluşan bir kod öneki kullanır bayt mevcut veya yeniye eklenen talimat kodları.[1]

X86 mimarisinde, bir bellek işlenenine sahip talimatlar, adresleme modunu belirten ModR / M baytını kullanabilir. Bu baytın üç bit alanı vardır:

  • mod, bitler [7: 6] - ile birlikte r / m alanı, 8 kayıt veya 24 adresleme modunu kodlar. Ayrıca bazı talimatlar için işlem kodu bilgilerini kodlar.
  • reg / opcode, bit [5: 3] - birincil işlem kodu baytına bağlı olarak, bir yazmaç veya üç bit daha fazla işlem kodu bilgisini belirtir.
  • r / m, bit [2: 0] - bir kaydı işlenen olarak belirtebilir veya mod bir adresleme modunu kodlamak için alan.

32 bit adreslemenin temel artı indeks ve ölçek artı indeks formları (r / m = 100 ve mod <> 11 ile kodlanmıştır) başka bir adresleme baytı olan SIB baytı gerektirir. Aşağıdaki alanlara sahiptir:

  • ölçek faktör, bitlerle kodlanmış [7: 6]
  • indeks yazmaç, bit [5: 3]
  • temel kayıt, bit [2: 0].

X86-64 mimarisinde bulunan 64 bit adresleme ve ek kayıtları kullanmak için, REX öneki kodlama adresleme modları için ek alan sağlayan tanıtıldı. Bit alanı W işlenen boyutunu 64 bit olarak değiştirir, R genişler kayıt 4 bit'e kadar B genişler r / m (veya opreg en düşük 3 işlem kodu bitinde kayıt numarasını kodlayan "POP kayıt" gibi birkaç işlem kodunda ve X ve B genişletmek indeks ve temel SIB baytında. Bununla birlikte, REX öneki, 8 bitinin yarısını boşa harcayarak oldukça verimsiz bir şekilde kodlanmıştır.

REX ve VEX kodlaması
REX
76543210
Bayt 00100WRXB
3 bayt VEX
76543210
Bayt 0 (C4h)11000100
Bayt 1m4m3m2m1m0
Bayt 2W3210Lp1p0
2 bayt VEX
76543210
Bayt 0 (C5h)11000101
Bayt 13210Lp1p0

VEX öneki, adresleme modunu, kayıt numaralandırmasını ve işlenen boyutu ve genişliğini genişletmek için REX önekinin yanı sıra çeşitli diğer öneklerin kompakt bir temsilini sağlar:

  • R̅, X̅ ve B̅ bitleri REX önekinin R, X ve B bitlerinin tersine çevrilmesidir; bunlar, kayıt indeks alanları (sırasıyla ModRM reg, SIB indeksi ve ModRM r / m; SIB tabanı; veya opcode reg alanları) için 8 kayıt yerine 16'ya erişime izin veren dördüncü (yüksek) bir bit sağlar. W biti, REX önekinin W bitine eşdeğerdir ve 64 bitlik bir işlenen belirtir; tamsayı olmayan talimatlar için, genel bir işlem kodu uzantısı bitidir.
  • v̅, ek bir kaynak kayıt indeksinin tersine çevrilmesidir.
  • m, önde gelen işlem kodu önek baytlarının yerini alır. 1, 2 ve 3 değerleri, 0F, 0F 38 ve 0F 3A işlem kodu öneklerine eşdeğerdir; Diğer tüm değerler saklıdır. 2 baytlık VEX öneki her zaman 0F önekine karşılık gelir.
  • L, vektör uzunluğunu gösterir; 128-bit SSE (XMM) kayıtları için 0 ve 256-bit AVX (YMM) kayıtları için 1.
  • p ek önek baytlarını kodlar. 0, 1, 2 ve 3 değerleri hiçbiri, 66, F3 ve F2'nin ima edilen öneklerine karşılık gelir. Bunlar SSE komutları için işlenen türünü kodlar: sırasıyla paketlenmiş tek, paketlenmiş çift, skaler tek ve skaler çift.
VEX ön ekini kullanarak 64 bit modunda adreslemeyi kaydedin
Adresleme moduBit 3Bitler [2: 0]Kayıt türüGenel kullanım
REGVEX.RModRM.regGenel amaçlı, Maske, VektörOperandı kaydet
RM (ModRM.mod = 11 ise)VEX.BModRM.r / mGPR, Maske, VektörOperandı kaydet
RMVEX.BModRM.r / mGPRHafıza adresini kaydet
TABANVEX.BSIB.baseGPRBase + Index * Bellek adresini ölçeklendir
INDEXVEX.XSIB.indexGPRBase + Index * Bellek adresini ölçeklendir
VIDXVEX.XSIB.indexVektörBase + VectorIndex * Bellek adresini ölçeklendir
NDS / NDDVEX.v3v2v1v0GPR, Maske, VektörOperandı kaydet
IS4Imm8 [7: 4]VektörOperandı kaydet

VEX öneki ile kodlanan komutlar, dört değişken işlenen (yazmaç veya bellekte) ve bir sabit işlenen (anlık değer) içerebilir. Üçten fazla değişken işlenen gerektiren komutlar, 4. yazmaç işlenenini (yukarıdaki IS4) belirtmek için anlık işlenen bitleri kullanır. İşlenenlerden en fazla biri bir bellek işleneni olabilir; ve işlenenlerden en fazla biri 4 veya 8 bitlik bir anlık sabit olabilir. Kalan işlenenler kayıtlardır.

AVX komut seti, VEX kodlama şemasını kullanan ilk komut seti uzantısıdır. AVX komut seti, yalnızca VEX önekini kullanır. SIMD XMM kayıtlar.

Bununla birlikte, VEX kodlama şeması, diğer komut türleri için ve ayrıca komut setinin sonraki genişletilmesinde kullanılmıştır. AVX-512 8 maske kaydı tanıtıldı ve bunları işlemek için talimatlar eklendi. Bu talimatlar VEX kodlamasını kullanır. Alan bir maske kaydını kodlamak için kullanıldığında VEX.R, VEX.B veya VEX.v3 yok sayılır.

VEX ön ekinin ilk bayt değerleri olan C4h ve C5h, LDS ve LES talimatlarının işlem kodlarıyla aynıdır. Bu talimatlar 64 bit modunda desteklenmez. 32 bit moddayken belirsizliği çözmek için VEX'in spesifikasyonu, yasal bir LDS veya LES'in ModRM baytının formda olamayacağı gerçeğini kullanır. 11xxxxxx (bir kayıt işleneni belirtir). VEX önekinin ikinci baytındaki çeşitli bit alanları, baytın her zaman 32-bit modunda bu biçimde olmasını sağlamak için ters çevrilir.

VEX öneki eklenmiş eski SIMD talimatları, aşağıdaki farklılıklarla VEX öneki olmadan aynı talimatlara eşdeğerdir:

  • VEX kodlu komutun bir işleneni daha olabilir, bu da onu tahribatsız hale getirir.
  • VEX ön eki olmayan 128 bitlik bir XMM talimatı, tam 256 bit YMM kaydının üst yarısını değiştirmeden bırakırken, VEX kodlu sürüm üst yarısını sıfıra ayarlar.

256-bit YMM yazmacının tamamını kullanan talimatlar, verimlilik nedenlerinden ötürü, yazmacın üst yarısını değiştirmeden bırakan VEX olmayan talimatlarla karıştırılmamalıdır.

Tarih

  • Ağustos 2007'de, AMD önerdi SSE5 üç işlenenli talimatlar için yeni bir kodlama şeması içeren komut seti uzantısı, DREX adlı ekstra baytı kullanarak Buldozer işlemci çekirdeği, 2011'de üretime başlayacak.[2][3]
  • Mart 2008'de Intel, AVX komut seti, yeni VEX kodlama şemasını kullanarak.[4]
  • Ağustos 2008'de yorumcular, AMD ve Intel komut setleri arasında beklenen uyumsuzluktan ötürü üzüntü duydular ve AMD'nin planlarını gözden geçirmesini ve DREX şemasını daha esnek ve genişletilebilir VEX şemasıyla değiştirmesini önerdiler.[5]
  • Mayıs 2009'da AMD, önerilen SSE5 komut setini AVX komut seti ve VEX kodlama şemasıyla uyumlu hale getirmek için revizyonunu duyurdu. Revize edilmiş SSE5 olarak adlandırılır XOP.[6]
  • Ocak 2011. AVX yönerge seti Intel'in Sandy Bridge mikroişlemci mimarisi.
  • 2011. AVX, XOP ve FMA4 Tümü VEX şemasını kullanan komut setleri AMD'de desteklenmektedir Buldozer işlemci.[7]
  • 2013. FMA3 komut seti Intel Haswell işlemcilerinde desteklenmektedir.

Ayrıca bakınız

Referanslar

  1. ^ Intel Corporation (Ocak 2009). "Intel Gelişmiş Vektör Uzantıları Programlama Referansı".
  2. ^ "128-Bit SSE5 Komut Seti". AMD Geliştirici Merkezi. Alındı 2009-06-02.
  3. ^ Hruska, Joel (14 Kasım 2008). "AMD Fusion artık 2011'e geri döndü". Ars Technica.
  4. ^ "Intel Yazılım Ağı". Intel. Arşivlenen orijinal 2008-04-07 tarihinde. Alındı 2008-04-05.
  5. ^ "AMD ve Intel uyumsuz - Ne yapmalı?". AMD Geliştirici Forumları. Alındı 2012-08-10.
  6. ^ "AMD64 Mimarisi Programcı Kılavuzu Cilt 4: 128-Bit ve 256-Bit Ortam Talimatları" (PDF). AMD. 22 Aralık 2010.
  7. ^ "Dengeyi yakalamak". Dave Christie, AMD Geliştirici blogları. Arşivlenen orijinal 2013-11-09 tarihinde. Alındı 2012-08-10.