Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



přesun xmm -> xmm (jedna hodnota)

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: přesun xmm -> xmm (jedna hodnota)

Autor: MazeGen

13:18:26 30.10.2008

S tím jedním DWORD to vypadá jako problém. Co se týče SSE(1), instrukce MOVH* a MOVL* pracují s [ital]dvěma[/ital] single FP, jedině ta MOVSS umí single scalar FP. Takže zbývá asi jedině SHUFPS. Pokud se nemýlím, SSE2 v tomto přidává navíc jenom podporu pro double FP. Na SSE3 by se možná dalo nějak využít instrukcí MOVSHDUP a MOVSLDUP. Na SSE4.1 by se dalo možná něco dělat s BLENDPS, dál EXTRACTPS a INSERTPS, kde se dá single FP přesunovat přes general-purpose register (netuším, jak by to ale bylo s rychlostí), ale procesory podporující SSE4.1 začaly vycházet teprve nedávno.

S podporou pro DWORD integer mi to připadá ještě horší. SSE2 má PSHUFD a dál nějaký posuny, ale jenom pro QWORD. Potom až na SSE4.1 vidím instrukce PEXTR* a PINSR*.

Nemám s tím moc praktických zkušeností, hledám to v Intel Basic Architecture Manual, v kapitole 5 Instruction Set Summary, kde je to docela pěkně rozdělený.

Citovat příspěvek

 

Re: přesun xmm -> xmm (jedna hodnota)

Autor: frca

20:24:39 29.10.2008

Jde vůbec nějak naplnit registr xmm po jednom dwordu (už mi začíná být jedno, v jakém pořadí apod.), kdybych nechtěl jet přes paměť?
Díky,
frca

Citovat příspěvek

 

Re: přesun xmm -> xmm (jedna hodnota)

Autor: frca

20:21:19 29.10.2008

No a teď bych ještě chtěl opačnou verzi - zkopírovat dword z nejnižší pozice do některé jiné v jiném registru. A to určitě taky neexistuje a bude to ještě větší opruz, protože tady už přepisování jiných hodnot bude hrát podstatnou roli. Uááá [img]http://forum.builder.cz/smileys/smilie9.gif[/img]

Citovat příspěvek

 

Re: přesun xmm -> xmm (jedna hodnota)

Autor: frca

17:38:18 29.10.2008

Je to nasm syntaxe. To, jak to rozdrbe ostatní hodnoty v cílovém registru kromě první, jsem neřešil.

; přesune x-tý single skalár do xmm registru na nejnižší pozici
%macro movess1 2
movaps %1, %2
shufps %1, %1, 1
%endmacro

%macro movess2 2
movhlps %1, %2
%endmacro

%macro movess3 2
movhlps %1, %2
shufps %1, %1, 1
;movaps %1, %2
;shufps %1, %1, 3
%endmacro

Citovat příspěvek

 

Re: přesun xmm -> xmm (jedna hodnota)

Autor: MazeGen

17:10:13 29.10.2008

Pokud jednu z těch 4, tak to asi jinak než přes SHUFPS nepůjde.

Mohl bys poslat svoje konkrétní řešení?

Citovat příspěvek

 

Re: přesun xmm -> xmm (jedna hodnota)

Autor: frca

16:46:51 29.10.2008

Já si chci vybrat jednu s těch 4 hodnot a zkopírovat ji na začátek jiného registru. Sice už jsem to nejak zbastlil pomocí shufps apod., ale třeba existuje lepší řešení.

Citovat příspěvek

 

Re: přesun xmm -> xmm (jedna hodnota)

Autor: MazeGen

16:41:42 29.10.2008

MOVSS xmm1, xmm2/m32 (Move Scalar Single-Precision Floating-Point Values).

Nevím, jestli pro 32-bit integer existuje něco jinýho. Co se tak dívám, tak asi ne. PSHUFD to taky asi neumí.

Citovat příspěvek

 

přesun xmm -> xmm (jedna hodnota)

Autor: frca

14:07:27 29.10.2008

Jak udělat tak triviální věc, jako je přesun určité 32-bitové hodnoty z registru xmm (kde jsou 4) do nejnižší části jiného xmm registru?
Díky,
frca

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: