(CFLAGS-tst-align.c): Add -mpreferred-stack-boundary=4.
[glibc.git] / sysdeps / ia64 / fpu / e_acos.S
blob7e838117275b9447029d57e7d0fbc89bdd376d2b
1 .file "acos.s"
3 // Copyright (C) 2000, 2001, Intel Corporation
4 // All rights reserved.
5 //
6 // Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story,
7 // and Ping Tak Peter Tang of the Computational Software Lab, 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:
13 // * Redistributions of source code must retain the above copyright
14 // notice, this list of conditions and the following disclaimer.
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.
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.
24 // WARRANTY DISCLAIMER
26 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
34 // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 // Intel Corporation is the author of this code, and requests that all
39 // problem reports or change requests be submitted to it directly at
40 // http://developer.intel.com/opensource.
42 // History
43 //==============================================================
44 // 2/02/00  Initial version 
45 // 8/17/00  New and much faster algorithm.
46 // 8/30/00  Avoided bank conflicts on loads, shortened |x|=1 and x=0 paths,
47 //          fixed mfb split issue stalls.
49 // Description
50 //=========================================
51 // The acos function computes the principle value of the arc sine of x.
52 // A doman error occurs for arguments not in the range [-1,+1].
54 // The acos function returns the arc cosine in the range [0, +pi] radians.
55 // acos(1) returns +0, acos(-1) returns pi, acos(0) returns pi/2.
56 // acos(x) returns a Nan and raises the invalid exception for |x| >1
58 // The acos function is just like asin except that pi/2 is added at the end.
61 // Assembly macros
62 //=========================================
64 #include "libm_support.h"
66 // predicate registers
67 //acos_pred_LEsqrt2by2            = p7
68 //acos_pred_GTsqrt2by2            = p8
70 // integer registers
71 ASIN_Addr1                      = r33
72 ASIN_Addr2                      = r34
73 ASIN_FFFE                       = r35
75 GR_SAVE_B0                      = r36
76 GR_SAVE_PFS                     = r37
77 GR_SAVE_GP                      = r38
79 GR_Parameter_X                  = r39
80 GR_Parameter_Y                  = r40
81 GR_Parameter_RESULT             = r41
82 GR_Parameter_Tag                = r42
84 // floating point registers
85 acos_coeff_P1                   = f32
86 acos_coeff_P2                   = f33
87 acos_coeff_P3                   = f34
88 acos_coeff_P4                   = f35
90 acos_coeff_P5                   = f36
91 acos_coeff_P6                   = f37
92 acos_coeff_P7                   = f38
93 acos_coeff_P8                   = f39
94 acos_coeff_P9                   = f40
96 acos_coeff_P10                  = f41
97 acos_coeff_P11                  = f42
98 acos_coeff_P12                  = f43
99 acos_coeff_P13                  = f44
100 acos_coeff_P14                  = f45
102 acos_coeff_P15                  = f46
103 acos_coeff_P16                  = f47
104 acos_coeff_P17                  = f48
105 acos_coeff_P18                  = f49
106 acos_coeff_P19                  = f50
108 acos_coeff_P20                  = f51
109 acos_coeff_P21                  = f52
110 acos_const_sqrt2by2             = f53
111 acos_const_piby2                = f54
112 acos_abs_x                      = f55
114 acos_tx                         = f56
115 acos_tx2                        = f57
116 acos_tx3                        = f58
117 acos_tx4                        = f59
118 acos_tx8                        = f60
120 acos_tx11                       = f61
121 acos_1poly_p8                   = f62
122 acos_1poly_p19                  = f63
123 acos_1poly_p4                   = f64
124 acos_1poly_p15                  = f65
126 acos_1poly_p6                   = f66
127 acos_1poly_p17                  = f67
128 acos_1poly_p0                   = f68
129 acos_1poly_p11                  = f69
130 acos_1poly_p2                   = f70
132 acos_1poly_p13                  = f71
133 acos_series_tx                  = f72
134 acos_t                          = f73
135 acos_t2                         = f74
136 acos_t3                         = f75
138 acos_t4                         = f76
139 acos_t8                         = f77
140 acos_t11                        = f78
141 acos_poly_p8                    = f79
142 acos_poly_p19                   = f80
144 acos_poly_p4                    = f81
145 acos_poly_p15                   = f82
146 acos_poly_p6                    = f83
147 acos_poly_p17                   = f84
148 acos_poly_p0                    = f85
150 acos_poly_p11                   = f86
151 acos_poly_p2                    = f87
152 acos_poly_p13                   = f88
153 acos_series_t                   = f89
154 acos_1by2                       = f90
156 acos_3by2                       = f91
157 acos_5by2                       = f92
158 acos_11by4                      = f93
159 acos_35by8                      = f94
160 acos_63by8                      = f95
162 acos_231by16                    = f96 
163 acos_y0                         = f97 
164 acos_H0                         = f98 
165 acos_S0                         = f99 
166 acos_d                          = f100
168 acos_l1                         = f101
169 acos_d2                         = f102
170 acos_T0                         = f103
171 acos_d1                         = f104
172 acos_e0                         = f105
174 acos_l2                         = f106
175 acos_d3                         = f107
176 acos_T3                         = f108
177 acos_S1                         = f109
178 acos_e1                         = f110
180 acos_z                          = f111
181 answer2                         = f112
182 acos_sgn_x                      = f113
183 acos_429by16                    = f114
184 acos_18by4                      = f115
186 acos_3by4                       = f116
187 acos_l3                         = f117
188 acos_T6                         = f118
189 acos_const_add                  = f119
191 // Data tables
192 //==============================================================
194 #ifdef _LIBC
195 .rodata
196 #else
197 .data
198 #endif
200 .align 16
202 acos_coeff_1_table:
203 ASM_TYPE_DIRECTIVE(acos_coeff_1_table,@object)
204 data8 0xE4E7E0A423A21249  , 0x00003FF8 //P7
205 data8 0xC2F7EE0200FCE2A5  , 0x0000C003 //P18
206 data8 0xB745D7F6C65C20E0  , 0x00003FF9 //P5
207 data8 0xF75E381A323D4D94  , 0x0000C002 //P16
208 data8 0x8959C2629C1024C0  , 0x0000C002 //P20
209 data8 0xAFF68E7D241292C5  , 0x00003FF8 //P9
210 data8 0xB6DB6DB7260AC30D  , 0x00003FFA //P3
211 data8 0xD0417CE2B41CB7BF  , 0x0000C000 //P14
212 data8 0x81D570FEA724E3E4  , 0x0000BFFD //P12
213 data8 0xAAAAAAAAAAAAC277  , 0x00003FFC //P1
214 data8 0xF534912FF3E7B76F  , 0x00003FFF //P21
215 data8 0xc90fdaa22168c235  , 0x00003fff // pi/2
216 data8 0x0000000000000000  , 0x00000000 // pad to avoid bank conflicts
217 ASM_SIZE_DIRECTIVE(acos_coeff_1_table)
220 acos_coeff_2_table:
221 ASM_TYPE_DIRECTIVE(acos_coeff_2_table,@object)
222 data8 0x8E26AF5F29B39A2A  , 0x00003FF9 //P6
223 data8 0xB4F118A4B1015470  , 0x00004003 //P17
224 data8 0xF8E38E10C25990E0  , 0x00003FF9 //P4
225 data8 0x80F50489AEF1CAC6  , 0x00004002 //P15
226 data8 0x92728015172CFE1C  , 0x00004003 //P19
227 data8 0xBBC3D831D4595971  , 0x00003FF8 //P8
228 data8 0x999999999952A5C3  , 0x00003FFB //P2
229 data8 0x855576BE6F0975EC  , 0x00003FFF //P13
230 data8 0xF12420E778077D89  , 0x00003FFA //P11
231 data8 0xB6590FF4D23DE003  , 0x00003FF3 //P10
232 data8 0xb504f333f9de6484  , 0x00003ffe // sqrt(2)/2
233 ASM_SIZE_DIRECTIVE(acos_coeff_2_table)
236 .align 32
237 .global acos
238 ASM_TYPE_DIRECTIVE(acos,@function)
240 .section .text
241 .proc  acos
242 .align 32
245 acos:
247 {     .mfi 
248      alloc      r32               = ar.pfs,1,6,4,0
249      fma.s1    acos_tx        =    f8,f8,f0
250      addl      ASIN_Addr2     =    @ltoff(acos_coeff_2_table),gp
252 {     .mfi 
253      mov       ASIN_FFFE      =    0xFFFE
254      fnma.s1   acos_t         =    f8,f8,f1
255      addl      ASIN_Addr1     =    @ltoff(acos_coeff_1_table),gp
260 {     .mfi 
261      setf.exp       acos_1by2      =    ASIN_FFFE
262      fmerge.s       acos_abs_x     =    f1,f8
263      nop.i          999              ;;
267 {     .mmf 
268      ld8       ASIN_Addr1     =    [ASIN_Addr1]
269      ld8       ASIN_Addr2     =    [ASIN_Addr2]
270      fmerge.s  acos_sgn_x     =    f8,f1
275 {     .mfi 
276      nop.m                      999
277      fcmp.lt.s1  p11,p12  = f8, f0
278      nop.i          999              ;;
282 {     .mfi 
283      ldfe      acos_coeff_P7  =    [ASIN_Addr1],16
284      fma.s1    acos_tx2       =    acos_tx,acos_tx,f0
285      nop.i                      999
287 {     .mfi 
288      ldfe      acos_coeff_P6  =    [ASIN_Addr2],16
289      fma.s1    acos_t2        =    acos_t,acos_t,f0
290      nop.i                      999;;
294 {     .mmf 
295      ldfe      acos_coeff_P18 =    [ASIN_Addr1],16
296      ldfe      acos_coeff_P17 =    [ASIN_Addr2],16
297      fclass.m.unc p8,p0  = f8, 0xc3     //@qnan |@snan
302 {     .mmf 
303      ldfe      acos_coeff_P5  =    [ASIN_Addr1],16
304      ldfe      acos_coeff_P4  =    [ASIN_Addr2],16
305      frsqrta.s1     acos_y0,p0     =    acos_t
310 {     .mfi 
311      ldfe      acos_coeff_P16 =    [ASIN_Addr1],16
312      fcmp.gt.s1 p9,p0 = acos_abs_x,f1
313      nop.i                      999
315 {     .mfb 
316      ldfe      acos_coeff_P15 =    [ASIN_Addr2],16
317 (p8) fma.d     f8 = f8,f1,f0
318 (p8) br.ret.spnt b0
323 {     .mmf 
324      ldfe      acos_coeff_P20 =    [ASIN_Addr1],16
325      ldfe      acos_coeff_P19 =    [ASIN_Addr2],16
326      fclass.m.unc p10,p0 = f8, 0x07     //@zero
331 {     .mfi 
332      ldfe      acos_coeff_P9  =    [ASIN_Addr1],16
333      fma.s1    acos_t4        =    acos_t2,acos_t2,f0
334 (p9) mov GR_Parameter_Tag = 58 
336 {     .mfi 
337      ldfe      acos_coeff_P8  =    [ASIN_Addr2],16
338      fma.s1    acos_3by2      =    acos_1by2,f1,f1
339      nop.i                      999;;
343 {     .mfi 
344      ldfe      acos_coeff_P2  =    [ASIN_Addr2],16
345      fma.s1    acos_tx4       =    acos_tx2,acos_tx2,f0
346      nop.i 999
348 {     .mfb 
349      ldfe      acos_coeff_P3  =    [ASIN_Addr1],16
350      fma.s1    acos_t3        =    acos_t,acos_t2,f0
351 (p9) br.cond.spnt  __libm_error_region
356 {     .mfi 
357      ldfe      acos_coeff_P13 =    [ASIN_Addr2],16
358      fma.s1    acos_H0        =    acos_y0,acos_1by2,f0
359      nop.i                      999
361 {     .mfi 
362      ldfe      acos_coeff_P14 =    [ASIN_Addr1],16
363      fma.s1    acos_S0        =    acos_y0,acos_t,f0
364      nop.i                      999;;
368 {     .mfi 
369      ldfe      acos_coeff_P11 =    [ASIN_Addr2],16
370      fcmp.eq.s1  p6,p0  = acos_abs_x, f1
371      nop.i                      999
373 {     .mfi 
374      ldfe      acos_coeff_P12 =    [ASIN_Addr1],16
375      fma.s1    acos_tx3       =    acos_tx,acos_tx2,f0
376      nop.i 999
381 {     .mfi 
382      ldfe      acos_coeff_P10 =    [ASIN_Addr2],16
383      fma.s1    acos_1poly_p6  =    acos_tx,acos_coeff_P7,acos_coeff_P6
384      nop.i                      999
386 {     .mfi 
387      ldfe      acos_coeff_P1  =    [ASIN_Addr1],16
388      fma.s1    acos_poly_p6   =    acos_t,acos_coeff_P7,acos_coeff_P6
389      nop.i                      999;;
393 {     .mfi 
394      ldfe      acos_const_sqrt2by2 =    [ASIN_Addr2],16
395      fma.s1    acos_5by2           =    acos_3by2,f1,f1
396      nop.i                           999
398 {     .mfi 
399      ldfe      acos_coeff_P21 =    [ASIN_Addr1],16
400      fma.s1    acos_11by4     =    acos_3by2,acos_3by2,acos_1by2
401      nop.i                      999;;
405 {     .mfi 
406      ldfe      acos_const_piby2    =    [ASIN_Addr1],16
407      fma.s1    acos_poly_p17       =    acos_t,acos_coeff_P18,acos_coeff_P17
408      nop.i                      999
410 {     .mfb 
411      nop.m                 999
412      fma.s1    acos_3by4 =    acos_3by2,acos_1by2,f0
413 (p10) br.cond.spnt  L(ACOS_ZERO)    // Branch to short path if x=0
418 {     .mfi 
419      nop.m                      999
420      fma.s1    acos_poly_p15  =    acos_t,acos_coeff_P16,acos_coeff_P15
421      nop.i                      999
423 {     .mfb 
424      nop.m                 999
425      fnma.s1   acos_d    =    acos_S0,acos_H0,acos_1by2
426 (p6) br.cond.spnt  L(ACOS_ABS_ONE)    // Branch to short path if |x|=1
431 {     .mfi 
432      nop.m                      999
433      fma.s1    acos_poly_p19  =    acos_t,acos_coeff_P20,acos_coeff_P19
434      nop.i                      999
436 {     .mfi 
437      nop.m                      999
438      fma.s1    acos_poly_p4   =    acos_t,acos_coeff_P5,acos_coeff_P4
439      nop.i                      999;;
443 {     .mfi 
444      nop.m                      999
445      fma.s1    acos_1poly_p17 =    acos_tx,acos_coeff_P18,acos_coeff_P17
446      nop.i                      999
448 {     .mfi 
449      nop.m                      999
450      fma.s1    acos_poly_p8   =    acos_t,acos_coeff_P9,acos_coeff_P8
451      nop.i                      999;;
455 {     .mfi 
456      nop.m                      999
457      fms.s1    acos_35by8     =    acos_5by2,acos_11by4,acos_5by2
458      nop.i                      999
460 {     .mfi 
461      nop.m                      999
462      fma.s1    acos_63by8     =    acos_5by2,acos_11by4,f1
463      nop.i                      999;;
467 {     .mfi 
468      nop.m                      999
469      fma.s1    acos_poly_p13  =    acos_t,acos_coeff_P14,acos_coeff_P13
470      nop.i                      999
472 {     .mfi 
473      nop.m                      999
474      fma.s1    acos_18by4     =    acos_3by2,acos_5by2,acos_3by4
475      nop.i                      999;;
479 {     .mfi 
480      nop.m                 999
481      fma.s1    acos_l1   =    acos_5by2,acos_d,acos_3by2
482      nop.i                 999
484 {     .mfi 
485      nop.m                 999
486      fma.s1    acos_d2   =    acos_d,acos_d,f0
487      nop.i                 999;;
491 {     .mfi 
492      nop.m                      999
493      fma.s1    acos_poly_p15  =    acos_t2,acos_poly_p17,acos_poly_p15
494      nop.i                      999
496 {     .mfi 
497      nop.m                 999
498      fma.s1    acos_T0   =    acos_d,acos_S0,f0
499      nop.i                 999;;
503 {     .mfi 
504      nop.m                      999
505      fma.s1    acos_poly_p19  =    acos_t2,acos_coeff_P21,acos_poly_p19
506      nop.i                      999
508 {     .mfi 
509      nop.m                      999
510      fma.s1    acos_poly_p4   =    acos_t2,acos_poly_p6,acos_poly_p4
511      nop.i                      999;;
515 {     .mfi 
516      nop.m                 999
517      fma.s1    acos_d1   =    acos_35by8,acos_d,f0
518      nop.i                 999
520 {     .mfi 
521      nop.m                      999
522      fma.s1    acos_231by16   =    acos_3by2,acos_35by8,acos_63by8
523      nop.i                      999;;
527 {     .mfi 
528      nop.m                      999
529      fma.s1    acos_poly_p2   =    acos_t,acos_coeff_P3,acos_coeff_P2
530      nop.i                      999
532 {     .mfi 
533      nop.m                      999
534      fma.s1    acos_poly_p8   =    acos_t2,acos_coeff_P10,acos_poly_p8
535      nop.i                      999;;
539 {     .mfi 
540      nop.m                      999
541      fma.s1    acos_poly_p11  =    acos_t,acos_coeff_P12,acos_coeff_P11
542      nop.i                      999
544 {     .mfi 
545      nop.m                 999
546      fma.s1    acos_e0   =    acos_d2,acos_l1,acos_d
547      nop.i                 999;;
551 {     .mfi 
552      nop.m                      999
553      fma.s1    acos_1poly_p15 =    acos_tx,acos_coeff_P16,acos_coeff_P15
554      nop.i                      999
556 {     .mfi 
557      nop.m                      999
558      fma.s1    acos_poly_p0   =    acos_t,acos_coeff_P1,f1
559      nop.i                      999;;
563 {     .mfi 
564      nop.m                      999
565      fma.s1    acos_1poly_p19 =    acos_tx,acos_coeff_P20,acos_coeff_P19
566      nop.i                      999
568 {     .mfi 
569      nop.m                      999
570      fma.s1    acos_1poly_p4  =    acos_tx,acos_coeff_P5,acos_coeff_P4
571      nop.i                      999;;
575 {     .mfi 
576      nop.m                      999
577      fma.s1    acos_1poly_p8  =    acos_tx,acos_coeff_P9,acos_coeff_P8
578      nop.i                      999
580 {     .mfi 
581      nop.m                 999
582      fma.s1    acos_l2   =    acos_231by16,acos_d,acos_63by8
583      nop.i                 999;;
587 {     .mfi 
588      nop.m                 999
589      fma.s1    acos_d3   =    acos_d2,acos_d,f0
590      nop.i                 999
592 {     .mfi 
593      nop.m                 999
594      fma.s1    acos_T3   =    acos_d2,acos_T0,f0
595      nop.i                 999;;
599 {     .mfi 
600      nop.m                      999
601      fma.s1    acos_429by16   =    acos_18by4,acos_11by4,acos_231by16
602      nop.i                      999
604 {     .mfi 
605      nop.m                 999
606      fma.s1    acos_S1   =    acos_e0,acos_S0,acos_S0
607      nop.i                 999;;
611 {     .mfi 
612      nop.m                      999
613      fma.s1    acos_poly_p4   =    acos_t4,acos_poly_p8,acos_poly_p4
614      nop.i                      999
616 {     .mfi 
617      nop.m                      999
618      fma.s1    acos_poly_p15  =    acos_t4,acos_poly_p19,acos_poly_p15
619      nop.i                      999;;
623 {     .mfi 
624      nop.m                      999
625      fma.s1    acos_poly_p0   =    acos_t2,acos_poly_p2,acos_poly_p0
626      nop.i                      999
628 {     .mfi 
629      nop.m                      999
630      fma.s1    acos_poly_p11  =    acos_t2,acos_poly_p13,acos_poly_p11
631      nop.i                      999;;
635 {     .mfi 
636      nop.m                 999
637      fma.s1    acos_t8   =    acos_t4,acos_t4,f0
638      nop.i                 999
640 {     .mfi 
641      nop.m                 999
642      fma.s1    acos_e1   =    acos_d2,acos_l2,acos_d1
643      nop.i                 999;;
647 {     .mfi 
648      nop.m                      999
649      fma.s1    acos_1poly_p4  =    acos_tx2,acos_1poly_p6,acos_1poly_p4
650      nop.i                      999
652 {     .mfi 
653      nop.m                      999
654      fma.s1    acos_1poly_p15 =    acos_tx2,acos_1poly_p17,acos_1poly_p15
655      nop.i                      999;;
659 {     .mfi 
660      nop.m                      999
661      fma.s1    acos_1poly_p8  =    acos_tx2,acos_coeff_P10,acos_1poly_p8
662      nop.i                      999
664 {     .mfi 
665      nop.m                      999
666      fma.s1    acos_1poly_p19 =    acos_tx2,acos_coeff_P21,acos_1poly_p19
667      nop.i                      999;;
671 {     .mfi 
672      nop.m                      999
673      fma.s1    acos_1poly_p2  =    acos_tx,acos_coeff_P3,acos_coeff_P2
674      nop.i                      999
676 {     .mfi 
677      nop.m                      999
678      fma.s1    acos_1poly_p13 =    acos_tx,acos_coeff_P14,acos_coeff_P13
679      nop.i                      999;;
683 {     .mfi 
684      nop.m                      999
685      fma.s1    acos_1poly_p0  =    acos_tx,acos_coeff_P1,f1
686      nop.i                      999
688 {     .mfi 
689      nop.m                      999
690      fma.s1    acos_1poly_p11 =    acos_tx,acos_coeff_P12,acos_coeff_P11
691      nop.i                      999;;
695 {     .mfi 
696      nop.m                 999
697      fma.s1    acos_l3   =    acos_429by16,acos_d,f0
698      nop.i                 999
700 {     .mfi 
701      nop.m                 999
702      fma.s1    acos_z    =    acos_e1,acos_T3,acos_S1
703      nop.i                 999;;
707 {     .mfi 
708      nop.m                      999
709      fma.s1    acos_poly_p11  =    acos_t4,acos_poly_p15,acos_poly_p11
710      nop.i                      999
712 {     .mfi 
713      nop.m                 999
714      fma.s1    acos_T6   =    acos_T3,acos_d3,f0
715      nop.i                 999;;
719 {     .mfi 
720      nop.m                 999
721      fma.s1    acos_t11  =    acos_t8,acos_t3,f0
722      nop.i                 999
724 {     .mfi 
725      nop.m                      999
726      fma.s1    acos_poly_p0   =    acos_t4,acos_poly_p4,acos_poly_p0
727      nop.i                      999;;
731 {     .mfi 
732      nop.m                      999
733      fma.s1    acos_1poly_p4  =    acos_tx4,acos_1poly_p8,acos_1poly_p4
734      nop.i                      999
736 {     .mfi 
737      nop.m                      999
738      fma.s1    acos_1poly_p15 =    acos_tx4,acos_1poly_p19,acos_1poly_p15
739      nop.i                      999;;
743 {     .mfi 
744      nop.m                      999
745      fma.s1    acos_1poly_p0  =    acos_tx2,acos_1poly_p2,acos_1poly_p0
746      nop.i                      999
748 {     .mfi 
749      nop.m                      999
750      fma.s1    acos_1poly_p11 =    acos_tx2,acos_1poly_p13,acos_1poly_p11
751      nop.i                      999;;
755 {     .mfi 
756      nop.m                                                         999
757 //     fcmp.le.s1     acos_pred_LEsqrt2by2,acos_pred_GTsqrt2by2    =    acos_abs_x,acos_const_sqrt2by2
758      fcmp.le.s1     p7,p8    =    acos_abs_x,acos_const_sqrt2by2
759      nop.i                                                         999
761 {     .mfi 
762      nop.m                 999
763      fma.s1    acos_tx8  =    acos_tx4,acos_tx4,f0
764      nop.i                 999;;
768 {     .mfi 
769      nop.m                 999
770      fma.s1    acos_z    =    acos_l3,acos_T6,acos_z
771      nop.i                 999;;
774 {     .mfi
775      nop.m                      999
776      fma.s1    acos_series_t  =    acos_t11,acos_poly_p11,acos_poly_p0
777      nop.i                      999
779 {    .mfi
780      nop.m 999
781 (p11) fma.s1 acos_const_add = acos_const_piby2, f1, acos_const_piby2
782      nop.i 999
786 { .mfi
787       nop.m 999
788 (p12) fma.s1 acos_const_add = f1,f0,f0
789       nop.i 999
793 {     .mfi 
794      nop.m                      999
795      fma.s1    acos_1poly_p0  =    acos_tx4,acos_1poly_p4,acos_1poly_p0
796      nop.i                      999
798 {     .mfi 
799      nop.m                      999
800      fma.s1    acos_1poly_p11 =    acos_tx4,acos_1poly_p15,acos_1poly_p11
801      nop.i                      999;;
805 {     .mfi 
806      nop.m                 999
807      fma.s1    acos_tx11 =    acos_tx8,acos_tx3,f0
808      nop.i                 999;;
811 {     .mfi 
812                          nop.m                 999
813 //(acos_pred_GTsqrt2by2)   fnma.s1      answer2   =    acos_z,acos_series_t,acos_const_piby2
814 (p8)   fnma.s1      answer2   =    acos_z,acos_series_t,f0
815                          nop.i                 999;;
818 {     .mfi 
819      nop.m                      999
820      fma.s1    acos_series_tx =    acos_tx11,acos_1poly_p11,acos_1poly_p0
821      nop.i                      999;;
824 {     .mfi 
825                          nop.m                 999
826 //(acos_pred_GTsqrt2by2)   fnma.d     f8   =    acos_sgn_x,answer2,acos_const_piby2
827 (p8)   fnma.d     f8   =    acos_sgn_x,answer2,acos_const_add
828                          nop.i                 999;;
831 {     .mfb 
832                          nop.m                 999
833 //(acos_pred_LEsqrt2by2)   fnma.d     f8   =    f8,acos_series_tx,acos_const_piby2
834 (p7)   fnma.d     f8   =    f8,acos_series_tx,acos_const_piby2
835      br.ret.sptk b0 ;;
839 L(ACOS_ZERO):
840 // Here if x=0
841 {     .mfb 
842       nop.m                 999
843       fma.d    f8 =    acos_const_piby2,f1,f0
844       br.ret.sptk b0 ;;
848 L(ACOS_ABS_ONE):
849 .pred.rel "mutex",p11,p12
850 // Here if |x|=1
851 {     .mfi 
852       nop.m                 999
853 (p11) fma.d    f8 =    acos_const_piby2,f1,acos_const_piby2 // acos(-1)=pi
854       nop.i                 999
856 {     .mfb 
857       nop.m                 999
858 (p12) fma.d    f8 =    f1,f0,f0 // acos(1)=0
859       br.ret.sptk b0 ;;
863 .endp acos
864 ASM_SIZE_DIRECTIVE(acos)
866 .proc __libm_error_region
867 __libm_error_region:
868 .prologue
869 { .mfi
870         add   GR_Parameter_Y=-32,sp             // Parameter 2 value
871                 nop.f 999
872 .save   ar.pfs,GR_SAVE_PFS
873         mov  GR_SAVE_PFS=ar.pfs                 // Save ar.pfs
875 { .mfi
876 .fframe 64
877         add sp=-64,sp                           // Create new stack
878         nop.f 0
879         mov GR_SAVE_GP=gp                       // Save gp
881 { .mmi
882         stfs [GR_Parameter_Y] = f1,16         // Store Parameter 2 on stack
883         add GR_Parameter_X = 16,sp              // Parameter 1 address
884 .save   b0, GR_SAVE_B0
885         mov GR_SAVE_B0=b0                       // Save b0
888 .body
889         frcpa.s0 f9,p0 = f0,f0
892 { .mib
893         stfd [GR_Parameter_X] = f8            // Store Parameter 1 on stack
894         add   GR_Parameter_RESULT = 0,GR_Parameter_Y
895         nop.b 0                                 // Parameter 3 address
897 { .mib
898         stfd [GR_Parameter_Y] = f9,-16           // Store Parameter 3 on stack
899         adds r32 = 48,sp
900         br.call.sptk b0=__libm_error_support#   // Call error handling function
902 { .mmi
903         ldfd  f8 = [r32]       // Get return result off stack
904 .restore sp
905         add   sp = 64,sp                       // Restore stack pointer
906         mov   b0 = GR_SAVE_B0                  // Restore return address
908 { .mib
909         mov   gp = GR_SAVE_GP                  // Restore gp
910         mov   ar.pfs = GR_SAVE_PFS             // Restore ar.pfs
911         br.ret.sptk     b0                     // Return
915 .endp __libm_error_region
916 ASM_SIZE_DIRECTIVE(__libm_error_region)
918 .type   __libm_error_support,@function
919 .global __libm_error_support