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.
36 .word 0x3ec718e3,0xa6972785
37 .word 0x3ef9fd39,0x94293940
38 .word 0xbf2a019f,0x75ee4be1
39 .word 0xbf56c16b,0xba552569
40 .word 0x3f811111,0x1108c703
41 .word 0x3fa55555,0x554f5b35
42 .word 0xbfc55555,0x555554d0
43 .word 0xbfdfffff,0xffffff85
44 .word 0x3ff00000,0x00000000
45 .word 0xbfc55555,0x5551fc28
46 .word 0x3f811107,0x62eacc9d
47 .word 0xbfdfffff,0xffff6328
48 .word 0x3fa55551,0x5f7acf0c
49 .word 0x3fe45f30,0x6dc9c883
50 .word 0x43380000,0x00000000
51 .word 0x3ff921fb,0x54400000
52 .word 0x3dd0b461,0x1a600000
53 .word 0x3ba3198a,0x2e000000
54 .word 0x397b839a,0x252049c1
55 .word 0x80000000,0x00004000
56 .word 0xffff8000,0x00000000 ! N.B.: low-order words used
57 .word 0x3fc90000,0x80000000 ! for sign bit hacking; see
58 .word 0x3fc40000,0x00000000 ! references to "thresh" below
83 ! local storage indices
85 #define xsave STACK_BIAS-0x8
86 #define ysave STACK_BIAS-0x10
87 #define nsave STACK_BIAS-0x14
88 #define sxsave STACK_BIAS-0x18
89 #define sysave STACK_BIAS-0x1c
90 #define biguns STACK_BIAS-0x20
91 #define n2 STACK_BIAS-0x24
92 #define n1 STACK_BIAS-0x28
93 #define n0 STACK_BIAS-0x2c
94 #define x2_1 STACK_BIAS-0x40
95 #define x1_1 STACK_BIAS-0x50
96 #define x0_1 STACK_BIAS-0x60
97 #define y2_0 STACK_BIAS-0x70
98 #define y1_0 STACK_BIAS-0x80
99 #define y0_0 STACK_BIAS-0x90
100 ! sizeof temp storage - must be a multiple of 16 for V9
103 !--------------------------------------------------------------
104 ! Some defines to keep code more readable
106 ! in primary range, contains |x| upper limit when cos(x)=1.
107 ! in transferring to medium range, denotes what loop was active.
108 !--------------------------------------------------------------
111 save %sp,-SA(MINFRAME)-tmps,%sp
113 PIC_SET(g5,__vlibm_TBL_sincos_hi,l3)
114 PIC_SET(g5,__vlibm_TBL_sincos_lo,l4)
115 PIC_SET(g5,constants,l5)
117 wr %g0,0x82,%asi ! set %asi for non-faulting loads
119 ! ========== primary range ==========
133 ! l3 __vlibm_TBL_sincos_hi
134 ! l4 __vlibm_TBL_sincos_lo
139 ! the following are 64-bit registers in both V8+ and V9
156 ! f8 scratch for table base
162 ! f18 scratch for table base
168 ! f28 scratch for table base
178 ! f44 0xffff800000000000
190 stx %i1,[%fp+xsave] ! save arguments
193 st %i1,[%fp+xsave] ! save arguments
199 sethi %hi(0x80000000),%i5 ! load/set up constants
200 sethi %hi(0x3fc90000),%l5
201 sethi %hi(0x3e400000),LIM_l6
202 sethi %hi(0x3fe921fb),%l7
203 or %l7,%lo(0x3fe921fb),%l7
204 ldd [%g1+f30val],%f30
215 sll %i2,3,%i2 ! scale strides
217 add %fp,x0_1,%o3 ! precondition loop
220 ld [%i1],%l0 ! hx = *x
223 andn %l0,%i5,%l0 ! hx &= ~0x80000000
224 add %i1,%i2,%i1 ! x += stridex
232 lda [%i1]%asi,%l1 ! preload next argument
235 fands %f0,%f30,%f9 ! save signbit
239 mov %i3,%o0 ! py0 = y
240 bl,pn %icc,.range0 ! if hx < 0x3e400000 or > 0x3fe921fb
245 add %i3,%i4,%i3 ! y += stridey
246 ble,pn %icc,.endloop1
250 add %i1,%i2,%i1 ! x += stridex
252 fmuld %f54,%f54,%f54 ! one*one; a nop for alignment only
255 lda [%i1]%asi,%l2 ! preload next argument
258 fands %f10,%f30,%f19 ! save signbit
262 mov %i3,%o1 ! py1 = y
263 bl,pn %icc,.range1 ! if hx < 0x3e400000 or > 0x3fe921fb
268 add %i3,%i4,%i3 ! y += stridey
269 ble,pn %icc,.endloop2
273 add %i1,%i2,%i1 ! x += stridex
275 fmuld %f54,%f54,%f54 ! one*one; a nop for alignment only
281 fands %f20,%f30,%f29 ! save signbit
285 mov %i3,%o2 ! py2 = y
286 bl,pn %icc,.range2 ! if hx < 0x3e400000 or > 0x3fe921fb
289 add %i3,%i4,%i3 ! y += stridey
297 fpadd32s %f0,%f31,%f8
303 fpadd32s %f10,%f31,%f18
309 sethi %hi(0x3fc3c000),%o7
310 fpadd32s %f20,%f31,%f28
392 lda [%i1]%asi,%l0 ! preload next argument
401 add %i1,%i2,%i1 ! x += stridex
424 andn %l0,%i5,%l0 ! hx &= ~0x80000000
442 sethi %hi(0x3fc3c000),%o7
511 lda [%i1]%asi,%l0 ! preload next argument
520 add %i1,%i2,%i1 ! x += stridex
539 andn %l0,%i5,%l0 ! hx &= ~0x80000000
558 fpadd32s %f20,%f31,%f28
563 sethi %hi(0x3fc3c000),%o7
632 lda [%i1]%asi,%l0 ! preload next argument
641 add %i1,%i2,%i1 ! x += stridex
660 andn %l0,%i5,%l0 ! hx &= ~0x80000000
677 sethi %hi(0x3fc3c000),%o7
735 lda [%i1]%asi,%l0 ! preload next argument
744 add %i1,%i2,%i1 ! x += stridex
759 andn %l0,%i5,%l0 ! hx &= ~0x80000000
778 fpadd32s %f10,%f31,%f18
784 fpadd32s %f20,%f31,%f28
789 sethi %hi(0x3fc3c000),%o7
859 lda [%i1]%asi,%l0 ! preload next argument
868 add %i1,%i2,%i1 ! x += stridex
887 andn %l0,%i5,%l0 ! hx &= ~0x80000000
904 sethi %hi(0x3fc3c000),%o7
963 lda [%i1]%asi,%l0 ! preload next argument
972 add %i1,%i2,%i1 ! x += stridex
987 andn %l0,%i5,%l0 ! hx &= ~0x80000000
1006 fpadd32s %f20,%f31,%f28
1010 sethi %hi(0x3fc3c000),%o7
1016 fmuld %f10,%f10,%f12
1018 fsubd %f20,%f22,%f20
1026 fmuld %f12,%f52,%f14
1029 fmuld %f20,%f20,%f22
1034 faddd %f14,%f50,%f14
1036 fmuld %f22,%f58,%f26
1041 fmuld %f12,%f14,%f14
1043 faddd %f26,%f56,%f26
1044 fmuld %f22,%f62,%f24
1049 faddd %f14,%f48,%f14
1051 fmuld %f22,%f26,%f26
1052 faddd %f24,%f60,%f24
1056 fmuld %f12,%f14,%f14
1058 faddd %f26,%f54,%f26
1059 fmuld %f22,%f24,%f24
1063 faddd %f14,%f46,%f14
1065 fmuld %f20,%f26,%f26
1068 fmuld %f24,%f40,%f24
1069 lda [%i1]%asi,%l0 ! preload next argument
1074 fmuld %f26,%f42,%f26
1077 fmuld %f12,%f14,%f14
1078 add %i1,%i2,%i1 ! x += stridex
1082 faddd %f26,%f24,%f26
1084 fmuld %f10,%f14,%f14
1088 faddd %f26,%f22,%f26
1090 faddd %f10,%f14,%f16
1093 andn %l0,%i5,%l0 ! hx &= ~0x80000000
1095 faddd %f26,%f40,%f26
1104 ba,pt %icc,.endloop0
1114 fmuld %f10,%f10,%f12
1117 fmuld %f20,%f20,%f22
1121 lda [%i1]%asi,%l0 ! preload next argument
1123 fmuld %f12,%f52,%f14
1126 fmuld %f22,%f52,%f24
1130 add %i1,%i2,%i1 ! x += stridex
1132 faddd %f14,%f50,%f14
1134 faddd %f24,%f50,%f24
1138 fmuld %f12,%f14,%f14
1140 fmuld %f22,%f24,%f24
1144 faddd %f14,%f48,%f14
1146 faddd %f24,%f48,%f24
1150 fmuld %f12,%f14,%f14
1152 fmuld %f22,%f24,%f24
1156 faddd %f14,%f46,%f14
1158 faddd %f24,%f46,%f24
1162 fmuld %f12,%f14,%f14
1164 fmuld %f22,%f24,%f24
1168 fmuld %f10,%f14,%f14
1170 fmuld %f20,%f24,%f24
1174 faddd %f10,%f14,%f16
1176 faddd %f20,%f24,%f26
1177 andn %l0,%i5,%l0 ! hx &= ~0x80000000
1188 ba,pt %icc,.endloop0
1199 sethi %hi(0x3fc3c000),%o7
1200 fpadd32s %f10,%f31,%f18
1204 fsubd %f10,%f12,%f10
1206 fmuld %f10,%f10,%f12
1208 fmuld %f12,%f58,%f20
1210 faddd %f20,%f56,%f20
1211 fmuld %f12,%f62,%f14
1213 fmuld %f12,%f20,%f20
1214 faddd %f14,%f60,%f14
1215 faddd %f20,%f54,%f20
1216 fmuld %f12,%f14,%f14
1217 fmuld %f10,%f20,%f20
1219 fmuld %f14,%f36,%f14
1220 fmuld %f20,%f38,%f20
1221 faddd %f20,%f14,%f20
1222 faddd %f20,%f12,%f20
1225 faddd %f20,%f36,%f20
1227 fmuld %f10,%f10,%f12
1228 fmuld %f12,%f52,%f14
1229 faddd %f14,%f50,%f14
1230 fmuld %f12,%f14,%f14
1231 faddd %f14,%f48,%f14
1232 fmuld %f12,%f14,%f14
1233 faddd %f14,%f46,%f14
1234 fmuld %f12,%f14,%f14
1235 fmuld %f10,%f14,%f14
1236 faddd %f10,%f14,%f20
1247 sethi %hi(0x3fc3c000),%o7
1248 fpadd32s %f0,%f31,%f8
1258 faddd %f20,%f56,%f20
1263 faddd %f20,%f54,%f20
1268 fmuld %f20,%f34,%f20
1273 faddd %f20,%f32,%f20
1298 ! return. finished off with only primary range arguments.
1307 bg,a,pt %icc,.MEDIUM ! branch if x is not tiny
1308 ! delay slot, annulled if branch not taken
1309 mov 0x1,LIM_l6 ! set "processing loop0"
1310 st %f0,[%o0] ! *y = *x with inexact if x nonzero
1314 ble,pn %icc,.endloop0
1315 ! delay slot, harmless if branch taken
1316 add %i3,%i4,%i3 ! y += stridey
1317 andn %l1,%i5,%l0 ! hx &= ~0x80000000
1321 add %i1,%i2,%i1 ! x += stridex
1327 bg,a,pt %icc,.MEDIUM ! branch if x is not tiny
1328 ! delay slot, annulled if branch not taken
1329 mov 0x2,LIM_l6 ! set "processing loop1"
1330 st %f10,[%o1] ! *y = *x with inexact if x nonzero
1334 ble,pn %icc,.endloop1
1335 ! delay slot, harmless if branch taken
1336 add %i3,%i4,%i3 ! y += stridey
1337 andn %l2,%i5,%l1 ! hx &= ~0x80000000
1341 add %i1,%i2,%i1 ! x += stridex
1347 bg,a,pt %icc,.MEDIUM ! branch if x is not tiny
1348 ! delay slot, annulled if branch not taken
1349 mov 0x3,LIM_l6 ! set "processing loop2"
1350 st %f20,[%o2] ! *y = *x with inexact if x nonzero
1355 ble,pn %icc,.endloop2
1361 andn %l2,%i5,%l2 ! hx &= ~0x80000000
1364 add %i1,%i2,%i1 ! x += stridex
1370 ! ========== medium range ==========
1384 ! l3 __vlibm_TBL_sincos_hi
1385 ! l4 __vlibm_TBL_sincos_lo
1387 ! l6 in transition from pri-range and here, use for biguns
1390 ! the following are 64-bit registers in both V8+ and V9
1407 ! f8 scratch for table base
1413 ! f18 scratch for table base
1419 ! f28 scratch for table base
1429 ! f44 0xffff800000000000
1440 PIC_SET(g5,constants,l5)
1442 ! %o3,%o4,%o5 need to be stored
1444 sethi %hi(0x413921fb),%l7
1446 or %l7,%lo(0x413921fb),%l7
1451 ldd [%l5+invpio2],%f40
1452 ldd [%l5+round],%f42
1453 ldd [%l5+pio2_1],%f46
1454 ldd [%l5+pio2_2],%f48
1455 ldd [%l5+pio2_3],%f50
1456 ldd [%l5+pio2_3t],%f52
1457 std %f54,[%fp+x0_1+8] ! set up stack data
1458 std %f54,[%fp+x1_1+8]
1459 std %f54,[%fp+x2_1+8]
1460 stx %g0,[%fp+y0_0+8]
1461 stx %g0,[%fp+y1_0+8]
1462 stx %g0,[%fp+y2_0+8]
1464 ! branched here in the middle of the array. Need to adjust
1465 ! for the members of the triple that were selected in the primary
1468 ! no adjustment since all three selected here
1469 subcc LIM_l6,0x1,%g0 ! continue in LOOP0?
1471 mov 0x0,LIM_l6 ! delay slot set biguns=0
1473 ! ajust 1st triple since 2d and 3d done here
1474 subcc LIM_l6,0x2,%g0 ! continue in LOOP1?
1475 fors %f0,%f9,%f0 ! restore sign bit
1476 fmuld %f0,%f40,%f2 ! adj LOOP0
1478 mov 0x0,LIM_l6 ! delay slot set biguns=0
1480 ! ajust 1st and 2d triple since 3d done here
1481 subcc LIM_l6,0x3,%g0 ! continue in LOOP2?
1482 !done fmuld %f0,%f40,%f2 ! adj LOOP0
1483 sub %i3,%i4,%i3 ! adjust to not double increment
1484 fors %f10,%f19,%f10 ! restore sign bit
1485 fmuld %f10,%f40,%f12 ! adj LOOP1
1486 faddd %f2,%f42,%f2 ! adj LOOP1
1488 mov 0x0,LIM_l6 ! delay slot set biguns=0
1492 lda [%i1]%asi,%l1 ! preload next argument
1493 mov %i3,%o0 ! py0 = y
1496 add %i3,%i4,%i3 ! y += stridey
1497 bg,pn %icc,.BIG0 ! if hx > 0x413921fb
1500 lda [%i1+4]%asi,%f11
1502 add %i1,%i2,%i1 ! x += stridex
1503 ble,pn %icc,.ENDLOOP1
1509 fabsd %f54,%f54 ! a nop for alignment only
1512 lda [%i1]%asi,%l2 ! preload next argument
1513 mov %i3,%o1 ! py1 = y
1517 add %i3,%i4,%i3 ! y += stridey
1518 bg,pn %icc,.BIG1 ! if hx > 0x413921fb
1521 lda [%i1+4]%asi,%f21
1523 add %i1,%i2,%i1 ! x += stridex
1524 ble,pn %icc,.ENDLOOP2
1529 fmuld %f10,%f40,%f12
1534 mov %i3,%o2 ! py2 = y
1537 add %i3,%i4,%i3 ! y += stridey
1538 fmuld %f20,%f40,%f22
1539 bg,pn %icc,.BIG2 ! if hx > 0x413921fb
1542 add %l5,thresh+4,%o7
1543 faddd %f12,%f42,%f12
1549 faddd %f22,%f42,%f22
1552 fsubd %f2,%f42,%f2 ! n
1554 fsubd %f12,%f42,%f12 ! n
1556 fsubd %f22,%f42,%f22 ! n
1560 fmuld %f12,%f46,%f14
1562 fmuld %f22,%f46,%f24
1567 fsubd %f10,%f14,%f14
1568 fmuld %f12,%f48,%f16
1570 fsubd %f20,%f24,%f24
1571 fmuld %f22,%f48,%f26
1576 fsubd %f14,%f16,%f10
1579 fsubd %f24,%f26,%f20
1585 fsubd %f14,%f10,%f34
1588 fsubd %f24,%f20,%f36
1595 fsubd %f34,%f16,%f34
1596 fmuld %f12,%f50,%f18
1599 fsubd %f36,%f26,%f36
1600 fmuld %f22,%f50,%f28
1606 fsubd %f18,%f34,%f18
1609 fsubd %f28,%f36,%f28
1614 fsubd %f10,%f18,%f14
1616 fsubd %f20,%f28,%f24
1620 fsubd %f10,%f14,%f34
1622 fsubd %f20,%f24,%f36
1627 fsubd %f34,%f18,%f34
1628 fmuld %f12,%f52,%f12
1630 fsubd %f36,%f28,%f36
1631 fmuld %f22,%f52,%f22
1636 fsubd %f12,%f34,%f12
1639 fsubd %f22,%f36,%f22
1642 fsubd %f4,%f2,%f0 ! x
1644 fsubd %f14,%f12,%f10 ! x
1646 fsubd %f24,%f22,%f20 ! x
1650 fsubd %f14,%f10,%f14
1652 fsubd %f24,%f20,%f24
1654 fands %f0,%f30,%f9 ! save signbit
1656 fands %f10,%f30,%f19 ! save signbit
1658 fands %f20,%f30,%f29 ! save signbit
1669 fsubd %f4,%f2,%f2 ! y
1671 fsubd %f14,%f12,%f12 ! y
1673 fsubd %f24,%f22,%f22 ! y
1675 fcmpgt32 %f6,%f0,%l0
1677 fcmpgt32 %f16,%f10,%l1
1679 fcmpgt32 %f26,%f20,%l2
1681 ! -- 16 byte aligned
1684 fxors %f12,%f19,%f12
1686 fxors %f22,%f29,%f22
1688 fands %f9,%f8,%f9 ! if (n & 1) clear sign bit
1693 fands %f19,%f18,%f19 ! if (n & 1) clear sign bit
1698 fands %f29,%f28,%f29 ! if (n & 1) clear sign bit
1703 fpadd32s %f0,%f31,%f8
1704 sethi %hi(0x3fc3c000),%o7
1707 fpadd32s %f10,%f31,%f18
1711 fpadd32s %f20,%f31,%f28
1726 fsubd %f10,%f14,%f10
1729 fsubd %f20,%f24,%f20
1735 faddd %f10,%f12,%f10
1738 faddd %f20,%f22,%f20
1744 fmuld %f10,%f10,%f12
1747 fmuld %f20,%f20,%f22
1753 fmuld %f12,%f58,%f16
1756 fmuld %f22,%f58,%f26
1762 faddd %f16,%f56,%f16
1763 fmuld %f12,%f62,%f14
1765 faddd %f26,%f56,%f26
1766 fmuld %f22,%f62,%f24
1771 fmuld %f12,%f16,%f16
1772 faddd %f14,%f60,%f14
1774 fmuld %f22,%f26,%f26
1775 faddd %f24,%f60,%f24
1780 faddd %f16,%f54,%f16
1781 fmuld %f12,%f14,%f14
1783 faddd %f26,%f54,%f26
1784 fmuld %f22,%f24,%f24
1789 fmuld %f10,%f16,%f16
1792 fmuld %f20,%f26,%f26
1798 fmuld %f14,%f34,%f14
1801 fmuld %f24,%f36,%f24
1806 fmuld %f16,%f12,%f16
1808 fmuld %f26,%f22,%f26
1812 faddd %f16,%f14,%f16
1814 faddd %f26,%f24,%f26
1818 faddd %f16,%f10,%f16
1820 faddd %f26,%f20,%f26
1824 faddd %f16,%f34,%f16
1826 faddd %f26,%f36,%f26
1830 add %l5,thresh-4,%g1
1839 lda [%i1]%asi,%l0 ! preload next argument
1852 fxors %f29,%f28,%f29
1855 fxors %f19,%f18,%f19
1857 fors %f6,%f9,%f6 ! tack on sign
1858 add %i1,%i2,%i1 ! x += stridex
1861 fors %f26,%f29,%f26 ! tack on sign
1864 fors %f16,%f19,%f16 ! tack on sign
1871 andn %l0,%i5,%l0 ! hx &= ~0x80000000
1877 ba,pt %icc,.ENDLOOP0
1883 fpadd32s %f10,%f31,%f18
1884 sethi %hi(0x3fc3c000),%o7
1898 fsubd %f10,%f14,%f10
1901 fmuld %f20,%f20,%f20
1908 faddd %f10,%f12,%f10
1911 fmuld %f20,%f36,%f24
1918 fmuld %f10,%f10,%f12
1921 faddd %f24,%f26,%f24
1927 fmuld %f12,%f58,%f16
1930 fmuld %f20,%f24,%f24
1936 faddd %f16,%f56,%f16
1937 fmuld %f12,%f62,%f14
1939 faddd %f24,%f36,%f24
1945 fmuld %f12,%f16,%f16
1946 faddd %f14,%f60,%f14
1948 fmuld %f20,%f24,%f24
1954 faddd %f16,%f54,%f16
1955 fmuld %f12,%f14,%f14
1958 faddd %f24,%f26,%f24
1963 fmuld %f10,%f16,%f16
1969 fmuld %f14,%f34,%f14
1973 fmuld %f16,%f12,%f16
1975 fmuld %f20,%f24,%f24
1979 faddd %f16,%f14,%f16
1981 fmuld %f36,%f24,%f24
1986 faddd %f16,%f10,%f16
1988 faddd %f24,%f22,%f24
1992 faddd %f16,%f34,%f16
1996 faddd %f36,%f24,%f26
2000 fpadd32s %f0,%f31,%f8
2006 sethi %hi(0x3fc3c000),%o7
2007 fpadd32s %f20,%f31,%f28
2020 fsubd %f20,%f24,%f20
2023 fmuld %f10,%f10,%f10
2030 faddd %f20,%f22,%f20
2033 fmuld %f10,%f34,%f14
2040 fmuld %f20,%f20,%f22
2043 faddd %f14,%f16,%f14
2049 fmuld %f22,%f58,%f26
2052 fmuld %f10,%f14,%f14
2058 faddd %f26,%f56,%f26
2059 fmuld %f22,%f62,%f24
2061 faddd %f14,%f34,%f14
2067 fmuld %f22,%f26,%f26
2068 faddd %f24,%f60,%f24
2070 fmuld %f10,%f14,%f14
2076 faddd %f26,%f54,%f26
2077 fmuld %f22,%f24,%f24
2080 faddd %f14,%f16,%f14
2085 fmuld %f20,%f26,%f26
2091 fmuld %f24,%f36,%f24
2095 fmuld %f26,%f22,%f26
2097 fmuld %f10,%f14,%f14
2101 faddd %f26,%f24,%f26
2103 fmuld %f34,%f14,%f14
2108 faddd %f26,%f20,%f26
2110 faddd %f14,%f12,%f14
2114 faddd %f26,%f36,%f26
2118 faddd %f34,%f14,%f16
2126 fmuld %f10,%f10,%f10
2133 fmuld %f20,%f20,%f20
2137 fmuld %f10,%f34,%f14
2144 fmuld %f20,%f36,%f24
2148 faddd %f14,%f16,%f14
2154 faddd %f24,%f26,%f24
2157 fmuld %f10,%f14,%f14
2163 fmuld %f20,%f24,%f24
2166 faddd %f14,%f34,%f14
2172 faddd %f24,%f36,%f24
2175 fmuld %f10,%f14,%f14
2181 fmuld %f20,%f24,%f24
2184 faddd %f14,%f16,%f14
2190 faddd %f24,%f26,%f24
2192 fmuld %f10,%f14,%f14
2199 fmuld %f20,%f24,%f24
2203 fmuld %f34,%f14,%f14
2206 fmuld %f36,%f24,%f24
2211 faddd %f14,%f12,%f14
2213 faddd %f24,%f22,%f24
2217 faddd %f34,%f14,%f16
2219 faddd %f36,%f24,%f26
2227 fands %f29,%f28,%f29 ! if (n & 1) clear sign bit
2228 sethi %hi(0x3fc3c000),%o7
2234 fpadd32s %f10,%f31,%f18
2241 fpadd32s %f20,%f31,%f28
2249 fsubd %f10,%f14,%f10
2252 fsubd %f20,%f24,%f20
2259 faddd %f10,%f12,%f10
2262 faddd %f20,%f22,%f20
2269 fmuld %f10,%f10,%f12
2272 fmuld %f20,%f20,%f22
2278 fmuld %f12,%f58,%f16
2281 fmuld %f22,%f58,%f26
2287 faddd %f16,%f56,%f16
2288 fmuld %f12,%f62,%f14
2290 faddd %f26,%f56,%f26
2291 fmuld %f22,%f62,%f24
2296 fmuld %f12,%f16,%f16
2297 faddd %f14,%f60,%f14
2299 fmuld %f22,%f26,%f26
2300 faddd %f24,%f60,%f24
2304 faddd %f16,%f54,%f16
2305 fmuld %f12,%f14,%f14
2308 faddd %f26,%f54,%f26
2309 fmuld %f22,%f24,%f24
2314 fmuld %f10,%f16,%f16
2317 fmuld %f20,%f26,%f26
2320 fmuld %f14,%f34,%f14
2323 fmuld %f24,%f36,%f24
2327 fmuld %f16,%f12,%f16
2329 fmuld %f26,%f22,%f26
2334 faddd %f16,%f14,%f16
2336 faddd %f26,%f24,%f26
2340 faddd %f16,%f10,%f16
2342 faddd %f26,%f20,%f26
2346 faddd %f16,%f34,%f16
2350 faddd %f26,%f36,%f26
2361 fsubd %f10,%f14,%f10
2364 fmuld %f20,%f20,%f20
2372 faddd %f10,%f12,%f10
2375 fmuld %f20,%f36,%f24
2382 fmuld %f10,%f10,%f12
2385 faddd %f24,%f26,%f24
2391 fmuld %f12,%f58,%f16
2394 fmuld %f20,%f24,%f24
2400 faddd %f16,%f56,%f16
2401 fmuld %f12,%f62,%f14
2403 faddd %f24,%f36,%f24
2409 fmuld %f12,%f16,%f16
2410 faddd %f14,%f60,%f14
2412 fmuld %f20,%f24,%f24
2417 faddd %f16,%f54,%f16
2418 fmuld %f12,%f14,%f14
2421 faddd %f24,%f26,%f24
2425 fmuld %f10,%f16,%f16
2428 fmuld %f14,%f34,%f14
2430 fmuld %f20,%f24,%f24
2432 fmuld %f16,%f12,%f16
2437 fmuld %f36,%f24,%f24
2440 faddd %f16,%f14,%f16
2444 faddd %f24,%f22,%f24
2446 faddd %f16,%f10,%f16
2450 faddd %f36,%f24,%f26
2454 faddd %f16,%f34,%f16
2462 fpadd32s %f20,%f31,%f28
2471 fsubd %f20,%f24,%f20
2474 fmuld %f10,%f10,%f10
2482 faddd %f20,%f22,%f20
2485 fmuld %f10,%f34,%f14
2492 fmuld %f20,%f20,%f22
2495 faddd %f14,%f16,%f14
2501 fmuld %f22,%f58,%f26
2504 fmuld %f10,%f14,%f14
2510 faddd %f26,%f56,%f26
2511 fmuld %f22,%f62,%f24
2513 faddd %f14,%f34,%f14
2519 fmuld %f22,%f26,%f26
2520 faddd %f24,%f60,%f24
2522 fmuld %f10,%f14,%f14
2527 faddd %f26,%f54,%f26
2528 fmuld %f22,%f24,%f24
2531 faddd %f14,%f16,%f14
2535 fmuld %f20,%f26,%f26
2538 fmuld %f24,%f36,%f24
2540 fmuld %f10,%f14,%f14
2542 fmuld %f26,%f22,%f26
2547 fmuld %f34,%f14,%f14
2550 faddd %f26,%f24,%f26
2554 faddd %f14,%f12,%f14
2556 faddd %f26,%f20,%f26
2560 faddd %f34,%f14,%f16
2564 faddd %f26,%f36,%f26
2572 fmuld %f10,%f10,%f10
2576 fmuld %f20,%f20,%f20
2584 fmuld %f10,%f34,%f14
2588 fmuld %f20,%f36,%f24
2595 faddd %f14,%f16,%f14
2598 faddd %f24,%f26,%f24
2604 fmuld %f10,%f14,%f14
2607 fmuld %f20,%f24,%f24
2613 faddd %f14,%f34,%f14
2616 faddd %f24,%f36,%f24
2622 fmuld %f10,%f14,%f14
2625 fmuld %f20,%f24,%f24
2630 faddd %f14,%f16,%f14
2632 faddd %f24,%f26,%f24
2636 fmuld %f10,%f14,%f14
2638 fmuld %f20,%f24,%f24
2643 fmuld %f34,%f14,%f14
2646 fmuld %f36,%f24,%f24
2651 faddd %f14,%f12,%f14
2653 faddd %f24,%f22,%f24
2657 faddd %f34,%f14,%f16
2661 faddd %f36,%f24,%f26
2666 fmuld %f10,%f40,%f12
2668 faddd %f12,%f42,%f12
2670 fsubd %f12,%f42,%f12 ! n
2671 fmuld %f12,%f46,%f14
2672 fsubd %f10,%f14,%f14
2673 fmuld %f12,%f48,%f16
2674 fsubd %f14,%f16,%f10
2676 fsubd %f14,%f10,%f34
2678 fsubd %f34,%f16,%f34
2679 fmuld %f12,%f50,%f18
2681 fsubd %f18,%f34,%f18
2683 fsubd %f10,%f18,%f14
2684 fsubd %f10,%f14,%f34
2685 add %l5,thresh+4,%o7
2686 fsubd %f34,%f18,%f34
2687 fmuld %f12,%f52,%f12
2688 fsubd %f12,%f34,%f12
2690 fsubd %f14,%f12,%f10 ! x
2691 fsubd %f14,%f10,%f14
2692 fands %f10,%f30,%f19 ! save signbit
2695 fsubd %f14,%f12,%f12 ! y
2696 fcmpgt32 %f16,%f10,%l1
2697 fxors %f12,%f19,%f12
2698 fands %f19,%f18,%f19 ! if (n & 1) clear sign bit
2703 fpadd32s %f10,%f31,%f18
2706 sethi %hi(0x3fc3c000),%o7
2708 fsubd %f10,%f14,%f10
2711 faddd %f10,%f12,%f10
2713 fmuld %f10,%f10,%f12
2715 fmuld %f12,%f58,%f16
2717 faddd %f16,%f56,%f16
2718 fmuld %f12,%f62,%f14
2719 fmuld %f12,%f16,%f16
2720 faddd %f14,%f60,%f14
2721 faddd %f16,%f54,%f16
2722 fmuld %f12,%f14,%f14
2724 fmuld %f10,%f16,%f16
2726 fmuld %f14,%f34,%f14
2727 fmuld %f16,%f12,%f16
2728 faddd %f16,%f14,%f16
2729 faddd %f16,%f10,%f16
2731 faddd %f16,%f34,%f16
2733 fmuld %f10,%f10,%f10
2736 fmuld %f10,%f34,%f14
2739 faddd %f14,%f16,%f14
2741 fmuld %f10,%f14,%f14
2743 faddd %f14,%f34,%f14
2745 fmuld %f10,%f14,%f14
2747 faddd %f14,%f16,%f14
2748 fmuld %f10,%f14,%f14
2749 fmuld %f34,%f14,%f14
2751 faddd %f14,%f12,%f14
2752 faddd %f34,%f14,%f16
2754 add %l5,thresh-4,%g1
2759 fxors %f19,%f18,%f19
2760 fors %f16,%f19,%f16 ! tack on sign
2769 fsubd %f2,%f42,%f2 ! n
2784 add %l5,thresh+4,%o7
2789 fsubd %f4,%f2,%f0 ! x
2791 fands %f0,%f30,%f9 ! save signbit
2794 fsubd %f4,%f2,%f2 ! y
2795 fcmpgt32 %f6,%f0,%l0
2797 fands %f9,%f8,%f9 ! if (n & 1) clear sign bit
2802 fpadd32s %f0,%f31,%f8
2805 sethi %hi(0x3fc3c000),%o7
2853 add %l5,thresh-4,%g1
2859 fors %f6,%f9,%f6 ! tack on sign
2865 ! check for huge arguments remaining
2872 ! ========== huge range (use C code) ==========
2884 sra %o2,0,%o2 ! sign-extend for V9
2886 call __vlibm_vsin_big
2887 mov %l7,%o5 ! delay slot
2897 ble,pn %icc,.ENDLOOP0
2898 ! delay slot, harmless if branch taken
2899 add %i3,%i4,%i3 ! y += stridey
2900 andn %l1,%i5,%l0 ! hx &= ~0x80000000
2905 add %i1,%i2,%i1 ! x += stridex
2911 ble,pn %icc,.ENDLOOP1
2912 ! delay slot, harmless if branch taken
2913 add %i3,%i4,%i3 ! y += stridey
2914 andn %l2,%i5,%l1 ! hx &= ~0x80000000
2919 add %i1,%i2,%i1 ! x += stridex
2925 ble,pn %icc,.ENDLOOP2
2926 ! delay slot, harmless if branch taken
2927 add %i3,%i4,%i3 ! y += stridey
2931 andn %l2,%i5,%l2 ! hx &= ~0x80000000
2934 add %i1,%i2,%i1 ! x += stridex
2939 sethi %hi(0x7ff00000),%o7
2941 bl,a,pt %icc,1f ! if hx < 0x7ff00000
2942 ! delay slot, annulled if branch not taken
2943 mov %l7,LIM_l6 ! set biguns flag or
2944 fsubd %f0,%f0,%f0 ! y = x - x
2949 ble,pn %icc,.ENDLOOP0
2950 ! delay slot, harmless if branch taken
2951 andn %l1,%i5,%l0 ! hx &= ~0x80000000
2955 add %i1,%i2,%i1 ! x += stridex
2960 sethi %hi(0x7ff00000),%o7
2962 bl,a,pt %icc,1f ! if hx < 0x7ff00000
2963 ! delay slot, annulled if branch not taken
2964 mov %l7,LIM_l6 ! set biguns flag or
2965 fsubd %f10,%f10,%f10 ! y = x - x
2970 ble,pn %icc,.ENDLOOP1
2971 ! delay slot, harmless if branch taken
2972 andn %l2,%i5,%l1 ! hx &= ~0x80000000
2976 add %i1,%i2,%i1 ! x += stridex
2981 sethi %hi(0x7ff00000),%o7
2983 bl,a,pt %icc,1f ! if hx < 0x7ff00000
2984 ! delay slot, annulled if branch not taken
2985 mov %l7,LIM_l6 ! set biguns flag or
2986 fsubd %f20,%f20,%f20 ! y = x - x
2991 ble,pn %icc,.ENDLOOP2
2997 andn %l2,%i5,%l2 ! hx &= ~0x80000000
3000 add %i1,%i2,%i1 ! x += stridex