mathALib.s
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:33k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* mathALib.s - C-callable floating-point math entry points */
  2. /* Copyright 1984-2001 Wind River Systems, Inc. */
  3. /*
  4. modification history 
  5. --------------------
  6. 01d,05sep01,hdn  added FUNC/FUNC_LABEL GTEXT/GDATA macros
  7.  replaced .align with .balign
  8.  removed cosh, sinh, tanh for one in libc/math
  9. 01c,16jun93,hdn  updated to 5.1.
  10. 01b,14oct92,hdn  aligned all functions.
  11. 01a,16sep92,hdn  written by modifying Tron's mathALib.s
  12. */
  13. /*
  14. DESCRIPTION
  15. This library provides a C interface to the high-level math functions,
  16. provided either by an i80387 floating-point coprocessor or
  17. a software floating point emulation library.  The appropriate function
  18. is called, based on whether mathHardInit() or mathSoftInit() has been
  19. called.
  20. All angle-related parameters and return values are expressed in radians.  
  21. Functions capable of errors will set errno upon an error. All functions
  22. included in this library whos names correspond to the ANSI C specification
  23. are, indeed, ANSI-compatable. In the spirit of ANSI, HUGE_VAL is now
  24. supported.
  25. SEE ALSO:
  26. fppLib (1), floatLib (1), The C Programming Language - Second Edition
  27. INCLUDE FILE: math.h
  28. */
  29. #define _ASMLANGUAGE
  30. #include "vxWorks.h"
  31. #include "asm.h"
  32. #include "errno.h"
  33. .data
  34. .globl FUNC(copyright_wind_river)
  35. .long FUNC(copyright_wind_river)
  36. /* externals */
  37. .globl FUNC(logMsg)
  38. /* internals */
  39.         .globl  GTEXT(acos) /* double-precision functions */
  40.         .globl  GTEXT(asin)
  41.         .globl  GTEXT(atan)
  42. .globl  GTEXT(atan2)
  43. .globl  GTEXT(cbrt)
  44. .globl  GTEXT(ceil)
  45.         .globl  GTEXT(cos)
  46.         .globl  GTEXT(exp)
  47.         .globl  GTEXT(fabs)
  48. .globl  GTEXT(floor)
  49. .globl  GTEXT(fmod)
  50. .globl GTEXT(hypot)
  51. .globl  GTEXT(infinity)
  52. .globl  GTEXT(irint)
  53. .globl  GTEXT(iround)
  54.         .globl  GTEXT(log)
  55.         .globl  GTEXT(log2)
  56.         .globl  GTEXT(log10)
  57.         .globl  GTEXT(pow)
  58. .globl  GTEXT(round)
  59.         .globl  GTEXT(sin)
  60. .globl  GTEXT(sincos)
  61.         .globl  GTEXT(sqrt)
  62.         .globl  GTEXT(tan)
  63. .globl  GTEXT(trunc)
  64.         .globl  GTEXT(facos) /* single-precision functions */
  65.         .globl  GTEXT(fasin)
  66.         .globl  GTEXT(fatan)
  67. .globl  GTEXT(fatan2)
  68. .globl  GTEXT(fcbrt)
  69. .globl  GTEXT(fceil)
  70.         .globl  GTEXT(fcos)
  71.         .globl  GTEXT(fcosh)
  72.         .globl  GTEXT(fexp)
  73.         .globl  GTEXT(ffabs)
  74. .globl  GTEXT(ffloor)
  75. .globl  GTEXT(ffmod)
  76. .globl GTEXT(fhypot)
  77. .globl  GTEXT(finfinity)
  78. .globl  GTEXT(firint)
  79. .globl  GTEXT(firound)
  80.         .globl  GTEXT(flog)
  81.         .globl  GTEXT(flog2)
  82.         .globl  GTEXT(flog10)
  83.         .globl  GTEXT(fpow)
  84. .globl  GTEXT(fround)
  85.         .globl  GTEXT(fsin)
  86. .globl  GTEXT(fsincos)
  87.         .globl  GTEXT(fsinh)
  88.         .globl  GTEXT(fsqrt)
  89.         .globl  GTEXT(ftan)
  90.         .globl  GTEXT(ftanh)
  91. .globl  GTEXT(ftrunc)
  92. .globl GTEXT(mathErrNoInit) /* default routine (log error msg) */
  93. .globl  GDATA(mathAcosFunc) /* double-precision function pointers */
  94. .globl  GDATA(mathAsinFunc)
  95. .globl  GDATA(mathAtanFunc)
  96. .globl  GDATA(mathAtan2Func)
  97. .globl  GDATA(mathCbrtFunc)
  98. .globl  GDATA(mathCeilFunc)
  99. .globl  GDATA(mathCosFunc)
  100. .globl  GDATA(mathCoshFunc)
  101. .globl  GDATA(mathExpFunc)
  102. .globl  GDATA(mathFabsFunc)
  103. .globl  GDATA(mathFloorFunc)
  104. .globl  GDATA(mathFmodFunc)
  105. .globl  GDATA(mathHypotFunc)
  106. .globl  GDATA(mathInfinityFunc)
  107. .globl  GDATA(mathIrintFunc)
  108. .globl  GDATA(mathIroundFunc)
  109. .globl  GDATA(mathLogFunc)
  110. .globl  GDATA(mathLog2Func)
  111. .globl  GDATA(mathLog10Func)
  112. .globl  GDATA(mathPowFunc)
  113. .globl  GDATA(mathRoundFunc)
  114. .globl  GDATA(mathSinFunc)
  115. .globl  GDATA(mathSincosFunc)
  116. .globl  GDATA(mathSinhFunc)
  117. .globl  GDATA(mathSqrtFunc)
  118. .globl  GDATA(mathTanFunc)
  119. .globl  GDATA(mathTanhFunc)
  120. .globl  GDATA(mathTruncFunc)
  121. .globl  GDATA(mathFacosFunc) /* single-precision function pointers */
  122. .globl  GDATA(mathFasinFunc)
  123. .globl  GDATA(mathFatanFunc)
  124. .globl  GDATA(mathFatan2Func)
  125. .globl  GDATA(mathFcbrtFunc)
  126. .globl  GDATA(mathFceilFunc)
  127. .globl  GDATA(mathFcosFunc)
  128. .globl  GDATA(mathFcoshFunc)
  129. .globl  GDATA(mathFexpFunc)
  130. .globl  GDATA(mathFfabsFunc)
  131. .globl  GDATA(mathFfloorFunc)
  132. .globl  GDATA(mathFfmodFunc)
  133. .globl  GDATA(mathFhypotFunc)
  134. .globl  GDATA(mathFinfinityFunc)
  135. .globl  GDATA(mathFirintFunc)
  136. .globl  GDATA(mathFiroundFunc)
  137. .globl  GDATA(mathFlogFunc)
  138. .globl  GDATA(mathFlog2Func)
  139. .globl  GDATA(mathFlog10Func)
  140. .globl  GDATA(mathFpowFunc)
  141. .globl  GDATA(mathFroundFunc)
  142. .globl  GDATA(mathFsinFunc)
  143. .globl  GDATA(mathFsincosFunc)
  144. .globl  GDATA(mathFsinhFunc)
  145. .globl  GDATA(mathFsqrtFunc)
  146. .globl  GDATA(mathFtanFunc)
  147. .globl  GDATA(mathFtanhFunc)
  148. .globl  GDATA(mathFtruncFunc)
  149. .data
  150. .balign 16
  151. FUNC_LABEL(mathAcosFunc) /* double-precision function pointers */
  152. .long FUNC(mathErrNoInit)
  153. FUNC_LABEL(mathAsinFunc)
  154. .long FUNC(mathErrNoInit)
  155. FUNC_LABEL(mathAtanFunc)
  156. .long FUNC(mathErrNoInit)
  157. FUNC_LABEL(mathAtan2Func)
  158. .long FUNC(mathErrNoInit)
  159. FUNC_LABEL(mathCbrtFunc)
  160. .long FUNC(mathErrNoInit)
  161. FUNC_LABEL(mathCeilFunc)
  162. .long FUNC(mathErrNoInit)
  163. FUNC_LABEL(mathCosFunc)
  164. .long FUNC(mathErrNoInit)
  165. FUNC_LABEL(mathCoshFunc)
  166. .long FUNC(mathErrNoInit)
  167. FUNC_LABEL(mathExpFunc)
  168. .long FUNC(mathErrNoInit)
  169. FUNC_LABEL(mathFabsFunc)
  170. .long FUNC(mathErrNoInit)
  171. FUNC_LABEL(mathFloorFunc)
  172. .long FUNC(mathErrNoInit)
  173. FUNC_LABEL(mathFmodFunc)
  174. .long FUNC(mathErrNoInit)
  175. FUNC_LABEL(mathHypotFunc)
  176. .long FUNC(mathErrNoInit)
  177. FUNC_LABEL(mathInfinityFunc)
  178. .long FUNC(mathErrNoInit)
  179. FUNC_LABEL(mathIrintFunc)
  180. .long FUNC(mathErrNoInit)
  181. FUNC_LABEL(mathIroundFunc)
  182. .long FUNC(mathErrNoInit)
  183. FUNC_LABEL(mathLogFunc)
  184. .long FUNC(mathErrNoInit)
  185. FUNC_LABEL(mathLog2Func)
  186. .long FUNC(mathErrNoInit)
  187. FUNC_LABEL(mathLog10Func)
  188. .long FUNC(mathErrNoInit)
  189. FUNC_LABEL(mathPowFunc)
  190. .long FUNC(mathErrNoInit)
  191. FUNC_LABEL(mathRoundFunc)
  192. .long FUNC(mathErrNoInit)
  193. FUNC_LABEL(mathSinFunc)
  194. .long FUNC(mathErrNoInit)
  195. FUNC_LABEL(mathSincosFunc)
  196. .long FUNC(mathErrNoInit)
  197. FUNC_LABEL(mathSinhFunc)
  198. .long FUNC(mathErrNoInit)
  199. FUNC_LABEL(mathSqrtFunc)
  200. .long FUNC(mathErrNoInit)
  201. FUNC_LABEL(mathTanFunc)
  202. .long FUNC(mathErrNoInit)
  203. FUNC_LABEL(mathTanhFunc)
  204. .long FUNC(mathErrNoInit)
  205. FUNC_LABEL(mathTruncFunc)
  206. .long FUNC(mathErrNoInit)
  207. FUNC_LABEL(mathFacosFunc) /* single-precision function pointers */
  208. .long FUNC(mathErrNoInit)
  209. FUNC_LABEL(mathFasinFunc)
  210. .long FUNC(mathErrNoInit)
  211. FUNC_LABEL(mathFatanFunc)
  212. .long FUNC(mathErrNoInit)
  213. FUNC_LABEL(mathFatan2Func)
  214. .long FUNC(mathErrNoInit)
  215. FUNC_LABEL(mathFcbrtFunc)
  216. .long FUNC(mathErrNoInit)
  217. FUNC_LABEL(mathFceilFunc)
  218. .long FUNC(mathErrNoInit)
  219. FUNC_LABEL(mathFcosFunc)
  220. .long FUNC(mathErrNoInit)
  221. FUNC_LABEL(mathFcoshFunc)
  222. .long FUNC(mathErrNoInit)
  223. FUNC_LABEL(mathFexpFunc)
  224. .long FUNC(mathErrNoInit)
  225. FUNC_LABEL(mathFfabsFunc)
  226. .long FUNC(mathErrNoInit)
  227. FUNC_LABEL(mathFfloorFunc)
  228. .long FUNC(mathErrNoInit)
  229. FUNC_LABEL(mathFfmodFunc)
  230. .long FUNC(mathErrNoInit)
  231. FUNC_LABEL(mathFhypotFunc)
  232. .long FUNC(mathErrNoInit)
  233. FUNC_LABEL(mathFinfinityFunc)
  234. .long FUNC(mathErrNoInit)
  235. FUNC_LABEL(mathFirintFunc)
  236. .long FUNC(mathErrNoInit)
  237. FUNC_LABEL(mathFiroundFunc)
  238. .long FUNC(mathErrNoInit)
  239. FUNC_LABEL(mathFlogFunc)
  240. .long FUNC(mathErrNoInit)
  241. FUNC_LABEL(mathFlog2Func)
  242. .long FUNC(mathErrNoInit)
  243. FUNC_LABEL(mathFlog10Func)
  244. .long FUNC(mathErrNoInit)
  245. FUNC_LABEL(mathFpowFunc)
  246. .long FUNC(mathErrNoInit)
  247. FUNC_LABEL(mathFroundFunc)
  248. .long FUNC(mathErrNoInit)
  249. FUNC_LABEL(mathFsinFunc)
  250. .long FUNC(mathErrNoInit)
  251. FUNC_LABEL(mathFsincosFunc)
  252. .long FUNC(mathErrNoInit)
  253. FUNC_LABEL(mathFsinhFunc)
  254. .long FUNC(mathErrNoInit)
  255. FUNC_LABEL(mathFsqrtFunc)
  256. .long FUNC(mathErrNoInit)
  257. FUNC_LABEL(mathFtanFunc)
  258. .long FUNC(mathErrNoInit)
  259. FUNC_LABEL(mathFtanhFunc)
  260. .long FUNC(mathErrNoInit)
  261. FUNC_LABEL(mathFtruncFunc)
  262. .long FUNC(mathErrNoInit)
  263. FUNC_LABEL(mathErrNoInitString)
  264. .asciz "ERROR - floating point math not initialized!n"
  265.         .text
  266. .balign 16
  267. /*******************************************************************************
  268. *
  269. * acos - ANSI-compatable floating-point arc-cosine
  270. *
  271. * RETURNS: The arc-cosine in the range -pi/2 to pi/2 radians.
  272. * double acos (dblParam)
  273. *     double dblParam; /* angle in radians *
  274. */
  275. FUNC_LABEL(acos)
  276. movl FUNC(mathAcosFunc),%eax
  277. jmp *%eax /* jump, let that routine rts */
  278. /*******************************************************************************
  279. *
  280. * asin - ANSI-compatable floating-point arc-sine
  281. *
  282. * RETURNS: The arc-sine in the range 0.0 to pi radians.
  283. * SEE ALSO: 
  284. * floatLib (1), "The C Programming Language - Second Edition"
  285. * double asin (dblParam)
  286. *     double dblParam; /* angle in radians *
  287. */
  288. .balign 16,0x90
  289. FUNC_LABEL(asin)
  290. movl FUNC(mathAsinFunc),%eax
  291. jmp *%eax /* jump, let that routine rts */
  292. /*******************************************************************************
  293. *
  294. * atan - ANSI-compatable floating-point arc-tangent
  295. *
  296. * RETURNS: The arc-tangent of dblParam in the range -pi/2 to pi/2.
  297. *
  298. * SEE ALSO: floatLib (1), acos (2), asin (2)
  299. * double atan (dblParam)
  300. *     double dblParam; /* angle in radians *
  301. */
  302. .balign 16,0x90
  303. FUNC_LABEL(atan)
  304. movl FUNC(mathAtanFunc),%eax
  305. jmp *%eax /* jump, let that routine rts */
  306. /*******************************************************************************
  307. *
  308. * atan2 - function returns the arc tangent of (dblY/dblX) 
  309. *
  310. * RETURNS:
  311. *    The arc-tangent of (dblY/dblX) in the range -pi to pi.
  312. *
  313. * SEE ALSO: 
  314. * floatLib (1), "The C Programming Language - Second Edition"
  315. * double atan2 (dblY, dblX)
  316. *     double dblY; /* Y *
  317. *     double dblX; /* X *
  318. */
  319. .balign 16,0x90
  320. FUNC_LABEL(atan2)
  321. movl FUNC(mathAtan2Func),%eax
  322. jmp *%eax /* jump, let that routine rts */
  323. /*******************************************************************************
  324. *
  325. * cbrt - floating-point cube root
  326. *
  327. * This routine takes a double-precision floating point parameter
  328. * and returns the double-precision cube root.
  329. *
  330. * RETURNS: double-precision cube root
  331. * double cbrt (dblParam)
  332. *     double dblParam;  /* argument *
  333. */
  334. .balign 16,0x90
  335. FUNC_LABEL(cbrt)
  336. movl FUNC(mathCbrtFunc),%eax
  337. jmp *%eax /* jump, let that routine rts */
  338. /*******************************************************************************
  339. *
  340. * ceil - ANSI-compatable floating-point ceiling
  341. *
  342. * Performs a 'round-to-positive-infinity'
  343. *
  344. * RETURNS: 
  345. * The least integral value greater than or equal to dblParam,
  346. * result is returned in double precision.
  347. *
  348. * SEE ALSO: 
  349. * floatLib (1), "The C Programming Language - Second Edition"
  350. * double ceil (dblParam)
  351. *     double dblParam; /* argument *
  352. */
  353. .balign 16,0x90
  354. FUNC_LABEL(ceil)
  355. movl FUNC(mathCeilFunc),%eax
  356. jmp *%eax /* jump, let that routine rts */
  357. /*******************************************************************************
  358. *
  359. * cos - ANSI-compatable floating-point cosine
  360. *
  361. * RETURNS: the cosine of the radian argument dblParam
  362. *
  363. * SEE ALSO: 
  364. * floatLib (1), sin (2), tan(2),
  365. * "The C Programming Language - Second Edition"
  366. * double cos (dblParam)
  367. *     double dblParam; /* angle in radians *
  368. */
  369. .balign 16,0x90
  370. FUNC_LABEL(cos)
  371. movl FUNC(mathCosFunc),%eax
  372. jmp *%eax /* jump, let that routine rts */
  373. /*******************************************************************************
  374. *
  375. * exp - exponential function
  376. *
  377. * RETURNS:
  378. *    Floating-point inverse natural logarithm (e ** (dblExponent)).
  379. *
  380. * SEE ALSO: 
  381. * floatLib (1), "The C Programming Language - Second Edition"
  382. * double exp (dblExponent)
  383. *     double dblExponent; /* argument *
  384. */
  385. .balign 16,0x90
  386. FUNC_LABEL(exp)
  387. movl FUNC(mathExpFunc),%eax
  388. jmp *%eax /* jump, let that routine rts */
  389. /*******************************************************************************
  390. *
  391. * fabs - ANSI-compatable floating-point absolute value
  392. *
  393. * RETURNS: The floating-point absolute value of dblParam.
  394. *
  395. * SEE ALSO: 
  396. * floatLib (1), "The C Programming Language - Second Edition"
  397. * double fabs (dblParam)
  398. *     double dblParam; /* argument *
  399. */
  400. .balign 16,0x90
  401. FUNC_LABEL(fabs)
  402. movl FUNC(mathFabsFunc),%eax
  403. jmp *%eax /* jump, let that routine rts */
  404. /*******************************************************************************
  405. *
  406. * floor - ANSI-compatable floating-point floor
  407. *
  408. * Performs a 'round-to-negative-infinity'.
  409. *
  410. * RETURNS: 
  411. * The largest integral value less than or equal to dblParam,
  412. * result is returned in double precision.
  413. *
  414. * SEE ALSO: 
  415. * floatLib (1), "The C Programming Language - Second Edition"
  416. *
  417. * double floor (dblParam)
  418. *     double dblParam; /* argument *
  419. */
  420. .balign 16,0x90
  421. FUNC_LABEL(floor)
  422. movl FUNC(mathFloorFunc),%eax
  423. jmp *%eax /* jump, let that routine rts */
  424. /*******************************************************************************
  425. *
  426. * fmod - ANSI-compatable floating-point modulus 
  427. *
  428. * RETURNS: 
  429. * Floating-point modulus of (dblParam / dblDivisor) with the sign of dblParam.  
  430. *
  431. * SEE ALSO: 
  432. * floatLib (1), "The C Programming Language - Second Edition"
  433. * double fmod (dblParam, dblDivisor)
  434. *     double dblParam; /* argument *
  435. *     double dblDivisor; /* divisor *
  436. */
  437. .balign 16,0x90
  438. FUNC_LABEL(fmod)
  439. movl FUNC(mathFmodFunc),%eax
  440. jmp *%eax /* jump, let that routine rts */
  441. /*******************************************************************************
  442. *
  443. * hypot - double-precision Euclidean distance (hypotenuse)
  444. *
  445. * This routine takes two input double-precision floating point
  446. * parameters and returns length of the corresponding Euclidean distance
  447. * (hypotenuse).
  448. *
  449. * The distance is calculated as
  450. * sqrt ((dblX * dblX) + (dblY * dblY))
  451. *
  452. * RETURNS: double-precision hypotenuse.
  453. *
  454. * double hypot (dblX, dblY)
  455. *     double dblX; /* argument *
  456. *     double dblY; /* argument *
  457. */
  458. .balign 16,0x90
  459. FUNC_LABEL(hypot)
  460. movl FUNC(mathHypotFunc),%eax
  461. jmp *%eax /* jump, let that routine rts */
  462. /********************************************************************************
  463. * infinity - return a very large double
  464. *
  465. * SEE ALSO: floatLib(1)
  466.  
  467. * double infinity ()
  468. */
  469.  
  470. .balign 16,0x90
  471. FUNC_LABEL(infinity)
  472. movl FUNC(mathInfinityFunc),%eax
  473. jmp *%eax /* jump, let that routine rts */
  474. /********************************************************************************
  475. * irint - convert double to integer
  476. *
  477. * Convert dblParam to an integer using the selected IEEE
  478. * rounding direction.
  479. *
  480. * CAVEAT:
  481. * The rounding direction is not pre-selectable
  482. * and is fixed for 'round-to-the-nearest'.
  483. *
  484. * SEE ALSO: floatLib (1)
  485.  
  486. * int irint (dblParam)
  487. *     double dblParam; /* argument *
  488. */
  489.  
  490. .balign 16,0x90
  491. FUNC_LABEL(irint)
  492. movl FUNC(mathIrintFunc),%eax
  493. jmp *%eax /* jump, let that routine rts */
  494. /*******************************************************************************
  495. *
  496. * iround - INTEGER floating-point rounding
  497. *
  498. * Performs a 'round-to-the-nearest' function.
  499. *
  500. * NOTE:
  501. * If dblParam is spaced evenly between two integers,
  502. * then the  even integer will be returned.
  503. * int iround (dblParam)
  504. *     double dblParam; /* argument *
  505. */
  506. .balign 16,0x90
  507. FUNC_LABEL(iround)
  508. movl FUNC(mathIroundFunc),%eax
  509. jmp *%eax /* jump, let that routine rts */
  510. /*******************************************************************************
  511. *
  512. * log - ANSI-compatable floating-point natural logarithm 
  513. *
  514. * RETURNS: The natural logarithm of dblParam.
  515. *
  516. * SEE ALSO: 
  517. * floatLib (1), "The C Programming Language - Second Edition"
  518. * double log (dblParam)
  519. *     double dblParam; /* argument *
  520. */
  521. .balign 16,0x90
  522. FUNC_LABEL(log)
  523. movl FUNC(mathLogFunc),%eax
  524. jmp *%eax /* jump, let that routine rts */
  525. /*******************************************************************************
  526. *
  527. * log10 - ANSI-compatable floating-point logarithm base 10 
  528. *
  529. * RETURNS: The logarithm (base 10) of dblParam.
  530. *
  531. * SEE ALSO: floatLib (1), log2 (2)
  532. * double log10 (dblParam)
  533. *     double dblParam; /* argument *
  534. */
  535. .balign 16,0x90
  536. FUNC_LABEL(log10)
  537. movl FUNC(mathLog10Func),%eax
  538. jmp *%eax /* jump, let that routine rts */
  539. /*******************************************************************************
  540. *
  541. * log2 - ANSI-compatable floating-point logarithm base 2 
  542. *
  543. * RETURNS: The logarithm (base 2) of dblParam.
  544. *
  545. * SEE ALSO: floatLib (1), log10 (2)
  546. * double log2 (dblParam)
  547. *     double dblParam; /* argument *
  548. */
  549. .balign 16,0x90
  550. FUNC_LABEL(log2)
  551. movl FUNC(mathLog2Func),%eax
  552. jmp *%eax /* jump, let that routine rts */
  553. /*******************************************************************************
  554. *
  555. * pow - ANSI-compatable floating-point dblX to the power of floating-point dblY 
  556. *
  557. * RETURNS: The floating-point value of dblX to the power of dblY.
  558. *
  559. * SEE ALSO: floatLib (1), sqrt (2)
  560. * double pow (dblX, dblY)
  561. *     double dblX; /* X *
  562. *     double dblY; /* X *
  563. */
  564. .balign 16,0x90
  565. FUNC_LABEL(pow)  /* pow (x,y) = exp (y * log(x)) */
  566. movl FUNC(mathPowFunc),%eax
  567. jmp *%eax /* jump, let that routine rts */
  568. /*******************************************************************************
  569. *
  570. * round - floating-point rounding
  571. *
  572. * Performs a 'round-to-nearest'.
  573. *
  574. * SEE ALSO: floatLib (1)
  575. * double round (dblParam)
  576. *     double dblParam; /* argument *
  577. */
  578. .balign 16,0x90
  579. FUNC_LABEL(round)
  580. movl FUNC(mathRoundFunc),%eax
  581. jmp *%eax /* jump, let that routine rts */
  582. /*******************************************************************************
  583. *
  584. * sin - ANSI-compatable floating-point sine
  585. *
  586. * RETURNS: The floating-point sine of dblParam.
  587. *
  588. * SEE ALSO: 
  589. *   floatLib (1), cos (2), tan (2), 
  590. *   "The C Programming Language - Second Edition"
  591. * double sin (dblParam)
  592. *     double dblParam; /* angle in radians *
  593. */
  594. .balign 16,0x90
  595. FUNC_LABEL(sin)
  596. movl FUNC(mathSinFunc),%eax
  597. jmp *%eax /* jump, let that routine rts */
  598. /*******************************************************************************
  599. *
  600. * sincos - simultaneous floating-point sine and cosine
  601. *
  602. * RETURNS:
  603. * The simultaeous floating point results of sine and cosine of the 
  604. * radian argument  The dblParam must be in range of -1.0 to +1.0.
  605. *
  606. *
  607. * SEE ALSO: floatLib (1), "i80387 Floating-Point User's Manual"
  608. * void sincos (dblParam, sinResult, cosResult)
  609. *     double dblParam; /* angle in radians *
  610. *     double *sinResult; /* sine result buffer *
  611. *     double *cosResult; /* cosine result buffer *
  612. */
  613. .balign 16,0x90
  614. FUNC_LABEL(sincos)
  615. movl FUNC(mathSincosFunc),%eax
  616. jmp *%eax /* jump, let that routine rts */
  617. /*******************************************************************************
  618. *
  619. * sqrt - ANSI-compatable floating-point square root
  620. *
  621. * RETURNS: The floating-point square root of dblParam.
  622. *
  623. * SEE ALSO: floatLib(1), pow (2)
  624. * double sqrt (dblParam)
  625. *     double dblParam; /* argument *
  626. */
  627. .balign 16,0x90
  628. FUNC_LABEL(sqrt)
  629. movl FUNC(mathSqrtFunc),%eax
  630. jmp *%eax /* jump, let that routine rts */
  631. /*******************************************************************************
  632. *
  633. * tan - ANSI-compatable floating-point tangent
  634. *
  635. * RETURNS: Floating-point tangent of dblParam.
  636. *
  637. * SEE ALSO: floatLib (1), cos (2), sin (2),
  638. * "The C Programming Language - Second Edition"
  639. * double tan (dblParam)
  640. *     double dblParam; /* angle in radians *
  641. */
  642. .balign 16,0x90
  643. FUNC_LABEL(tan)
  644. movl FUNC(mathTanFunc),%eax
  645. jmp *%eax /* jump, let that routine rts */
  646. /*******************************************************************************
  647. *
  648. * trunc - floating-point truncation
  649. *
  650. * Performs FINTRZ.
  651. *
  652. * RETURNS:
  653. * The integer portion of a double-precision number,
  654. * result is in double-precision.
  655. *
  656. * SEE ALSO: floatLib (1)
  657. * double trunc (dblParam)
  658. *     double dblParam; /* argument *
  659. */
  660. .balign 16,0x90
  661. FUNC_LABEL(trunc)
  662. movl FUNC(mathTruncFunc),%eax
  663. jmp *%eax /* jump, let that routine rts */
  664. /*******************************************************************************
  665. *
  666. * facos - single-precision floating-point arc-cosine
  667. *
  668. * RETURNS: The arc-cosine in the range -pi/2 to pi/2 radians.
  669. * float facos (fltParam)
  670. *     float fltParam; /* angle in radians *
  671. */
  672. .balign 16,0x90
  673. FUNC_LABEL(facos)
  674. movl FUNC(mathFacosFunc),%eax
  675. jmp *%eax /* jump, let that routine rts */
  676. /*******************************************************************************
  677. *
  678. * fasin - single-precision floating-point arc-sine
  679. *
  680. * RETURNS: The arc-sine in the range 0.0 to pi radians.
  681. * SEE ALSO: 
  682. * floatLib (1), "The C Programming Language - Second Edition"
  683. * float fasin (fltParam)
  684. *     float fltParam; /* angle in radians *
  685. */
  686. .balign 16,0x90
  687. FUNC_LABEL(fasin)
  688. movl FUNC(mathFasinFunc),%eax
  689. jmp *%eax /* jump, let that routine rts */
  690. /*******************************************************************************
  691. *
  692. * fatan - single-precision floating-point arc-tangent
  693. *
  694. * RETURNS: The arc-tangent of fltParam in the range -pi/2 to pi/2.
  695. *
  696. * SEE ALSO: floatLib (1), acos (2), asin (2)
  697. * float fatan (fltParam)
  698. *     float fltParam; /* angle in radians *
  699. */
  700. .balign 16,0x90
  701. FUNC_LABEL(fatan)
  702. movl FUNC(mathFatanFunc),%eax
  703. jmp *%eax /* jump, let that routine rts */
  704. /*******************************************************************************
  705. *
  706. * fatan2 - function returns the arc tangent of (fltY/fltX) 
  707. *
  708. * RETURNS:
  709. *    The arc-tangent of (fltY/fltX) in the range -pi to pi.
  710. *
  711. * SEE ALSO: 
  712. * floatLib (1), "The C Programming Language - Second Edition"
  713. * float fatan2 (fltY, fltX)
  714. *     float fltY; /* Y *
  715. *     float fltX; /* X *
  716. */
  717. .balign 16,0x90
  718. FUNC_LABEL(fatan2)
  719. movl FUNC(mathFatan2Func),%eax
  720. jmp *%eax /* jump, let that routine rts */
  721. /*******************************************************************************
  722. *
  723. * fcbrt - single-precision floating-point cube root
  724. *
  725. * This routine takes a single-precision floating point parameter
  726. * and returns the single-precision cube root.
  727. *
  728. * RETURNS: single-precision cube root
  729. * float fcbrt (fltParam)
  730. *     float fltParam;  /* argument *
  731. */
  732. .balign 16,0x90
  733. FUNC_LABEL(fcbrt)
  734. movl FUNC(mathFcbrtFunc),%eax
  735. jmp *%eax /* jump, let that routine rts */
  736. /*******************************************************************************
  737. *
  738. * fceil - single-precision floating-point ceiling
  739. *
  740. * Performs a 'round-to-positive-infinity'
  741. *
  742. * RETURNS: 
  743. * The least integral value greater than or equal to fltParam,
  744. * result is returned in single precision.
  745. *
  746. * SEE ALSO: 
  747. * floatLib (1), "The C Programming Language - Second Edition"
  748. * float fceil (fltParam)
  749. *     float fltParam; /* argument *
  750. */
  751. .balign 16,0x90
  752. FUNC_LABEL(fceil)
  753. movl FUNC(mathFceilFunc),%eax
  754. jmp *%eax /* jump, let that routine rts */
  755. /*******************************************************************************
  756. *
  757. * fcos - single-precision floating-point cosine
  758. *
  759. * RETURNS: the cosine of the radian argument fltParam
  760. *
  761. * SEE ALSO: 
  762. * floatLib (1), sin (2), cos (2), tan(2),
  763. * "The C Programming Language - Second Edition"
  764. * float fcos (fltParam)
  765. *     float fltParam; /* angle in radians *
  766. */
  767. .balign 16,0x90
  768. FUNC_LABEL(fcos)
  769. movl FUNC(mathFcosFunc),%eax
  770. jmp *%eax /* jump, let that routine rts */
  771. /*******************************************************************************
  772. *
  773. * fcosh - single-precision floating-point hyperbolic cosine
  774. *
  775. * RETURNS:
  776. *    The hyperbolic cosine of fltParam if (fltParam > 1.0), or
  777. *    NaN if (fltParam < 1.0) 
  778. *
  779. * SEE ALSO: "The C Programming Language - Second Edition"
  780. * float fcosh (fltParam)
  781. *     float fltParam; /* angle in radians *
  782. */
  783. .balign 16,0x90
  784. FUNC_LABEL(fcosh)
  785. movl FUNC(mathFcoshFunc),%eax
  786. jmp *%eax /* jump, let that routine rts */
  787. /*******************************************************************************
  788. *
  789. * fexp - single-precision exponential function
  790. *
  791. * RETURNS:
  792. *    Floating-point inverse natural logarithm (e ** (fltExponent)).
  793. *
  794. * SEE ALSO: 
  795. * floatLib (1), "The C Programming Language - Second Edition"
  796. * float fexp (fltExponent)
  797. *     float fltExponent; /* argument *
  798. */
  799. .balign 16,0x90
  800. FUNC_LABEL(fexp)
  801. movl FUNC(mathFexpFunc),%eax
  802. jmp *%eax /* jump, let that routine rts */
  803. /*******************************************************************************
  804. *
  805. * ffabs - single-precision floating-point absolute value
  806. *
  807. * RETURNS: The floating-point absolute value of fltParam.
  808. *
  809. * SEE ALSO: 
  810. * floatLib (1), "The C Programming Language - Second Edition"
  811. * float ffabs (fltParam)
  812. *     float fltParam; /* argument *
  813. */
  814. .balign 16,0x90
  815. FUNC_LABEL(ffabs)
  816. movl FUNC(mathFfabsFunc),%eax
  817. jmp *%eax /* jump, let that routine rts */
  818. /*******************************************************************************
  819. *
  820. * ffloor - single-precision floating-point floor
  821. *
  822. * Performs a 'round-to-negative-infinity'.
  823. *
  824. * RETURNS: 
  825. * The largest integral value less than or equal to fltParam,
  826. * result is returned in single precision.
  827. *
  828. * SEE ALSO: 
  829. * floatLib (1), "The C Programming Language - Second Edition"
  830. * float ffloor (fltParam)
  831. *     float fltParam; /* argument *
  832. */
  833. .balign 16,0x90
  834. FUNC_LABEL(ffloor)
  835. movl FUNC(mathFfloorFunc),%eax
  836. jmp *%eax /* jump, let that routine rts */
  837. /*******************************************************************************
  838. *
  839. * ffmod - single-precision floating-point modulus 
  840. *
  841. * RETURNS: 
  842. * Floating-point modulus of (fltParam / fltDivisor) with the sign of fltParam.  
  843. *
  844. * SEE ALSO: 
  845. * floatLib (1), "The C Programming Language - Second Edition"
  846. * float ffmod (fltParam, fltDivisor)
  847. *     float fltParam; /* argument *
  848. *     float fltDivisor; /* divisor *
  849. */
  850. .balign 16,0x90
  851. FUNC_LABEL(ffmod)
  852. movl FUNC(mathFfmodFunc),%eax
  853. jmp *%eax /* jump, let that routine rts */
  854. /*******************************************************************************
  855. *
  856. * fhypot - single-precision Euclidean distance (hypotenuse)
  857. *
  858. * This routine takes two input single-precision floating point
  859. * parameters and returns length of the corresponding Euclidean distance
  860. * (hypotenuse).
  861. *
  862. * The distance is calculated as
  863. * sqrt ((fltX * fltX) + (fltY * fltY))
  864. *
  865. * RETURNS: single-precision hypotenuse.
  866. *
  867. * float fhypot (fltX, fltY)
  868. *     float fltX; /* argument *
  869. *     float fltY; /* argument *
  870. */
  871. .balign 16,0x90
  872. FUNC_LABEL(fhypot)
  873. movl FUNC(mathFhypotFunc),%eax
  874. jmp *%eax /* jump, let that routine rts */
  875. /********************************************************************************
  876. * finfinity - return a very large float
  877. *
  878. * SEE ALSO: floatLib(1)
  879. * float finfinity ()
  880. */
  881.  
  882. .balign 16,0x90
  883. FUNC_LABEL(finfinity)
  884. movl FUNC(mathFinfinityFunc),%eax
  885. jmp *%eax /* jump, let that routine rts */
  886. /********************************************************************************
  887. * firint - convert float to integer
  888. *
  889. * Convert fltParam to an integer using the selected IEEE
  890. * rounding direction.
  891. *
  892. * CAVEAT:
  893. * The rounding direction is not pre-selectable
  894. * and is fixed for 'round-to-the-nearest'.
  895. *
  896. * SEE ALSO: floatLib (1)
  897. * int firint (fltParam)
  898. *     float fltParam; /* argument *
  899. */
  900.  
  901. .balign 16,0x90
  902. FUNC_LABEL(firint)
  903. movl FUNC(mathFirintFunc),%eax
  904. jmp *%eax /* jump, let that routine rts */
  905. /*******************************************************************************
  906. *
  907. * firound - INTEGER floating-point rounding
  908. *
  909. * Performs a 'round-to-the-nearest' function.
  910. *
  911. * NOTE:
  912. * If fltParam is spaced evenly between two integers,
  913. * then the  even integer will be returned.
  914. * int firound (fltParam)
  915. *     float fltParam; /* argument *
  916. */
  917. .balign 16,0x90
  918. FUNC_LABEL(firound)
  919. movl FUNC(mathFiroundFunc),%eax
  920. jmp *%eax /* jump, let that routine rts */
  921. /*******************************************************************************
  922. *
  923. * flog - single-precision floating-point natural logarithm 
  924. *
  925. * RETURNS: The natural logarithm of fltParam.
  926. *
  927. * SEE ALSO: 
  928. * floatLib (1), "The C Programming Language - Second Edition"
  929. * float flog (fltParam)
  930. *     float fltParam; /* argument *
  931. */
  932. .balign 16,0x90
  933. FUNC_LABEL(flog)
  934. movl FUNC(mathFlogFunc),%eax
  935. jmp *%eax /* jump, let that routine rts */
  936. /*******************************************************************************
  937. *
  938. * flog10 - single-precision floating-point logarithm base 10 
  939. *
  940. * RETURNS: The logarithm (base 10) of fltParam.
  941. *
  942. * SEE ALSO: floatLib (1), log2 (2)
  943. * float flog10 (fltParam)
  944. *     float fltParam; /* argument *
  945. */
  946. .balign 16,0x90
  947. FUNC_LABEL(flog10)
  948. movl FUNC(mathFlog10Func),%eax
  949. jmp *%eax /* jump, let that routine rts */
  950. /*******************************************************************************
  951. *
  952. * flog2 - single-precision floating-point logarithm base 2 
  953. *
  954. * RETURNS: The logarithm (base 2) of fltParam.
  955. *
  956. * SEE ALSO: floatLib (1), log10 (2)
  957. * float flog2 (fltParam)
  958. *     float fltParam; /* argument *
  959. */
  960. .balign 16,0x90
  961. FUNC_LABEL(flog2)
  962. movl FUNC(mathFlog2Func),%eax
  963. jmp *%eax /* jump, let that routine rts */
  964. /*******************************************************************************
  965. *
  966. * fpow - single-precision floating point X to the power of floating-point Y 
  967. *
  968. * RETURNS: The floating-point value of fltX to the power of fltY.
  969. *
  970. * SEE ALSO: floatLib (1), sqrt (2)
  971. * float fpow (fltX, fltY)
  972. *     float fltX; /* X *
  973. *     float fltY; /* X *
  974. */
  975. .balign 16,0x90
  976. FUNC_LABEL(fpow)  /* pow (x,y) = exp (y * log(x)) */
  977. movl FUNC(mathFpowFunc),%eax
  978. jmp *%eax /* jump, let that routine rts */
  979. /*******************************************************************************
  980. *
  981. * fround - floating-point rounding
  982. *
  983. * Performs a 'round-to-nearest'.
  984. *
  985. * SEE ALSO: floatLib (1)
  986. * float fround (fltParam)
  987. *     float fltParam; /* argument *
  988. */
  989. .balign 16,0x90
  990. FUNC_LABEL(fround)
  991. movl FUNC(mathFroundFunc),%eax
  992. jmp *%eax /* jump, let that routine rts */
  993. /*******************************************************************************
  994. *
  995. * fsin - single-precision floating-point sine
  996. *
  997. * RETURNS: The floating-point sine of fltParam.
  998. *
  999. * SEE ALSO: 
  1000. *   floatLib (1), cos (2), tan (2), 
  1001. *   "The C Programming Language - Second Edition"
  1002. * float fsin (fltParam)
  1003. *     float fltParam; /* angle in radians *
  1004. */
  1005. .balign 16,0x90
  1006. FUNC_LABEL(fsin)
  1007. movl FUNC(mathFsinFunc),%eax
  1008. jmp *%eax /* jump, let that routine rts */
  1009. /*******************************************************************************
  1010. *
  1011. * fsincos - simultaneous single-precision floating-point sine and cosine
  1012. *
  1013. * RETURNS:
  1014. * The simultaeous floating point results of sine and cosine of the 
  1015. * radian argument  The fltParam must be in range of -1.0 to +1.0.
  1016. *
  1017. *
  1018. * SEE ALSO: floatLib (1), "i80387 Floating-Point User's Manual"
  1019. * void fsincos (fltParam, sinResult, cosResult)
  1020. *     float fltParam; /* angle in radians *
  1021. *     float *sinResult; /* sine result buffer *
  1022. *     float *cosResult; /* cosine result buffer *
  1023. */
  1024. .balign 16,0x90
  1025. FUNC_LABEL(fsincos)
  1026. movl FUNC(mathFsincosFunc),%eax
  1027. jmp *%eax /* jump, let that routine rts */
  1028. /*******************************************************************************
  1029. *
  1030. * fsinh - single-precision floating-point hyperbolic sine
  1031. *
  1032. * RETURNS: The floating-point hyperbolic sine of fltParam.
  1033. *
  1034. * SEE ALSO: 
  1035. * floatLib (1), "The C Programming Language - Second Edition"
  1036. * float fsinh (fltParam)
  1037. *     float fltParam; /* angle in radians *
  1038. */
  1039. .balign 16,0x90
  1040. FUNC_LABEL(fsinh)
  1041. movl FUNC(mathFsinhFunc),%eax
  1042. jmp *%eax /* jump, let that routine rts */
  1043. /*******************************************************************************
  1044. *
  1045. * fsqrt - single-precision floating-point square root
  1046. *
  1047. * RETURNS: The floating-point square root of fltParam.
  1048. *
  1049. * SEE ALSO: floatLib(1), pow (2)
  1050. * float fsqrt (fltParam)
  1051. *     float fltParam; /* argument *
  1052. */
  1053. .balign 16,0x90
  1054. FUNC_LABEL(fsqrt)
  1055. movl FUNC(mathFsqrtFunc),%eax
  1056. jmp *%eax /* jump, let that routine rts */
  1057. /*******************************************************************************
  1058. *
  1059. * ftan - single-precision floating-point tangent
  1060. *
  1061. * RETURNS: Floating-point tangent of fltParam.
  1062. *
  1063. * SEE ALSO: floatLib (1), cos (2), sin (2),
  1064. * "The C Programming Language - Second Edition"
  1065. * float ftan (fltParam)
  1066. *     float fltParam; /* angle in radians *
  1067. */
  1068. .balign 16,0x90
  1069. FUNC_LABEL(ftan)
  1070. movl FUNC(mathFtanFunc),%eax
  1071. jmp *%eax /* jump, let that routine rts */
  1072. /*******************************************************************************
  1073. *
  1074. * ftanh - single-precision floating-point hyperbolic tangent
  1075. *
  1076. * RETURNS: Floating-point hyperbolic tangent of fltParam.
  1077. *
  1078. * SEE ALSO: 
  1079. * floatLib (1), fcosh (), fsinh ()
  1080. * "The C Programming Language - Second Edition"
  1081. * float ftanh (fltParam)
  1082. *     float fltParam; /* angle in radians *
  1083. */
  1084. .balign 16,0x90
  1085. FUNC_LABEL(ftanh)
  1086. movl FUNC(mathFtanhFunc),%eax
  1087. jmp *%eax /* jump, let that routine rts */
  1088. /*******************************************************************************
  1089. *
  1090. * ftrunc - single-precision floating-point truncation
  1091. *
  1092. * Performs FINTRZ.
  1093. *
  1094. * RETURNS:
  1095. * The integer portion of a single-precision number,
  1096. * result is in single-precision.
  1097. *
  1098. * SEE ALSO: floatLib (1)
  1099. * float ftrunc (fltParam)
  1100. *     float fltParam; /* argument *
  1101. */
  1102. .balign 16,0x90
  1103. FUNC_LABEL(ftrunc)
  1104. movl FUNC(mathFtruncFunc),%eax
  1105. jmp *%eax /* jump, let that routine rts */
  1106. /*******************************************************************************
  1107. *
  1108. * mathErrNoInit - default routine for uninitialized floating-point functions
  1109. *
  1110. * This routine is called if floating point math operations are attempted
  1111. * before either a mathSoftInit() or mathHardInit() call is performed.  The
  1112. * address of this routine is the initial value of the various mathXXXFunc
  1113. * pointers, which are re-initialized with actual function addresses during
  1114. * either of the floating point initialization calls.
  1115. *
  1116. * SEE ALSO: mathHardInit(), mathSoftInit()
  1117. * void mathErrNoInit ()
  1118. */
  1119. .balign 16,0x90
  1120. FUNC_LABEL(mathErrNoInit)
  1121. pushl $FUNC(mathErrNoInitString)
  1122. call FUNC(logMsg)
  1123. addl $4,%esp
  1124. ret