double fSin(double angle)
{
 double _res;
 asm ("fld %[angle]\nfsin"
         : [output] "=&t" (_res)
         : [angle]  "0" (angle));
 return _res;
}
void fSinCos(double angle, double *rsin, double *rcos)
{
 double _arg = angle;
 double _rsin, _rcos;
/*
 asm ("fsinx %[angle],%[output]"
         : [output] "=&t" (result)
         : [angle]  "f" (angle));
*/
//  asm volatile("fld %[angle]" : "=t" (_rsin): [angle] "0" (angle));
 asm volatile ("fsincos" : "=%&t" (_rcos), "=%&u" (_rsin) : "0" (angle));
 *rsin = _rsin;
 *rcos = _rcos;
}
But somehow, the fSinCos function stalls for some numbers. Dunno what it happened. Will post it later once I find the solution.
 
 
No comments:
Post a Comment