4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
25 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
26 * Use is subject to license terms.
29 .file "__vcos_ultra3.S"
33 .type __vcos,#function
34 __vcos = __vcos_ultra3
39 .word 0x42c80000,0x00000000 ! 3 * 2^44
40 .word 0x43380000,0x00000000 ! 3 * 2^51
41 .word 0x3fe45f30,0x6dc9c883 ! invpio2
42 .word 0x3ff921fb,0x54442c00 ! pio2_1
43 .word 0x3d318469,0x898cc400 ! pio2_2
44 .word 0x3a71701b,0x839a2520 ! pio2_3
45 .word 0xbfc55555,0x55555533 ! pp1
46 .word 0x3f811111,0x10e7d53b ! pp2
47 .word 0xbf2a0167,0xe6b3cf9b ! pp3
48 .word 0xbfdfffff,0xffffff65 ! qq1
49 .word 0x3fa55555,0x54f88ed0 ! qq2
50 .word 0xbf56c12c,0xdd185f60 ! qq3
52 ! local storage indices
54 #define xsave STACK_BIAS-0x8
55 #define ysave STACK_BIAS-0x10
56 #define nsave STACK_BIAS-0x14
57 #define sxsave STACK_BIAS-0x18
58 #define sysave STACK_BIAS-0x1c
59 #define biguns STACK_BIAS-0x20
60 #define nk3 STACK_BIAS-0x24
61 #define nk2 STACK_BIAS-0x28
62 #define nk1 STACK_BIAS-0x2c
63 #define nk0 STACK_BIAS-0x30
64 #define junk STACK_BIAS-0x38
65 ! sizeof temp storage - must be a multiple of 16 for V9
86 ! the following are 64-bit registers in both V8+ and V9
88 ! g1 __vlibm_TBL_sincos2
96 ! o5 0x3fe921fb,0x4099251e
134 save %sp,-SA(MINFRAME)-tmps,%sp
136 PIC_SET(l7,constants,o0)
137 PIC_SET(l7,__vlibm_TBL_sincos2,o1)
139 wr %g0,0x82,%asi ! set %asi for non-faulting loads
140 st %i1,[%fp+xsave] ! save arguments
145 st %g0,[%fp+biguns] ! biguns = 0
146 ldd [%o0+0x00],c3two44 ! load/set up constants
147 ldd [%o0+0x08],c3two51
148 ldd [%o0+0x10],invpio2
149 ldd [%o0+0x18],pio2_1
150 ldd [%o0+0x20],pio2_2
151 ldd [%o0+0x28],pio2_3
158 sethi %hi(0x80000000),%i5
159 sethi %hi(0x3e400000),%o4
160 sethi %hi(0x3fe921fb),%o5
161 or %o5,%lo(0x3fe921fb),%o5
163 sethi %hi(0x4099251e),%o7
164 or %o7,%lo(0x4099251e),%o7
166 sll %i2,3,%i2 ! scale strides
168 add %fp,junk,%o1 ! loop prologue
174 andn %l0,%i5,%l0 ! mask off sign
175 add %i1,%i2,%i1 ! x += stridex
182 lda [%i1]%asi,%l1 ! preload next argument
189 mov %i3,%o0 ! py0 = y
190 bl,pn %icc,.range0 ! hx < 0x3e400000 or hx > 0x4099251e
195 add %i3,%i4,%i3 ! y += stridey
200 add %i1,%i2,%i1 ! x += stridex
201 faddd %f2,c3two44,%f4
205 lda [%i1]%asi,%l2 ! preload next argument
212 mov %i3,%o1 ! py1 = y
213 bl,pn %icc,.range1 ! hx < 0x3e400000 or hx > 0x4099251e
218 add %i3,%i4,%i3 ! y += stridey
223 add %i1,%i2,%i1 ! x += stridex
224 faddd %f10,c3two44,%f12
228 lda [%i1]%asi,%l3 ! preload next argument
235 mov %i3,%o2 ! py2 = y
236 bl,pn %icc,.range2 ! hx < 0x3e400000 or hx > 0x4099251e
241 add %i3,%i4,%i3 ! y += stridey
246 add %i1,%i2,%i1 ! x += stridex
247 faddd %f18,c3two44,%f20
257 mov %i3,%o3 ! py3 = y
258 bl,pn %icc,.range3 ! hx < 0x3e400000 or > hx 0x4099251e
265 add %i3,%i4,%i3 ! y += stridey
271 faddd %f26,c3two44,%f28
283 fmuld %f0,invpio2,%f6 ! x * invpio2, for medium range
285 fmuld %f8,invpio2,%f14
288 fmuld %f16,invpio2,%f22
294 fmuld %f24,invpio2,%f30
299 fcmpd %fcc0,%f0,pio2_3 ! x < pio2_3 iff x < 0
303 fcmpd %fcc1,%f8,pio2_3
307 fcmpd %fcc2,%f16,pio2_3
311 fcmpd %fcc3,%f24,pio2_3
314 fsubd %f2,%f4,%f2 ! x -= __vlibm_TBL_sincos2[k]
322 fmuld %f2,%f2,%f0 ! z = x * x
423 lda [%i1]%asi,%l0 ! preload next argument
459 faddd %f6,c3two51,%f4
462 faddd %f14,c3two51,%f12
465 faddd %f22,c3two51,%f20
468 faddd %f30,c3two51,%f28
471 fsubd %f4,c3two51,%f6
473 fsubd %f12,c3two51,%f14
475 fsubd %f20,c3two51,%f22
477 fsubd %f28,c3two51,%f30
482 fmuld %f14,pio2_1,%f10
485 fmuld %f22,pio2_1,%f18
488 fmuld %f30,pio2_1,%f26
496 fmuld %f14,pio2_2,%f12
500 fmuld %f22,pio2_2,%f20
504 fmuld %f30,pio2_2,%f28
516 fcmple32 %f32,pio2_3,%l4 ! x <= pio2_3 iff x < 0
519 fcmple32 %f34,pio2_3,%l5
522 fcmple32 %f36,pio2_3,%l6
525 fcmple32 %f38,pio2_3,%l7
529 sll %l4,30,%l4 ! if (x < 0) n = -n ^ 2
532 fmuld %f14,pio2_3,%f14
536 fmuld %f22,pio2_3,%f22
540 fmuld %f30,pio2_3,%f30
555 fsubd %f32,%f6,%f0 ! reduced x
579 faddd %f2,c3two44,%f4
583 faddd %f10,c3two44,%f12
587 faddd %f18,c3two44,%f20
591 faddd %f26,c3two44,%f28
610 fsubd %f4,%f6,%f6 ! w
626 fand %f0,%f38,%f32 ! sign bit of x
639 fsubd %f2,%f4,%f2 ! x -= __vlibm_TBL_sincos2[k]
650 fmuld %f2,%f2,%f0 ! z = x * x
675 fmuld %f0,qq3,%f6 ! cos(x0)
677 fmuld %f8,qq3,%f14 ! cos(x1)
679 fmuld %f16,qq3,%f22 ! cos(x2)
681 fmuld %f24,qq3,%f30 ! cos(x3)
789 lda [%i1]%asi,%l0 ! preload next argument
806 fmovdnz %icc,%f12,%f14
810 fmovdnz %icc,%f20,%f22
814 fmovdnz %icc,%f28,%f30
828 fmuld %f24,pp3,%f30 ! sin(x3)
830 fmuld %f0,qq3,%f6 ! cos(x0)
832 fmuld %f8,qq3,%f14 ! cos(x1)
834 fmuld %f16,qq3,%f22 ! cos(x2)
943 lda [%i1]%asi,%l0 ! preload next argument
960 fmovdnz %icc,%f12,%f14
964 fmovdnz %icc,%f20,%f22
968 fmovdnz %icc,%f28,%f30
988 fmuld %f16,pp3,%f22 ! sin(x2)
990 fmuld %f0,qq3,%f6 ! cos(x0)
992 fmuld %f8,qq3,%f14 ! cos(x1)
997 fmuld %f24,qq3,%f30 ! cos(x3)
1005 fmuld %f16,%f22,%f22
1018 fmuld %f16,%f20,%f20
1021 fmuld %f24,%f30,%f30
1032 fmuld %f16,%f22,%f22
1035 fmuld %f24,%f28,%f28
1040 fmuld %f10,%f12,%f12
1042 fmuld %f18,%f22,%f22
1045 fmuld %f26,%f28,%f28
1052 faddd %f12,%f34,%f12
1055 fmuld %f16,%f20,%f20
1056 faddd %f36,%f22,%f22
1058 fmuld %f24,%f30,%f30
1059 faddd %f28,%f38,%f28
1067 faddd %f12,%f10,%f12
1070 faddd %f18,%f22,%f22
1073 fmuld %f24,%f30,%f30
1074 faddd %f28,%f26,%f28
1079 fmuld %f34,%f12,%f12
1081 fmuld %f36,%f22,%f22
1083 fmuld %f38,%f28,%f28
1087 fsubd %f14,%f12,%f14
1089 faddd %f22,%f20,%f22
1091 fsubd %f30,%f28,%f30
1097 faddd %f22,%f16,%f22
1099 faddd %f30,%f24,%f30
1103 lda [%i1]%asi,%l0 ! preload next argument
1116 fmovdnz %icc,%f4,%f6
1120 fmovdnz %icc,%f12,%f14
1124 fmovdnz %icc,%f20,%f22
1128 fmovdnz %icc,%f28,%f30
1142 fmuld %f16,pp3,%f22 ! sin(x2)
1144 fmuld %f24,pp3,%f30 ! sin(x3)
1146 fmuld %f0,qq3,%f6 ! cos(x0)
1148 fmuld %f8,qq3,%f14 ! cos(x1)
1162 fmuld %f16,%f22,%f22
1165 fmuld %f24,%f30,%f30
1175 fmuld %f16,%f20,%f20
1179 fmuld %f24,%f28,%f28
1190 fmuld %f16,%f22,%f22
1192 fmuld %f24,%f30,%f30
1196 fmuld %f10,%f12,%f12
1198 fmuld %f18,%f22,%f22
1201 fmuld %f26,%f30,%f30
1209 faddd %f12,%f34,%f12
1212 fmuld %f16,%f20,%f20
1213 faddd %f36,%f22,%f22
1215 fmuld %f24,%f28,%f28
1216 faddd %f38,%f30,%f30
1223 faddd %f12,%f10,%f12
1226 faddd %f18,%f22,%f22
1229 faddd %f26,%f30,%f30
1234 fmuld %f34,%f12,%f12
1236 fmuld %f36,%f22,%f22
1238 fmuld %f38,%f30,%f30
1242 fsubd %f14,%f12,%f14
1244 faddd %f22,%f20,%f22
1246 faddd %f30,%f28,%f30
1252 faddd %f22,%f16,%f22
1254 faddd %f30,%f24,%f30
1258 lda [%i1]%asi,%l0 ! preload next argument
1271 fmovdnz %icc,%f4,%f6
1275 fmovdnz %icc,%f12,%f14
1279 fmovdnz %icc,%f20,%f22
1283 fmovdnz %icc,%f28,%f30
1297 fmuld %f18,%f18,%f16
1303 fmuld %f26,%f26,%f24
1309 fmuld %f8,pp3,%f14 ! sin(x1)
1311 fmuld %f0,qq3,%f6 ! cos(x0)
1316 fmuld %f16,qq3,%f22 ! cos(x2)
1318 fmuld %f24,qq3,%f30 ! cos(x3)
1339 fmuld %f16,%f22,%f22
1342 fmuld %f24,%f30,%f30
1352 fmuld %f16,%f20,%f20
1356 fmuld %f24,%f28,%f28
1361 fmuld %f10,%f14,%f14
1364 fmuld %f18,%f20,%f20
1366 fmuld %f26,%f28,%f28
1373 faddd %f34,%f14,%f14
1375 fmuld %f16,%f22,%f22
1376 faddd %f20,%f36,%f20
1379 fmuld %f24,%f30,%f30
1380 faddd %f28,%f38,%f28
1387 faddd %f10,%f14,%f14
1390 fmuld %f16,%f22,%f22
1391 faddd %f20,%f18,%f20
1394 fmuld %f24,%f30,%f30
1395 faddd %f28,%f26,%f28
1400 fmuld %f34,%f14,%f14
1402 fmuld %f36,%f20,%f20
1404 fmuld %f38,%f28,%f28
1408 faddd %f14,%f12,%f14
1410 fsubd %f22,%f20,%f22
1412 fsubd %f30,%f28,%f30
1418 faddd %f22,%f16,%f22
1420 faddd %f30,%f24,%f30
1424 lda [%i1]%asi,%l0 ! preload next argument
1437 fmovdnz %icc,%f4,%f6
1441 fmovdnz %icc,%f12,%f14
1445 fmovdnz %icc,%f20,%f22
1449 fmovdnz %icc,%f28,%f30
1463 fmuld %f8,pp3,%f14 ! sin(x1)
1465 fmuld %f24,pp3,%f30 ! sin(x3)
1467 fmuld %f0,qq3,%f6 ! cos(x0)
1472 fmuld %f16,qq3,%f22 ! cos(x2)
1486 fmuld %f24,%f30,%f30
1496 fmuld %f16,%f22,%f22
1500 fmuld %f24,%f28,%f28
1510 fmuld %f16,%f20,%f20
1513 fmuld %f24,%f30,%f30
1517 fmuld %f10,%f14,%f14
1520 fmuld %f18,%f20,%f20
1522 fmuld %f26,%f30,%f30
1530 faddd %f34,%f14,%f14
1532 fmuld %f16,%f22,%f22
1533 faddd %f20,%f36,%f20
1536 fmuld %f24,%f28,%f28
1537 faddd %f38,%f30,%f30
1543 faddd %f10,%f14,%f14
1546 fmuld %f16,%f22,%f22
1547 faddd %f20,%f18,%f20
1550 faddd %f26,%f30,%f30
1555 fmuld %f34,%f14,%f14
1557 fmuld %f36,%f20,%f20
1559 fmuld %f38,%f30,%f30
1563 faddd %f14,%f12,%f14
1565 fsubd %f22,%f20,%f22
1567 faddd %f30,%f28,%f30
1573 faddd %f22,%f16,%f22
1575 faddd %f30,%f24,%f30
1579 lda [%i1]%asi,%l0 ! preload next argument
1592 fmovdnz %icc,%f4,%f6
1596 fmovdnz %icc,%f12,%f14
1600 fmovdnz %icc,%f20,%f22
1604 fmovdnz %icc,%f28,%f30
1618 fmuld %f26,%f26,%f24
1624 fmuld %f8,pp3,%f14 ! sin(x1)
1626 fmuld %f16,pp3,%f22 ! sin(x2)
1628 fmuld %f0,qq3,%f6 ! cos(x0)
1636 fmuld %f24,qq3,%f30 ! cos(x3)
1644 fmuld %f16,%f22,%f22
1658 fmuld %f16,%f20,%f20
1661 fmuld %f24,%f30,%f30
1670 fmuld %f16,%f22,%f22
1673 fmuld %f24,%f28,%f28
1678 fmuld %f10,%f14,%f14
1681 fmuld %f18,%f22,%f22
1684 fmuld %f26,%f28,%f28
1691 faddd %f34,%f14,%f14
1693 fmuld %f16,%f20,%f20
1694 faddd %f36,%f22,%f22
1696 fmuld %f24,%f30,%f30
1697 faddd %f28,%f38,%f28
1704 faddd %f10,%f14,%f14
1707 faddd %f18,%f22,%f22
1710 fmuld %f24,%f30,%f30
1711 faddd %f28,%f26,%f28
1716 fmuld %f34,%f14,%f14
1718 fmuld %f36,%f22,%f22
1720 fmuld %f38,%f28,%f28
1724 faddd %f14,%f12,%f14
1726 faddd %f22,%f20,%f22
1728 fsubd %f30,%f28,%f30
1734 faddd %f22,%f16,%f22
1736 faddd %f30,%f24,%f30
1740 lda [%i1]%asi,%l0 ! preload next argument
1753 fmovdnz %icc,%f4,%f6
1757 fmovdnz %icc,%f12,%f14
1761 fmovdnz %icc,%f20,%f22
1765 fmovdnz %icc,%f28,%f30
1779 fmuld %f8,pp3,%f14 ! sin(x1)
1781 fmuld %f16,pp3,%f22 ! sin(x2)
1783 fmuld %f24,pp3,%f30 ! sin(x3)
1785 fmuld %f0,qq3,%f6 ! cos(x0)
1802 fmuld %f16,%f22,%f22
1805 fmuld %f24,%f30,%f30
1816 fmuld %f16,%f20,%f20
1820 fmuld %f24,%f28,%f28
1829 fmuld %f16,%f22,%f22
1831 fmuld %f24,%f30,%f30
1835 fmuld %f10,%f14,%f14
1838 fmuld %f18,%f22,%f22
1841 fmuld %f26,%f30,%f30
1849 faddd %f34,%f14,%f14
1851 fmuld %f16,%f20,%f20
1852 faddd %f36,%f22,%f22
1854 fmuld %f24,%f28,%f28
1855 faddd %f38,%f30,%f30
1861 faddd %f10,%f14,%f14
1864 faddd %f18,%f22,%f22
1867 faddd %f26,%f30,%f30
1872 fmuld %f34,%f14,%f14
1874 fmuld %f36,%f22,%f22
1876 fmuld %f38,%f30,%f30
1880 faddd %f14,%f12,%f14
1882 faddd %f22,%f20,%f22
1884 faddd %f30,%f28,%f30
1890 faddd %f22,%f16,%f22
1892 faddd %f30,%f24,%f30
1896 lda [%i1]%asi,%l0 ! preload next argument
1909 fmovdnz %icc,%f4,%f6
1913 fmovdnz %icc,%f12,%f14
1917 fmovdnz %icc,%f20,%f22
1921 fmovdnz %icc,%f28,%f30
1941 fmuld %f18,%f18,%f16
1947 fmuld %f26,%f26,%f24
1953 fmuld %f0,pp3,%f6 ! sin(x0)
1958 fmuld %f8,qq3,%f14 ! cos(x1)
1960 fmuld %f16,qq3,%f22 ! cos(x2)
1962 fmuld %f24,qq3,%f30 ! cos(x3)
1983 fmuld %f16,%f22,%f22
1986 fmuld %f24,%f30,%f30
1996 fmuld %f16,%f20,%f20
2000 fmuld %f24,%f28,%f28
2006 fmuld %f10,%f12,%f12
2008 fmuld %f18,%f20,%f20
2010 fmuld %f26,%f28,%f28
2016 faddd %f12,%f34,%f12
2019 fmuld %f16,%f22,%f22
2020 faddd %f20,%f36,%f20
2023 fmuld %f24,%f30,%f30
2024 faddd %f28,%f38,%f28
2031 faddd %f12,%f10,%f12
2034 fmuld %f16,%f22,%f22
2035 faddd %f20,%f18,%f20
2038 fmuld %f24,%f30,%f30
2039 faddd %f28,%f26,%f28
2044 fmuld %f34,%f12,%f12
2046 fmuld %f36,%f20,%f20
2048 fmuld %f38,%f28,%f28
2052 fsubd %f14,%f12,%f14
2054 fsubd %f22,%f20,%f22
2056 fsubd %f30,%f28,%f30
2062 faddd %f22,%f16,%f22
2064 faddd %f30,%f24,%f30
2068 lda [%i1]%asi,%l0 ! preload next argument
2081 fmovdnz %icc,%f4,%f6
2085 fmovdnz %icc,%f12,%f14
2089 fmovdnz %icc,%f20,%f22
2093 fmovdnz %icc,%f28,%f30
2107 fmuld %f0,pp3,%f6 ! sin(x0)
2109 fmuld %f24,pp3,%f30 ! sin(x3)
2114 fmuld %f8,qq3,%f14 ! cos(x1)
2116 fmuld %f16,qq3,%f22 ! cos(x2)
2130 fmuld %f24,%f30,%f30
2140 fmuld %f16,%f22,%f22
2144 fmuld %f24,%f28,%f28
2154 fmuld %f16,%f20,%f20
2157 fmuld %f24,%f30,%f30
2162 fmuld %f10,%f12,%f12
2164 fmuld %f18,%f20,%f20
2166 fmuld %f26,%f30,%f30
2173 faddd %f12,%f34,%f12
2176 fmuld %f16,%f22,%f22
2177 faddd %f20,%f36,%f20
2180 fmuld %f24,%f28,%f28
2181 faddd %f38,%f30,%f30
2187 faddd %f12,%f10,%f12
2190 fmuld %f16,%f22,%f22
2191 faddd %f20,%f18,%f20
2194 faddd %f26,%f30,%f30
2199 fmuld %f34,%f12,%f12
2201 fmuld %f36,%f20,%f20
2203 fmuld %f38,%f30,%f30
2207 fsubd %f14,%f12,%f14
2209 fsubd %f22,%f20,%f22
2211 faddd %f30,%f28,%f30
2217 faddd %f22,%f16,%f22
2219 faddd %f30,%f24,%f30
2223 lda [%i1]%asi,%l0 ! preload next argument
2236 fmovdnz %icc,%f4,%f6
2240 fmovdnz %icc,%f12,%f14
2244 fmovdnz %icc,%f20,%f22
2248 fmovdnz %icc,%f28,%f30
2262 fmuld %f26,%f26,%f24
2268 fmuld %f0,pp3,%f6 ! sin(x0)
2270 fmuld %f16,pp3,%f22 ! sin(x2)
2275 fmuld %f8,qq3,%f14 ! cos(x1)
2280 fmuld %f24,qq3,%f30 ! cos(x3)
2288 fmuld %f16,%f22,%f22
2302 fmuld %f16,%f20,%f20
2305 fmuld %f24,%f30,%f30
2314 fmuld %f16,%f22,%f22
2317 fmuld %f24,%f28,%f28
2323 fmuld %f10,%f12,%f12
2325 fmuld %f18,%f22,%f22
2328 fmuld %f26,%f28,%f28
2334 faddd %f12,%f34,%f12
2337 fmuld %f16,%f20,%f20
2338 faddd %f36,%f22,%f22
2340 fmuld %f24,%f30,%f30
2341 faddd %f28,%f38,%f28
2348 faddd %f12,%f10,%f12
2351 faddd %f18,%f22,%f22
2354 fmuld %f24,%f30,%f30
2355 faddd %f28,%f26,%f28
2360 fmuld %f34,%f12,%f12
2362 fmuld %f36,%f22,%f22
2364 fmuld %f38,%f28,%f28
2368 fsubd %f14,%f12,%f14
2370 faddd %f22,%f20,%f22
2372 fsubd %f30,%f28,%f30
2378 faddd %f22,%f16,%f22
2380 faddd %f30,%f24,%f30
2384 lda [%i1]%asi,%l0 ! preload next argument
2397 fmovdnz %icc,%f4,%f6
2401 fmovdnz %icc,%f12,%f14
2405 fmovdnz %icc,%f20,%f22
2409 fmovdnz %icc,%f28,%f30
2423 fmuld %f0,pp3,%f6 ! sin(x0)
2425 fmuld %f16,pp3,%f22 ! sin(x2)
2427 fmuld %f24,pp3,%f30 ! sin(x3)
2432 fmuld %f8,qq3,%f14 ! cos(x1)
2446 fmuld %f16,%f22,%f22
2449 fmuld %f24,%f30,%f30
2460 fmuld %f16,%f20,%f20
2464 fmuld %f24,%f28,%f28
2473 fmuld %f16,%f22,%f22
2475 fmuld %f24,%f30,%f30
2480 fmuld %f10,%f12,%f12
2482 fmuld %f18,%f22,%f22
2485 fmuld %f26,%f30,%f30
2492 faddd %f12,%f34,%f12
2495 fmuld %f16,%f20,%f20
2496 faddd %f36,%f22,%f22
2498 fmuld %f24,%f28,%f28
2499 faddd %f38,%f30,%f30
2505 faddd %f12,%f10,%f12
2508 faddd %f18,%f22,%f22
2511 faddd %f26,%f30,%f30
2516 fmuld %f34,%f12,%f12
2518 fmuld %f36,%f22,%f22
2520 fmuld %f38,%f30,%f30
2524 fsubd %f14,%f12,%f14
2526 faddd %f22,%f20,%f22
2528 faddd %f30,%f28,%f30
2534 faddd %f22,%f16,%f22
2536 faddd %f30,%f24,%f30
2540 lda [%i1]%asi,%l0 ! preload next argument
2553 fmovdnz %icc,%f4,%f6
2557 fmovdnz %icc,%f12,%f14
2561 fmovdnz %icc,%f20,%f22
2565 fmovdnz %icc,%f28,%f30
2579 fmuld %f18,%f18,%f16
2585 fmuld %f26,%f26,%f24
2591 fmuld %f0,pp3,%f6 ! sin(x0)
2593 fmuld %f8,pp3,%f14 ! sin(x1)
2601 fmuld %f16,qq3,%f22 ! cos(x2)
2603 fmuld %f24,qq3,%f30 ! cos(x3)
2625 fmuld %f16,%f22,%f22
2628 fmuld %f24,%f30,%f30
2636 fmuld %f16,%f20,%f20
2640 fmuld %f24,%f28,%f28
2646 fmuld %f10,%f14,%f14
2649 fmuld %f18,%f20,%f20
2651 fmuld %f26,%f28,%f28
2657 faddd %f34,%f14,%f14
2659 fmuld %f16,%f22,%f22
2660 faddd %f20,%f36,%f20
2663 fmuld %f24,%f30,%f30
2664 faddd %f28,%f38,%f28
2670 faddd %f10,%f14,%f14
2673 fmuld %f16,%f22,%f22
2674 faddd %f20,%f18,%f20
2677 fmuld %f24,%f30,%f30
2678 faddd %f28,%f26,%f28
2683 fmuld %f34,%f14,%f14
2685 fmuld %f36,%f20,%f20
2687 fmuld %f38,%f28,%f28
2691 faddd %f14,%f12,%f14
2693 fsubd %f22,%f20,%f22
2695 fsubd %f30,%f28,%f30
2701 faddd %f22,%f16,%f22
2703 faddd %f30,%f24,%f30
2707 lda [%i1]%asi,%l0 ! preload next argument
2720 fmovdnz %icc,%f4,%f6
2724 fmovdnz %icc,%f12,%f14
2728 fmovdnz %icc,%f20,%f22
2732 fmovdnz %icc,%f28,%f30
2746 fmuld %f0,pp3,%f6 ! sin(x0)
2748 fmuld %f8,pp3,%f14 ! sin(x1)
2750 fmuld %f24,pp3,%f30 ! sin(x3)
2758 fmuld %f16,qq3,%f22 ! cos(x2)
2772 fmuld %f24,%f30,%f30
2783 fmuld %f16,%f22,%f22
2787 fmuld %f24,%f28,%f28
2795 fmuld %f16,%f20,%f20
2798 fmuld %f24,%f30,%f30
2803 fmuld %f10,%f14,%f14
2806 fmuld %f18,%f20,%f20
2808 fmuld %f26,%f30,%f30
2815 faddd %f34,%f14,%f14
2817 fmuld %f16,%f22,%f22
2818 faddd %f20,%f36,%f20
2821 fmuld %f24,%f28,%f28
2822 faddd %f38,%f30,%f30
2827 faddd %f10,%f14,%f14
2830 fmuld %f16,%f22,%f22
2831 faddd %f20,%f18,%f20
2834 faddd %f26,%f30,%f30
2839 fmuld %f34,%f14,%f14
2841 fmuld %f36,%f20,%f20
2843 fmuld %f38,%f30,%f30
2847 faddd %f14,%f12,%f14
2849 fsubd %f22,%f20,%f22
2851 faddd %f30,%f28,%f30
2857 faddd %f22,%f16,%f22
2859 faddd %f30,%f24,%f30
2863 lda [%i1]%asi,%l0 ! preload next argument
2876 fmovdnz %icc,%f4,%f6
2880 fmovdnz %icc,%f12,%f14
2884 fmovdnz %icc,%f20,%f22
2888 fmovdnz %icc,%f28,%f30
2902 fmuld %f26,%f26,%f24
2908 fmuld %f0,pp3,%f6 ! sin(x0)
2910 fmuld %f8,pp3,%f14 ! sin(x1)
2912 fmuld %f16,pp3,%f22 ! sin(x2)
2923 fmuld %f24,qq3,%f30 ! cos(x3)
2931 fmuld %f16,%f22,%f22
2946 fmuld %f16,%f20,%f20
2949 fmuld %f24,%f30,%f30
2956 fmuld %f16,%f22,%f22
2959 fmuld %f24,%f28,%f28
2965 fmuld %f10,%f14,%f14
2968 fmuld %f18,%f22,%f22
2971 fmuld %f26,%f28,%f28
2977 faddd %f34,%f14,%f14
2979 fmuld %f16,%f20,%f20
2980 faddd %f36,%f22,%f22
2982 fmuld %f24,%f30,%f30
2983 faddd %f28,%f38,%f28
2989 faddd %f10,%f14,%f14
2992 faddd %f18,%f22,%f22
2995 fmuld %f24,%f30,%f30
2996 faddd %f28,%f26,%f28
3001 fmuld %f34,%f14,%f14
3003 fmuld %f36,%f22,%f22
3005 fmuld %f38,%f28,%f28
3009 faddd %f14,%f12,%f14
3011 faddd %f22,%f20,%f22
3013 fsubd %f30,%f28,%f30
3019 faddd %f22,%f16,%f22
3021 faddd %f30,%f24,%f30
3025 lda [%i1]%asi,%l0 ! preload next argument
3038 fmovdnz %icc,%f4,%f6
3042 fmovdnz %icc,%f12,%f14
3046 fmovdnz %icc,%f20,%f22
3050 fmovdnz %icc,%f28,%f30
3064 fmuld %f0,pp3,%f6 ! sin(x0)
3066 fmuld %f8,pp3,%f14 ! sin(x1)
3068 fmuld %f16,pp3,%f22 ! sin(x2)
3070 fmuld %f24,pp3,%f30 ! sin(x3)
3090 fmuld %f16,%f22,%f22
3093 fmuld %f24,%f30,%f30
3105 fmuld %f16,%f20,%f20
3109 fmuld %f24,%f28,%f28
3116 fmuld %f16,%f22,%f22
3118 fmuld %f24,%f30,%f30
3123 fmuld %f10,%f14,%f14
3126 fmuld %f18,%f22,%f22
3129 fmuld %f26,%f30,%f30
3136 faddd %f34,%f14,%f14
3138 fmuld %f16,%f20,%f20
3139 faddd %f36,%f22,%f22
3141 fmuld %f24,%f28,%f28
3142 faddd %f38,%f30,%f30
3147 faddd %f10,%f14,%f14
3150 faddd %f18,%f22,%f22
3153 faddd %f26,%f30,%f30
3158 fmuld %f34,%f14,%f14
3160 fmuld %f36,%f22,%f22
3162 fmuld %f38,%f30,%f30
3166 faddd %f14,%f12,%f14
3168 faddd %f22,%f20,%f22
3170 faddd %f30,%f28,%f30
3176 faddd %f22,%f16,%f22
3178 faddd %f30,%f24,%f30
3182 lda [%i1]%asi,%l0 ! preload next argument
3195 fmovdnz %icc,%f4,%f6
3199 fmovdnz %icc,%f12,%f14
3203 fmovdnz %icc,%f20,%f22
3207 fmovdnz %icc,%f28,%f30
3226 tst %i5 ! check for huge arguments remaining
3235 sra %o2,0,%o2 ! sign-extend for V9
3237 call __vlibm_vcos_big_ultra3
3238 sra %o5,0,%o5 ! delay slot
3247 faddd %f2,c3two44,%f4
3255 faddd %f10,c3two44,%f12
3263 faddd %f18,c3two44,%f20
3279 bl,pt %icc,1f ! hx < 0x3e400000
3280 ! delay slot, harmless if branch taken
3281 sethi %hi(0x7ff00000),%o7
3283 bl,a,pt %icc,2f ! branch if finite
3284 ! delay slot, squashed if branch not taken
3285 st %o4,[%fp+biguns] ! set biguns
3293 fdtoi %f2,%f4 ! raise inexact if not zero
3294 sethi %hi(0x3ff00000),%o7
3300 ! delay slot, harmless if branch taken
3301 add %i3,%i4,%i3 ! y += stridey
3302 andn %l1,%i5,%l0 ! hx &= ~0x80000000
3307 add %i1,%i2,%i1 ! x += stridex
3313 bl,pt %icc,1f ! hx < 0x3e400000
3314 ! delay slot, harmless if branch taken
3315 sethi %hi(0x7ff00000),%o7
3317 bl,a,pt %icc,2f ! branch if finite
3318 ! delay slot, squashed if branch not taken
3319 st %o4,[%fp+biguns] ! set biguns
3327 fdtoi %f10,%f12 ! raise inexact if not zero
3328 sethi %hi(0x3ff00000),%o7
3333 ble,pn %icc,.last1_from_range1
3334 ! delay slot, harmless if branch taken
3335 add %i3,%i4,%i3 ! y += stridey
3336 andn %l2,%i5,%l1 ! hx &= ~0x80000000
3341 add %i1,%i2,%i1 ! x += stridex
3347 bl,pt %icc,1f ! hx < 0x3e400000
3348 ! delay slot, harmless if branch taken
3349 sethi %hi(0x7ff00000),%o7
3351 bl,a,pt %icc,2f ! branch if finite
3352 ! delay slot, squashed if branch not taken
3353 st %o4,[%fp+biguns] ! set biguns
3355 fmuld %f18,%f16,%f18
3361 fdtoi %f18,%f20 ! raise inexact if not zero
3362 sethi %hi(0x3ff00000),%o7
3367 ble,pn %icc,.last2_from_range2
3368 ! delay slot, harmless if branch taken
3369 add %i3,%i4,%i3 ! y += stridey
3370 andn %l3,%i5,%l2 ! hx &= ~0x80000000
3375 add %i1,%i2,%i1 ! x += stridex
3381 bl,pt %icc,1f ! hx < 0x3e400000
3382 ! delay slot, harmless if branch taken
3383 sethi %hi(0x7ff00000),%o7
3385 bl,a,pt %icc,2f ! branch if finite
3386 ! delay slot, squashed if branch not taken
3387 st %o4,[%fp+biguns] ! set biguns
3389 fmuld %f26,%f24,%f26
3395 fdtoi %f26,%f28 ! raise inexact if not zero
3396 sethi %hi(0x3ff00000),%o7
3401 ble,pn %icc,.last3_from_range3
3402 ! delay slot, harmless if branch taken
3403 add %i3,%i4,%i3 ! y += stridey
3407 andn %l3,%i5,%l3 ! hx &= ~0x80000000
3410 add %i1,%i2,%i1 ! x += stridex
3412 SET_SIZE(__vcos_ultra3)