Article View: pl.comp.lang.asm
Article #2606Re: [1/3 NTG] C - Optymalizacje wstawkami
From: DMR
Date: Thu, 06 Jun 2019 09:27
Date: Thu, 06 Jun 2019 09:27
91 lines
3919 bytes
3919 bytes
W wolnej chwili zmajstrowałem sobie prostą "biblioteczkę" z podstawowymi funkcjami matematycznymi. Posłużyłem się przy tym "gotowcami" zamieszczonymi na stronie: https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
Sqrt liczy się tylko symbolicznie szybciej niż sqrt z biblioteki math.h, pozostałe funkcje są szybsze od 2x wzwyż.
Za Chiny nie mogę rozkminić tych literek między dwukropkami, ale wprowadziłem pewne korekty, per analogiam - i (chyba) działa... ;-)
W przypadku "jednoargumentowych" wyrażeń sugerowana jest składnia:
asm ("foo" : "=&t" (a) : "f" (b));
Przy okazji testów szybkości zauważyłem jednak, że jeśli w ten sposób zakoduję funkcje Sin() i Cos(), to w przypadku wywołania w kodzie programu:
sin = Sin(a);
cos = Cos(a);
poprawnie liczy się kosinus, ale w przypadku sinusa wychodzą jakieś głupoty.
Wywołanie typu:
tan = Sin(a) / Cos(a)
w ogóle się wywala, a przecież mam tego używać...
Poprzez analogię do przykładu z fsincos i fyl2xp1 do zmieniłem "f" na "0" i wywaliłem ampersanda sprzed t:
asm ("foo" : "=t" (a) : "0" (b));
No i teraz wszystko gra!
A dlaczego? Nie mam pojęcia... ;-)
//------------------------------------------------------------------------------
inline double Sqrt(double x)
{
double s;
asm ("fsqrt" : "=t" (s) : "0" (x));
return s;
}
//------------------------------------------------------------------------------
inline double Sin(double a)
{
double s;
asm ("fsin" : "=t" (s) : "0" (a));
return s;
}
//------------------------------------------------------------------------------
inline double Cos(double a)
{
double c;
asm ("fcos" : "=t" (c) : "0" (a));
return c;
}
//------------------------------------------------------------------------------
inline void SinCos(double a, double *sin, double *cos)
{
double s, c;
asm ("fsincos" : "=t" (c), "=u" (s) : "0" (a));
*sin = s;
*cos = c;
}
//------------------------------------------------------------------------------
inline double Tan(double a)
{
double t, o;
asm ("fptan" : "=t" (o), "=u" (t) : "0" (a));
return t;
}
//------------------------------------------------------------------------------
inline double ATan(double y, double x)
{
double a;
asm ("fpatan" : "=t" (a) : "0" (x), "u" (y) : "st(1)");
return a;
}
//------------------------------------------------------------------------------
Technical Details
Message-ID:
<55cb70ec-3acf-43dd-ae35-5821e4c2d51d@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!4.us.feeder.erje.net!feeder.erje.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!s188no3150itb.0!news-out.google.com!l126ni131itl.0!nntp.google.com!i64no162181iti.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<30292520-12bd-49f0-b5ce-39c9af378a4c@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 2002:a02:298b:: with SMTP id p133mr32068279jap.37.1559813266342; Thu, 06 Jun 2019 02:27:46 -0700 (PDT) X-Received: by 2002:a05:6830:20c6:: with SMTP id z6mr14330641otq.58.1559813266117; Thu, 06 Jun 2019 02:27:46 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!4.us.feeder.erje.net!feeder.erje.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!s188no3150itb.0!news-out.google.com!l126ni131itl.0!nntp.google.com!i64no162181iti.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.asm Date: Thu, 6 Jun 2019 02:27:45 -0700 (PDT) In-Reply-To: <30292520-12bd-49f0-b5ce-39c9af378a4c@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=185.93.94.233; posting-account=FE4hoAoAAADKg8EtnA4bEyQiJf7iqAgV NNTP-Posting-Host: 185.93.94.233 References: <30292520-12bd-49f0-b5ce-39c9af378a4c@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <55cb70ec-3acf-43dd-ae35-5821e4c2d51d@googlegroups.com> Subject: Re: [1/3 NTG] C - Optymalizacje wstawkami From: DMR <mezzogm@gmail.com> Injection-Date: Thu, 06 Jun 2019 09:27:46 +0000 Lines: 108 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit