~ [ 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 ] ~

Diff markup

Differences between /arch/m68k/fpsp040/satanh.S (Architecture sparc64) and /arch/m68k/fpsp040/satanh.S (Architecture m68k)


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