home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / GCC / GERLIB_DEV08B.LHA / gerlib / Bonus / normal / mathsup.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-12  |  5.2 KB  |  264 lines

  1. extern struct MathIeeeDoubTransBase * MathIeeeDoubTransBase;
  2. extern struct MathIeeeDoubBasBase * MathIeeeDoubBasBase;
  3.  
  4. double const atan (double parm)
  5. {
  6.     register double res __asm("d0");
  7.     register void *a6 __asm ("a6");
  8.     register double d0 __asm("d0");
  9.  
  10.     a6 = MathIeeeDoubTransBase;
  11.     d0 = parm;
  12.     __asm volatile ("
  13.     jsr a6@(-0x1e)"
  14.     : "=r" (res)
  15.     : "r" (a6), "r" (d0)
  16.     : "d0", "d1", "a0", "a1");
  17.     return res;
  18. }
  19. double const sin (double parm)
  20. {
  21.     register double res __asm("d0");
  22.     register void *a6 __asm ("a6");
  23.     register double d0 __asm("d0");
  24.  
  25.     a6 = MathIeeeDoubTransBase;
  26.     d0 = parm;
  27.     __asm volatile ("
  28.     jsr a6@(-0x24)"
  29.     : "=r" (res)
  30.     : "r" (a6), "r" (d0)
  31.     : "d0", "d1", "a0", "a1");
  32.     return res;
  33. }
  34. double const cos (double parm)
  35. {
  36.     register double res __asm("d0");
  37.     register void *a6 __asm ("a6");
  38.     register double d0 __asm("d0");
  39.  
  40.     a6 = MathIeeeDoubTransBase;
  41.     d0 = parm;
  42.     __asm volatile ("
  43.     jsr a6@(-0x2a)"
  44.     : "=r" (res)
  45.     : "r" (a6), "r" (d0)
  46.     : "d0", "d1", "a0", "a1");
  47.     return res;
  48. }
  49. double const tan (double parm)
  50. {
  51.     register double res __asm("d0");
  52.     register void *a6 __asm ("a6");
  53.     register double d0 __asm("d0");
  54.  
  55.     a6 = MathIeeeDoubTransBase;
  56.     d0 = parm;
  57.     __asm volatile ("
  58.     jsr a6@(-0x30)"
  59.     : "=r" (res)
  60.     : "r" (a6), "r" (d0)
  61.     : "d0", "d1", "a0", "a1");
  62.     return res;
  63. }
  64. double sincos (double* pf2, double parm)
  65. {
  66.     register double res __asm("d0");
  67.     register void *a6 __asm ("a6");
  68.     register double* a0 __asm("a0");
  69.     register double d0 __asm("d0");
  70.  
  71.     a6 = MathIeeeDoubTransBase;
  72.     a0 = pf2;
  73.     d0 = parm;
  74.     __asm volatile ("
  75.     jsr a6@(-0x36)"
  76.     : "=r" (res)
  77.     : "r" (a6), "r" (a0), "r" (d0)
  78.     : "d0", "d1", "a0", "a1");
  79.     return res;
  80. }
  81. double const sinh (double parm)
  82. {
  83.     register double res __asm("d0");
  84.     register void *a6 __asm ("a6");
  85.     register double d0 __asm("d0");
  86.  
  87.     a6 = MathIeeeDoubTransBase;
  88.     d0 = parm;
  89.     __asm volatile ("
  90.     jsr a6@(-0x3c)"
  91.     : "=r" (res)
  92.     : "r" (a6), "r" (d0)
  93.     : "d0", "d1", "a0", "a1");
  94.     return res;
  95. }
  96. double const cosh (double parm)
  97. {
  98.     register double res __asm("d0");
  99.     register void *a6 __asm ("a6");
  100.     register double d0 __asm("d0");
  101.  
  102.     a6 = MathIeeeDoubTransBase;
  103.     d0 = parm;
  104.     __asm volatile ("
  105.     jsr a6@(-0x42)"
  106.     : "=r" (res)
  107.     : "r" (a6), "r" (d0)
  108.     : "d0", "d1", "a0", "a1");
  109.     return res;
  110. }
  111. double const tanh (double parm)
  112. {
  113.     register double res __asm("d0");
  114.     register void *a6 __asm ("a6");
  115.     register double d0 __asm("d0");
  116.  
  117.     a6 = MathIeeeDoubTransBase;
  118.     d0 = parm;
  119.     __asm volatile ("
  120.     jsr a6@(-0x48)"
  121.     : "=r" (res)
  122.     : "r" (a6), "r" (d0)
  123.     : "d0", "d1", "a0", "a1");
  124.     return res;
  125. }
  126. double const exp (double parm)
  127. {
  128.     register double res __asm("d0");
  129.     register void *a6 __asm ("a6");
  130.     register double d0 __asm("d0");
  131.  
  132.     a6 = MathIeeeDoubTransBase;
  133.     d0 = parm;
  134.     __asm volatile ("
  135.     jsr a6@(-0x4e)"
  136.     : "=r" (res)
  137.     : "r" (a6), "r" (d0)
  138.     : "d0", "d1", "a0", "a1");
  139.     return res;
  140. }
  141. double const log (double parm)
  142. {
  143.     register double res __asm("d0");
  144.     register void *a6 __asm ("a6");
  145.     register double d0 __asm("d0");
  146.  
  147.     a6 = MathIeeeDoubTransBase;
  148.     d0 = parm;
  149.     __asm volatile ("
  150.     jsr a6@(-0x54)"
  151.     : "=r" (res)
  152.     : "r" (a6), "r" (d0)
  153.     : "d0", "d1", "a0", "a1");
  154.     return res;
  155. }
  156. /* GRRRR Commodore does it the other way round... */
  157. double const pow (double arg, double exp)
  158. {
  159.     register double res __asm("d0");
  160.     register void *a6 __asm ("a6");
  161.     register double d2 __asm("d2");
  162.     register double d3 __asm("d0");
  163.  
  164.     a6 = MathIeeeDoubTransBase;
  165.     d2 = exp;    /* invert arguments here, so exp really is arg and vice versa */
  166.     d3 = arg;
  167.     __asm volatile ("
  168.     jsr a6@(-0x5a)"
  169.     : "=r" (res)
  170.     : "r" (a6), "r" (d2), "r" (d3)
  171.     : "d0", "d1", "a0", "a1", "d2", "d3");
  172.     return res;
  173. }
  174. double const sqrt (double parm)
  175. {
  176.     register double res __asm("d0");
  177.     register void *a6 __asm ("a6");
  178.     register double d0 __asm("d0");
  179.  
  180.     a6 = MathIeeeDoubTransBase;
  181.     d0 = parm;
  182.     __asm volatile ("
  183.     jsr a6@(-0x60)"
  184.     : "=r" (res)
  185.     : "r" (a6), "r" (d0)
  186.     : "d0", "d1", "a0", "a1");
  187.     return res;
  188. }
  189. double const asin (double parm)
  190. {
  191.     register double res __asm("d0");
  192.     register void *a6 __asm ("a6");
  193.     register double d0 __asm("d0");
  194.  
  195.     a6 = MathIeeeDoubTransBase;
  196.     d0 = parm;
  197.     __asm volatile ("
  198.     jsr a6@(-0x72)"
  199.     : "=r" (res)
  200.     : "r" (a6), "r" (d0)
  201.     : "d0", "d1", "a0", "a1");
  202.     return res;
  203. }
  204. double const acos (double parm)
  205. {
  206.     register double res __asm("d0");
  207.     register void *a6 __asm ("a6");
  208.     register double d0 __asm("d0");
  209.  
  210.     a6 = MathIeeeDoubTransBase;
  211.     d0 = parm;
  212.     __asm volatile ("
  213.     jsr a6@(-0x78)"
  214.     : "=r" (res)
  215.     : "r" (a6), "r" (d0)
  216.     : "d0", "d1", "a0", "a1");
  217.     return res;
  218. }
  219. double const log10 (double parm)
  220. {
  221.     register double res __asm("d0");
  222.     register void *a6 __asm ("a6");
  223.     register double d0 __asm("d0");
  224.  
  225.     a6 = MathIeeeDoubTransBase;
  226.     d0 = parm;
  227.     __asm volatile ("
  228.     jsr a6@(-0x7e)"
  229.     : "=r" (res)
  230.     : "r" (a6), "r" (d0)
  231.     : "d0", "d1", "a0", "a1");
  232.     return res;
  233. }
  234. double const floor (double parm)
  235. {
  236.     register double res __asm("d0");
  237.     register void *a6 __asm ("a6");
  238.     register double d0 __asm("d0");
  239.  
  240.     a6 = MathIeeeDoubBasBase;
  241.     d0 = parm;
  242.     __asm volatile ("
  243.     jsr a6@(-0x5a)"
  244.     : "=r" (res)
  245.     : "r" (a6), "r" (d0)
  246.     : "d0", "d1", "a0", "a1");
  247.     return res;
  248. }
  249. double const ceil (double parm)
  250. {
  251.     register double res __asm("d0");
  252.     register void *a6 __asm ("a6");
  253.     register double d0 __asm("d0");
  254.  
  255.     a6 = MathIeeeDoubBasBase;
  256.     d0 = parm;
  257.     __asm volatile ("
  258.     jsr a6@(-0x60)"
  259.     : "=r" (res)
  260.     : "r" (a6), "r" (d0)
  261.     : "d0", "d1", "a0", "a1");
  262.     return res;
  263. }
  264.