Thread View: pl.comp.lang.asm
11 messages
11 total messages
Started by utak3r
Mon, 09 Jul 2007 07:26
gcc - asm inline
Author: utak3r
Date: Mon, 09 Jul 2007 07:26
Date: Mon, 09 Jul 2007 07:26
30 lines
1494 bytes
1494 bytes
Witam,
Chcę sobie w gcc (mingw) zrobić funkcję sincos (zresztą dużo więcej
podobnych), ale coś mi w tym gcc nie idzie (wcześniej robiłem je w
Delphi i wszystko banglało :) )
Mam taki kod:
inline void fsincos(double theta, double *s, double *c)
{
__asm__ (
"fld %2 \n"
"fsincos \n"
"fstp %1 \n"
"fstp %0 \n"
"fwait \n"
: "m"(s), "m"(c)
: "t"(theta)
);
}
no i dupa.
Próbowałem najróżniejszych kombinacji przełączników "m", "r", "t",
różnych wariantów z przekazywaniem parametrów... nie wiem, co jest nie
tak. Help!... :)
pozdrawiam
--
Piotr "utak3r" Borys
http://utak3r.pl
Re: gcc - asm inline
Author: utak3r
Date: Mon, 09 Jul 2007 07:37
Date: Mon, 09 Jul 2007 07:37
12 lines
1123 bytes
1123 bytes
utak3r pisze:
> : "m"(s), "m"(c)
oczywiście ma być:
: "=m"(s), "=m"(c)
;)
pozdrawiam
--
Piotr "utak3r" Borys
http://utak3r.pl
Re: gcc - asm inline
Author: Lopez
Date: Mon, 09 Jul 2007 08:33
Date: Mon, 09 Jul 2007 08:33
42 lines
1724 bytes
1724 bytes
utak3r napisał(a):
> Witam,
>
> Chcę sobie w gcc (mingw) zrobić funkcję sincos (zresztą dużo więcej
> podobnych), ale coś mi w tym gcc nie idzie (wcześniej robiłem je w
> Delphi i wszystko banglało :) )
>
> Mam taki kod:
>
> inline void fsincos(double theta, double *s, double *c)
> {
> __asm__ (
> "fld %2 \n"
> "fsincos \n"
> "fstp %1 \n"
> "fstp %0 \n"
> "fwait \n"
> : "m"(s), "m"(c)
> : "t"(theta)
> );
> }
>
> no i dupa.
> Próbowałem najróżniejszych kombinacji przełączników "m", "r", "t",
> różnych wariantów z przekazywaniem parametrów... nie wiem, co jest nie
> tak. Help!... :)
>
inline void fsincos(double theta, double *s, double *c)
{
__asm__ (
"fsincos\n\t"
"fstpl (%1)\n\t"
"fstpl (%0)\n\t"
: "=S"(s), "=D"(c)
: "0"(s), "1"(c), "t"(theta)
);
}
--
Pozdrawiam
Lopez
Re: gcc - asm inline
Author: Wojciech Muła
Date: Mon, 09 Jul 2007 09:59
Date: Mon, 09 Jul 2007 09:59
15 lines
1091 bytes
1091 bytes
utak3r wrote:
> Mam taki kod:
>
> inline void fsincos(double theta, double *s, double *c)
> {
> __asm__ (
> "fld %2 \n"
> "fsincos \n"
> "fstp %1 \n"
> "fstp %0 \n"
> "fwait \n"
BTW fwait niepotrzebne.
w.
Re: gcc - asm inline
Author: utak3r
Date: Mon, 09 Jul 2007 10:46
Date: Mon, 09 Jul 2007 10:46
43 lines
1832 bytes
1832 bytes
Lopez pisze:
> inline void fsincos(double theta, double *s, double *c)
> {
> __asm__ (
> "fsincos\n\t"
> "fstpl (%1)\n\t"
> "fstpl (%0)\n\t"
> : "=S"(s), "=D"(c)
> : "0"(s), "1"(c), "t"(theta)
> );
> }
Nie zadziałało... ale w końcu wyszukałem:
__asm__ (
"fsincos\n\t"
: "=t" (cosinus), "=u" (sinus)
: "0" (theta)
);
jeszcze otoczyłem parametry:
inline void fsincos(double theta, double *s, double *c)
{
double sinus = *s;
double cosinus = *c;
__asm__ (
"fsincos\n\t"
: "=t" (cosinus), "=u" (sinus)
: "0" (theta)
);
*s = sinus;
*c = cosinus;
}
i tak mi działa :)
A teraz proszę o wyjaśnienie tych parametrów... bo muszę jeszcze ładnych
parę podobnych funkcji napisać :)
pozdrawiam
--
Piotr "utak3r" Borys
http://utak3r.pl
Re: gcc - asm inline
Author: utak3r
Date: Mon, 09 Jul 2007 10:53
Date: Mon, 09 Jul 2007 10:53
17 lines
1339 bytes
1339 bytes
Ostatecznie mam taką funkcję, któa ślicznie działa :)
inline void fsincos(double theta, double *s, double *c)
{
__asm__ (
"fsincos\n\t"
: "=t" (*c), "=u" (*s)
: "0" (theta)
);
}
Więc... kto chętny do wyjaśnienia każdego z trzech parametrów? :)
pozdrawiam
--
Piotr "utak3r" Borys
http://utak3r.pl
Re: gcc - asm inline
Author: Lopez
Date: Mon, 09 Jul 2007 11:12
Date: Mon, 09 Jul 2007 11:12
23 lines
1445 bytes
1445 bytes
utak3r napisał(a):
> Ostatecznie mam taką funkcję, któa ślicznie działa :)
>
> inline void fsincos(double theta, double *s, double *c)
inline void fsincos(const double theta, double *s, double *c)
tak bedzie bezpieczniej
> {
> __asm__ (
> "fsincos\n\t"
> : "=t" (*c), "=u" (*s)
> : "0" (theta)
> );
> }
>
> Więc... kto chętny do wyjaśnienia każdego z trzech parametrów? :)
t - wierzcholek stosu FPU,
u - drugi rejest stosu FPU
"0" - paramet nr 0 w tym przypadku "=t"(*c) - wierzcholek
--
Pozdrawiam
Lopez
Re: gcc - asm inline
Author: Lopez
Date: Mon, 09 Jul 2007 11:24
Date: Mon, 09 Jul 2007 11:24
21 lines
1279 bytes
1279 bytes
utak3r napisał(a):
> Lopez pisze:
>> inline void fsincos(double theta, double *s, double *c)
>> {
>> __asm__ (
>> "fsincos\n\t"
>> "fstpl (%1)\n\t"
>> "fstpl (%0)\n\t"
>> : "=S"(s), "=D"(c)
>> : "0"(s), "1"(c), "t"(theta)
>> );
>> }
>
> Nie zadziałało... ale w końcu wyszukałem:
Dziala, ale tylko bez optymalizacji.
Hmm dziwne.
--
Pozdrawiam
Lopez
Re: gcc - asm inline
Author: Lopez
Date: Mon, 09 Jul 2007 11:28
Date: Mon, 09 Jul 2007 11:28
34 lines
1612 bytes
1612 bytes
Lopez napisał(a):
> utak3r napisał(a):
>> Lopez pisze:
>>> inline void fsincos(double theta, double *s, double *c)
>>> {
>>> __asm__ (
>>> "fsincos\n\t"
>>> "fstpl (%1)\n\t"
>>> "fstpl (%0)\n\t"
>>> : "=S"(s), "=D"(c)
>>> : "0"(s), "1"(c), "t"(theta)
>>> );
>>> }
>> Nie zadziałało... ale w końcu wyszukałem:
>
> Dziala, ale tylko bez optymalizacji.
> Hmm dziwne.
teraz juz dziala.
inline void fsincos(const double theta, double *s, double *c)
{
__asm__ __volatile__ (
"fsincos\n\t"
"fstpl (%1)\n\t"
"fstpl (%0)\n\t"
: "=r"(s), "=r"(c)
: "0" (s), "1" (c), "t"(theta)
);
}
--
Pozdrawiam
Lopez
Re: gcc - asm inline
Author: utak3r
Date: Mon, 09 Jul 2007 11:58
Date: Mon, 09 Jul 2007 11:58
30 lines
1701 bytes
1701 bytes
Lopez pisze: >> "fsincos\n\t" >> : "=t" (*c), "=u" (*s) >> : "0" (theta) > > t - wierzcholek stosu FPU, > u - drugi rejest stosu FPU > "0" - paramet nr 0 w tym przypadku "=t"(*c) - wierzcholek czyli wygląda to tak? : parametr theta kładę na wierzchołku stosu FPU fsincos na wierzchołku stosu mam jeden wynik pod spodem mam drugi wynik czy tak? A jeśli będę chciał więcej parametrów przekazać do jakiejś funkcji FPU? będzie coś takiego: "funkcjaFPUpobieracjącadwaparametry\n\t" : "=t"(wynik) : "0"(1parametr), "u"(2parametr) ?? pozdrawiam -- Piotr "utak3r" Borys http://utak3r.pl
Re: gcc - asm inline
Author: utak3r
Date: Mon, 09 Jul 2007 12:32
Date: Mon, 09 Jul 2007 12:32
9 lines
1178 bytes
1178 bytes
Lopez pisze: > Dziala, ale tylko bez optymalizacji. Ano widzisz... a ja kompiluję z -O3 ;) pozdrawiam -- Piotr "utak3r" Borys http://utak3r.pl
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads