2010-02-09 13 views
9

Bir 128 bit x mm kayıtta iki x86 32 bit kayıt saklamak için daha hızlı bir yöntem var mı? İki x86 32 bit yazmaçlarını 128 bit x mm kayıt defterine kaydetme

movd xmm0, edx 
    movd xmm1, eax 
    pshufd xmm0, xmm0, $1 
    por xmm0, xmm1 

Yani EAX 0x12345678 ve xmm0 sonuç 0x8765432112345678 olmalıdır 0x87654321 EDX ise.

Teşekkür

+0

Vay! Bu harika bir assembler ... baktım son 32bit oldu ... Bir 128bit pc satın alabilirsiniz bilmiyordum ...: P :) – t0mm13b

+0

Streaming SIMD Extensions (SSE) x86 mimarisine bir SIMD komut seti uzantısı , Intel tarafından tasarlanmış ve 1999 yılında piyasaya sürülmüştür. –

+3

Hangi SSE komut seti sürümüne izin verilebilir? – PhiS

cevap

15

SSE 4.1 ile movd xmm0, eax/pinsrd xmm0, edx, 1'u kullanabilir ve 2 adımda gerçekleştirebilirsiniz. Eski CPU'lar için

Eğer 3 talimatlar olmak üzere toplam sonra 2 x movd ve punpckldq kullanabilirsiniz:

movd xmm0, edx 
movd xmm1, eax 
punpckldq xmm0, xmm1 
+0

Teşekkürler. Fakat bu 2007'den beri nispeten yeni uzatma seti ve hız ve kod boyutu neredeyse aynı. –

+2

Tamam - şimdi SSE2/SSE3 için 3 komut dizisi ekledik. –

+1

Super ... İhtiyacım olan bu! Teşekkürler. –

1

Ben MMX'li hakkında çok şey bilmiyorum, ama belki PACKSSDW talimat istiyorum.

PACKSSDW talimat hedef işlenen iki çift kaynak işlenen kelime ve iki çift kelime alır ve doygunluk yoluyla bu dört imzalı kelimeleri dönüştürür. Talimat, bu dört sözcüğü birlikte paketler ve sonucu hedef MMX kaydında saklar.

(http://webster.cs.ucr.edu/AoA/Windows/HTML/TheMMXInstructionSeta2.html itibaren) Düzenleme: Ben sadece o SSE kaydeder olduğunu fark etti. Oh iyi.

Düzenleme: Şimdi susacağım.

+0

mmx (64bit) yerine xmm yazmaçlarını kullanıyorum çünkü kullandıktan sonra 'emm' talimatına ihtiyaçları yok. –

+0

Evet, belki de özel kayıtlar ile daha güzel .. –

+0

+1 şimdi susturmak için :-) – hirschhornsalz

İlgili konular