eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingasm/c grrrrreatRe: asm/c grrrrreat
  • Data: 2011-11-06 10:05:08
    Temat: Re: asm/c grrrrreat
    Od: " " <f...@N...gazeta.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Bogdan (bogdro) <b...@p...gazeta.pl> napisał(a):

    > W dniu 05.11.2011 20:43, fir pisze:
    > > jestem zadowolony (pewnie do czasu az natkne sie na jakas
    > > przeszkode) bo udalo mi sie napisac proste add w sse
    > > i dziala, tylko mam pewne watpliwosci co do sposobu
    > > przekazywania parametrow
    > >
    > > ;implementacja "int __cdecl asm_add_float4vectors_sse(float4* a, float4*
    b,
    > > float4* ret);"
    > >
    > > asm_add_float4vectors_sse:
    > >
    > > enter 0,0
    > >
    > > mov eax,[ebp+8] ; first argument
    > > mov ebx,[ebp+12] ; second argument
    > > mov ecx,[ebp+16] ; third argument
    > >
    > > movups xmm0, [eax]
    > > movups xmm1, [ebx]
    > > addps xmm0, xmm1
    > > movups [ecx], xmm0
    > >
    > > leave
    > > ret
    > >
    > > czy powinno sie uzywac __cdecl - i czy to wogole jest poprawnie?
    >
    > Skoro używasz kompilatora C, to domyślnie konwencja wywołania jest
    > dla języka C, więc nie trzeba pisać "__cdecl". Ale nie zaszkodzi.
    > Co do kodu - funkcjonalnie wygląda poprawnie, ale może "nie dogadać"
    > się z programem pisanym w C. Musisz zachować i przywrócić zawartość
    > rejestru EBX lub skorzystać z takiego, który wolno zamazać, np. EDX.
    > Poczytaj o konwencjach wywołań ("calling conventions").
    > Pewnie dałoby się też wnętrze funkcji skompresować do 3 instrukcji:
    >
    > movups xmm0, [eax]
    > addps xmm0, [ebx]
    > movups [ecx], xmm0
    >
    > Ale to kwestia optymalizacji, a nie funkcjonalności.
    >

    1. troche sie boje ze z tymi importami/exportami miedzy c.obj a asm.obj
    bede miec jakis problem (w c wiekszosc problemow mam rozwiazanych
    ale przy spotkaniach z asembler jest troche bardziej stresujaco);

    2. do tego nie wiem jaka konwencja wywolan bylaby najlepsza, nie kojarze
    do konca tych operacji na ebp itp (najlepszy bylby jakis
    dobrze okreslony fastcall ktory w [[eax], [[ebx], [[ecx], [edx]]]]
    przekazywal by wskazniki/inty (od 0 do 4rech do wyboru) bez
    ramek stosu wogole- cos w tym stylu - ale nie wiem czy po stronie
    c uda skonstruowac takie wywolania;

    3. do tego nie ma wcale w necie za duzo jakichs dobrych tutoriali
    do sse, wczoraj szukalem caly wieczor (np glownie jednej komendy ktora doda 4
    floaty z xxm do siebie - potrzebne do iloczynu skalarnego) i znalazlem
    jedynie fragmentaryczne info - jakis deficyt w tutorialach vel nie umiem
    znalezc - w sumie najpozyteczniejsza okazala sie stronka jednago
    z tutejszych grupowiczow (WM)






    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

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: