home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / programming / gnuc / library / rcs / mathsup.c,v < prev    next >
Encoding:
Text File  |  1992-07-04  |  6.3 KB  |  349 lines

  1. head    1.2;
  2. access;
  3. symbols
  4.     version39-41:1.2;
  5. locks;
  6. comment    @ *  @;
  7.  
  8.  
  9. 1.2
  10. date    92.05.22.01.49.39;    author mwild;    state Exp;
  11. branches;
  12. next    1.1;
  13.  
  14. 1.1
  15. date    92.05.14.19.55.40;    author mwild;    state Exp;
  16. branches;
  17. next    ;
  18.  
  19.  
  20. desc
  21. @math functions we get for free from the shared libraries
  22. @
  23.  
  24.  
  25. 1.2
  26. log
  27. @added floor()/ceil(). Changed indentation a bit.
  28. @
  29. text
  30. @extern struct MathIeeeDoubTransBase * MathIeeeDoubTransBase;
  31. extern struct MathIeeeDoubBasBase * MathIeeeDoubBasBase;
  32.  
  33. double const atan (double parm)
  34. {
  35.     register double res __asm("d0");
  36.     register void *a6 __asm ("a6");
  37.     register double d0 __asm("d0");
  38.  
  39.     a6 = MathIeeeDoubTransBase;
  40.     d0 = parm;
  41.     __asm volatile ("
  42.     jsr a6@@(-0x1e)"
  43.     : "=r" (res)
  44.     : "r" (a6), "r" (d0)
  45.     : "d0", "d1", "a0", "a1");
  46.     return res;
  47. }
  48. double const sin (double parm)
  49. {
  50.     register double res __asm("d0");
  51.     register void *a6 __asm ("a6");
  52.     register double d0 __asm("d0");
  53.  
  54.     a6 = MathIeeeDoubTransBase;
  55.     d0 = parm;
  56.     __asm volatile ("
  57.     jsr a6@@(-0x24)"
  58.     : "=r" (res)
  59.     : "r" (a6), "r" (d0)
  60.     : "d0", "d1", "a0", "a1");
  61.     return res;
  62. }
  63. double const cos (double parm)
  64. {
  65.     register double res __asm("d0");
  66.     register void *a6 __asm ("a6");
  67.     register double d0 __asm("d0");
  68.  
  69.     a6 = MathIeeeDoubTransBase;
  70.     d0 = parm;
  71.     __asm volatile ("
  72.     jsr a6@@(-0x2a)"
  73.     : "=r" (res)
  74.     : "r" (a6), "r" (d0)
  75.     : "d0", "d1", "a0", "a1");
  76.     return res;
  77. }
  78. double const tan (double parm)
  79. {
  80.     register double res __asm("d0");
  81.     register void *a6 __asm ("a6");
  82.     register double d0 __asm("d0");
  83.  
  84.     a6 = MathIeeeDoubTransBase;
  85.     d0 = parm;
  86.     __asm volatile ("
  87.     jsr a6@@(-0x30)"
  88.     : "=r" (res)
  89.     : "r" (a6), "r" (d0)
  90.     : "d0", "d1", "a0", "a1");
  91.     return res;
  92. }
  93. double sincos (double* pf2, double parm)
  94. {
  95.     register double res __asm("d0");
  96.     register void *a6 __asm ("a6");
  97.     register double* a0 __asm("a0");
  98.     register double d0 __asm("d0");
  99.  
  100.     a6 = MathIeeeDoubTransBase;
  101.     a0 = pf2;
  102.     d0 = parm;
  103.     __asm volatile ("
  104.     jsr a6@@(-0x36)"
  105.     : "=r" (res)
  106.     : "r" (a6), "r" (a0), "r" (d0)
  107.     : "d0", "d1", "a0", "a1");
  108.     return res;
  109. }
  110. double const sinh (double parm)
  111. {
  112.     register double res __asm("d0");
  113.     register void *a6 __asm ("a6");
  114.     register double d0 __asm("d0");
  115.  
  116.     a6 = MathIeeeDoubTransBase;
  117.     d0 = parm;
  118.     __asm volatile ("
  119.     jsr a6@@(-0x3c)"
  120.     : "=r" (res)
  121.     : "r" (a6), "r" (d0)
  122.     : "d0", "d1", "a0", "a1");
  123.     return res;
  124. }
  125. double const cosh (double parm)
  126. {
  127.     register double res __asm("d0");
  128.     register void *a6 __asm ("a6");
  129.     register double d0 __asm("d0");
  130.  
  131.     a6 = MathIeeeDoubTransBase;
  132.     d0 = parm;
  133.     __asm volatile ("
  134.     jsr a6@@(-0x42)"
  135.     : "=r" (res)
  136.     : "r" (a6), "r" (d0)
  137.     : "d0", "d1", "a0", "a1");
  138.     return res;
  139. }
  140. double const tanh (double parm)
  141. {
  142.     register double res __asm("d0");
  143.     register void *a6 __asm ("a6");
  144.     register double d0 __asm("d0");
  145.  
  146.     a6 = MathIeeeDoubTransBase;
  147.     d0 = parm;
  148.     __asm volatile ("
  149.     jsr a6@@(-0x48)"
  150.     : "=r" (res)
  151.     : "r" (a6), "r" (d0)
  152.     : "d0", "d1", "a0", "a1");
  153.     return res;
  154. }
  155. double const exp (double parm)
  156. {
  157.     register double res __asm("d0");
  158.     register void *a6 __asm ("a6");
  159.     register double d0 __asm("d0");
  160.  
  161.     a6 = MathIeeeDoubTransBase;
  162.     d0 = parm;
  163.     __asm volatile ("
  164.     jsr a6@@(-0x4e)"
  165.     : "=r" (res)
  166.     : "r" (a6), "r" (d0)
  167.     : "d0", "d1", "a0", "a1");
  168.     return res;
  169. }
  170. double const log (double parm)
  171. {
  172.     register double res __asm("d0");
  173.     register void *a6 __asm ("a6");
  174.     register double d0 __asm("d0");
  175.  
  176.     a6 = MathIeeeDoubTransBase;
  177.     d0 = parm;
  178.     __asm volatile ("
  179.     jsr a6@@(-0x54)"
  180.     : "=r" (res)
  181.     : "r" (a6), "r" (d0)
  182.     : "d0", "d1", "a0", "a1");
  183.     return res;
  184. }
  185. /* GRRRR Commodore does it the other way round... */
  186. double const pow (double arg, double exp)
  187. {
  188.     register double res __asm("d0");
  189.     register void *a6 __asm ("a6");
  190.     register double d2 __asm("d2");
  191.     register double d3 __asm("d0");
  192.  
  193.     a6 = MathIeeeDoubTransBase;
  194.     d2 = exp;    /* invert arguments here, so exp really is arg and vice versa */
  195.     d3 = arg;
  196.     __asm volatile ("
  197.     jsr a6@@(-0x5a)"
  198.     : "=r" (res)
  199.     : "r" (a6), "r" (d2), "r" (d3)
  200.     : "d0", "d1", "a0", "a1", "d2", "d3");
  201.     return res;
  202. }
  203. double const sqrt (double parm)
  204. {
  205.     register double res __asm("d0");
  206.     register void *a6 __asm ("a6");
  207.     register double d0 __asm("d0");
  208.  
  209.     a6 = MathIeeeDoubTransBase;
  210.     d0 = parm;
  211.     __asm volatile ("
  212.     jsr a6@@(-0x60)"
  213.     : "=r" (res)
  214.     : "r" (a6), "r" (d0)
  215.     : "d0", "d1", "a0", "a1");
  216.     return res;
  217. }
  218. double const asin (double parm)
  219. {
  220.     register double res __asm("d0");
  221.     register void *a6 __asm ("a6");
  222.     register double d0 __asm("d0");
  223.  
  224.     a6 = MathIeeeDoubTransBase;
  225.     d0 = parm;
  226.     __asm volatile ("
  227.     jsr a6@@(-0x72)"
  228.     : "=r" (res)
  229.     : "r" (a6), "r" (d0)
  230.     : "d0", "d1", "a0", "a1");
  231.     return res;
  232. }
  233. double const acos (double parm)
  234. {
  235.     register double res __asm("d0");
  236.     register void *a6 __asm ("a6");
  237.     register double d0 __asm("d0");
  238.  
  239.     a6 = MathIeeeDoubTransBase;
  240.     d0 = parm;
  241.     __asm volatile ("
  242.     jsr a6@@(-0x78)"
  243.     : "=r" (res)
  244.     : "r" (a6), "r" (d0)
  245.     : "d0", "d1", "a0", "a1");
  246.     return res;
  247. }
  248. double const log10 (double parm)
  249. {
  250.     register double res __asm("d0");
  251.     register void *a6 __asm ("a6");
  252.     register double d0 __asm("d0");
  253.  
  254.     a6 = MathIeeeDoubTransBase;
  255.     d0 = parm;
  256.     __asm volatile ("
  257.     jsr a6@@(-0x7e)"
  258.     : "=r" (res)
  259.     : "r" (a6), "r" (d0)
  260.     : "d0", "d1", "a0", "a1");
  261.     return res;
  262. }
  263. double const floor (double parm)
  264. {
  265.     register double res __asm("d0");
  266.     register void *a6 __asm ("a6");
  267.     register double d0 __asm("d0");
  268.  
  269.     a6 = MathIeeeDoubBasBase;
  270.     d0 = parm;
  271.     __asm volatile ("
  272.     jsr a6@@(-0x5a)"
  273.     : "=r" (res)
  274.     : "r" (a6), "r" (d0)
  275.     : "d0", "d1", "a0", "a1");
  276.     return res;
  277. }
  278. double const ceil (double parm)
  279. {
  280.     register double res __asm("d0");
  281.     register void *a6 __asm ("a6");
  282.     register double d0 __asm("d0");
  283.  
  284.     a6 = MathIeeeDoubBasBase;
  285.     d0 = parm;
  286.     __asm volatile ("
  287.     jsr a6@@(-0x60)"
  288.     : "=r" (res)
  289.     : "r" (a6), "r" (d0)
  290.     : "d0", "d1", "a0", "a1");
  291.     return res;
  292. }
  293. @
  294.  
  295.  
  296. 1.1
  297. log
  298. @Initial revision
  299. @
  300. text
  301. @d2 1
  302. d4 1
  303. a4 1
  304. double const atan(double parm)
  305. d19 1
  306. a19 1
  307. double const sin(double parm)
  308. d34 1
  309. a34 1
  310. double const cos(double parm)
  311. d49 1
  312. a49 1
  313. double const tan(double parm)
  314. d64 1
  315. a64 1
  316. double sincos(double* pf2, double parm)
  317. d81 1
  318. a81 1
  319. double const sinh(double parm)
  320. d96 1
  321. a96 1
  322. double const cosh(double parm)
  323. d111 1
  324. a111 1
  325. double const tanh(double parm)
  326. d126 1
  327. a126 1
  328. double const exp(double parm)
  329. d141 1
  330. a141 1
  331. double const log(double parm)
  332. d157 1
  333. a157 1
  334. double const pow(double arg, double exp)
  335. d174 1
  336. a174 1
  337. double const sqrt(double parm)
  338. d189 1
  339. a189 1
  340. double const asin(double parm)
  341. d204 1
  342. a204 1
  343. double const acos(double parm)
  344. d219 1
  345. a219 1
  346. double const log10(double parm)
  347. d229 30
  348. @
  349.