| # use acos(x) = atan2(fabs(sqrt((1-x)*(1+x))), x) | |
| .global acosf | |
| .type acosf,@function | |
| acosf: | |
| flds 4(%esp) | |
| jmp 1f | |
| .global acosl | |
| .type acosl,@function | |
| acosl: | |
| fldt 4(%esp) | |
| jmp 1f | |
| .global acos | |
| .type acos,@function | |
| acos: | |
| fldl 4(%esp) | |
| 1: fld %st(0) | |
| fld1 | |
| fsub %st(0),%st(1) | |
| fadd %st(2) | |
| fmulp | |
| fsqrt | |
| fabs # fix sign of zero (matters in downward rounding mode) | |
| fxch %st(1) | |
| fpatan | |
| ret |