]>
Commit | Line | Data |
---|---|---|
d5efd131 MF |
1 | .file "fmaxl.s" |
2 | ||
3 | ||
4 | // Copyright (c) 2001 - 2003, Intel Corporation | |
5 | // All rights reserved. | |
6 | // | |
7 | // Contributed 2001 by the Intel Numerics Group, Intel Corporation | |
8 | // | |
9 | // Redistribution and use in source and binary forms, with or without | |
10 | // modification, are permitted provided that the following conditions are | |
11 | // met: | |
12 | // | |
13 | // * Redistributions of source code must retain the above copyright | |
14 | // notice, this list of conditions and the following disclaimer. | |
15 | // | |
16 | // * Redistributions in binary form must reproduce the above copyright | |
17 | // notice, this list of conditions and the following disclaimer in the | |
18 | // documentation and/or other materials provided with the distribution. | |
19 | // | |
20 | // * The name of Intel Corporation may not be used to endorse or promote | |
21 | // products derived from this software without specific prior written | |
22 | // permission. | |
23 | ||
0347518d MF |
24 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
25 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
d5efd131 | 26 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
0347518d | 27 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS |
d5efd131 | 28 | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
0347518d MF |
29 | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
30 | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
31 | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | |
d5efd131 | 32 | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING |
0347518d MF |
33 | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
34 | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
35 | // | |
d5efd131 | 36 | // Intel Corporation is the author of this code, and requests that all |
0347518d | 37 | // problem reports or change requests be submitted to it directly at |
d5efd131 MF |
38 | // http://www.intel.com/software/products/opensource/libraries/num.htm. |
39 | // | |
40 | // History | |
41 | //============================================================== | |
0347518d | 42 | // 05/31/01 Initial version |
d5efd131 MF |
43 | // 05/20/02 Cleaned up namespace and sf0 syntax |
44 | // 02/10/03 Reordered header: .section, .global, .proc, .align | |
45 | // | |
46 | // API | |
47 | //============================================================== | |
48 | // long double fmaxl (long double x, long double y) | |
49 | // | |
50 | // Overview of operation | |
51 | //============================================================== | |
52 | // returns the algebraic maximum of 2 input values | |
0347518d | 53 | // |
d5efd131 MF |
54 | // Special cases: |
55 | // fmaxl(x, nan) returns x if x is numeric // Must special case this one | |
56 | // fmaxl(nan, y) returns y if y is numeric | |
57 | // fmaxl(nan1, nan2) returns quietized nan2 | |
58 | // fmaxl(+0,+0) returns +0 | |
59 | // fmaxl(-0,+0) returns +0 | |
60 | // fmaxl(-0,-0) returns -0 | |
61 | // fmaxl(+0,-0) returns +0 // Must special case this one | |
0347518d | 62 | // |
d5efd131 MF |
63 | // SNaN causes invalid to be set |
64 | ||
65 | // floating-point registers used: 2 | |
66 | // f8, input x, output | |
67 | // f9, input y | |
68 | ||
69 | .section .text | |
70 | GLOBAL_LIBM_ENTRY(fmaxl) | |
71 | ||
72 | { .mfi | |
73 | nop.m 999 | |
74 | fcmp.unord.s0 p6,p7 = f8, f9 // Is x or y a nan? Raise invalid or denormal | |
75 | nop.i 999 | |
76 | } | |
77 | ;; | |
78 | ||
79 | { .mfi | |
80 | nop.m 999 | |
81 | (p7) fclass.m.unc p8,p9 = f9, 0x06 // If no nan, is y=-0? | |
82 | nop.i 999 | |
83 | } | |
84 | ;; | |
85 | ||
86 | { .mfi | |
87 | nop.m 999 | |
88 | (p6) fclass.m.unc p10,p0 = f8, 0xc3 // Is x nan? | |
89 | nop.i 999 | |
90 | } | |
91 | ;; | |
92 | ||
93 | { .mfi | |
94 | nop.m 999 | |
95 | (p9) fmax.s0 f8 = f8, f9 // Normal case, no nan and y not -0 | |
96 | nop.i 999 | |
97 | } | |
98 | ;; | |
99 | ||
100 | { .mfi | |
101 | nop.m 999 | |
102 | (p8) fmax.s0 f8 = f9, f8 // No nan and y -0 | |
103 | nop.i 999 | |
104 | } | |
105 | ;; | |
106 | ||
107 | { .mfb | |
108 | nop.m 999 | |
109 | (p10) fmerge.s f8 = f9, f9 // If x nan, return y, else do nothing (returns x) | |
0347518d | 110 | br.ret.sptk b0 |
d5efd131 MF |
111 | } |
112 | ;; | |
113 | ||
114 | GLOBAL_LIBM_END(fmaxl) |