eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming[asm] i dont (quite) get itRe: [asm] i dont (quite) get it
  • Data: 2014-07-07 12:49:52
    Temat: Re: [asm] i dont (quite) get it
    Od: firr <p...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    wogole wlasnie ta forma z tymi 'końcówkami' (nawet nie wiem jak to nazwac) dla inline
    assembly w gcc wydaje mi sie w sumie fatalna

    co to ma byc

    void sse_dot(float vec1[4], float vec2[4], float* result) {
    __asm__ volatile (
    "movups (%0), %%xmm0 \n" // load vec1: |w1|z1|y1|x1|
    "movups (%1), %%xmm1 \n" // load vec2: |w2|z2|y2|x2|
    " \n"
    "mulps %%xmm1, %%xmm0 \n" // xmm0 := |w1*w2|z1*z2|y1*y2|x1*x2|
    "movhlps %%xmm0, %%xmm1 \n" // xmm1 := | . | . |w1*w2|z1*z2|
    "addps %%xmm0, %%xmm1 \n" // xmm1 := | . | . | w+y | z+x |
    "movaps %%xmm1, %%xmm0 \n" // save xmm1
    "shufps $0x01, %%xmm1, %%xmm1 \n" // xmm1 := | . | . | . | w+y |
    "addss %%xmm1, %%xmm0 \n" // xmm0[0] := dot product
    "movss %%xmm0, (%2) \n"
    :
    : "r" (vec1), "r" (vec2), "r" (result));
    }

    juz o wiele lepiej wyglada tow czystym asmie
    przynajmniej wszystko jasne


    Dump of assembler code for function sse_dot(float*, float*, float*):
    0x000000a0 <+0>: mov 0xc(%esp),%ecx
    0x000000a4 <+4>: mov 0x8(%esp),%edx
    0x000000a8 <+8>: mov 0x4(%esp),%eax
    0x000000ac <+12>: movups (%eax),%xmm0
    0x000000af <+15>: movups (%edx),%xmm1
    0x000000b2 <+18>: mulps %xmm1,%xmm0
    0x000000b5 <+21>: movhlps %xmm0,%xmm1
    0x000000b8 <+24>: addps %xmm0,%xmm1
    0x000000bb <+27>: movaps %xmm1,%xmm0
    0x000000be <+30>: shufps $0x1,%xmm1,%xmm1
    0x000000c2 <+34>: addss %xmm1,%xmm0
    0x000000c6 <+38>: movss %xmm0,(%ecx)
    0x000000ca <+42>: ret
    End of assembler dump.

    aczkolwiek ani jedna ani druga (czyli ta ms vs gcc) skladnia mi sie nie podoba i
    wolalbym uzywac jakiejs swojej o wiele lepszej

    // function sse_dot(float*, float*, float*)

    mov ecx (!c)
    mov edx (!8)
    mov eax (!4)
    mov-u-ps x0 eax
    mov-u-ps x1 edx
    mul-ps x0 x1
    mov-hl-ps x1 x0
    add-ps x1 x0
    mov-a-ps x0 x1
    shuf-ps x1 x1 1
    add-ss x0 x1
    mov-ss (ecx) x0
    ret

    tj nawrzucalbym troche skrótów np (!c) dla trzeciego inta na stosie itd - byloby
    ladniej

    (niestety nie chce mi sie pisac asemblera, te tabele rozkazow sa za dlugie) - szkoda
    ze nie mam tyle kasy zeby komus zaplacic za napisanie tego , ciekawe ile musialbym
    wybulic za taki skromny ale dzialajacy asembler, nie jest to az tak duzo roboty w
    miesiac chyba mozna by sie uwinąć



Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: