1/*********************************************************************/
2/* Copyright 2009, 2010 The University of Texas at Austin.           */
3/* All rights reserved.                                              */
4/*                                                                   */
5/* Redistribution and use in source and binary forms, with or        */
6/* without modification, are permitted provided that the following   */
7/* conditions are met:                                               */
8/*                                                                   */
9/*   1. Redistributions of source code must retain the above         */
10/*      copyright notice, this list of conditions and the following  */
11/*      disclaimer.                                                  */
12/*                                                                   */
13/*   2. Redistributions in binary form must reproduce the above      */
14/*      copyright notice, this list of conditions and the following  */
15/*      disclaimer in the documentation and/or other materials       */
16/*      provided with the distribution.                              */
17/*                                                                   */
18/*    THIS  SOFTWARE IS PROVIDED  BY THE  UNIVERSITY OF  TEXAS AT    */
19/*    AUSTIN  ``AS IS''  AND ANY  EXPRESS OR  IMPLIED WARRANTIES,    */
20/*    INCLUDING, BUT  NOT LIMITED  TO, THE IMPLIED  WARRANTIES OF    */
21/*    MERCHANTABILITY  AND FITNESS FOR  A PARTICULAR  PURPOSE ARE    */
22/*    DISCLAIMED.  IN  NO EVENT SHALL THE UNIVERSITY  OF TEXAS AT    */
23/*    AUSTIN OR CONTRIBUTORS BE  LIABLE FOR ANY DIRECT, INDIRECT,    */
24/*    INCIDENTAL,  SPECIAL, EXEMPLARY,  OR  CONSEQUENTIAL DAMAGES    */
25/*    (INCLUDING, BUT  NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE    */
26/*    GOODS  OR  SERVICES; LOSS  OF  USE,  DATA,  OR PROFITS;  OR    */
27/*    BUSINESS INTERRUPTION) HOWEVER CAUSED  AND ON ANY THEORY OF    */
28/*    LIABILITY, WHETHER  IN CONTRACT, STRICT  LIABILITY, OR TORT    */
29/*    (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING IN ANY WAY OUT    */
30/*    OF  THE  USE OF  THIS  SOFTWARE,  EVEN  IF ADVISED  OF  THE    */
31/*    POSSIBILITY OF SUCH DAMAGE.                                    */
32/*                                                                   */
33/* The views and conclusions contained in the software and           */
34/* documentation are those of the authors and should not be          */
35/* interpreted as representing official policies, either expressed   */
36/* or implied, of The University of Texas at Austin.                 */
37/*********************************************************************/
38
39#define ASSEMBLER
40#include "common.h"
41
42#define RET	r3
43#define X	r4
44#define INCX	r5
45
46#define N	r6
47#define NN	r7
48#define XX	r8
49#define PREA	r9
50
51#define FZERO	f1
52
53#define STACKSIZE 160
54
55	PROLOGUE
56	PROFCODE
57
58	addi	SP, SP, -STACKSIZE
59	li	r0,   0
60
61	stfd	f14,    0(SP)
62	stfd	f15,    8(SP)
63	stfd	f16,   16(SP)
64	stfd	f17,   24(SP)
65
66	stfd	f18,   32(SP)
67	stfd	f19,   40(SP)
68	stfd	f20,   48(SP)
69	stfd	f21,   56(SP)
70
71	stfd	f22,   64(SP)
72	stfd	f23,   72(SP)
73	stfd	f24,   80(SP)
74	stfd	f25,   88(SP)
75
76	stfd	f26,   96(SP)
77	stfd	f27,  104(SP)
78	stfd	f28,  112(SP)
79	stfd	f29,  120(SP)
80
81	stfd	f30,  128(SP)
82	stfd	f31,  136(SP)
83
84	stw	r0,   144(SP)
85	lfs	FZERO,144(SP)
86
87#ifdef F_INTERFACE
88	LDINT	N,    0(r3)
89	LDINT	INCX, 0(INCX)
90#else
91	mr	N, r3
92#endif
93	li	RET, 0
94	mr	NN, N
95	mr	XX, X
96
97	slwi	INCX, INCX, BASE_SHIFT
98
99	li	PREA, L1_PREFETCHSIZE
100
101	cmpwi	cr0, N, 0
102	ble-	LL(9999)
103	cmpwi	cr0, INCX, 0
104	ble-	LL(9999)
105
106	LFD	f1, 0 * SIZE(X)
107	add	X, X, INCX
108
109	fabs	f0, f1
110	fabs	f2, f1
111	fabs	f3, f1
112	fabs	f4, f1
113	fabs	f5, f1
114	fabs	f6, f1
115	fabs	f7, f1
116	fabs	f1, f1
117
118	subi	N, N, 1
119
120	cmpwi	cr0, INCX, SIZE
121	bne-	cr0, LL(100)
122
123	srawi.	r0, N, 4
124	mtspr	CTR, r0
125	beq-	cr0, LL(50)
126
127	LFD	f24,   0 * SIZE(X)
128	LFD	f25,   1 * SIZE(X)
129	LFD	f26,   2 * SIZE(X)
130	LFD	f27,   3 * SIZE(X)
131	LFD	f28,   4 * SIZE(X)
132	LFD	f29,   5 * SIZE(X)
133	LFD	f30,   6 * SIZE(X)
134	LFD	f31,   7 * SIZE(X)
135
136	fabs	f8,  f24
137	fabs	f9,  f25
138	fabs	f10, f26
139	fabs	f11, f27
140
141	LFD	f24,   8 * SIZE(X)
142	LFD	f25,   9 * SIZE(X)
143	LFD	f26,  10 * SIZE(X)
144	LFD	f27,  11 * SIZE(X)
145
146	fabs	f12, f28
147	fabs	f13, f29
148	fabs	f14, f30
149	fabs	f15, f31
150
151	LFD	f28,  12 * SIZE(X)
152	LFD	f29,  13 * SIZE(X)
153	LFD	f30,  14 * SIZE(X)
154	LFD	f31,  15 * SIZE(X)
155	bdz	LL(20)
156	.align 4
157
158LL(10):
159	fsub	f16, f0,  f8
160	fsub	f17, f1,  f9
161	fsub	f18, f2,  f10
162	fsub	f19, f3,  f11
163	fsub	f20, f4,  f12
164	fsub	f21, f5,  f13
165	fsub	f22, f6,  f14
166	fsub	f23, f7,  f15
167
168	fsel	f0,  f16, f0,  f8
169	fabs	f8,  f24
170	fsel	f1,  f17, f1,  f9
171	fabs	f9,  f25
172	fsel	f2,  f18, f2,  f10
173	fabs	f10, f26
174	fsel	f3,  f19, f3,  f11
175	fabs	f11, f27
176
177	LFD	f24,  16 * SIZE(X)
178	LFD	f25,  17 * SIZE(X)
179	LFD	f26,  18 * SIZE(X)
180	LFD	f27,  19 * SIZE(X)
181
182	fsel	f4,  f20, f4,  f12
183	fabs	f12, f28
184	fsel	f5,  f21, f5,  f13
185	fabs	f13, f29
186	fsel	f6,  f22, f6,  f14
187	fabs	f14, f30
188	fsel	f7,  f23, f7,  f15
189	fabs	f15, f31
190
191	LFD	f28,  20 * SIZE(X)
192	LFD	f29,  21 * SIZE(X)
193	LFD	f30,  22 * SIZE(X)
194	LFD	f31,  23 * SIZE(X)
195
196	fsub	f16, f0,  f8
197	fsub	f17, f1,  f9
198	fsub	f18, f2,  f10
199	fsub	f19, f3,  f11
200	fsub	f20, f4,  f12
201	fsub	f21, f5,  f13
202	fsub	f22, f6,  f14
203	fsub	f23, f7,  f15
204
205	fsel	f0,  f16, f0,  f8
206	fabs	f8,  f24
207	fsel	f1,  f17, f1,  f9
208	fabs	f9,  f25
209	fsel	f2,  f18, f2,  f10
210	fabs	f10, f26
211	fsel	f3,  f19, f3,  f11
212	fabs	f11, f27
213
214	LFD	f24,  24 * SIZE(X)
215	LFD	f25,  25 * SIZE(X)
216	LFD	f26,  26 * SIZE(X)
217	LFD	f27,  27 * SIZE(X)
218
219	fsel	f4,  f20, f4,  f12
220	fabs	f12, f28
221	fsel	f5,  f21, f5,  f13
222	fabs	f13, f29
223	fsel	f6,  f22, f6,  f14
224	fabs	f14, f30
225	fsel	f7,  f23, f7,  f15
226	fabs	f15, f31
227
228	LFD	f28,  28 * SIZE(X)
229	LFD	f29,  29 * SIZE(X)
230	LFD	f30,  30 * SIZE(X)
231	LFD	f31,  31 * SIZE(X)
232
233#ifndef POWER6
234	L1_PREFETCH	X, PREA
235#endif
236	addi	X, X, 16 * SIZE
237#ifdef POWER6
238	L1_PREFETCH	X, PREA
239#endif
240	bdnz	LL(10)
241	.align 4
242
243LL(20):
244	fsub	f16, f0,  f8
245	fsub	f17, f1,  f9
246	fsub	f18, f2,  f10
247	fsub	f19, f3,  f11
248	fsub	f20, f4,  f12
249	fsub	f21, f5,  f13
250	fsub	f22, f6,  f14
251	fsub	f23, f7,  f15
252
253	fsel	f0,  f16, f0,  f8
254	fabs	f8,  f24
255	fsel	f1,  f17, f1,  f9
256	fabs	f9,  f25
257	fsel	f2,  f18, f2,  f10
258	fabs	f10, f26
259	fsel	f3,  f19, f3,  f11
260	fabs	f11, f27
261
262	fsel	f4,  f20, f4,  f12
263	fabs	f12, f28
264	fsel	f5,  f21, f5,  f13
265	fabs	f13, f29
266	fsel	f6,  f22, f6,  f14
267	fabs	f14, f30
268	fsel	f7,  f23, f7,  f15
269	fabs	f15, f31
270
271	fsub	f16, f0,  f8
272	fsub	f17, f1,  f9
273	fsub	f18, f2,  f10
274	fsub	f19, f3,  f11
275	fsub	f20, f4,  f12
276	fsub	f21, f5,  f13
277	fsub	f22, f6,  f14
278	fsub	f23, f7,  f15
279
280	fsel	f0,  f16, f0,  f8
281	fsel	f1,  f17, f1,  f9
282	fsel	f2,  f18, f2,  f10
283	fsel	f3,  f19, f3,  f11
284	fsel	f4,  f20, f4,  f12
285	fsel	f5,  f21, f5,  f13
286	fsel	f6,  f22, f6,  f14
287	fsel	f7,  f23, f7,  f15
288	addi	X, X, 16 * SIZE
289	.align 4
290
291LL(50):
292	andi.	r0,  N, 15
293	mtspr	CTR, r0
294	beq	LL(999)
295	.align 4
296
297LL(60):
298	LFD	f8,  0 * SIZE(X)
299	addi	X, X,  1 * SIZE
300	fabs	f8, f8
301	fsub	f16, f1, f8
302	fsel	f1, f16, f1, f8
303	bdnz	LL(60)
304	b	LL(999)
305	.align 4
306
307LL(100):
308	sub	X, X, INCX
309
310	srawi.	r0, N, 4
311	mtspr	CTR,  r0
312	beq-	LL(150)
313
314	LFDUX	f24,   X, INCX
315	LFDUX	f25,   X, INCX
316	LFDUX	f26,   X, INCX
317	LFDUX	f27,   X, INCX
318	LFDUX	f28,   X, INCX
319	LFDUX	f29,   X, INCX
320	LFDUX	f30,   X, INCX
321	LFDUX	f31,   X, INCX
322
323	fabs	f8,  f24
324	fabs	f9,  f25
325	fabs	f10, f26
326	fabs	f11, f27
327
328	LFDUX	f24,   X, INCX
329	LFDUX	f25,   X, INCX
330	LFDUX	f26,   X, INCX
331	LFDUX	f27,   X, INCX
332
333	fabs	f12, f28
334	fabs	f13, f29
335	fabs	f14, f30
336	fabs	f15, f31
337
338	LFDUX	f28,   X, INCX
339	LFDUX	f29,   X, INCX
340	LFDUX	f30,   X, INCX
341	LFDUX	f31,   X, INCX
342	bdz	LL(120)
343	.align 4
344
345LL(110):
346	fsub	f16, f0,  f8
347	fsub	f17, f1,  f9
348	fsub	f18, f2,  f10
349	fsub	f19, f3,  f11
350	fsub	f20, f4,  f12
351	fsub	f21, f5,  f13
352	fsub	f22, f6,  f14
353	fsub	f23, f7,  f15
354
355	fsel	f0,  f16, f0,  f8
356	fabs	f8,  f24
357	fsel	f1,  f17, f1,  f9
358	fabs	f9,  f25
359	fsel	f2,  f18, f2,  f10
360	fabs	f10, f26
361	fsel	f3,  f19, f3,  f11
362	fabs	f11, f27
363
364	LFDUX	f24,   X, INCX
365	LFDUX	f25,   X, INCX
366	LFDUX	f26,   X, INCX
367	LFDUX	f27,   X, INCX
368
369	fsel	f4,  f20, f4,  f12
370	fabs	f12, f28
371	fsel	f5,  f21, f5,  f13
372	fabs	f13, f29
373	fsel	f6,  f22, f6,  f14
374	fabs	f14, f30
375	fsel	f7,  f23, f7,  f15
376	fabs	f15, f31
377
378	LFDUX	f28,   X, INCX
379	LFDUX	f29,   X, INCX
380	LFDUX	f30,   X, INCX
381	LFDUX	f31,   X, INCX
382
383	fsub	f16, f0,  f8
384	fsub	f17, f1,  f9
385	fsub	f18, f2,  f10
386	fsub	f19, f3,  f11
387	fsub	f20, f4,  f12
388	fsub	f21, f5,  f13
389	fsub	f22, f6,  f14
390	fsub	f23, f7,  f15
391
392	fsel	f0,  f16, f0,  f8
393	fabs	f8,  f24
394	fsel	f1,  f17, f1,  f9
395	fabs	f9,  f25
396	fsel	f2,  f18, f2,  f10
397	fabs	f10, f26
398	fsel	f3,  f19, f3,  f11
399	fabs	f11, f27
400
401	LFDUX	f24,   X, INCX
402	LFDUX	f25,   X, INCX
403	LFDUX	f26,   X, INCX
404	LFDUX	f27,   X, INCX
405
406	fsel	f4,  f20, f4,  f12
407	fabs	f12, f28
408	fsel	f5,  f21, f5,  f13
409	fabs	f13, f29
410	fsel	f6,  f22, f6,  f14
411	fabs	f14, f30
412	fsel	f7,  f23, f7,  f15
413	fabs	f15, f31
414
415	LFDUX	f28,   X, INCX
416	LFDUX	f29,   X, INCX
417	LFDUX	f30,   X, INCX
418	LFDUX	f31,   X, INCX
419	bdnz	LL(110)
420	.align 4
421
422LL(120):
423	fsub	f16, f0,  f8
424	fsub	f17, f1,  f9
425	fsub	f18, f2,  f10
426	fsub	f19, f3,  f11
427	fsub	f20, f4,  f12
428	fsub	f21, f5,  f13
429	fsub	f22, f6,  f14
430	fsub	f23, f7,  f15
431
432	fsel	f0,  f16, f0,  f8
433	fabs	f8,  f24
434	fsel	f1,  f17, f1,  f9
435	fabs	f9,  f25
436	fsel	f2,  f18, f2,  f10
437	fabs	f10, f26
438	fsel	f3,  f19, f3,  f11
439	fabs	f11, f27
440
441	fsel	f4,  f20, f4,  f12
442	fabs	f12, f28
443	fsel	f5,  f21, f5,  f13
444	fabs	f13, f29
445	fsel	f6,  f22, f6,  f14
446	fabs	f14, f30
447	fsel	f7,  f23, f7,  f15
448	fabs	f15, f31
449
450	fsub	f16, f0,  f8
451	fsub	f17, f1,  f9
452	fsub	f18, f2,  f10
453	fsub	f19, f3,  f11
454	fsub	f20, f4,  f12
455	fsub	f21, f5,  f13
456	fsub	f22, f6,  f14
457	fsub	f23, f7,  f15
458
459	fsel	f0,  f16, f0,  f8
460	fsel	f1,  f17, f1,  f9
461	fsel	f2,  f18, f2,  f10
462	fsel	f3,  f19, f3,  f11
463	fsel	f4,  f20, f4,  f12
464	fsel	f5,  f21, f5,  f13
465	fsel	f6,  f22, f6,  f14
466	fsel	f7,  f23, f7,  f15
467	.align 4
468
469LL(150):
470	andi.	r0,  N, 15
471	mtspr	CTR, r0
472	beq	LL(999)
473	.align 4
474
475LL(160):
476	LFDUX	f8,    X, INCX
477	fabs	f8, f8
478	fsub	f16, f1, f8
479	fsel	f1, f16, f1, f8
480	bdnz	LL(160)
481	.align 4
482
483LL(999):
484	fsub	f8,  f0,  f1
485	fsub	f9,  f2,  f3
486	fsub	f10, f4,  f5
487	fsub	f11, f6,  f7
488
489	fsel	f0,  f8,  f0,  f1
490	fsel	f2,  f9,  f2,  f3
491	fsel	f4,  f10, f4,  f5
492	fsel	f6,  f11, f6,  f7
493
494	fsub	f8,  f0,  f2
495	fsub	f9,  f4,  f6
496	fsel	f0,  f8,  f0,  f2
497	fsel	f4,  f9,  f4,  f6
498
499	fsub	f8,  f0,  f4
500	fsel	f1,  f8,  f0,  f4
501	.align 4
502
503LL(1000):
504	cmpwi	cr0, INCX, SIZE
505	bne-	cr0, LL(1100)
506
507	srawi.	r0, NN, 3
508	mtspr	CTR, r0
509	beq-	cr0, LL(1050)
510
511	LFD	f24,   0 * SIZE(XX)
512	LFD	f25,   1 * SIZE(XX)
513	LFD	f26,   2 * SIZE(XX)
514	LFD	f27,   3 * SIZE(XX)
515	LFD	f28,   4 * SIZE(XX)
516	LFD	f29,   5 * SIZE(XX)
517	LFD	f30,   6 * SIZE(XX)
518	LFD	f31,   7 * SIZE(XX)
519	bdz	LL(1020)
520	.align 4
521
522LL(1010):
523	fabs	f8,  f24
524	fabs	f9,  f25
525	fabs	f10, f26
526	fabs	f11, f27
527
528	LFD	f24,   8 * SIZE(XX)
529	LFD	f25,   9 * SIZE(XX)
530	LFD	f26,  10 * SIZE(XX)
531	LFD	f27,  11 * SIZE(XX)
532
533	fabs	f12, f28
534	fabs	f13, f29
535	fabs	f14, f30
536	fabs	f15, f31
537
538	LFD	f28,  12 * SIZE(XX)
539	LFD	f29,  13 * SIZE(XX)
540	LFD	f30,  14 * SIZE(XX)
541	LFD	f31,  15 * SIZE(XX)
542
543	addi	RET, RET, 1
544	fcmpu	cr0, f1, f8
545	beq	cr0, LL(9999)
546
547	addi	RET, RET, 1
548	fcmpu	cr0, f1, f9
549	beq	cr0, LL(9999)
550
551	addi	RET, RET, 1
552	fcmpu	cr0, f1, f10
553	beq	cr0, LL(9999)
554
555	addi	RET, RET, 1
556	fcmpu	cr0, f1, f11
557	beq	cr0, LL(9999)
558
559	addi	RET, RET, 1
560	fcmpu	cr0, f1, f12
561	beq	cr0, LL(9999)
562
563	addi	RET, RET, 1
564	fcmpu	cr0, f1, f13
565	beq	cr0, LL(9999)
566
567	addi	RET, RET, 1
568	fcmpu	cr0, f1, f14
569	beq	cr0, LL(9999)
570
571	addi	RET, RET, 1
572	fcmpu	cr0, f1, f15
573	beq	cr0, LL(9999)
574
575	addi	XX, XX,  8 * SIZE
576	bdnz	LL(1010)
577	.align 4
578
579LL(1020):
580	fabs	f8,  f24
581	fabs	f9,  f25
582	fabs	f10, f26
583	fabs	f11, f27
584
585	fabs	f12, f28
586	fabs	f13, f29
587	fabs	f14, f30
588	fabs	f15, f31
589
590	addi	XX, XX,  8 * SIZE
591
592	addi	RET, RET, 1
593	fcmpu	cr0, f1, f8
594	beq	cr0, LL(9999)
595
596	addi	RET, RET, 1
597	fcmpu	cr0, f1, f9
598	beq	cr0, LL(9999)
599
600	addi	RET, RET, 1
601	fcmpu	cr0, f1, f10
602	beq	cr0, LL(9999)
603
604	addi	RET, RET, 1
605	fcmpu	cr0, f1, f11
606	beq	cr0, LL(9999)
607
608	addi	RET, RET, 1
609	fcmpu	cr0, f1, f12
610	beq	cr0, LL(9999)
611
612	addi	RET, RET, 1
613	fcmpu	cr0, f1, f13
614	beq	cr0, LL(9999)
615
616	addi	RET, RET, 1
617	fcmpu	cr0, f1, f14
618	beq	cr0, LL(9999)
619
620	addi	RET, RET, 1
621	fcmpu	cr0, f1, f15
622	beq	cr0, LL(9999)
623	.align 4
624
625LL(1050):
626	andi.	r0,  NN, 7
627	mtspr	CTR, r0
628	beq	LL(9999)
629	.align 4
630
631LL(1060):
632	LFD	f8,  0 * SIZE(XX)
633	addi	XX, XX,  1 * SIZE
634	fabs	f8, f8
635	addi	RET, RET, 1
636	fcmpu	cr0, f1, f8
637	beq	cr0, LL(9999)
638	bdnz	LL(1060)
639	b	LL(9999)
640	.align 4
641
642LL(1100):
643	sub	XX, XX, INCX
644
645	srawi.	r0, NN, 3
646	mtspr	CTR,  r0
647	beq-	LL(1150)
648
649	LFDUX	f24,   XX, INCX
650	LFDUX	f25,   XX, INCX
651	LFDUX	f26,   XX, INCX
652	LFDUX	f27,   XX, INCX
653	LFDUX	f28,   XX, INCX
654	LFDUX	f29,   XX, INCX
655	LFDUX	f30,   XX, INCX
656	LFDUX	f31,   XX, INCX
657	bdz	LL(1120)
658	.align 4
659
660LL(1110):
661	fabs	f8,  f24
662	fabs	f9,  f25
663	fabs	f10, f26
664	fabs	f11, f27
665
666	LFDUX	f24,   XX, INCX
667	LFDUX	f25,   XX, INCX
668	LFDUX	f26,   XX, INCX
669	LFDUX	f27,   XX, INCX
670
671	fabs	f12, f28
672	fabs	f13, f29
673	fabs	f14, f30
674	fabs	f15, f31
675
676	LFDUX	f28,   XX, INCX
677	LFDUX	f29,   XX, INCX
678	LFDUX	f30,   XX, INCX
679	LFDUX	f31,   XX, INCX
680
681	addi	RET, RET, 1
682	fcmpu	cr0, f1, f8
683	beq	cr0, LL(9999)
684
685	addi	RET, RET, 1
686	fcmpu	cr0, f1, f9
687	beq	cr0, LL(9999)
688
689	addi	RET, RET, 1
690	fcmpu	cr0, f1, f10
691	beq	cr0, LL(9999)
692
693	addi	RET, RET, 1
694	fcmpu	cr0, f1, f11
695	beq	cr0, LL(9999)
696
697	addi	RET, RET, 1
698	fcmpu	cr0, f1, f12
699	beq	cr0, LL(9999)
700
701	addi	RET, RET, 1
702	fcmpu	cr0, f1, f13
703	beq	cr0, LL(9999)
704
705	addi	RET, RET, 1
706	fcmpu	cr0, f1, f14
707	beq	cr0, LL(9999)
708
709	addi	RET, RET, 1
710	fcmpu	cr0, f1, f15
711	beq	cr0, LL(9999)
712
713	bdnz	LL(1110)
714	.align 4
715
716LL(1120):
717	fabs	f8,  f24
718	fabs	f9,  f25
719	fabs	f10, f26
720	fabs	f11, f27
721
722	fabs	f12, f28
723	fabs	f13, f29
724	fabs	f14, f30
725	fabs	f15, f31
726
727	addi	RET, RET, 1
728	fcmpu	cr0, f1, f8
729	beq	cr0, LL(9999)
730
731	addi	RET, RET, 1
732	fcmpu	cr0, f1, f9
733	beq	cr0, LL(9999)
734
735	addi	RET, RET, 1
736	fcmpu	cr0, f1, f10
737	beq	cr0, LL(9999)
738
739	addi	RET, RET, 1
740	fcmpu	cr0, f1, f11
741	beq	cr0, LL(9999)
742
743	addi	RET, RET, 1
744	fcmpu	cr0, f1, f12
745	beq	cr0, LL(9999)
746
747	addi	RET, RET, 1
748	fcmpu	cr0, f1, f13
749	beq	cr0, LL(9999)
750
751	addi	RET, RET, 1
752	fcmpu	cr0, f1, f14
753	beq	cr0, LL(9999)
754
755	addi	RET, RET, 1
756	fcmpu	cr0, f1, f15
757	beq	cr0, LL(9999)
758	.align 4
759
760LL(1150):
761	andi.	r0,  NN, 7
762	mtspr	CTR, r0
763	beq	LL(9999)
764	.align 4
765
766LL(1160):
767	LFDUX	f8,    XX, INCX
768	fabs	f8, f8
769	addi	RET, RET, 1
770	fcmpu	cr0, f1, f8
771	beq	cr0, LL(9999)
772	bdnz	LL(1160)
773	.align 4
774
775LL(9999):
776	lfd	f14,    0(SP)
777	lfd	f15,    8(SP)
778	lfd	f16,   16(SP)
779	lfd	f17,   24(SP)
780
781	lfd	f18,   32(SP)
782	lfd	f19,   40(SP)
783	lfd	f20,   48(SP)
784	lfd	f21,   56(SP)
785
786	lfd	f22,   64(SP)
787	lfd	f23,   72(SP)
788	lfd	f24,   80(SP)
789	lfd	f25,   88(SP)
790
791	lfd	f26,   96(SP)
792	lfd	f27,  104(SP)
793	lfd	f28,  112(SP)
794	lfd	f29,  120(SP)
795
796	lfd	f30,  128(SP)
797	lfd	f31,  136(SP)
798
799	addi	SP, SP, STACKSIZE
800	blr
801
802	EPILOGUE
803