1/*
2 * CDDL HEADER START
3 *
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.
7 *
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.
12 *
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]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
23 */
24/*
25 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
26 * Use is subject to license terms.
27 */
28
29	.file	"__vcos_ultra3.S"
30
31#include "libm.h"
32	.weak	__vcos
33	.type	__vcos,#function
34	__vcos = __vcos_ultra3
35
36	RO_DATA
37	.align	64
38constants:
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
51
52! local storage indices
53
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
66#define tmps		0x40
67
68! register use
69
70! i0  n
71! i1  x
72! i2  stridex
73! i3  y
74! i4  stridey
75! i5  0x80000000
76
77! l0  hx0
78! l1  hx1
79! l2  hx2
80! l3  hx3
81! l4  k0
82! l5  k1
83! l6  k2
84! l7  k3
85
86! the following are 64-bit registers in both V8+ and V9
87
88! g1  __vlibm_TBL_sincos2
89! g5  scratch
90
91! o0  py0
92! o1  py1
93! o2  py2
94! o3  py3
95! o4  0x3e400000
96! o5  0x3fe921fb,0x4099251e
97! o7  scratch
98
99! f0  hx0
100! f2
101! f4
102! f6
103! f8  hx1
104! f10
105! f12
106! f14
107! f16 hx2
108! f18
109! f20
110! f22
111! f24 hx3
112! f26
113! f28
114! f30
115! f32
116! f34
117! f36
118! f38
119
120#define c3two44	%f40
121#define c3two51	%f42
122#define invpio2	%f44
123#define pio2_1	%f46
124#define pio2_2	%f48
125#define pio2_3	%f50
126#define pp1	%f52
127#define pp2	%f54
128#define pp3	%f56
129#define qq1	%f58
130#define qq2	%f60
131#define qq3	%f62
132
133	ENTRY(__vcos_ultra3)
134	save	%sp,-SA(MINFRAME)-tmps,%sp
135	PIC_SETUP(l7)
136	PIC_SET(l7,constants,o0)
137	PIC_SET(l7,__vlibm_TBL_sincos2,o1)
138	mov	%o1,%g1
139	wr	%g0,0x82,%asi		! set %asi for non-faulting loads
140#ifdef __sparcv9
141	stx	%i1,[%fp+xsave]		! save arguments
142	stx	%i3,[%fp+ysave]
143#else
144	st	%i1,[%fp+xsave]		! save arguments
145	st	%i3,[%fp+ysave]
146#endif
147	st	%i0,[%fp+nsave]
148	st	%i2,[%fp+sxsave]
149	st	%i4,[%fp+sysave]
150	st	%g0,[%fp+biguns]	! biguns = 0
151	ldd	[%o0+0x00],c3two44	! load/set up constants
152	ldd	[%o0+0x08],c3two51
153	ldd	[%o0+0x10],invpio2
154	ldd	[%o0+0x18],pio2_1
155	ldd	[%o0+0x20],pio2_2
156	ldd	[%o0+0x28],pio2_3
157	ldd	[%o0+0x30],pp1
158	ldd	[%o0+0x38],pp2
159	ldd	[%o0+0x40],pp3
160	ldd	[%o0+0x48],qq1
161	ldd	[%o0+0x50],qq2
162	ldd	[%o0+0x58],qq3
163	sethi	%hi(0x80000000),%i5
164	sethi	%hi(0x3e400000),%o4
165	sethi	%hi(0x3fe921fb),%o5
166	or	%o5,%lo(0x3fe921fb),%o5
167	sllx	%o5,32,%o5
168	sethi	%hi(0x4099251e),%o7
169	or	%o7,%lo(0x4099251e),%o7
170	or	%o5,%o7,%o5
171	sll	%i2,3,%i2		! scale strides
172	sll	%i4,3,%i4
173	add	%fp,junk,%o1		! loop prologue
174	add	%fp,junk,%o2
175	add	%fp,junk,%o3
176	ld	[%i1],%l0		! *x
177	ld	[%i1],%f0
178	ld	[%i1+4],%f3
179	andn	%l0,%i5,%l0		! mask off sign
180	add	%i1,%i2,%i1		! x += stridex
181	ba	.loop0
182	nop
183
184! 16-byte aligned
185	.align	16
186.loop0:
187	lda	[%i1]%asi,%l1		! preload next argument
188	sub	%l0,%o4,%g5
189	sub	%o5,%l0,%o7
190	fabss	%f0,%f2
191
192	lda	[%i1]%asi,%f8
193	orcc	%o7,%g5,%g0
194	mov	%i3,%o0			! py0 = y
195	bl,pn	%icc,.range0		! hx < 0x3e400000 or hx > 0x4099251e
196
197! delay slot
198	lda	[%i1+4]%asi,%f11
199	addcc	%i0,-1,%i0
200	add	%i3,%i4,%i3		! y += stridey
201	ble,pn	%icc,.last1
202
203! delay slot
204	andn	%l1,%i5,%l1
205	add	%i1,%i2,%i1		! x += stridex
206	faddd	%f2,c3two44,%f4
207	st	%f15,[%o1+4]
208
209.loop1:
210	lda	[%i1]%asi,%l2		! preload next argument
211	sub	%l1,%o4,%g5
212	sub	%o5,%l1,%o7
213	fabss	%f8,%f10
214
215	lda	[%i1]%asi,%f16
216	orcc	%o7,%g5,%g0
217	mov	%i3,%o1			! py1 = y
218	bl,pn	%icc,.range1		! hx < 0x3e400000 or hx > 0x4099251e
219
220! delay slot
221	lda	[%i1+4]%asi,%f19
222	addcc	%i0,-1,%i0
223	add	%i3,%i4,%i3		! y += stridey
224	ble,pn	%icc,.last2
225
226! delay slot
227	andn	%l2,%i5,%l2
228	add	%i1,%i2,%i1		! x += stridex
229	faddd	%f10,c3two44,%f12
230	st	%f23,[%o2+4]
231
232.loop2:
233	lda	[%i1]%asi,%l3		! preload next argument
234	sub	%l2,%o4,%g5
235	sub	%o5,%l2,%o7
236	fabss	%f16,%f18
237
238	lda	[%i1]%asi,%f24
239	orcc	%o7,%g5,%g0
240	mov	%i3,%o2			! py2 = y
241	bl,pn	%icc,.range2		! hx < 0x3e400000 or hx > 0x4099251e
242
243! delay slot
244	lda	[%i1+4]%asi,%f27
245	addcc	%i0,-1,%i0
246	add	%i3,%i4,%i3		! y += stridey
247	ble,pn	%icc,.last3
248
249! delay slot
250	andn	%l3,%i5,%l3
251	add	%i1,%i2,%i1		! x += stridex
252	faddd	%f18,c3two44,%f20
253	st	%f31,[%o3+4]
254
255.loop3:
256	sub	%l3,%o4,%g5
257	sub	%o5,%l3,%o7
258	fabss	%f24,%f26
259	st	%f5,[%fp+nk0]
260
261	orcc	%o7,%g5,%g0
262	mov	%i3,%o3			! py3 = y
263	bl,pn	%icc,.range3		! hx < 0x3e400000 or > hx 0x4099251e
264! delay slot
265	st	%f13,[%fp+nk1]
266
267!!! DONE?
268.cont:
269	srlx	%o5,32,%o7
270	add	%i3,%i4,%i3		! y += stridey
271	fmovs	%f3,%f1
272	st	%f21,[%fp+nk2]
273
274	sub	%o7,%l0,%l0
275	sub	%o7,%l1,%l1
276	faddd	%f26,c3two44,%f28
277	st	%f29,[%fp+nk3]
278
279	sub	%o7,%l2,%l2
280	sub	%o7,%l3,%l3
281	fmovs	%f11,%f9
282
283	or	%l0,%l1,%l0
284	or	%l2,%l3,%l2
285	fmovs	%f19,%f17
286
287	fmovs	%f27,%f25
288	fmuld	%f0,invpio2,%f6		! x * invpio2, for medium range
289
290	fmuld	%f8,invpio2,%f14
291	ld	[%fp+nk0],%l4
292
293	fmuld	%f16,invpio2,%f22
294	ld	[%fp+nk1],%l5
295
296	orcc	%l0,%l2,%g0
297	bl,pn	%icc,.medium
298! delay slot
299	fmuld	%f24,invpio2,%f30
300	ld	[%fp+nk2],%l6
301
302	ld	[%fp+nk3],%l7
303	sll	%l4,5,%l4		! k
304	fcmpd	%fcc0,%f0,pio2_3	! x < pio2_3 iff x < 0
305
306	sll	%l5,5,%l5
307	ldd	[%l4+%g1],%f4
308	fcmpd	%fcc1,%f8,pio2_3
309
310	sll	%l6,5,%l6
311	ldd	[%l5+%g1],%f12
312	fcmpd	%fcc2,%f16,pio2_3
313
314	sll	%l7,5,%l7
315	ldd	[%l6+%g1],%f20
316	fcmpd	%fcc3,%f24,pio2_3
317
318	ldd	[%l7+%g1],%f28
319	fsubd	%f2,%f4,%f2		! x -= __vlibm_TBL_sincos2[k]
320
321	fsubd	%f10,%f12,%f10
322
323	fsubd	%f18,%f20,%f18
324
325	fsubd	%f26,%f28,%f26
326
327	fmuld	%f2,%f2,%f0		! z = x * x
328
329	fmuld	%f10,%f10,%f8
330
331	fmuld	%f18,%f18,%f16
332
333	fmuld	%f26,%f26,%f24
334
335	fmuld	%f0,qq3,%f6
336
337	fmuld	%f8,qq3,%f14
338
339	fmuld	%f16,qq3,%f22
340
341	fmuld	%f24,qq3,%f30
342
343	faddd	%f6,qq2,%f6
344	fmuld	%f0,pp2,%f4
345
346	faddd	%f14,qq2,%f14
347	fmuld	%f8,pp2,%f12
348
349	faddd	%f22,qq2,%f22
350	fmuld	%f16,pp2,%f20
351
352	faddd	%f30,qq2,%f30
353	fmuld	%f24,pp2,%f28
354
355	fmuld	%f0,%f6,%f6
356	faddd	%f4,pp1,%f4
357
358	fmuld	%f8,%f14,%f14
359	faddd	%f12,pp1,%f12
360
361	fmuld	%f16,%f22,%f22
362	faddd	%f20,pp1,%f20
363
364	fmuld	%f24,%f30,%f30
365	faddd	%f28,pp1,%f28
366
367	faddd	%f6,qq1,%f6
368	fmuld	%f0,%f4,%f4
369	add	%l4,%g1,%l4
370
371	faddd	%f14,qq1,%f14
372	fmuld	%f8,%f12,%f12
373	add	%l5,%g1,%l5
374
375	faddd	%f22,qq1,%f22
376	fmuld	%f16,%f20,%f20
377	add	%l6,%g1,%l6
378
379	faddd	%f30,qq1,%f30
380	fmuld	%f24,%f28,%f28
381	add	%l7,%g1,%l7
382
383	fmuld	%f2,%f4,%f4
384
385	fmuld	%f10,%f12,%f12
386
387	fmuld	%f18,%f20,%f20
388
389	fmuld	%f26,%f28,%f28
390
391	fmuld	%f0,%f6,%f6
392	faddd	%f4,%f2,%f4
393	ldd	[%l4+16],%f32
394
395	fmuld	%f8,%f14,%f14
396	faddd	%f12,%f10,%f12
397	ldd	[%l5+16],%f34
398
399	fmuld	%f16,%f22,%f22
400	faddd	%f20,%f18,%f20
401	ldd	[%l6+16],%f36
402
403	fmuld	%f24,%f30,%f30
404	faddd	%f28,%f26,%f28
405	ldd	[%l7+16],%f38
406
407	fmuld	%f32,%f6,%f6
408	ldd	[%l4+8],%f2
409
410	fmuld	%f34,%f14,%f14
411	ldd	[%l5+8],%f10
412
413	fmuld	%f36,%f22,%f22
414	ldd	[%l6+8],%f18
415
416	fmuld	%f38,%f30,%f30
417	ldd	[%l7+8],%f26
418
419	fmuld	%f2,%f4,%f4
420
421	fmuld	%f10,%f12,%f12
422
423	fmuld	%f18,%f20,%f20
424
425	fmuld	%f26,%f28,%f28
426
427	fsubd	%f6,%f4,%f6
428	lda	[%i1]%asi,%l0		! preload next argument
429
430	fsubd	%f14,%f12,%f14
431	lda	[%i1]%asi,%f0
432
433	fsubd	%f22,%f20,%f22
434	lda	[%i1+4]%asi,%f3
435
436	fsubd	%f30,%f28,%f30
437	andn	%l0,%i5,%l0
438	add	%i1,%i2,%i1
439
440	faddd	%f6,%f32,%f6
441	st	%f6,[%o0]
442
443	faddd	%f14,%f34,%f14
444	st	%f14,[%o1]
445
446	faddd	%f22,%f36,%f22
447	st	%f22,[%o2]
448
449	faddd	%f30,%f38,%f30
450	st	%f30,[%o3]
451	addcc	%i0,-1,%i0
452
453	bg,pt	%icc,.loop0
454! delay slot
455	st	%f7,[%o0+4]
456
457	ba,pt	%icc,.end
458! delay slot
459	nop
460
461
462	.align	16
463.medium:
464	faddd	%f6,c3two51,%f4
465	st	%f5,[%fp+nk0]
466
467	faddd	%f14,c3two51,%f12
468	st	%f13,[%fp+nk1]
469
470	faddd	%f22,c3two51,%f20
471	st	%f21,[%fp+nk2]
472
473	faddd	%f30,c3two51,%f28
474	st	%f29,[%fp+nk3]
475
476	fsubd	%f4,c3two51,%f6
477
478	fsubd	%f12,c3two51,%f14
479
480	fsubd	%f20,c3two51,%f22
481
482	fsubd	%f28,c3two51,%f30
483
484	fmuld	%f6,pio2_1,%f2
485	ld	[%fp+nk0],%l0		! n
486
487	fmuld	%f14,pio2_1,%f10
488	ld	[%fp+nk1],%l1
489
490	fmuld	%f22,pio2_1,%f18
491	ld	[%fp+nk2],%l2
492
493	fmuld	%f30,pio2_1,%f26
494	ld	[%fp+nk3],%l3
495
496	fsubd	%f0,%f2,%f0
497	fmuld	%f6,pio2_2,%f4
498	add	%l0,1,%l0
499
500	fsubd	%f8,%f10,%f8
501	fmuld	%f14,pio2_2,%f12
502	add	%l1,1,%l1
503
504	fsubd	%f16,%f18,%f16
505	fmuld	%f22,pio2_2,%f20
506	add	%l2,1,%l2
507
508	fsubd	%f24,%f26,%f24
509	fmuld	%f30,pio2_2,%f28
510	add	%l3,1,%l3
511
512	fsubd	%f0,%f4,%f32
513
514	fsubd	%f8,%f12,%f34
515
516	fsubd	%f16,%f20,%f36
517
518	fsubd	%f24,%f28,%f38
519
520	fsubd	%f0,%f32,%f0
521	fcmple32 %f32,pio2_3,%l4	! x <= pio2_3 iff x < 0
522
523	fsubd	%f8,%f34,%f8
524	fcmple32 %f34,pio2_3,%l5
525
526	fsubd	%f16,%f36,%f16
527	fcmple32 %f36,pio2_3,%l6
528
529	fsubd	%f24,%f38,%f24
530	fcmple32 %f38,pio2_3,%l7
531
532	fsubd	%f0,%f4,%f0
533	fmuld	%f6,pio2_3,%f6
534	sll	%l4,30,%l4		! if (x < 0) n = -n ^ 2
535
536	fsubd	%f8,%f12,%f8
537	fmuld	%f14,pio2_3,%f14
538	sll	%l5,30,%l5
539
540	fsubd	%f16,%f20,%f16
541	fmuld	%f22,pio2_3,%f22
542	sll	%l6,30,%l6
543
544	fsubd	%f24,%f28,%f24
545	fmuld	%f30,pio2_3,%f30
546	sll	%l7,30,%l7
547
548	fsubd	%f6,%f0,%f6
549	sra	%l4,31,%l4
550
551	fsubd	%f14,%f8,%f14
552	sra	%l5,31,%l5
553
554	fsubd	%f22,%f16,%f22
555	sra	%l6,31,%l6
556
557	fsubd	%f30,%f24,%f30
558	sra	%l7,31,%l7
559
560	fsubd	%f32,%f6,%f0		! reduced x
561	xor	%l0,%l4,%l0
562
563	fsubd	%f34,%f14,%f8
564	xor	%l1,%l5,%l1
565
566	fsubd	%f36,%f22,%f16
567	xor	%l2,%l6,%l2
568
569	fsubd	%f38,%f30,%f24
570	xor	%l3,%l7,%l3
571
572	fabsd	%f0,%f2
573	sub	%l0,%l4,%l0
574
575	fabsd	%f8,%f10
576	sub	%l1,%l5,%l1
577
578	fabsd	%f16,%f18
579	sub	%l2,%l6,%l2
580
581	fabsd	%f24,%f26
582	sub	%l3,%l7,%l3
583
584	faddd	%f2,c3two44,%f4
585	st	%f5,[%fp+nk0]
586	and	%l4,2,%l4
587
588	faddd	%f10,c3two44,%f12
589	st	%f13,[%fp+nk1]
590	and	%l5,2,%l5
591
592	faddd	%f18,c3two44,%f20
593	st	%f21,[%fp+nk2]
594	and	%l6,2,%l6
595
596	faddd	%f26,c3two44,%f28
597	st	%f29,[%fp+nk3]
598	and	%l7,2,%l7
599
600	fsubd	%f32,%f0,%f4
601	xor	%l0,%l4,%l0
602
603	fsubd	%f34,%f8,%f12
604	xor	%l1,%l5,%l1
605
606	fsubd	%f36,%f16,%f20
607	xor	%l2,%l6,%l2
608
609	fsubd	%f38,%f24,%f28
610	xor	%l3,%l7,%l3
611
612	fzero	%f38
613	ld	[%fp+nk0],%l4
614
615	fsubd	%f4,%f6,%f6		! w
616	ld	[%fp+nk1],%l5
617
618	fsubd	%f12,%f14,%f14
619	ld	[%fp+nk2],%l6
620
621	fnegd	%f38,%f38
622	ld	[%fp+nk3],%l7
623	sll	%l4,5,%l4		! k
624
625	fsubd	%f20,%f22,%f22
626	sll	%l5,5,%l5
627
628	fsubd	%f28,%f30,%f30
629	sll	%l6,5,%l6
630
631	fand	%f0,%f38,%f32		! sign bit of x
632	ldd	[%l4+%g1],%f4
633	sll	%l7,5,%l7
634
635	fand	%f8,%f38,%f34
636	ldd	[%l5+%g1],%f12
637
638	fand	%f16,%f38,%f36
639	ldd	[%l6+%g1],%f20
640
641	fand	%f24,%f38,%f38
642	ldd	[%l7+%g1],%f28
643
644	fsubd	%f2,%f4,%f2		! x -= __vlibm_TBL_sincos2[k]
645
646	fsubd	%f10,%f12,%f10
647
648	fsubd	%f18,%f20,%f18
649	nop
650
651	fsubd	%f26,%f28,%f26
652	nop
653
654! 16-byte aligned
655	fmuld	%f2,%f2,%f0		! z = x * x
656	andcc	%l0,1,%g0
657	bz,pn	%icc,.case8
658! delay slot
659	fxor	%f6,%f32,%f32
660
661	fmuld	%f10,%f10,%f8
662	andcc	%l1,1,%g0
663	bz,pn	%icc,.case4
664! delay slot
665	fxor	%f14,%f34,%f34
666
667	fmuld	%f18,%f18,%f16
668	andcc	%l2,1,%g0
669	bz,pn	%icc,.case2
670! delay slot
671	fxor	%f22,%f36,%f36
672
673	fmuld	%f26,%f26,%f24
674	andcc	%l3,1,%g0
675	bz,pn	%icc,.case1
676! delay slot
677	fxor	%f30,%f38,%f38
678
679!.case0:
680	fmuld	%f0,qq3,%f6		! cos(x0)
681
682	fmuld	%f8,qq3,%f14		! cos(x1)
683
684	fmuld	%f16,qq3,%f22		! cos(x2)
685
686	fmuld	%f24,qq3,%f30		! cos(x3)
687
688	faddd	%f6,qq2,%f6
689	fmuld	%f0,pp2,%f4
690
691	faddd	%f14,qq2,%f14
692	fmuld	%f8,pp2,%f12
693
694	faddd	%f22,qq2,%f22
695	fmuld	%f16,pp2,%f20
696
697	faddd	%f30,qq2,%f30
698	fmuld	%f24,pp2,%f28
699
700	fmuld	%f0,%f6,%f6
701	faddd	%f4,pp1,%f4
702
703	fmuld	%f8,%f14,%f14
704	faddd	%f12,pp1,%f12
705
706	fmuld	%f16,%f22,%f22
707	faddd	%f20,pp1,%f20
708
709	fmuld	%f24,%f30,%f30
710	faddd	%f28,pp1,%f28
711
712	faddd	%f6,qq1,%f6
713	fmuld	%f0,%f4,%f4
714	add	%l4,%g1,%l4
715
716	faddd	%f14,qq1,%f14
717	fmuld	%f8,%f12,%f12
718	add	%l5,%g1,%l5
719
720	faddd	%f22,qq1,%f22
721	fmuld	%f16,%f20,%f20
722	add	%l6,%g1,%l6
723
724	faddd	%f30,qq1,%f30
725	fmuld	%f24,%f28,%f28
726	add	%l7,%g1,%l7
727
728	fmuld	%f2,%f4,%f4
729
730	fmuld	%f10,%f12,%f12
731
732	fmuld	%f18,%f20,%f20
733
734	fmuld	%f26,%f28,%f28
735
736	fmuld	%f0,%f6,%f6
737	faddd	%f4,%f32,%f4
738	ldd	[%l4+16],%f0
739
740	fmuld	%f8,%f14,%f14
741	faddd	%f12,%f34,%f12
742	ldd	[%l5+16],%f8
743
744	fmuld	%f16,%f22,%f22
745	faddd	%f20,%f36,%f20
746	ldd	[%l6+16],%f16
747
748	fmuld	%f24,%f30,%f30
749	faddd	%f28,%f38,%f28
750	ldd	[%l7+16],%f24
751
752	fmuld	%f0,%f6,%f6
753	faddd	%f4,%f2,%f4
754	ldd	[%l4+8],%f32
755
756	fmuld	%f8,%f14,%f14
757	faddd	%f12,%f10,%f12
758	ldd	[%l5+8],%f34
759
760	fmuld	%f16,%f22,%f22
761	faddd	%f20,%f18,%f20
762	ldd	[%l6+8],%f36
763
764	fmuld	%f24,%f30,%f30
765	faddd	%f28,%f26,%f28
766	ldd	[%l7+8],%f38
767
768	fmuld	%f32,%f4,%f4
769
770	fmuld	%f34,%f12,%f12
771
772	fmuld	%f36,%f20,%f20
773
774	fmuld	%f38,%f28,%f28
775
776	fsubd	%f6,%f4,%f6
777
778	fsubd	%f14,%f12,%f14
779
780	fsubd	%f22,%f20,%f22
781
782	fsubd	%f30,%f28,%f30
783
784	faddd	%f6,%f0,%f6
785
786	faddd	%f14,%f8,%f14
787
788	faddd	%f22,%f16,%f22
789
790	faddd	%f30,%f24,%f30
791	mov	%l0,%l4
792
793	fnegd	%f6,%f4
794	lda	[%i1]%asi,%l0		! preload next argument
795
796	fnegd	%f14,%f12
797	lda	[%i1]%asi,%f0
798
799	fnegd	%f22,%f20
800	lda	[%i1+4]%asi,%f3
801
802	fnegd	%f30,%f28
803	andn	%l0,%i5,%l0
804	add	%i1,%i2,%i1
805
806	andcc	%l4,2,%g0
807	fmovdnz	%icc,%f4,%f6
808	st	%f6,[%o0]
809
810	andcc	%l1,2,%g0
811	fmovdnz	%icc,%f12,%f14
812	st	%f14,[%o1]
813
814	andcc	%l2,2,%g0
815	fmovdnz	%icc,%f20,%f22
816	st	%f22,[%o2]
817
818	andcc	%l3,2,%g0
819	fmovdnz	%icc,%f28,%f30
820	st	%f30,[%o3]
821
822	addcc	%i0,-1,%i0
823	bg,pt	%icc,.loop0
824! delay slot
825	st	%f7,[%o0+4]
826
827	ba,pt	%icc,.end
828! delay slot
829	nop
830
831	.align	16
832.case1:
833	fmuld	%f24,pp3,%f30		! sin(x3)
834
835	fmuld	%f0,qq3,%f6		! cos(x0)
836
837	fmuld	%f8,qq3,%f14		! cos(x1)
838
839	fmuld	%f16,qq3,%f22		! cos(x2)
840
841	faddd	%f30,pp2,%f30
842	fmuld	%f24,qq2,%f28
843
844	faddd	%f6,qq2,%f6
845	fmuld	%f0,pp2,%f4
846
847	faddd	%f14,qq2,%f14
848	fmuld	%f8,pp2,%f12
849
850	faddd	%f22,qq2,%f22
851	fmuld	%f16,pp2,%f20
852
853	fmuld	%f24,%f30,%f30
854	faddd	%f28,qq1,%f28
855
856	fmuld	%f0,%f6,%f6
857	faddd	%f4,pp1,%f4
858
859	fmuld	%f8,%f14,%f14
860	faddd	%f12,pp1,%f12
861
862	fmuld	%f16,%f22,%f22
863	faddd	%f20,pp1,%f20
864
865	faddd	%f30,pp1,%f30
866	fmuld	%f24,%f28,%f28
867	add	%l7,%g1,%l7
868
869	faddd	%f6,qq1,%f6
870	fmuld	%f0,%f4,%f4
871	add	%l4,%g1,%l4
872
873	faddd	%f14,qq1,%f14
874	fmuld	%f8,%f12,%f12
875	add	%l5,%g1,%l5
876
877	faddd	%f22,qq1,%f22
878	fmuld	%f16,%f20,%f20
879	add	%l6,%g1,%l6
880
881	fmuld	%f24,%f30,%f30
882
883	fmuld	%f2,%f4,%f4
884
885	fmuld	%f10,%f12,%f12
886
887	fmuld	%f18,%f20,%f20
888
889	fmuld	%f26,%f30,%f30
890	ldd	[%l7+8],%f24
891
892	fmuld	%f0,%f6,%f6
893	faddd	%f4,%f32,%f4
894	ldd	[%l4+16],%f0
895
896	fmuld	%f8,%f14,%f14
897	faddd	%f12,%f34,%f12
898	ldd	[%l5+16],%f8
899
900	fmuld	%f16,%f22,%f22
901	faddd	%f20,%f36,%f20
902	ldd	[%l6+16],%f16
903
904	fmuld	%f24,%f28,%f28
905	faddd	%f38,%f30,%f30
906
907	fmuld	%f0,%f6,%f6
908	faddd	%f4,%f2,%f4
909	ldd	[%l4+8],%f32
910
911	fmuld	%f8,%f14,%f14
912	faddd	%f12,%f10,%f12
913	ldd	[%l5+8],%f34
914
915	fmuld	%f16,%f22,%f22
916	faddd	%f20,%f18,%f20
917	ldd	[%l6+8],%f36
918
919	faddd	%f26,%f30,%f30
920	ldd	[%l7+16],%f38
921
922	fmuld	%f32,%f4,%f4
923
924	fmuld	%f34,%f12,%f12
925
926	fmuld	%f36,%f20,%f20
927
928	fmuld	%f38,%f30,%f30
929
930	fsubd	%f6,%f4,%f6
931
932	fsubd	%f14,%f12,%f14
933
934	fsubd	%f22,%f20,%f22
935
936	faddd	%f30,%f28,%f30
937
938	faddd	%f6,%f0,%f6
939
940	faddd	%f14,%f8,%f14
941
942	faddd	%f22,%f16,%f22
943
944	faddd	%f30,%f24,%f30
945	mov	%l0,%l4
946
947	fnegd	%f6,%f4
948	lda	[%i1]%asi,%l0		! preload next argument
949
950	fnegd	%f14,%f12
951	lda	[%i1]%asi,%f0
952
953	fnegd	%f22,%f20
954	lda	[%i1+4]%asi,%f3
955
956	fnegd	%f30,%f28
957	andn	%l0,%i5,%l0
958	add	%i1,%i2,%i1
959
960	andcc	%l4,2,%g0
961	fmovdnz	%icc,%f4,%f6
962	st	%f6,[%o0]
963
964	andcc	%l1,2,%g0
965	fmovdnz	%icc,%f12,%f14
966	st	%f14,[%o1]
967
968	andcc	%l2,2,%g0
969	fmovdnz	%icc,%f20,%f22
970	st	%f22,[%o2]
971
972	andcc	%l3,2,%g0
973	fmovdnz	%icc,%f28,%f30
974	st	%f30,[%o3]
975
976	addcc	%i0,-1,%i0
977	bg,pt	%icc,.loop0
978! delay slot
979	st	%f7,[%o0+4]
980
981	ba,pt	%icc,.end
982! delay slot
983	nop
984
985	.align	16
986.case2:
987	fmuld	%f26,%f26,%f24
988	andcc	%l3,1,%g0
989	bz,pn	%icc,.case3
990! delay slot
991	fxor	%f30,%f38,%f38
992
993	fmuld	%f16,pp3,%f22		! sin(x2)
994
995	fmuld	%f0,qq3,%f6		! cos(x0)
996
997	fmuld	%f8,qq3,%f14		! cos(x1)
998
999	faddd	%f22,pp2,%f22
1000	fmuld	%f16,qq2,%f20
1001
1002	fmuld	%f24,qq3,%f30		! cos(x3)
1003
1004	faddd	%f6,qq2,%f6
1005	fmuld	%f0,pp2,%f4
1006
1007	faddd	%f14,qq2,%f14
1008	fmuld	%f8,pp2,%f12
1009
1010	fmuld	%f16,%f22,%f22
1011	faddd	%f20,qq1,%f20
1012
1013	faddd	%f30,qq2,%f30
1014	fmuld	%f24,pp2,%f28
1015
1016	fmuld	%f0,%f6,%f6
1017	faddd	%f4,pp1,%f4
1018
1019	fmuld	%f8,%f14,%f14
1020	faddd	%f12,pp1,%f12
1021
1022	faddd	%f22,pp1,%f22
1023	fmuld	%f16,%f20,%f20
1024	add	%l6,%g1,%l6
1025
1026	fmuld	%f24,%f30,%f30
1027	faddd	%f28,pp1,%f28
1028
1029	faddd	%f6,qq1,%f6
1030	fmuld	%f0,%f4,%f4
1031	add	%l4,%g1,%l4
1032
1033	faddd	%f14,qq1,%f14
1034	fmuld	%f8,%f12,%f12
1035	add	%l5,%g1,%l5
1036
1037	fmuld	%f16,%f22,%f22
1038
1039	faddd	%f30,qq1,%f30
1040	fmuld	%f24,%f28,%f28
1041	add	%l7,%g1,%l7
1042
1043	fmuld	%f2,%f4,%f4
1044
1045	fmuld	%f10,%f12,%f12
1046
1047	fmuld	%f18,%f22,%f22
1048	ldd	[%l6+8],%f16
1049
1050	fmuld	%f26,%f28,%f28
1051
1052	fmuld	%f0,%f6,%f6
1053	faddd	%f4,%f32,%f4
1054	ldd	[%l4+16],%f0
1055
1056	fmuld	%f8,%f14,%f14
1057	faddd	%f12,%f34,%f12
1058	ldd	[%l5+16],%f8
1059
1060	fmuld	%f16,%f20,%f20
1061	faddd	%f36,%f22,%f22
1062
1063	fmuld	%f24,%f30,%f30
1064	faddd	%f28,%f38,%f28
1065	ldd	[%l7+16],%f24
1066
1067	fmuld	%f0,%f6,%f6
1068	faddd	%f4,%f2,%f4
1069	ldd	[%l4+8],%f32
1070
1071	fmuld	%f8,%f14,%f14
1072	faddd	%f12,%f10,%f12
1073	ldd	[%l5+8],%f34
1074
1075	faddd	%f18,%f22,%f22
1076	ldd	[%l6+16],%f36
1077
1078	fmuld	%f24,%f30,%f30
1079	faddd	%f28,%f26,%f28
1080	ldd	[%l7+8],%f38
1081
1082	fmuld	%f32,%f4,%f4
1083
1084	fmuld	%f34,%f12,%f12
1085
1086	fmuld	%f36,%f22,%f22
1087
1088	fmuld	%f38,%f28,%f28
1089
1090	fsubd	%f6,%f4,%f6
1091
1092	fsubd	%f14,%f12,%f14
1093
1094	faddd	%f22,%f20,%f22
1095
1096	fsubd	%f30,%f28,%f30
1097
1098	faddd	%f6,%f0,%f6
1099
1100	faddd	%f14,%f8,%f14
1101
1102	faddd	%f22,%f16,%f22
1103
1104	faddd	%f30,%f24,%f30
1105	mov	%l0,%l4
1106
1107	fnegd	%f6,%f4
1108	lda	[%i1]%asi,%l0		! preload next argument
1109
1110	fnegd	%f14,%f12
1111	lda	[%i1]%asi,%f0
1112
1113	fnegd	%f22,%f20
1114	lda	[%i1+4]%asi,%f3
1115
1116	fnegd	%f30,%f28
1117	andn	%l0,%i5,%l0
1118	add	%i1,%i2,%i1
1119
1120	andcc	%l4,2,%g0
1121	fmovdnz	%icc,%f4,%f6
1122	st	%f6,[%o0]
1123
1124	andcc	%l1,2,%g0
1125	fmovdnz	%icc,%f12,%f14
1126	st	%f14,[%o1]
1127
1128	andcc	%l2,2,%g0
1129	fmovdnz	%icc,%f20,%f22
1130	st	%f22,[%o2]
1131
1132	andcc	%l3,2,%g0
1133	fmovdnz	%icc,%f28,%f30
1134	st	%f30,[%o3]
1135
1136	addcc	%i0,-1,%i0
1137	bg,pt	%icc,.loop0
1138! delay slot
1139	st	%f7,[%o0+4]
1140
1141	ba,pt	%icc,.end
1142! delay slot
1143	nop
1144
1145	.align	16
1146.case3:
1147	fmuld	%f16,pp3,%f22		! sin(x2)
1148
1149	fmuld	%f24,pp3,%f30		! sin(x3)
1150
1151	fmuld	%f0,qq3,%f6		! cos(x0)
1152
1153	fmuld	%f8,qq3,%f14		! cos(x1)
1154
1155	faddd	%f22,pp2,%f22
1156	fmuld	%f16,qq2,%f20
1157
1158	faddd	%f30,pp2,%f30
1159	fmuld	%f24,qq2,%f28
1160
1161	faddd	%f6,qq2,%f6
1162	fmuld	%f0,pp2,%f4
1163
1164	faddd	%f14,qq2,%f14
1165	fmuld	%f8,pp2,%f12
1166
1167	fmuld	%f16,%f22,%f22
1168	faddd	%f20,qq1,%f20
1169
1170	fmuld	%f24,%f30,%f30
1171	faddd	%f28,qq1,%f28
1172
1173	fmuld	%f0,%f6,%f6
1174	faddd	%f4,pp1,%f4
1175
1176	fmuld	%f8,%f14,%f14
1177	faddd	%f12,pp1,%f12
1178
1179	faddd	%f22,pp1,%f22
1180	fmuld	%f16,%f20,%f20
1181	add	%l6,%g1,%l6
1182
1183	faddd	%f30,pp1,%f30
1184	fmuld	%f24,%f28,%f28
1185	add	%l7,%g1,%l7
1186
1187	faddd	%f6,qq1,%f6
1188	fmuld	%f0,%f4,%f4
1189	add	%l4,%g1,%l4
1190
1191	faddd	%f14,qq1,%f14
1192	fmuld	%f8,%f12,%f12
1193	add	%l5,%g1,%l5
1194
1195	fmuld	%f16,%f22,%f22
1196
1197	fmuld	%f24,%f30,%f30
1198
1199	fmuld	%f2,%f4,%f4
1200
1201	fmuld	%f10,%f12,%f12
1202
1203	fmuld	%f18,%f22,%f22
1204	ldd	[%l6+8],%f16
1205
1206	fmuld	%f26,%f30,%f30
1207	ldd	[%l7+8],%f24
1208
1209	fmuld	%f0,%f6,%f6
1210	faddd	%f4,%f32,%f4
1211	ldd	[%l4+16],%f0
1212
1213	fmuld	%f8,%f14,%f14
1214	faddd	%f12,%f34,%f12
1215	ldd	[%l5+16],%f8
1216
1217	fmuld	%f16,%f20,%f20
1218	faddd	%f36,%f22,%f22
1219
1220	fmuld	%f24,%f28,%f28
1221	faddd	%f38,%f30,%f30
1222
1223	fmuld	%f0,%f6,%f6
1224	faddd	%f4,%f2,%f4
1225	ldd	[%l4+8],%f32
1226
1227	fmuld	%f8,%f14,%f14
1228	faddd	%f12,%f10,%f12
1229	ldd	[%l5+8],%f34
1230
1231	faddd	%f18,%f22,%f22
1232	ldd	[%l6+16],%f36
1233
1234	faddd	%f26,%f30,%f30
1235	ldd	[%l7+16],%f38
1236
1237	fmuld	%f32,%f4,%f4
1238
1239	fmuld	%f34,%f12,%f12
1240
1241	fmuld	%f36,%f22,%f22
1242
1243	fmuld	%f38,%f30,%f30
1244
1245	fsubd	%f6,%f4,%f6
1246
1247	fsubd	%f14,%f12,%f14
1248
1249	faddd	%f22,%f20,%f22
1250
1251	faddd	%f30,%f28,%f30
1252
1253	faddd	%f6,%f0,%f6
1254
1255	faddd	%f14,%f8,%f14
1256
1257	faddd	%f22,%f16,%f22
1258
1259	faddd	%f30,%f24,%f30
1260	mov	%l0,%l4
1261
1262	fnegd	%f6,%f4
1263	lda	[%i1]%asi,%l0		! preload next argument
1264
1265	fnegd	%f14,%f12
1266	lda	[%i1]%asi,%f0
1267
1268	fnegd	%f22,%f20
1269	lda	[%i1+4]%asi,%f3
1270
1271	fnegd	%f30,%f28
1272	andn	%l0,%i5,%l0
1273	add	%i1,%i2,%i1
1274
1275	andcc	%l4,2,%g0
1276	fmovdnz	%icc,%f4,%f6
1277	st	%f6,[%o0]
1278
1279	andcc	%l1,2,%g0
1280	fmovdnz	%icc,%f12,%f14
1281	st	%f14,[%o1]
1282
1283	andcc	%l2,2,%g0
1284	fmovdnz	%icc,%f20,%f22
1285	st	%f22,[%o2]
1286
1287	andcc	%l3,2,%g0
1288	fmovdnz	%icc,%f28,%f30
1289	st	%f30,[%o3]
1290
1291	addcc	%i0,-1,%i0
1292	bg,pt	%icc,.loop0
1293! delay slot
1294	st	%f7,[%o0+4]
1295
1296	ba,pt	%icc,.end
1297! delay slot
1298	nop
1299
1300	.align	16
1301.case4:
1302	fmuld	%f18,%f18,%f16
1303	andcc	%l2,1,%g0
1304	bz,pn	%icc,.case6
1305! delay slot
1306	fxor	%f22,%f36,%f36
1307
1308	fmuld	%f26,%f26,%f24
1309	andcc	%l3,1,%g0
1310	bz,pn	%icc,.case5
1311! delay slot
1312	fxor	%f30,%f38,%f38
1313
1314	fmuld	%f8,pp3,%f14		! sin(x1)
1315
1316	fmuld	%f0,qq3,%f6		! cos(x0)
1317
1318	faddd	%f14,pp2,%f14
1319	fmuld	%f8,qq2,%f12
1320
1321	fmuld	%f16,qq3,%f22		! cos(x2)
1322
1323	fmuld	%f24,qq3,%f30		! cos(x3)
1324
1325	faddd	%f6,qq2,%f6
1326	fmuld	%f0,pp2,%f4
1327
1328	fmuld	%f8,%f14,%f14
1329	faddd	%f12,qq1,%f12
1330
1331	faddd	%f22,qq2,%f22
1332	fmuld	%f16,pp2,%f20
1333
1334	faddd	%f30,qq2,%f30
1335	fmuld	%f24,pp2,%f28
1336
1337	fmuld	%f0,%f6,%f6
1338	faddd	%f4,pp1,%f4
1339
1340	faddd	%f14,pp1,%f14
1341	fmuld	%f8,%f12,%f12
1342	add	%l5,%g1,%l5
1343
1344	fmuld	%f16,%f22,%f22
1345	faddd	%f20,pp1,%f20
1346
1347	fmuld	%f24,%f30,%f30
1348	faddd	%f28,pp1,%f28
1349
1350	faddd	%f6,qq1,%f6
1351	fmuld	%f0,%f4,%f4
1352	add	%l4,%g1,%l4
1353
1354	fmuld	%f8,%f14,%f14
1355
1356	faddd	%f22,qq1,%f22
1357	fmuld	%f16,%f20,%f20
1358	add	%l6,%g1,%l6
1359
1360	faddd	%f30,qq1,%f30
1361	fmuld	%f24,%f28,%f28
1362	add	%l7,%g1,%l7
1363
1364	fmuld	%f2,%f4,%f4
1365
1366	fmuld	%f10,%f14,%f14
1367	ldd	[%l5+8],%f8
1368
1369	fmuld	%f18,%f20,%f20
1370
1371	fmuld	%f26,%f28,%f28
1372
1373	fmuld	%f0,%f6,%f6
1374	faddd	%f4,%f32,%f4
1375	ldd	[%l4+16],%f0
1376
1377	fmuld	%f8,%f12,%f12
1378	faddd	%f34,%f14,%f14
1379
1380	fmuld	%f16,%f22,%f22
1381	faddd	%f20,%f36,%f20
1382	ldd	[%l6+16],%f16
1383
1384	fmuld	%f24,%f30,%f30
1385	faddd	%f28,%f38,%f28
1386	ldd	[%l7+16],%f24
1387
1388	fmuld	%f0,%f6,%f6
1389	faddd	%f4,%f2,%f4
1390	ldd	[%l4+8],%f32
1391
1392	faddd	%f10,%f14,%f14
1393	ldd	[%l5+16],%f34
1394
1395	fmuld	%f16,%f22,%f22
1396	faddd	%f20,%f18,%f20
1397	ldd	[%l6+8],%f36
1398
1399	fmuld	%f24,%f30,%f30
1400	faddd	%f28,%f26,%f28
1401	ldd	[%l7+8],%f38
1402
1403	fmuld	%f32,%f4,%f4
1404
1405	fmuld	%f34,%f14,%f14
1406
1407	fmuld	%f36,%f20,%f20
1408
1409	fmuld	%f38,%f28,%f28
1410
1411	fsubd	%f6,%f4,%f6
1412
1413	faddd	%f14,%f12,%f14
1414
1415	fsubd	%f22,%f20,%f22
1416
1417	fsubd	%f30,%f28,%f30
1418
1419	faddd	%f6,%f0,%f6
1420
1421	faddd	%f14,%f8,%f14
1422
1423	faddd	%f22,%f16,%f22
1424
1425	faddd	%f30,%f24,%f30
1426	mov	%l0,%l4
1427
1428	fnegd	%f6,%f4
1429	lda	[%i1]%asi,%l0		! preload next argument
1430
1431	fnegd	%f14,%f12
1432	lda	[%i1]%asi,%f0
1433
1434	fnegd	%f22,%f20
1435	lda	[%i1+4]%asi,%f3
1436
1437	fnegd	%f30,%f28
1438	andn	%l0,%i5,%l0
1439	add	%i1,%i2,%i1
1440
1441	andcc	%l4,2,%g0
1442	fmovdnz	%icc,%f4,%f6
1443	st	%f6,[%o0]
1444
1445	andcc	%l1,2,%g0
1446	fmovdnz	%icc,%f12,%f14
1447	st	%f14,[%o1]
1448
1449	andcc	%l2,2,%g0
1450	fmovdnz	%icc,%f20,%f22
1451	st	%f22,[%o2]
1452
1453	andcc	%l3,2,%g0
1454	fmovdnz	%icc,%f28,%f30
1455	st	%f30,[%o3]
1456
1457	addcc	%i0,-1,%i0
1458	bg,pt	%icc,.loop0
1459! delay slot
1460	st	%f7,[%o0+4]
1461
1462	ba,pt	%icc,.end
1463! delay slot
1464	nop
1465
1466	.align	16
1467.case5:
1468	fmuld	%f8,pp3,%f14		! sin(x1)
1469
1470	fmuld	%f24,pp3,%f30		! sin(x3)
1471
1472	fmuld	%f0,qq3,%f6		! cos(x0)
1473
1474	faddd	%f14,pp2,%f14
1475	fmuld	%f8,qq2,%f12
1476
1477	fmuld	%f16,qq3,%f22		! cos(x2)
1478
1479	faddd	%f30,pp2,%f30
1480	fmuld	%f24,qq2,%f28
1481
1482	faddd	%f6,qq2,%f6
1483	fmuld	%f0,pp2,%f4
1484
1485	fmuld	%f8,%f14,%f14
1486	faddd	%f12,qq1,%f12
1487
1488	faddd	%f22,qq2,%f22
1489	fmuld	%f16,pp2,%f20
1490
1491	fmuld	%f24,%f30,%f30
1492	faddd	%f28,qq1,%f28
1493
1494	fmuld	%f0,%f6,%f6
1495	faddd	%f4,pp1,%f4
1496
1497	faddd	%f14,pp1,%f14
1498	fmuld	%f8,%f12,%f12
1499	add	%l5,%g1,%l5
1500
1501	fmuld	%f16,%f22,%f22
1502	faddd	%f20,pp1,%f20
1503
1504	faddd	%f30,pp1,%f30
1505	fmuld	%f24,%f28,%f28
1506	add	%l7,%g1,%l7
1507
1508	faddd	%f6,qq1,%f6
1509	fmuld	%f0,%f4,%f4
1510	add	%l4,%g1,%l4
1511
1512	fmuld	%f8,%f14,%f14
1513
1514	faddd	%f22,qq1,%f22
1515	fmuld	%f16,%f20,%f20
1516	add	%l6,%g1,%l6
1517
1518	fmuld	%f24,%f30,%f30
1519
1520	fmuld	%f2,%f4,%f4
1521
1522	fmuld	%f10,%f14,%f14
1523	ldd	[%l5+8],%f8
1524
1525	fmuld	%f18,%f20,%f20
1526
1527	fmuld	%f26,%f30,%f30
1528	ldd	[%l7+8],%f24
1529
1530	fmuld	%f0,%f6,%f6
1531	faddd	%f4,%f32,%f4
1532	ldd	[%l4+16],%f0
1533
1534	fmuld	%f8,%f12,%f12
1535	faddd	%f34,%f14,%f14
1536
1537	fmuld	%f16,%f22,%f22
1538	faddd	%f20,%f36,%f20
1539	ldd	[%l6+16],%f16
1540
1541	fmuld	%f24,%f28,%f28
1542	faddd	%f38,%f30,%f30
1543
1544	fmuld	%f0,%f6,%f6
1545	faddd	%f4,%f2,%f4
1546	ldd	[%l4+8],%f32
1547
1548	faddd	%f10,%f14,%f14
1549	ldd	[%l5+16],%f34
1550
1551	fmuld	%f16,%f22,%f22
1552	faddd	%f20,%f18,%f20
1553	ldd	[%l6+8],%f36
1554
1555	faddd	%f26,%f30,%f30
1556	ldd	[%l7+16],%f38
1557
1558	fmuld	%f32,%f4,%f4
1559
1560	fmuld	%f34,%f14,%f14
1561
1562	fmuld	%f36,%f20,%f20
1563
1564	fmuld	%f38,%f30,%f30
1565
1566	fsubd	%f6,%f4,%f6
1567
1568	faddd	%f14,%f12,%f14
1569
1570	fsubd	%f22,%f20,%f22
1571
1572	faddd	%f30,%f28,%f30
1573
1574	faddd	%f6,%f0,%f6
1575
1576	faddd	%f14,%f8,%f14
1577
1578	faddd	%f22,%f16,%f22
1579
1580	faddd	%f30,%f24,%f30
1581	mov	%l0,%l4
1582
1583	fnegd	%f6,%f4
1584	lda	[%i1]%asi,%l0		! preload next argument
1585
1586	fnegd	%f14,%f12
1587	lda	[%i1]%asi,%f0
1588
1589	fnegd	%f22,%f20
1590	lda	[%i1+4]%asi,%f3
1591
1592	fnegd	%f30,%f28
1593	andn	%l0,%i5,%l0
1594	add	%i1,%i2,%i1
1595
1596	andcc	%l4,2,%g0
1597	fmovdnz	%icc,%f4,%f6
1598	st	%f6,[%o0]
1599
1600	andcc	%l1,2,%g0
1601	fmovdnz	%icc,%f12,%f14
1602	st	%f14,[%o1]
1603
1604	andcc	%l2,2,%g0
1605	fmovdnz	%icc,%f20,%f22
1606	st	%f22,[%o2]
1607
1608	andcc	%l3,2,%g0
1609	fmovdnz	%icc,%f28,%f30
1610	st	%f30,[%o3]
1611
1612	addcc	%i0,-1,%i0
1613	bg,pt	%icc,.loop0
1614! delay slot
1615	st	%f7,[%o0+4]
1616
1617	ba,pt	%icc,.end
1618! delay slot
1619	nop
1620
1621	.align	16
1622.case6:
1623	fmuld	%f26,%f26,%f24
1624	andcc	%l3,1,%g0
1625	bz,pn	%icc,.case7
1626! delay slot
1627	fxor	%f30,%f38,%f38
1628
1629	fmuld	%f8,pp3,%f14		! sin(x1)
1630
1631	fmuld	%f16,pp3,%f22		! sin(x2)
1632
1633	fmuld	%f0,qq3,%f6		! cos(x0)
1634
1635	faddd	%f14,pp2,%f14
1636	fmuld	%f8,qq2,%f12
1637
1638	faddd	%f22,pp2,%f22
1639	fmuld	%f16,qq2,%f20
1640
1641	fmuld	%f24,qq3,%f30		! cos(x3)
1642
1643	faddd	%f6,qq2,%f6
1644	fmuld	%f0,pp2,%f4
1645
1646	fmuld	%f8,%f14,%f14
1647	faddd	%f12,qq1,%f12
1648
1649	fmuld	%f16,%f22,%f22
1650	faddd	%f20,qq1,%f20
1651
1652	faddd	%f30,qq2,%f30
1653	fmuld	%f24,pp2,%f28
1654
1655	fmuld	%f0,%f6,%f6
1656	faddd	%f4,pp1,%f4
1657
1658	faddd	%f14,pp1,%f14
1659	fmuld	%f8,%f12,%f12
1660	add	%l5,%g1,%l5
1661
1662	faddd	%f22,pp1,%f22
1663	fmuld	%f16,%f20,%f20
1664	add	%l6,%g1,%l6
1665
1666	fmuld	%f24,%f30,%f30
1667	faddd	%f28,pp1,%f28
1668
1669	faddd	%f6,qq1,%f6
1670	fmuld	%f0,%f4,%f4
1671	add	%l4,%g1,%l4
1672
1673	fmuld	%f8,%f14,%f14
1674
1675	fmuld	%f16,%f22,%f22
1676
1677	faddd	%f30,qq1,%f30
1678	fmuld	%f24,%f28,%f28
1679	add	%l7,%g1,%l7
1680
1681	fmuld	%f2,%f4,%f4
1682
1683	fmuld	%f10,%f14,%f14
1684	ldd	[%l5+8],%f8
1685
1686	fmuld	%f18,%f22,%f22
1687	ldd	[%l6+8],%f16
1688
1689	fmuld	%f26,%f28,%f28
1690
1691	fmuld	%f0,%f6,%f6
1692	faddd	%f4,%f32,%f4
1693	ldd	[%l4+16],%f0
1694
1695	fmuld	%f8,%f12,%f12
1696	faddd	%f34,%f14,%f14
1697
1698	fmuld	%f16,%f20,%f20
1699	faddd	%f36,%f22,%f22
1700
1701	fmuld	%f24,%f30,%f30
1702	faddd	%f28,%f38,%f28
1703	ldd	[%l7+16],%f24
1704
1705	fmuld	%f0,%f6,%f6
1706	faddd	%f4,%f2,%f4
1707	ldd	[%l4+8],%f32
1708
1709	faddd	%f10,%f14,%f14
1710	ldd	[%l5+16],%f34
1711
1712	faddd	%f18,%f22,%f22
1713	ldd	[%l6+16],%f36
1714
1715	fmuld	%f24,%f30,%f30
1716	faddd	%f28,%f26,%f28
1717	ldd	[%l7+8],%f38
1718
1719	fmuld	%f32,%f4,%f4
1720
1721	fmuld	%f34,%f14,%f14
1722
1723	fmuld	%f36,%f22,%f22
1724
1725	fmuld	%f38,%f28,%f28
1726
1727	fsubd	%f6,%f4,%f6
1728
1729	faddd	%f14,%f12,%f14
1730
1731	faddd	%f22,%f20,%f22
1732
1733	fsubd	%f30,%f28,%f30
1734
1735	faddd	%f6,%f0,%f6
1736
1737	faddd	%f14,%f8,%f14
1738
1739	faddd	%f22,%f16,%f22
1740
1741	faddd	%f30,%f24,%f30
1742	mov	%l0,%l4
1743
1744	fnegd	%f6,%f4
1745	lda	[%i1]%asi,%l0		! preload next argument
1746
1747	fnegd	%f14,%f12
1748	lda	[%i1]%asi,%f0
1749
1750	fnegd	%f22,%f20
1751	lda	[%i1+4]%asi,%f3
1752
1753	fnegd	%f30,%f28
1754	andn	%l0,%i5,%l0
1755	add	%i1,%i2,%i1
1756
1757	andcc	%l4,2,%g0
1758	fmovdnz	%icc,%f4,%f6
1759	st	%f6,[%o0]
1760
1761	andcc	%l1,2,%g0
1762	fmovdnz	%icc,%f12,%f14
1763	st	%f14,[%o1]
1764
1765	andcc	%l2,2,%g0
1766	fmovdnz	%icc,%f20,%f22
1767	st	%f22,[%o2]
1768
1769	andcc	%l3,2,%g0
1770	fmovdnz	%icc,%f28,%f30
1771	st	%f30,[%o3]
1772
1773	addcc	%i0,-1,%i0
1774	bg,pt	%icc,.loop0
1775! delay slot
1776	st	%f7,[%o0+4]
1777
1778	ba,pt	%icc,.end
1779! delay slot
1780	nop
1781
1782	.align	16
1783.case7:
1784	fmuld	%f8,pp3,%f14		! sin(x1)
1785
1786	fmuld	%f16,pp3,%f22		! sin(x2)
1787
1788	fmuld	%f24,pp3,%f30		! sin(x3)
1789
1790	fmuld	%f0,qq3,%f6		! cos(x0)
1791
1792	faddd	%f14,pp2,%f14
1793	fmuld	%f8,qq2,%f12
1794
1795	faddd	%f22,pp2,%f22
1796	fmuld	%f16,qq2,%f20
1797
1798	faddd	%f30,pp2,%f30
1799	fmuld	%f24,qq2,%f28
1800
1801	faddd	%f6,qq2,%f6
1802	fmuld	%f0,pp2,%f4
1803
1804	fmuld	%f8,%f14,%f14
1805	faddd	%f12,qq1,%f12
1806
1807	fmuld	%f16,%f22,%f22
1808	faddd	%f20,qq1,%f20
1809
1810	fmuld	%f24,%f30,%f30
1811	faddd	%f28,qq1,%f28
1812
1813	fmuld	%f0,%f6,%f6
1814	faddd	%f4,pp1,%f4
1815
1816	faddd	%f14,pp1,%f14
1817	fmuld	%f8,%f12,%f12
1818	add	%l5,%g1,%l5
1819
1820	faddd	%f22,pp1,%f22
1821	fmuld	%f16,%f20,%f20
1822	add	%l6,%g1,%l6
1823
1824	faddd	%f30,pp1,%f30
1825	fmuld	%f24,%f28,%f28
1826	add	%l7,%g1,%l7
1827
1828	faddd	%f6,qq1,%f6
1829	fmuld	%f0,%f4,%f4
1830	add	%l4,%g1,%l4
1831
1832	fmuld	%f8,%f14,%f14
1833
1834	fmuld	%f16,%f22,%f22
1835
1836	fmuld	%f24,%f30,%f30
1837
1838	fmuld	%f2,%f4,%f4
1839
1840	fmuld	%f10,%f14,%f14
1841	ldd	[%l5+8],%f8
1842
1843	fmuld	%f18,%f22,%f22
1844	ldd	[%l6+8],%f16
1845
1846	fmuld	%f26,%f30,%f30
1847	ldd	[%l7+8],%f24
1848
1849	fmuld	%f0,%f6,%f6
1850	faddd	%f4,%f32,%f4
1851	ldd	[%l4+16],%f0
1852
1853	fmuld	%f8,%f12,%f12
1854	faddd	%f34,%f14,%f14
1855
1856	fmuld	%f16,%f20,%f20
1857	faddd	%f36,%f22,%f22
1858
1859	fmuld	%f24,%f28,%f28
1860	faddd	%f38,%f30,%f30
1861
1862	fmuld	%f0,%f6,%f6
1863	faddd	%f4,%f2,%f4
1864	ldd	[%l4+8],%f32
1865
1866	faddd	%f10,%f14,%f14
1867	ldd	[%l5+16],%f34
1868
1869	faddd	%f18,%f22,%f22
1870	ldd	[%l6+16],%f36
1871
1872	faddd	%f26,%f30,%f30
1873	ldd	[%l7+16],%f38
1874
1875	fmuld	%f32,%f4,%f4
1876
1877	fmuld	%f34,%f14,%f14
1878
1879	fmuld	%f36,%f22,%f22
1880
1881	fmuld	%f38,%f30,%f30
1882
1883	fsubd	%f6,%f4,%f6
1884
1885	faddd	%f14,%f12,%f14
1886
1887	faddd	%f22,%f20,%f22
1888
1889	faddd	%f30,%f28,%f30
1890
1891	faddd	%f6,%f0,%f6
1892
1893	faddd	%f14,%f8,%f14
1894
1895	faddd	%f22,%f16,%f22
1896
1897	faddd	%f30,%f24,%f30
1898	mov	%l0,%l4
1899
1900	fnegd	%f6,%f4
1901	lda	[%i1]%asi,%l0		! preload next argument
1902
1903	fnegd	%f14,%f12
1904	lda	[%i1]%asi,%f0
1905
1906	fnegd	%f22,%f20
1907	lda	[%i1+4]%asi,%f3
1908
1909	fnegd	%f30,%f28
1910	andn	%l0,%i5,%l0
1911	add	%i1,%i2,%i1
1912
1913	andcc	%l4,2,%g0
1914	fmovdnz	%icc,%f4,%f6
1915	st	%f6,[%o0]
1916
1917	andcc	%l1,2,%g0
1918	fmovdnz	%icc,%f12,%f14
1919	st	%f14,[%o1]
1920
1921	andcc	%l2,2,%g0
1922	fmovdnz	%icc,%f20,%f22
1923	st	%f22,[%o2]
1924
1925	andcc	%l3,2,%g0
1926	fmovdnz	%icc,%f28,%f30
1927	st	%f30,[%o3]
1928
1929	addcc	%i0,-1,%i0
1930	bg,pt	%icc,.loop0
1931! delay slot
1932	st	%f7,[%o0+4]
1933
1934	ba,pt	%icc,.end
1935! delay slot
1936	nop
1937
1938	.align	16
1939.case8:
1940	fmuld	%f10,%f10,%f8
1941	andcc	%l1,1,%g0
1942	bz,pn	%icc,.case12
1943! delay slot
1944	fxor	%f14,%f34,%f34
1945
1946	fmuld	%f18,%f18,%f16
1947	andcc	%l2,1,%g0
1948	bz,pn	%icc,.case10
1949! delay slot
1950	fxor	%f22,%f36,%f36
1951
1952	fmuld	%f26,%f26,%f24
1953	andcc	%l3,1,%g0
1954	bz,pn	%icc,.case9
1955! delay slot
1956	fxor	%f30,%f38,%f38
1957
1958	fmuld	%f0,pp3,%f6		! sin(x0)
1959
1960	faddd	%f6,pp2,%f6
1961	fmuld	%f0,qq2,%f4
1962
1963	fmuld	%f8,qq3,%f14		! cos(x1)
1964
1965	fmuld	%f16,qq3,%f22		! cos(x2)
1966
1967	fmuld	%f24,qq3,%f30		! cos(x3)
1968
1969	fmuld	%f0,%f6,%f6
1970	faddd	%f4,qq1,%f4
1971
1972	faddd	%f14,qq2,%f14
1973	fmuld	%f8,pp2,%f12
1974
1975	faddd	%f22,qq2,%f22
1976	fmuld	%f16,pp2,%f20
1977
1978	faddd	%f30,qq2,%f30
1979	fmuld	%f24,pp2,%f28
1980
1981	faddd	%f6,pp1,%f6
1982	fmuld	%f0,%f4,%f4
1983	add	%l4,%g1,%l4
1984
1985	fmuld	%f8,%f14,%f14
1986	faddd	%f12,pp1,%f12
1987
1988	fmuld	%f16,%f22,%f22
1989	faddd	%f20,pp1,%f20
1990
1991	fmuld	%f24,%f30,%f30
1992	faddd	%f28,pp1,%f28
1993
1994	fmuld	%f0,%f6,%f6
1995
1996	faddd	%f14,qq1,%f14
1997	fmuld	%f8,%f12,%f12
1998	add	%l5,%g1,%l5
1999
2000	faddd	%f22,qq1,%f22
2001	fmuld	%f16,%f20,%f20
2002	add	%l6,%g1,%l6
2003
2004	faddd	%f30,qq1,%f30
2005	fmuld	%f24,%f28,%f28
2006	add	%l7,%g1,%l7
2007
2008	fmuld	%f2,%f6,%f6
2009	ldd	[%l4+8],%f0
2010
2011	fmuld	%f10,%f12,%f12
2012
2013	fmuld	%f18,%f20,%f20
2014
2015	fmuld	%f26,%f28,%f28
2016
2017	fmuld	%f0,%f4,%f4
2018	faddd	%f32,%f6,%f6
2019
2020	fmuld	%f8,%f14,%f14
2021	faddd	%f12,%f34,%f12
2022	ldd	[%l5+16],%f8
2023
2024	fmuld	%f16,%f22,%f22
2025	faddd	%f20,%f36,%f20
2026	ldd	[%l6+16],%f16
2027
2028	fmuld	%f24,%f30,%f30
2029	faddd	%f28,%f38,%f28
2030	ldd	[%l7+16],%f24
2031
2032	faddd	%f2,%f6,%f6
2033	ldd	[%l4+16],%f32
2034
2035	fmuld	%f8,%f14,%f14
2036	faddd	%f12,%f10,%f12
2037	ldd	[%l5+8],%f34
2038
2039	fmuld	%f16,%f22,%f22
2040	faddd	%f20,%f18,%f20
2041	ldd	[%l6+8],%f36
2042
2043	fmuld	%f24,%f30,%f30
2044	faddd	%f28,%f26,%f28
2045	ldd	[%l7+8],%f38
2046
2047	fmuld	%f32,%f6,%f6
2048
2049	fmuld	%f34,%f12,%f12
2050
2051	fmuld	%f36,%f20,%f20
2052
2053	fmuld	%f38,%f28,%f28
2054
2055	faddd	%f6,%f4,%f6
2056
2057	fsubd	%f14,%f12,%f14
2058
2059	fsubd	%f22,%f20,%f22
2060
2061	fsubd	%f30,%f28,%f30
2062
2063	faddd	%f6,%f0,%f6
2064
2065	faddd	%f14,%f8,%f14
2066
2067	faddd	%f22,%f16,%f22
2068
2069	faddd	%f30,%f24,%f30
2070	mov	%l0,%l4
2071
2072	fnegd	%f6,%f4
2073	lda	[%i1]%asi,%l0		! preload next argument
2074
2075	fnegd	%f14,%f12
2076	lda	[%i1]%asi,%f0
2077
2078	fnegd	%f22,%f20
2079	lda	[%i1+4]%asi,%f3
2080
2081	fnegd	%f30,%f28
2082	andn	%l0,%i5,%l0
2083	add	%i1,%i2,%i1
2084
2085	andcc	%l4,2,%g0
2086	fmovdnz	%icc,%f4,%f6
2087	st	%f6,[%o0]
2088
2089	andcc	%l1,2,%g0
2090	fmovdnz	%icc,%f12,%f14
2091	st	%f14,[%o1]
2092
2093	andcc	%l2,2,%g0
2094	fmovdnz	%icc,%f20,%f22
2095	st	%f22,[%o2]
2096
2097	andcc	%l3,2,%g0
2098	fmovdnz	%icc,%f28,%f30
2099	st	%f30,[%o3]
2100
2101	addcc	%i0,-1,%i0
2102	bg,pt	%icc,.loop0
2103! delay slot
2104	st	%f7,[%o0+4]
2105
2106	ba,pt	%icc,.end
2107! delay slot
2108	nop
2109
2110	.align	16
2111.case9:
2112	fmuld	%f0,pp3,%f6		! sin(x0)
2113
2114	fmuld	%f24,pp3,%f30		! sin(x3)
2115
2116	faddd	%f6,pp2,%f6
2117	fmuld	%f0,qq2,%f4
2118
2119	fmuld	%f8,qq3,%f14		! cos(x1)
2120
2121	fmuld	%f16,qq3,%f22		! cos(x2)
2122
2123	faddd	%f30,pp2,%f30
2124	fmuld	%f24,qq2,%f28
2125
2126	fmuld	%f0,%f6,%f6
2127	faddd	%f4,qq1,%f4
2128
2129	faddd	%f14,qq2,%f14
2130	fmuld	%f8,pp2,%f12
2131
2132	faddd	%f22,qq2,%f22
2133	fmuld	%f16,pp2,%f20
2134
2135	fmuld	%f24,%f30,%f30
2136	faddd	%f28,qq1,%f28
2137
2138	faddd	%f6,pp1,%f6
2139	fmuld	%f0,%f4,%f4
2140	add	%l4,%g1,%l4
2141
2142	fmuld	%f8,%f14,%f14
2143	faddd	%f12,pp1,%f12
2144
2145	fmuld	%f16,%f22,%f22
2146	faddd	%f20,pp1,%f20
2147
2148	faddd	%f30,pp1,%f30
2149	fmuld	%f24,%f28,%f28
2150	add	%l7,%g1,%l7
2151
2152	fmuld	%f0,%f6,%f6
2153
2154	faddd	%f14,qq1,%f14
2155	fmuld	%f8,%f12,%f12
2156	add	%l5,%g1,%l5
2157
2158	faddd	%f22,qq1,%f22
2159	fmuld	%f16,%f20,%f20
2160	add	%l6,%g1,%l6
2161
2162	fmuld	%f24,%f30,%f30
2163
2164	fmuld	%f2,%f6,%f6
2165	ldd	[%l4+8],%f0
2166
2167	fmuld	%f10,%f12,%f12
2168
2169	fmuld	%f18,%f20,%f20
2170
2171	fmuld	%f26,%f30,%f30
2172	ldd	[%l7+8],%f24
2173
2174	fmuld	%f0,%f4,%f4
2175	faddd	%f32,%f6,%f6
2176
2177	fmuld	%f8,%f14,%f14
2178	faddd	%f12,%f34,%f12
2179	ldd	[%l5+16],%f8
2180
2181	fmuld	%f16,%f22,%f22
2182	faddd	%f20,%f36,%f20
2183	ldd	[%l6+16],%f16
2184
2185	fmuld	%f24,%f28,%f28
2186	faddd	%f38,%f30,%f30
2187
2188	faddd	%f2,%f6,%f6
2189	ldd	[%l4+16],%f32
2190
2191	fmuld	%f8,%f14,%f14
2192	faddd	%f12,%f10,%f12
2193	ldd	[%l5+8],%f34
2194
2195	fmuld	%f16,%f22,%f22
2196	faddd	%f20,%f18,%f20
2197	ldd	[%l6+8],%f36
2198
2199	faddd	%f26,%f30,%f30
2200	ldd	[%l7+16],%f38
2201
2202	fmuld	%f32,%f6,%f6
2203
2204	fmuld	%f34,%f12,%f12
2205
2206	fmuld	%f36,%f20,%f20
2207
2208	fmuld	%f38,%f30,%f30
2209
2210	faddd	%f6,%f4,%f6
2211
2212	fsubd	%f14,%f12,%f14
2213
2214	fsubd	%f22,%f20,%f22
2215
2216	faddd	%f30,%f28,%f30
2217
2218	faddd	%f6,%f0,%f6
2219
2220	faddd	%f14,%f8,%f14
2221
2222	faddd	%f22,%f16,%f22
2223
2224	faddd	%f30,%f24,%f30
2225	mov	%l0,%l4
2226
2227	fnegd	%f6,%f4
2228	lda	[%i1]%asi,%l0		! preload next argument
2229
2230	fnegd	%f14,%f12
2231	lda	[%i1]%asi,%f0
2232
2233	fnegd	%f22,%f20
2234	lda	[%i1+4]%asi,%f3
2235
2236	fnegd	%f30,%f28
2237	andn	%l0,%i5,%l0
2238	add	%i1,%i2,%i1
2239
2240	andcc	%l4,2,%g0
2241	fmovdnz	%icc,%f4,%f6
2242	st	%f6,[%o0]
2243
2244	andcc	%l1,2,%g0
2245	fmovdnz	%icc,%f12,%f14
2246	st	%f14,[%o1]
2247
2248	andcc	%l2,2,%g0
2249	fmovdnz	%icc,%f20,%f22
2250	st	%f22,[%o2]
2251
2252	andcc	%l3,2,%g0
2253	fmovdnz	%icc,%f28,%f30
2254	st	%f30,[%o3]
2255
2256	addcc	%i0,-1,%i0
2257	bg,pt	%icc,.loop0
2258! delay slot
2259	st	%f7,[%o0+4]
2260
2261	ba,pt	%icc,.end
2262! delay slot
2263	nop
2264
2265	.align	16
2266.case10:
2267	fmuld	%f26,%f26,%f24
2268	andcc	%l3,1,%g0
2269	bz,pn	%icc,.case11
2270! delay slot
2271	fxor	%f30,%f38,%f38
2272
2273	fmuld	%f0,pp3,%f6		! sin(x0)
2274
2275	fmuld	%f16,pp3,%f22		! sin(x2)
2276
2277	faddd	%f6,pp2,%f6
2278	fmuld	%f0,qq2,%f4
2279
2280	fmuld	%f8,qq3,%f14		! cos(x1)
2281
2282	faddd	%f22,pp2,%f22
2283	fmuld	%f16,qq2,%f20
2284
2285	fmuld	%f24,qq3,%f30		! cos(x3)
2286
2287	fmuld	%f0,%f6,%f6
2288	faddd	%f4,qq1,%f4
2289
2290	faddd	%f14,qq2,%f14
2291	fmuld	%f8,pp2,%f12
2292
2293	fmuld	%f16,%f22,%f22
2294	faddd	%f20,qq1,%f20
2295
2296	faddd	%f30,qq2,%f30
2297	fmuld	%f24,pp2,%f28
2298
2299	faddd	%f6,pp1,%f6
2300	fmuld	%f0,%f4,%f4
2301	add	%l4,%g1,%l4
2302
2303	fmuld	%f8,%f14,%f14
2304	faddd	%f12,pp1,%f12
2305
2306	faddd	%f22,pp1,%f22
2307	fmuld	%f16,%f20,%f20
2308	add	%l6,%g1,%l6
2309
2310	fmuld	%f24,%f30,%f30
2311	faddd	%f28,pp1,%f28
2312
2313	fmuld	%f0,%f6,%f6
2314
2315	faddd	%f14,qq1,%f14
2316	fmuld	%f8,%f12,%f12
2317	add	%l5,%g1,%l5
2318
2319	fmuld	%f16,%f22,%f22
2320
2321	faddd	%f30,qq1,%f30
2322	fmuld	%f24,%f28,%f28
2323	add	%l7,%g1,%l7
2324
2325	fmuld	%f2,%f6,%f6
2326	ldd	[%l4+8],%f0
2327
2328	fmuld	%f10,%f12,%f12
2329
2330	fmuld	%f18,%f22,%f22
2331	ldd	[%l6+8],%f16
2332
2333	fmuld	%f26,%f28,%f28
2334
2335	fmuld	%f0,%f4,%f4
2336	faddd	%f32,%f6,%f6
2337
2338	fmuld	%f8,%f14,%f14
2339	faddd	%f12,%f34,%f12
2340	ldd	[%l5+16],%f8
2341
2342	fmuld	%f16,%f20,%f20
2343	faddd	%f36,%f22,%f22
2344
2345	fmuld	%f24,%f30,%f30
2346	faddd	%f28,%f38,%f28
2347	ldd	[%l7+16],%f24
2348
2349	faddd	%f2,%f6,%f6
2350	ldd	[%l4+16],%f32
2351
2352	fmuld	%f8,%f14,%f14
2353	faddd	%f12,%f10,%f12
2354	ldd	[%l5+8],%f34
2355
2356	faddd	%f18,%f22,%f22
2357	ldd	[%l6+16],%f36
2358
2359	fmuld	%f24,%f30,%f30
2360	faddd	%f28,%f26,%f28
2361	ldd	[%l7+8],%f38
2362
2363	fmuld	%f32,%f6,%f6
2364
2365	fmuld	%f34,%f12,%f12
2366
2367	fmuld	%f36,%f22,%f22
2368
2369	fmuld	%f38,%f28,%f28
2370
2371	faddd	%f6,%f4,%f6
2372
2373	fsubd	%f14,%f12,%f14
2374
2375	faddd	%f22,%f20,%f22
2376
2377	fsubd	%f30,%f28,%f30
2378
2379	faddd	%f6,%f0,%f6
2380
2381	faddd	%f14,%f8,%f14
2382
2383	faddd	%f22,%f16,%f22
2384
2385	faddd	%f30,%f24,%f30
2386	mov	%l0,%l4
2387
2388	fnegd	%f6,%f4
2389	lda	[%i1]%asi,%l0		! preload next argument
2390
2391	fnegd	%f14,%f12
2392	lda	[%i1]%asi,%f0
2393
2394	fnegd	%f22,%f20
2395	lda	[%i1+4]%asi,%f3
2396
2397	fnegd	%f30,%f28
2398	andn	%l0,%i5,%l0
2399	add	%i1,%i2,%i1
2400
2401	andcc	%l4,2,%g0
2402	fmovdnz	%icc,%f4,%f6
2403	st	%f6,[%o0]
2404
2405	andcc	%l1,2,%g0
2406	fmovdnz	%icc,%f12,%f14
2407	st	%f14,[%o1]
2408
2409	andcc	%l2,2,%g0
2410	fmovdnz	%icc,%f20,%f22
2411	st	%f22,[%o2]
2412
2413	andcc	%l3,2,%g0
2414	fmovdnz	%icc,%f28,%f30
2415	st	%f30,[%o3]
2416
2417	addcc	%i0,-1,%i0
2418	bg,pt	%icc,.loop0
2419! delay slot
2420	st	%f7,[%o0+4]
2421
2422	ba,pt	%icc,.end
2423! delay slot
2424	nop
2425
2426	.align	16
2427.case11:
2428	fmuld	%f0,pp3,%f6		! sin(x0)
2429
2430	fmuld	%f16,pp3,%f22		! sin(x2)
2431
2432	fmuld	%f24,pp3,%f30		! sin(x3)
2433
2434	faddd	%f6,pp2,%f6
2435	fmuld	%f0,qq2,%f4
2436
2437	fmuld	%f8,qq3,%f14		! cos(x1)
2438
2439	faddd	%f22,pp2,%f22
2440	fmuld	%f16,qq2,%f20
2441
2442	faddd	%f30,pp2,%f30
2443	fmuld	%f24,qq2,%f28
2444
2445	fmuld	%f0,%f6,%f6
2446	faddd	%f4,qq1,%f4
2447
2448	faddd	%f14,qq2,%f14
2449	fmuld	%f8,pp2,%f12
2450
2451	fmuld	%f16,%f22,%f22
2452	faddd	%f20,qq1,%f20
2453
2454	fmuld	%f24,%f30,%f30
2455	faddd	%f28,qq1,%f28
2456
2457	faddd	%f6,pp1,%f6
2458	fmuld	%f0,%f4,%f4
2459	add	%l4,%g1,%l4
2460
2461	fmuld	%f8,%f14,%f14
2462	faddd	%f12,pp1,%f12
2463
2464	faddd	%f22,pp1,%f22
2465	fmuld	%f16,%f20,%f20
2466	add	%l6,%g1,%l6
2467
2468	faddd	%f30,pp1,%f30
2469	fmuld	%f24,%f28,%f28
2470	add	%l7,%g1,%l7
2471
2472	fmuld	%f0,%f6,%f6
2473
2474	faddd	%f14,qq1,%f14
2475	fmuld	%f8,%f12,%f12
2476	add	%l5,%g1,%l5
2477
2478	fmuld	%f16,%f22,%f22
2479
2480	fmuld	%f24,%f30,%f30
2481
2482	fmuld	%f2,%f6,%f6
2483	ldd	[%l4+8],%f0
2484
2485	fmuld	%f10,%f12,%f12
2486
2487	fmuld	%f18,%f22,%f22
2488	ldd	[%l6+8],%f16
2489
2490	fmuld	%f26,%f30,%f30
2491	ldd	[%l7+8],%f24
2492
2493	fmuld	%f0,%f4,%f4
2494	faddd	%f32,%f6,%f6
2495
2496	fmuld	%f8,%f14,%f14
2497	faddd	%f12,%f34,%f12
2498	ldd	[%l5+16],%f8
2499
2500	fmuld	%f16,%f20,%f20
2501	faddd	%f36,%f22,%f22
2502
2503	fmuld	%f24,%f28,%f28
2504	faddd	%f38,%f30,%f30
2505
2506	faddd	%f2,%f6,%f6
2507	ldd	[%l4+16],%f32
2508
2509	fmuld	%f8,%f14,%f14
2510	faddd	%f12,%f10,%f12
2511	ldd	[%l5+8],%f34
2512
2513	faddd	%f18,%f22,%f22
2514	ldd	[%l6+16],%f36
2515
2516	faddd	%f26,%f30,%f30
2517	ldd	[%l7+16],%f38
2518
2519	fmuld	%f32,%f6,%f6
2520
2521	fmuld	%f34,%f12,%f12
2522
2523	fmuld	%f36,%f22,%f22
2524
2525	fmuld	%f38,%f30,%f30
2526
2527	faddd	%f6,%f4,%f6
2528
2529	fsubd	%f14,%f12,%f14
2530
2531	faddd	%f22,%f20,%f22
2532
2533	faddd	%f30,%f28,%f30
2534
2535	faddd	%f6,%f0,%f6
2536
2537	faddd	%f14,%f8,%f14
2538
2539	faddd	%f22,%f16,%f22
2540
2541	faddd	%f30,%f24,%f30
2542	mov	%l0,%l4
2543
2544	fnegd	%f6,%f4
2545	lda	[%i1]%asi,%l0		! preload next argument
2546
2547	fnegd	%f14,%f12
2548	lda	[%i1]%asi,%f0
2549
2550	fnegd	%f22,%f20
2551	lda	[%i1+4]%asi,%f3
2552
2553	fnegd	%f30,%f28
2554	andn	%l0,%i5,%l0
2555	add	%i1,%i2,%i1
2556
2557	andcc	%l4,2,%g0
2558	fmovdnz	%icc,%f4,%f6
2559	st	%f6,[%o0]
2560
2561	andcc	%l1,2,%g0
2562	fmovdnz	%icc,%f12,%f14
2563	st	%f14,[%o1]
2564
2565	andcc	%l2,2,%g0
2566	fmovdnz	%icc,%f20,%f22
2567	st	%f22,[%o2]
2568
2569	andcc	%l3,2,%g0
2570	fmovdnz	%icc,%f28,%f30
2571	st	%f30,[%o3]
2572
2573	addcc	%i0,-1,%i0
2574	bg,pt	%icc,.loop0
2575! delay slot
2576	st	%f7,[%o0+4]
2577
2578	ba,pt	%icc,.end
2579! delay slot
2580	nop
2581
2582	.align	16
2583.case12:
2584	fmuld	%f18,%f18,%f16
2585	andcc	%l2,1,%g0
2586	bz,pn	%icc,.case14
2587! delay slot
2588	fxor	%f22,%f36,%f36
2589
2590	fmuld	%f26,%f26,%f24
2591	andcc	%l3,1,%g0
2592	bz,pn	%icc,.case13
2593! delay slot
2594	fxor	%f30,%f38,%f38
2595
2596	fmuld	%f0,pp3,%f6		! sin(x0)
2597
2598	fmuld	%f8,pp3,%f14		! sin(x1)
2599
2600	faddd	%f6,pp2,%f6
2601	fmuld	%f0,qq2,%f4
2602
2603	faddd	%f14,pp2,%f14
2604	fmuld	%f8,qq2,%f12
2605
2606	fmuld	%f16,qq3,%f22		! cos(x2)
2607
2608	fmuld	%f24,qq3,%f30		! cos(x3)
2609
2610	fmuld	%f0,%f6,%f6
2611	faddd	%f4,qq1,%f4
2612
2613	fmuld	%f8,%f14,%f14
2614	faddd	%f12,qq1,%f12
2615
2616	faddd	%f22,qq2,%f22
2617	fmuld	%f16,pp2,%f20
2618
2619	faddd	%f30,qq2,%f30
2620	fmuld	%f24,pp2,%f28
2621
2622	faddd	%f6,pp1,%f6
2623	fmuld	%f0,%f4,%f4
2624	add	%l4,%g1,%l4
2625
2626	faddd	%f14,pp1,%f14
2627	fmuld	%f8,%f12,%f12
2628	add	%l5,%g1,%l5
2629
2630	fmuld	%f16,%f22,%f22
2631	faddd	%f20,pp1,%f20
2632
2633	fmuld	%f24,%f30,%f30
2634	faddd	%f28,pp1,%f28
2635
2636	fmuld	%f0,%f6,%f6
2637
2638	fmuld	%f8,%f14,%f14
2639
2640	faddd	%f22,qq1,%f22
2641	fmuld	%f16,%f20,%f20
2642	add	%l6,%g1,%l6
2643
2644	faddd	%f30,qq1,%f30
2645	fmuld	%f24,%f28,%f28
2646	add	%l7,%g1,%l7
2647
2648	fmuld	%f2,%f6,%f6
2649	ldd	[%l4+8],%f0
2650
2651	fmuld	%f10,%f14,%f14
2652	ldd	[%l5+8],%f8
2653
2654	fmuld	%f18,%f20,%f20
2655
2656	fmuld	%f26,%f28,%f28
2657
2658	fmuld	%f0,%f4,%f4
2659	faddd	%f32,%f6,%f6
2660
2661	fmuld	%f8,%f12,%f12
2662	faddd	%f34,%f14,%f14
2663
2664	fmuld	%f16,%f22,%f22
2665	faddd	%f20,%f36,%f20
2666	ldd	[%l6+16],%f16
2667
2668	fmuld	%f24,%f30,%f30
2669	faddd	%f28,%f38,%f28
2670	ldd	[%l7+16],%f24
2671
2672	faddd	%f2,%f6,%f6
2673	ldd	[%l4+16],%f32
2674
2675	faddd	%f10,%f14,%f14
2676	ldd	[%l5+16],%f34
2677
2678	fmuld	%f16,%f22,%f22
2679	faddd	%f20,%f18,%f20
2680	ldd	[%l6+8],%f36
2681
2682	fmuld	%f24,%f30,%f30
2683	faddd	%f28,%f26,%f28
2684	ldd	[%l7+8],%f38
2685
2686	fmuld	%f32,%f6,%f6
2687
2688	fmuld	%f34,%f14,%f14
2689
2690	fmuld	%f36,%f20,%f20
2691
2692	fmuld	%f38,%f28,%f28
2693
2694	faddd	%f6,%f4,%f6
2695
2696	faddd	%f14,%f12,%f14
2697
2698	fsubd	%f22,%f20,%f22
2699
2700	fsubd	%f30,%f28,%f30
2701
2702	faddd	%f6,%f0,%f6
2703
2704	faddd	%f14,%f8,%f14
2705
2706	faddd	%f22,%f16,%f22
2707
2708	faddd	%f30,%f24,%f30
2709	mov	%l0,%l4
2710
2711	fnegd	%f6,%f4
2712	lda	[%i1]%asi,%l0		! preload next argument
2713
2714	fnegd	%f14,%f12
2715	lda	[%i1]%asi,%f0
2716
2717	fnegd	%f22,%f20
2718	lda	[%i1+4]%asi,%f3
2719
2720	fnegd	%f30,%f28
2721	andn	%l0,%i5,%l0
2722	add	%i1,%i2,%i1
2723
2724	andcc	%l4,2,%g0
2725	fmovdnz	%icc,%f4,%f6
2726	st	%f6,[%o0]
2727
2728	andcc	%l1,2,%g0
2729	fmovdnz	%icc,%f12,%f14
2730	st	%f14,[%o1]
2731
2732	andcc	%