eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingasm/c grrrrreatRe: asm/c grrrrreat
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: "Bogdan (bogdro)" <b...@p...gazeta.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: asm/c grrrrreat
    Date: Sun, 06 Nov 2011 09:53:00 +0100
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 46
    Message-ID: <j95htj$mr3$1@inews.gazeta.pl>
    References: <j943ka$atd$1@inews.gazeta.pl>
    NNTP-Posting-Host: rudy.mif.pg.gda.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1320569589 23395 153.19.42.16 (6 Nov 2011 08:53:09 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Sun, 6 Nov 2011 08:53:09 +0000 (UTC)
    X-User: bog.d
    In-Reply-To: <j943ka$atd$1@inews.gazeta.pl>
    User-Agent: Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1
    Xref: news-archive.icm.edu.pl pl.comp.programming:193484
    [ ukryj nagłówki ]

    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.

    --
    Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS)
    Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro
    Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
    www.Xiph.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

  • 06.11.11 10:05

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: