~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/m68k/fpsp040/satanh.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 |
  2 |       satanh.sa 3.3 12/19/90
  3 |
  4 |       The entry point satanh computes the inverse
  5 |       hyperbolic tangent of
  6 |       an input argument; satanhd does the same except for denormalized
  7 |       input.
  8 |
  9 |       Input: Double-extended number X in location pointed to
 10 |               by address register a0.
 11 |
 12 |       Output: The value arctanh(X) returned in floating-point register Fp0.
 13 |
 14 |       Accuracy and Monotonicity: The returned result is within 3 ulps in
 15 |               64 significant bit, i.e. within 0.5001 ulp to 53 bits if the
 16 |               result is subsequently rounded to double precision. The
 17 |               result is provably monotonic in double precision.
 18 |
 19 |       Speed: The program satanh takes approximately 270 cycles.
 20 |
 21 |       Algorithm:
 22 |
 23 |       ATANH
 24 |       1. If |X| >= 1, go to 3.
 25 |
 26 |       2. (|X| < 1) Calculate atanh(X) by
 27 |               sgn := sign(X)
 28 |               y := |X|
 29 |               z := 2y/(1-y)
 30 |               atanh(X) := sgn * (1/2) * logp1(z)
 31 |               Exit.
 32 |
 33 |       3. If |X| > 1, go to 5.
 34 |
 35 |       4. (|X| = 1) Generate infinity with an appropriate sign and
 36 |               divide-by-zero by
 37 |               sgn := sign(X)
 38 |               atan(X) := sgn / (+0).
 39 |               Exit.
 40 |
 41 |       5. (|X| > 1) Generate an invalid operation by 0 * infinity.
 42 |               Exit.
 43 |
 44 
 45 |               Copyright (C) Motorola, Inc. 1990
 46 |                       All Rights Reserved
 47 |
 48 |       For details on the license for this file, please see the
 49 |       file, README, in this same directory.
 50 
 51 |satanh idnt    2,1 | Motorola 040 Floating Point Software Package
 52 
 53         |section        8
 54 
 55         |xref   t_dz
 56         |xref   t_operr
 57         |xref   t_frcinx
 58         |xref   t_extdnrm
 59         |xref   slognp1
 60 
 61         .global satanhd
 62 satanhd:
 63 |--ATANH(X) = X FOR DENORMALIZED X
 64 
 65         bra             t_extdnrm
 66 
 67         .global satanh
 68 satanh:
 69         movel           (%a0),%d0
 70         movew           4(%a0),%d0
 71         andil           #0x7FFFFFFF,%d0
 72         cmpil           #0x3FFF8000,%d0
 73         bges            ATANHBIG
 74 
 75 |--THIS IS THE USUAL CASE, |X| < 1
 76 |--Y = |X|, Z = 2Y/(1-Y), ATANH(X) = SIGN(X) * (1/2) * LOG1P(Z).
 77 
 78         fabsx           (%a0),%fp0      | ...Y = |X|
 79         fmovex          %fp0,%fp1
 80         fnegx           %fp1            | ...-Y
 81         faddx           %fp0,%fp0               | ...2Y
 82         fadds           #0x3F800000,%fp1        | ...1-Y
 83         fdivx           %fp1,%fp0               | ...2Y/(1-Y)
 84         movel           (%a0),%d0
 85         andil           #0x80000000,%d0
 86         oril            #0x3F000000,%d0 | ...SIGN(X)*HALF
 87         movel           %d0,-(%sp)
 88 
 89         fmovemx %fp0-%fp0,(%a0) | ...overwrite input
 90         movel           %d1,-(%sp)
 91         clrl            %d1
 92         bsr             slognp1         | ...LOG1P(Z)
 93         fmovel          (%sp)+,%fpcr
 94         fmuls           (%sp)+,%fp0
 95         bra             t_frcinx
 96 
 97 ATANHBIG:
 98         fabsx           (%a0),%fp0      | ...|X|
 99         fcmps           #0x3F800000,%fp0
100         fbgt            t_operr
101         bra             t_dz
102 
103         |end

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php