Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #include <math.h>
  2. #include "kosSyst.h"
  3. extern "C" int _fltused = 0;
  4.  
  5. #define M_PI 3.14159265358979323846
  6.  
  7. double __cdecl acos(double x)
  8. {
  9.         __asm {
  10.                 fld     qword ptr [esp+4]
  11.                 fld1
  12.                 fadd    st, st(1)
  13.                 fld1
  14.                 fsub    st, st(2)
  15.                 fmulp   st(1), st
  16.                 fsqrt
  17.                 fxch    st(1)
  18.                 fpatan
  19.         }
  20. }
  21. double __cdecl asin(double x)
  22. {
  23.         __asm {
  24.                 fld     qword ptr [esp+4]
  25.                 fld1
  26.                 fadd    st, st(1)
  27.                 fld1
  28.                 fsub    st, st(2)
  29.                 fmulp   st(1), st
  30.                 fsqrt
  31.                 fpatan
  32.                 ret
  33.         }
  34. }
  35. #if _MSC_VER <= 1200
  36. extern "C" double _ftol(double x)
  37. {
  38.         __asm {
  39.                 fld     qword ptr [esp+4]
  40.                 push    1F3Fh
  41.                 fstcw   word ptr [esp+2]
  42.                 fldcw   word ptr [esp]
  43.                 frndint
  44.                 fldcw   word ptr [esp+2]
  45.                 add     esp, 4
  46.         }
  47. }
  48. #endif
  49. /*
  50. double __cdecl ceil(double x)
  51. {
  52.         __asm {
  53.                 fld     qword ptr [esp+4]
  54.                 push    1B3Fh
  55.                 fstcw   word ptr [esp+2]
  56.                 fldcw   word ptr [esp]
  57.                 frndint
  58.                 fldcw   word ptr [esp+2]
  59.                 add     esp, 4
  60.         }
  61. }
  62. */
  63. double __cdecl floor(double x)
  64. {
  65.         __asm {
  66.                 fld     qword ptr [esp+4]
  67.                 push    173Fh
  68.                 fstcw   word ptr [esp+2]
  69.                 fldcw   word ptr [esp]
  70.                 frndint
  71.                 fldcw   word ptr [esp+2]
  72.                 add     esp, 4
  73.         }
  74. }
  75.  
  76. double __cdecl round(double x)
  77. {
  78.         __asm {
  79.                 fld     qword ptr [esp+4]
  80.                 push    133Fh
  81.                 fstcw   word ptr [esp+2]
  82.                 fldcw   word ptr [esp]
  83.                 frndint
  84.                 fldcw   word ptr [esp+2]
  85.                 add     esp, 4
  86.         }
  87. }