--- /dev/null	Sat May 10 12:09:47 2014
+++ new/usr/src/lib/libm/sparc/src/locallibm.il	Sat May 10 12:09:47 2014
@@ -0,0 +1,2034 @@
+!
+! CDDL HEADER START
+!
+! The contents of this file are subject to the terms of the
+! Common Development and Distribution License (the "License").
+! You may not use this file except in compliance with the License.
+!
+! You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+! or http://www.opensolaris.org/os/licensing.
+! See the License for the specific language governing permissions
+! and limitations under the License.
+!
+! When distributing Covered Code,  this CDDL HEADER in each
+! file and  the License file at usr/src/OPENSOLARIS.LICENSE.
+! If applicable, add the following below this CDDL HEADER, with the
+! fields enclosed by brackets "[]" replaced with your own identifying
+! information: Portions Copyright [yyyy] [name of copyright owner]
+!
+! CDDL HEADER END
+!
+! Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
+!
+! Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+! Use is subject to license terms.
+!
+
+! Portions of this file are duplicated as GCC inline assembly in
+! libm_inlines.h.  Keep them in sync.
+
+ 	.inline	__r_hypot_,2
+	ld	[%o0],%o4
+	sethi	0x1fffff,%o5
+	or	%o5,1023,%o5
+	and	%o4,%o5,%o4
+	sethi	0x1fe000,%o3
+	cmp	%o4,%o3
+	ld	[%o0],%f0	! load result with first argument
+	bne	2f
+	nop
+	fabss	%f0,%f0
+	ld	[%o1],%f1
+	.volatile
+	fcmps	%f0,%f1		! generate invalid for Snan
+	.nonvolatile
+	nop
+	fba	5f
+	nop
+2:
+	ld	[%o1],%o4
+	sethi	0x1fffff,%o5
+	or	%o5,1023,%o5
+	and	%o4,%o5,%o4
+	sethi	0x1fe000,%o3
+	cmp	%o4,%o3
+	bne	4f
+	nop
+	ld	[%o1],%f0	! second argument inf
+	fabss	%f0,%f0
+	ld	[%o0],%f1
+	.volatile
+	fcmps	%f0,%f1		! generate invalid for Snan
+	.nonvolatile
+	nop
+	fba	5f
+	nop
+4:
+	ld	[%o1],%f3
+	fsmuld	%f0,%f0,%f0
+	fsmuld	%f3,%f3,%f2
+	faddd	%f2,%f0,%f0
+	fsqrtd	%f0,%f0
+	fdtos	%f0,%f0
+5:
+	.end
+
+	.inline	__c_abs,1
+	ld	[%o0],%o4
+	sethi	0x1fffff,%o5
+	or	%o5,1023,%o5
+	and	%o4,%o5,%o4
+	sethi	0x1fe000,%o3
+	cmp	%o4,%o3
+	ld	[%o0],%f0
+	bne	2f
+	nop
+	fabss	%f0,%f0
+	ld	[%o0+4],%f1
+	.volatile
+	fcmps	%f0,%f1		! generate invalid for Snan
+	.nonvolatile
+	nop
+	fba	5f
+	nop
+2:
+	ld	[%o0+4],%o4
+	sethi	0x1fffff,%o5
+	or	%o5,1023,%o5
+	and	%o4,%o5,%o4
+	sethi	0x1fe000,%o3
+	cmp	%o4,%o3
+	bne	4f
+	nop
+	ld	[%o0+4],%f0
+	fabss	%f0,%f0
+	ld	[%o0],%f1
+	.volatile
+	fcmps	%f0,%f1		! generate invalid for Snan
+	.nonvolatile
+	nop
+	fba	5f
+	nop
+! store to 8-aligned address
+4:
+	ld	[%o0+4],%f3
+	fsmuld	%f0,%f0,%f0
+	fsmuld	%f3,%f3,%f2
+	faddd	%f2,%f0,%f0
+	fsqrtd	%f0,%f0
+	fdtos	%f0,%f0
+5:
+	.end
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! void
+! __Fc_mult(c, a, b)
+! complex *c, *a, *b;
+! {
+
+	.inline	__Fc_mult,3
+!    21		c->real = (a->real *  b->real) - (a->imag *  b->imag)
+	ld	[%o1+4],%f0	! f0 = a->imag
+	ld	[%o2+4],%f1	! f1 = b->imag
+	ld	[%o1],%f2	! f2 = a->real
+	fsmuld	 %f0,%f1,%f4	 ! f4 = (a->imag *  b->imag)
+	ld	[%o2],%f3	! f3 = b->real
+	fsmuld	 %f2,%f1,%f6	! f6 = a->real * b->imag
+	fsmuld	 %f2,%f3,%f8	! f8 =	a->real * b->real
+	fsmuld	 %f0,%f3,%f10	! f10 = a->imag * b->real
+	fsubd	%f8,%f4,%f0	! f0 =	ar*br - ai*bi
+	faddd	%f6,%f10,%f2	! f2 = ai*br + ar*bi
+	fdtos	%f0,%f4
+	fdtos	%f2,%f6
+	st	%f4,[%o0]
+	st	%f6,[%o0+4]
+	.end
+! }
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! void
+! __Fc_div(c, a, b)
+! complex *c, *a, *b;
+! {
+	.inline	__Fc_div,3
+	ld	[%o2+4],%o3
+	sethi	%hi(0x7fffffff),%o4
+	or	%o4,%lo(0x7fffffff),%o4 ! [internal]
+	andcc	%o3,%o4,%g0
+	ld	[%o2],%f6		! f6 gets reb
+	bne	1f
+	nop
+	ld	[%o1],%f0
+	ld	[%o2],%f1
+	fdivs	%f0,%f1,%f0
+	st	%f0,[%o0]
+	ld	[%o1+4],%f3
+	fdivs	%f3,%f1,%f3
+	st	%f3,[%o0+4]
+	ba	2f
+	nop
+1:					! [internal]
+	sethi	%hi(0x3ff00000),%o4
+	or	%g0,0,%o5
+	std	%o4,[%sp+0x48]
+	ldd	[%sp+0x48],%f8
+	ld	[%o2+4],%f10		! f10 gets imb
+	fsmuld	%f6,%f6,%f16		! f16/17 gets reb**2
+	ld	[%o1+4],%f4		! f4 gets ima
+	fsmuld	%f10,%f10,%f12		! f12/13 gets imb**2
+	ld	[%o1],%f19		! f19 gets rea
+	fsmuld	%f4,%f10,%f0		! f0/f1 gets ima*imb
+	fsmuld	%f19,%f6,%f2		! f2/3 gets rea*reb
+	faddd	%f12,%f16,%f12		! f12/13 gets reb**2+imb**2
+	fdivd	%f8,%f12,%f12		! f12/13 gets 1/(reb**2+imb**2)
+	faddd	%f2,%f0,%f2		! f2/3 gets rea*reb+ima*imb
+	fsmuld	%f4,%f6,%f24		! f24/5 gets ima*reb
+	fmuld	%f2,%f12,%f2		! f2/3 gets rec
+	fsmuld	%f19,%f10,%f10		! f10/11 gets rea*imb
+	fsubd	%f24,%f10,%f10		! f10/11 gets ima*reb-rea*imb
+	fmuld	%f10,%f12,%f12		! f12 gets imc
+	fdtos	%f2,%f7			! f7 gets rec
+	fdtos	%f12,%f15		! f15 gets imc
+	st	%f7,[%o0]
+	st	%f15,[%o0+4]
+2:
+	.end
+! }
+
+	.inline	.mul,2
+	.volatile
+	smul	%o0,%o1,%o0
+	rd	%y,%o1
+	sra	%o0,31,%o2
+	cmp	%o1,%o2
+	.nonvolatile
+	.end
+
+	.inline	.umul,2
+	.volatile
+	umul	%o0,%o1,%o0
+	rd	%y,%o1
+	tst	%o1
+	.nonvolatile
+	.end
+
+	.inline	.div,2
+	sra	%o0,31,%o4	! extend sign
+	.volatile
+	wr	%o4,%g0,%y
+	cmp	%o1,0xffffffff	! is divisor -1?
+	be,a	1f		! if yes
+	.volatile
+	subcc	%g0,%o0,%o0	! simply negate dividend
+	nop			! RT620 FABs A.0/A.1
+	sdiv	%o0,%o1,%o0	! o0 contains quotient a/b
+	.nonvolatile
+1:
+	.end
+
+	.inline	.udiv,2
+	.volatile
+	wr	%g0,%g0,%y
+	nop
+	nop
+	nop
+	udiv	%o0,%o1,%o0	! o0 contains quotient a/b
+	.nonvolatile
+	.end
+
+	.inline	.rem,2
+	sra	%o0,31,%o4	! extend sign
+	.volatile
+	wr	%o4,%g0,%y
+	cmp	%o1,0xffffffff	! is divisor -1?
+	be,a	1f		! if yes
+	.volatile
+	or	%g0,%g0,%o0	! simply return 0
+	nop			! RT620 FABs A.0/A.1
+	sdiv	%o0,%o1,%o2	! o2 contains quotient a/b
+	.nonvolatile
+	smul	%o2,%o1,%o4	! o4 contains q*b
+	sub	%o0,%o4,%o0	! o0 gets a-q*b
+1:
+	.end
+
+	.inline	.urem,2
+	.volatile
+	wr	%g0,%g0,%y
+	nop
+	nop
+	nop
+	udiv	%o0,%o1,%o2	! o2 contains quotient a/b
+	.nonvolatile
+	umul	%o2,%o1,%o4	! o4 contains q*b
+	sub	%o0,%o4,%o0	! o0 gets a-q*b
+	.end
+
+	.inline	.div_o3,2
+	sra	%o0,31,%o4	! extend sign
+	.volatile
+	wr	%o4,%g0,%y
+	cmp	%o1,0xffffffff	! is divisor -1?
+	be,a	1f		! if yes
+	.volatile
+	subcc	%g0,%o0,%o0	! simply negate dividend
+	mov	%o0,%o3		! o3 gets __remainder
+	sdiv	%o0,%o1,%o0	! o0 contains quotient a/b
+	.nonvolatile
+	smul	%o0,%o1,%o4	! o4 contains q*b
+	ba	2f
+	sub	%o3,%o4,%o3	! o3 gets a-q*b
+1:
+	mov	%g0,%o3		! __remainder is 0
+2:
+	.end
+
+	.inline	.udiv_o3,2
+	.volatile
+	wr	%g0,%g0,%y
+	mov	%o0,%o3		! o3 gets __remainder
+	nop
+	nop
+	udiv	%o0,%o1,%o0	! o0 contains quotient a/b
+	.nonvolatile
+	umul	%o0,%o1,%o4	! o4 contains q*b
+	sub	%o3,%o4,%o3	! o3 gets a-q*b
+	.end
+
+	.inline	__ieee754_sqrt,2
+	std	%o0,[%sp+0x48]		! store to 8-aligned address
+	ldd	[%sp+0x48],%f0
+	fsqrtd	%f0,%f0
+	.end
+
+	.inline	__inline_sqrtf,1
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	fsqrts	%f0,%f0
+	.end
+
+	.inline	__inline_sqrt,2
+	std	%o0,[%sp+0x48]		! store to 8-aligned address
+	ldd	[%sp+0x48],%f0
+	fsqrtd	%f0,%f0
+	.end
+
+	.inline	__sqrtf,1
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	fsqrts	%f0,%f0
+	.end
+
+	.inline	__sqrt,2
+	std	%o0,[%sp+0x48]		! store to 8-aligned address
+	ldd	[%sp+0x48],%f0
+	fsqrtd	%f0,%f0
+	.end
+
+	.inline	__r_sqrt_,1
+	ld	[%o0],%f0
+	fsqrts	%f0,%f0
+	.end
+
+	.inline	__d_sqrt_,1
+	ld	[%o0],%f0
+	ld	[%o0+4],%f1
+	fsqrtd	%f0,%f0
+	.end
+
+	.inline	__ceil,2
+	std	%o0,[%sp+0x48]
+	sethi	%hi(0x80000000),%o5
+	andn	%o0,%o5,%o2
+	sethi	%hi(0x43300000),%o3
+	st	%g0,[%sp+0x54]
+	subcc	%o2,%o3,%g0
+	bl	1f
+	nop
+	sethi	%hi(0x3ff00000),%o2
+	st	%o2,[%sp+0x50]
+	ldd	[%sp+0x48],%f0
+	ldd	[%sp+0x50],%f2
+	fmuld	%f0,%f2,%f0
+	ba	4f
+	nop
+1:
+	tst	%o0
+	st	%o3,[%sp+0x50]
+	ldd	[%sp+0x50],%f2
+	bge	2f
+	nop
+	fnegs	%f2,%f2
+2:
+	ldd	[%sp+0x48],%f4
+	faddd	%f4,%f2,%f0
+	fsubd	%f0,%f2,%f0
+	fcmpd	%f0,%f4
+	sethi	%hi(0x3ff00000),%o2
+	st	%o2,[%sp+0x50]
+	and	%o0,%o5,%o4
+	fbge	3f
+	nop
+	ldd	[%sp+0x50],%f4
+	faddd	%f0,%f4,%f0
+3:
+	st	%f0,[%sp+0x48]
+	ld	[%sp+0x48],%o3
+	andn	%o3,%o5,%o3
+	or	%o4,%o3,%o3
+	st	%o3,[%sp+0x48]
+	ld	[%sp+0x48],%f0
+4:
+	.end
+
+	.inline	__floor,2
+	std	%o0,[%sp+0x48]
+	sethi	%hi(0x80000000),%o5
+	andn	%o0,%o5,%o2
+	sethi	%hi(0x43300000),%o3
+	st	%g0,[%sp+0x54]
+	subcc	%o2,%o3,%g0
+	bl	1f
+	nop
+	sethi	%hi(0x3ff00000),%o2
+	st	%o2,[%sp+0x50]
+	ldd	[%sp+0x48],%f0
+	ldd	[%sp+0x50],%f2
+	fmuld	%f0,%f2,%f0
+	ba	4f
+	nop
+1:
+	tst	%o0
+	st	%o3,[%sp+0x50]
+	ldd	[%sp+0x50],%f2
+	bge	2f
+	nop
+	fnegs	%f2,%f2
+2:
+	ldd	[%sp+0x48],%f4
+	faddd	%f4,%f2,%f0
+	fsubd	%f0,%f2,%f0
+	fcmpd	%f0,%f4
+	sethi	%hi(0x3ff00000),%o2
+	st	%o2,[%sp+0x50]
+	ldd	[%sp+0x50],%f4
+	and	%o0,%o5,%o4
+	fble	3f
+	nop
+	fsubd	%f0,%f4,%f0
+3:
+	st	%f0,[%sp+0x48]
+	ld	[%sp+0x48],%o3
+	andn	%o3,%o5,%o3
+	or	%o4,%o3,%o3
+	st	%o3,[%sp+0x48]
+	ld	[%sp+0x48],%f0
+4:
+	.end
+
+	.inline	__ilogb,2
+	sethi	%hi(0x7ff00000),%o4
+	andcc	%o4,%o0,%o2
+	bne	1f
+	nop
+	sethi	%hi(0x43500000),%o3
+	std	%o0,[%sp+0x48]
+	st	%o3,[%sp+0x50]
+	st	%g0,[%sp+0x54]
+	ldd	[%sp+0x48],%f0
+	ldd	[%sp+0x50],%f2
+	fmuld	%f0,%f2,%f0
+	sethi	%hi(0x80000001),%o0
+	or	%o0,%lo(0x80000001),%o0
+	st	%f0,[%sp+0x48]
+	ld	[%sp+0x48],%o2
+	andcc	%o2,%o4,%o2
+	srl	%o2,20,%o2
+	be	2f
+	nop
+	sub	%o2,0x435,%o0
+	ba	2f
+	nop
+1:
+	subcc	%o4,%o2,%g0
+	srl	%o2,20,%o3
+	bne	0f
+	nop
+	sethi	%hi(0x7fffffff),%o0
+	or	%o0,%lo(0x7fffffff),%o0
+	ba	2f
+	nop
+0:
+	sub	%o3,0x3ff,%o0
+2:
+	.end
+
+	.inline	__rint,2
+	std	%o0,[%sp+0x48]
+	sethi	%hi(0x80000000),%o2
+	andn	%o0,%o2,%o2
+	ldd	[%sp+0x48],%f0
+	sethi	%hi(0x43300000),%o3
+	st	%g0,[%sp+0x50]
+	st	%g0,[%sp+0x54]
+	subcc	%o2,%o3,%g0
+	bl	1f
+	nop
+	sethi	%hi(0x3ff00000),%o2
+	st	%o2,[%sp+0x50]
+	ldd	[%sp+0x50],%f2
+	fmuld	%f0,%f2,%f0
+	ba	3f
+	nop
+1:
+	tst	%o0
+	st	%o3,[%sp+0x48]
+	st	%g0,[%sp+0x4c]
+	ldd	[%sp+0x48],%f2
+	bge	2f
+	nop
+	fnegs	%f2,%f2
+2:
+	faddd	%f0,%f2,%f0
+	fcmpd	%f0,%f2
+	fbne	0f
+	nop
+	ldd	[%sp+0x50],%f0
+	bge	3f
+	nop
+	fnegs	%f0,%f0
+	ba	3f
+	nop
+0:
+	fsubd	%f0,%f2,%f0
+3:
+	.end
+
+	.inline	__rintf,1
+	st	%o0,[%sp+0x48]
+	sethi	%hi(0x80000000),%o2
+	andn	%o0,%o2,%o2
+	ld	[%sp+0x48],%f0
+	sethi	%hi(0x4b000000),%o3
+	st	%g0,[%sp+0x50]
+	subcc	%o2,%o3,%g0
+	bl	1f
+	nop
+	sethi	%hi(0x3f800000),%o2
+	st	%o2,[%sp+0x50]
+	ld	[%sp+0x50],%f2
+	fmuls	%f0,%f2,%f0
+	ba	3f
+	nop
+1:
+	tst	%o0
+	st	%o3,[%sp+0x48]
+	ld	[%sp+0x48],%f2
+	bge	2f
+	nop
+	fnegs	%f2,%f2
+2:
+	fadds	%f0,%f2,%f0
+	fcmps	%f0,%f2
+	fbne	0f
+	nop
+	ld	[%sp+0x50],%f0
+	bge	3f
+	nop
+	fnegs	%f0,%f0
+	ba	3f
+	nop
+0:
+	fsubs	%f0,%f2,%f0
+3:
+	.end
+
+	.inline	__min_subnormal,0
+	set	0x0,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	set	0x1,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f1
+	.end
+
+	.inline	__d_min_subnormal_,0
+	set	0x0,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	set	0x1,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f1
+	.end
+
+	.inline	__min_subnormalf,0
+	set	0x1,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__r_min_subnormal_,0
+	set	0x1,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__max_subnormal,0
+	set	0x000fffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	set	0xffffffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f1
+	.end
+
+	.inline	__d_max_subnormal_,0
+	set	0x000fffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	set	0xffffffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f1
+	.end
+
+	.inline	__max_subnormalf,0
+	set	0x007fffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__r_max_subnormal_,0
+	set	0x007fffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__min_normal,0
+        set     0x00100000,%o0
+        set     0x0,%o1
+        std     %o0,[%sp+0x48]
+        ldd     [%sp+0x48],%f0
+	.end
+
+	.inline	__d_min_normal_,0
+	set	0x00100000,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	set	0x0,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f1
+	.end
+
+	.inline	__min_normalf,0
+	set	0x00800000,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__r_min_normal_,0
+	set	0x00800000,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__max_normal,0
+        set     0x7fefffff,%o0
+        set     0xffffffff,%o1
+        std     %o0,[%sp+0x48]
+        ldd     [%sp+0x48],%f0
+	.end
+
+	.inline	__d_max_normal_,0
+	set	0x7fefffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	set	0xffffffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f1
+	.end
+
+	.inline	__max_normalf,0
+	set	0x7f7fffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__r_max_normal_,0
+	set	0x7f7fffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__infinity,0
+        set      0x7ff00000,%o0
+        set      0x0,%o1
+        std      %o0,[%sp+0x48]
+        ldd      [%sp+0x48],%f0
+        .end
+
+	.inline	__infinity,0
+        set      0x7ff00000,%o0
+        set      0x0,%o1
+        std      %o0,[%sp+0x48]
+        ldd      [%sp+0x48],%f0
+        .end
+
+	.inline	__d_infinity_,0
+	set	0x7ff00000,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	set	0x0,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f1
+	.end
+
+	.inline	__infinityf,0
+	set	0x7f800000,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__r_infinity_,0
+	set	0x7f800000,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__signaling_nan,0
+        set     0x7ff00000,%o0
+        set     0x1,%o1
+        std     %o0,[%sp+0x48]
+        ldd     [%sp+0x48],%f0
+	.end
+
+	.inline	__d_signaling_nan_,0
+	set	0x7ff00000,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	set	0x1,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f1
+	.end
+
+	.inline	__signaling_nanf,0
+	set	0x7f800001,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__r_signaling_nan_,0
+	set	0x7f800001,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__quiet_nan,0
+	set	0x7fffffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	set	0xffffffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f1
+	.end
+
+	.inline	__d_quiet_nan_,0
+	set	0x7fffffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	set	0xffffffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f1
+	.end
+
+	.inline	__quiet_nanf,0
+	set	0x7fffffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__r_quiet_nan_,0
+	set	0x7fffffff,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__swapEX,1
+	and     %o0,0x1f,%o1
+	sll     %o1,5,%o1               ! shift input to aexc bit location
+	.volatile
+	st      %fsr,[%sp+0x44]
+	ld      [%sp+0x44],%o0          ! o0 = fsr
+	andn    %o0,0x3e0,%o2
+	or      %o1,%o2,%o1             ! o1 = new fsr
+	st      %o1,[%sp+0x44]
+	ld      [%sp+0x44],%fsr
+	srl     %o0,5,%o0
+	and     %o0,0x1f,%o0
+	.nonvolatile
+	.end
+
+	.inline	_QgetRD,0
+	st	%fsr,[%sp+0x44]
+	ld	[%sp+0x44],%o0		! o0 = fsr
+	srl	%o0,30,%o0		! return __round control value
+	.end
+
+	.inline	_QgetRP,0
+	or	%g0,%g0,%o0
+	.end
+
+	.inline	__swapRD,1
+	and	%o0,0x3,%o0
+	sll     %o0,30,%o1              ! shift input to RD bit location
+	.volatile
+	st      %fsr,[%sp+0x44]
+	ld      [%sp+0x44],%o0          ! o0 = fsr
+	set     0xc0000000,%o4          ! mask of rounding direction bits
+	andn    %o0,%o4,%o2
+	or      %o1,%o2,%o1             ! o1 = new fsr
+	st      %o1,[%sp+0x44]
+	ld      [%sp+0x44],%fsr
+	srl     %o0,30,%o0
+	and     %o0,0x3,%o0
+	.nonvolatile
+	.end
+!
+! On the SPARC, __swapRP is a no-op; always return 0 for backward compatibility
+!
+
+	.inline	__swapRP,1
+	or	%g0,%g0,%o0
+	.end
+
+	.inline	__swapTE,1
+	and	%o0,0x1f,%o0
+	sll     %o0,23,%o1              ! shift input to TEM bit location
+	.volatile
+	st      %fsr,[%sp+0x44]
+	ld      [%sp+0x44],%o0            ! o0 = fsr
+	set     0x0f800000,%o4          ! mask of TEM (Trap Enable Mode bits)
+	andn    %o0,%o4,%o2
+	or      %o1,%o2,%o1             ! o1 = new fsr
+	st      %o1,[%sp+0x48]
+	ld      [%sp+0x48],%fsr
+	srl     %o0,23,%o0
+	and     %o0,0x1f,%o0
+	.nonvolatile
+	.end
+
+	.inline	__fp_class,2
+	sethi	%hi(0x80000000),%o2	! o2 gets 80000000
+	andn	%o0,%o2,%o0		! o0-o1 gets abs(x)
+	orcc	%o0,%o1,%g0		! set cc as x is zero/nonzero
+	bne	1f			! branch if x is nonzero
+	nop
+	mov	0,%o0
+	ba	2f			! x is 0
+	nop
+1:
+	sethi	%hi(0x7ff00000),%o2	! o2 gets 7ff00000
+	andcc	%o0,%o2,%g0		! cc set by __exp field of x
+	bne	1f			! branch if normal or max __exp
+	nop
+	mov	1,%o0
+	ba	2f			! x is subnormal
+	nop
+1:
+	cmp	%o0,%o2
+	bge	1f			! branch if x is max __exp
+	nop
+	mov	2,%o0
+	ba	2f			! x is normal
+	nop
+1:
+	andn	%o0,%o2,%o0		! o0 gets msw __significand field
+	orcc	%o0,%o1,%g0		! set cc by OR __significand
+	bne	1f			! Branch if __nan
+	nop
+	mov	3,%o0
+	ba	2f			! x is __infinity
+	nop
+1:
+	sethi	%hi(0x00080000),%o2
+	andcc	%o0,%o2,%g0		! set cc by quiet/sig bit
+	be	1f			! Branch if signaling
+	nop
+	mov	4,%o0			! x is quiet NaN
+	ba	2f
+	nop
+1:
+	mov	5,%o0			! x is signaling NaN
+2:
+	.end
+
+	.inline	__fp_classf,1
+	sethi	%hi(0x80000000),%o2
+	andncc	%o0,%o2,%o0
+	bne	1f
+	nop
+	mov	0,%o0
+	ba	2f			! x is 0
+	nop
+1:
+	sethi	%hi(0x7f800000),%o2
+	andcc	%o0,%o2,%g0
+	bne	1f
+	nop
+	mov	1,%o0
+	ba	2f			! x is subnormal
+	nop
+1:
+	cmp	%o0,%o2
+	bge	1f
+	nop
+	mov	2,%o0
+	ba	2f			! x is normal
+	nop
+1:
+	bg	1f
+	nop
+	mov	3,%o0
+	ba	2f			! x is __infinity
+	nop
+1:
+	sethi	%hi(0x00400000),%o2
+	andcc	%o0,%o2,%g0
+	mov	4,%o0			! x is quiet NaN
+	bne	2f
+	nop
+	mov	5,%o0			! x is signaling NaN
+2:
+	.end
+
+	.inline	__ir_fp_class_,1
+	ld	[%o0],%o0
+	sethi	%hi(0x80000000),%o2
+	andncc	%o0,%o2,%o0
+	bne	1f
+	nop
+	mov	0,%o0
+	ba	2f			! x is 0
+	nop
+1:
+	sethi	%hi(0x7f800000),%o2
+	andcc	%o0,%o2,%g0
+	bne	1f
+	nop
+	mov	1,%o0
+	ba	2f			! x is subnormal
+	nop
+1:
+	cmp	%o0,%o2
+	bge	1f
+	nop
+	mov	2,%o0
+	ba	2f			! x is normal
+	nop
+1:
+	bg	1f
+	nop
+	mov	3,%o0
+	ba	2f			! x is __infinity
+	nop
+1:
+	sethi	%hi(0x00400000),%o2
+	andcc	%o0,%o2,%g0
+	mov	4,%o0			! x is quiet NaN
+	bne	2f
+	nop
+	mov	5,%o0			! x is signaling NaN
+2:
+	.end
+
+	.inline	__copysign,4
+        set     0x80000000,%o3
+        and     %o2,%o3,%o2
+        andn    %o0,%o3,%o0
+        or      %o0,%o2,%o0
+        std      %o0,[%sp+0x48]
+        ldd     [%sp+0x48],%f0
+        .end
+
+	.inline	__copysignf,2
+	set	0x80000000,%o2
+	andn	%o0,%o2,%o0
+	and	%o1,%o2,%o1
+	or	%o0,%o1,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	__r_copysign_,2
+	ld	[%o0],%o0
+	ld	[%o1],%o1
+	set	0x80000000,%o2
+	andn	%o0,%o2,%o0
+	and	%o1,%o2,%o1
+	or	%o0,%o1,%o0
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	.end
+
+	.inline	_finite,2
+	set	0x7ff00000,%o1
+	and	%o0,%o1,%o0
+	cmp	%o0,%o1
+	mov	1,%o0
+	bne	1f
+	nop
+	mov	0,%o0
+1:
+	.end
+
+	.inline	__finitef,2
+	set	0x7f800000,%o1
+	and	%o0,%o1,%o0
+	cmp	%o0,%o1
+	mov	1,%o0
+	bne	1f
+	nop
+	mov	0,%o0
+1:
+	.end
+
+	.inline	__ir_finite_,1
+	ld	[%o0],%o0
+	set	0x7f800000,%o1
+	and	%o0,%o1,%o0
+	cmp	%o0,%o1
+	mov	1,%o0
+	bne	1f
+	nop
+	mov	0,%o0
+1:
+	.end
+
+	.inline	__signbit,1
+	srl	%o0,31,%o0
+	.end
+
+	.inline	__signbitf,1
+	srl	%o0,31,%o0
+	.end
+
+	.inline	__ir_signbit_,1
+	ld	[%o0],%o0
+	srl	%o0,31,%o0
+	.end
+
+	.inline	__isinf,2
+	tst	%o1
+	sethi	%hi(0x80000000),%o2
+	bne	1f
+	nop
+	andn	%o0,%o2,%o0
+	sethi	%hi(0x7ff00000),%o2
+	cmp	%o0,%o2
+	mov	1,%o0
+	be	2f
+	nop
+1:
+	mov	0,%o0
+2:
+	.end
+
+	.inline	__isinff,1
+	sethi	%hi(0x80000000),%o2
+	andn	%o0,%o2,%o0		! o0 gets abs(x)
+	sethi	%hi(0x7f800000),%o2
+	cmp	%o0,%o2
+	mov	0,%o0
+	bne	1f			! Branch if not inf.
+	nop
+	mov	1,%o0
+1:
+	.end
+
+	.inline	__ir_isinf_,1
+	ld	[%o0],%o0
+	sethi	%hi(0x80000000),%o2
+	andn	%o0,%o2,%o0		! o0 gets abs(x)
+	sethi	%hi(0x7f800000),%o2
+	cmp	%o0,%o2
+	mov	0,%o0
+	bne	1f			! Branch if not inf.
+	nop
+	mov	1,%o0
+1:
+	.end
+
+	.inline	__isnan,2
+	sethi	%hi(0x80000000),%o2
+	andn	%o0,%o2,%o0
+	sub	%g0,%o1,%o3
+	or	%o1,%o3,%o1
+	srl	%o1,31,%o1
+	or	%o0,%o1,%o0
+	sethi	%hi(0x7ff00000),%o4
+	sub	%o4,%o0,%o0
+	srl	%o0,31,%o0
+	.end
+
+	.inline	__isnanf,1
+	sethi	%hi(0x80000000),%o2
+	andn	%o0,%o2,%o0
+	sethi	%hi(0x7f800000),%o1
+	sub	%o1,%o0,%o0
+	srl	%o0,31,%o0
+	.end
+
+	.inline	__ir_isnan_,1
+	ld	[%o0],%o0
+	sethi	%hi(0x80000000),%o2
+	andn	%o0,%o2,%o0
+	sethi	%hi(0x7f800000),%o1
+	sub	%o1,%o0,%o0
+	srl	%o0,31,%o0
+	.end
+
+	.inline	__isnormal,2
+	sethi	%hi(0x80000000),%o2
+	andn	%o0,%o2,%o0
+	sethi	%hi(0x7ff00000),%o2
+	cmp	%o0,%o2
+	sethi	%hi(0x00100000),%o2
+	bge	1f
+	nop
+	cmp	%o0,%o2
+	mov	1,%o0
+	bge	2f
+	nop
+1:
+	mov	0,%o0
+2:
+	.end
+
+	.inline	__isnormalf,1
+	sethi	%hi(0x80000000),%o2
+	andn	%o0,%o2,%o0
+	sethi	%hi(0x7f800000),%o2
+	cmp	%o0,%o2
+	sethi	%hi(0x00800000),%o2
+	bge	1f
+	nop
+	cmp	%o0,%o2
+	mov	1,%o0
+	bge	2f
+	nop
+1:
+	mov	0,%o0
+2:
+	.end
+
+	.inline	__ir_isnormal_,1
+	ld	[%o0],%o0
+	sethi	%hi(0x80000000),%o2
+	andn	%o0,%o2,%o0
+	sethi	%hi(0x7f800000),%o2
+	cmp	%o0,%o2
+	sethi	%hi(0x00800000),%o2
+	bge	1f
+	nop
+	cmp	%o0,%o2
+	mov	1,%o0
+	bge	2f
+	nop
+1:
+	mov	0,%o0
+2:
+	.end
+
+	.inline	__issubnormal,2
+	sethi	%hi(0x80000000),%o2	! o2 gets 80000000
+	andn	%o0,%o2,%o0		! o0/o1 gets abs(x)
+	sethi	%hi(0x00100000),%o2	! o2 gets 00100000
+	cmp	%o0,%o2
+	bge	1f			! branch if x norm or max __exp
+	nop
+	orcc	%o0,%o1,%g0
+	be	1f			! Branch if x zero
+	nop
+	mov	1,%o0			! x is subnormal
+	ba	2f
+	nop
+1:
+	mov	0,%o0
+2:
+	.end
+
+	.inline	__issubnormalf,1
+	sethi	%hi(0x80000000),%o2	! o2 gets 80000000
+	andn	%o0,%o2,%o0		! o0 gets abs(x)
+	sethi	%hi(0x00800000),%o2	! o2 gets 00800000
+	cmp	%o0,%o2
+	bge	1f			! branch if x norm or max __exp
+	nop
+	orcc	%o0,%g0,%g0
+	be	1f			! Branch if x zero
+	nop
+	mov	1,%o0			! x is subnormal
+	ba	2f
+	nop
+1:
+	mov	0,%o0
+2:
+	.end
+
+	.inline	__ir_issubnormal_,1
+	ld	[%o0],%o0
+	sethi	%hi(0x80000000),%o2	! o2 gets 80000000
+	andn	%o0,%o2,%o0		! o0 gets abs(x)
+	sethi	%hi(0x00800000),%o2	! o2 gets 00800000
+	cmp	%o0,%o2
+	bge	1f			! branch if x norm or max __exp
+	nop
+	orcc	%o0,%g0,%g0
+	be	1f			! Branch if x zero
+	nop
+	mov	1,%o0			! x is subnormal
+	ba	2f
+	nop
+1:
+	mov	0,%o0
+2:
+	.end
+
+	.inline	__iszero,2
+	sethi	%hi(0x80000000),%o2
+	andn	%o0,%o2,%o0
+	orcc	%o0,%o1,%g0
+	mov	1,%o0
+	be	1f
+	nop
+	mov	0,%o0
+1:
+	.end
+
+	.inline	__iszerof,1
+	sethi	%hi(0x80000000),%o2
+	andncc	%o0,%o2,%o0
+	mov	1,%o0
+	be	1f
+	nop
+	mov	0,%o0
+1:
+	.end
+
+	.inline	__ir_iszero_,1
+	ld	[%o0],%o0
+	sethi	%hi(0x80000000),%o2
+	andncc	%o0,%o2,%o0
+	mov	1,%o0
+	be	1f
+	nop
+	mov	0,%o0
+1:
+	.end
+
+	.inline	abs,1
+	sra	%o0,31,%o1
+	xor	%o0,%o1,%o0
+        sub	%o0,%o1,%o0
+        .end
+
+	.inline	__fabs,2
+	st	%o0,[%sp+0x48]
+	st	%o1,[%sp+0x4c]
+	ldd	[%sp+0x48],%f0
+	fabsd	%f0,%f0
+	.end
+
+	.inline	__fabsf,1
+	st	%o0,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	fabss	%f0,%f0
+	.end
+
+	.inline	__r_fabs_,1
+	ld	[%o0],%f0
+	fabss	%f0,%f0
+	.end
+!
+!	__nintf - f77 NINT(REAL*4)
+!
+
+	.inline	__nintf,1
+	srl	%o0,30-7,%g1
+	sethi	%hi(0x7fffff),%o2
+	st	%o0,[%sp+0x44]
+	and	%g1,0xff,%g1
+	or	%o2,%lo(0x7fffff),%o2
+	sethi	%hi(1<<22),%o4
+	subcc	%g1,127+31,%g0
+	and	%o0,%o2,%o3
+	bl	0f
+	nop
+	sethi	%hi(0xcf000000),%o2
+	sethi	%hi(0x80000000),%g1
+	subcc	%o0,%o2,%g0
+	or	%g1,%g0,%o0
+	be	9f
+	nop
+	ld	[%sp+0x44],%f0
+	fstoi	%f0,%f0
+	st	%f0,[%sp+0x44]
+	ld	[%sp+0x44],%o0
+	ba	9f
+	nop
+0:
+	add	%o4,%o4,%o5
+	or	%o3,%o5,%o3
+	sra	%o0,31-0,%o2
+	subcc	%g1,127,%g1
+	srl	%o4,%g1,%o4
+	bge	1f
+	nop
+	subcc	%g1,-1,%g0
+	or	%g0,0,%o0
+	bne	2f
+	nop
+	or	%g0,1,%o0
+	ba	2f
+	nop
+1:
+	add	%o3,%o4,%o3
+	or	%g0,23,%o0
+	subcc	%o0,%g1,%o0
+	bl	1f
+	nop
+	srl	%o3,%o0,%o0
+	ba	2f
+	nop
+1:
+	sub	%g0,%o0,%o0
+	sll	%o3,%o0,%o0
+2:
+	xor	%o0,%o2,%o0
+	and	%o2,1,%o2
+	add	%o0,%o2,%o0
+9:
+	.end
+
+	.inline	__il_nint,1
+	ld	[%o0],%o0
+	sra	%o0,0,%o0
+	srlx	%o0,31-8,%g1
+	or	%g0,1,%o2
+	sllx	%o2,23-1,%o4
+	and	%g1,0xff,%g1
+	sllx	%o2,63-0,%o2
+	subcc	%g1,127+63,%g0
+	bl	0f
+	nop
+	st	%o0,[%sp+0x48]
+	ld	[%sp+0x48],%f0
+	fstox	%f0,%f0
+	std	%f0,[%sp+0x48]
+	ldx	[%sp+0x48],%o1
+	ba	9f
+	nop
+0:
+	add	%o4,%o4,%o5
+	srax	%o2,63-23,%o2
+	sub	%g1,127+23,%o1
+	xnor	%o2,%g0,%o2
+	and	%o0,%o2,%o3
+	or	%o3,%o5,%o3
+	srax	%o0,63-0,%o2
+	subcc	%g1,127,%g1
+	bge	1f
+	nop
+	subcc	%g1,-1,%g0
+	or	%g0,0,%o0
+	bne	2f
+	nop
+	or	%g0,1,%o0
+	ba	2f
+	nop
+1:
+	brlz,pt	%o1,3f
+	nop
+	sub	%g1,23,%o0
+	sllx	%o3,%o0,%o0
+	ba	2f
+	nop
+3:
+	srlx	%o4,%g1,%o4
+	add	%o3,%o4,%o3
+	or	%g0,23,%o0
+	sub	%o0,%g1,%o0
+	srlx	%o3,%o0,%o0
+2:
+	xor	%o0,%o2,%o0
+	sub	%o0,%o2,%o1
+9:
+	srlx	%o1,32,%o0
+	.end
+!
+!	__i_dnnt - f77 NINT(REAL*8)
+!
+
+	.inline	__i_dnnt,1
+	ld	[%o0],%o1
+	sllx	%o1,32,%o1
+	ld	[%o0+4],%o0
+	or	%o0,%o1,%o0
+	srlx	%o0,63-11,%g1
+	or	%g0,1,%o2
+	stx	%o0,[%sp+0x48]
+	sllx	%o2,52-1,%o4
+	and	%g1,0x7ff,%g1
+	sllx	%o2,63-0,%o2
+	subcc	%g1,1023+32,%g0
+	bl	0f
+	nop
+	ldd	[%sp+0x48],%f0
+	ba	8f
+	nop
+0:
+	add	%o4,%o4,%o5
+	srax	%o2,63-52,%o2
+	sub	%g1,1023+30,%o1
+	xnor	%o2,%g0,%o2
+	and	%o0,%o2,%o3
+	or	%o3,%o5,%o3
+	srax	%o0,63-0,%o2
+	subcc	%g1,1023,%g1
+	bge	1f
+	nop
+	subcc	%g1,-1,%g0
+	or	%g0,0,%o0
+	bne	2f
+	nop
+	or	%g0,1,%o0
+	ba	2f
+	nop
+1:
+	srlx	%o4,%g1,%o4
+	add	%o3,%o4,%o3
+	or	%g0,52,%o0
+	sub	%o0,%g1,%o0
+	srlx	%o3,%o0,%o0
+2:
+	xor	%o0,%o2,%o0
+	sub	%o0,%o2,%o0
+	brlz,pt	%o1,9f
+	nop
+	stx	%o0,[%sp+0x48]
+	ldd	[%sp+0x48],%f0
+	fxtod	%f0,%f0
+8:
+	fdtoi	%f0,%f0
+	st	%f0,[%sp+0x44]
+	ld	[%sp+0x44],%o0
+9:
+	.end
+
+	.inline	__il_dnnt,1
+	ld	[%o0],%o1
+	sllx	%o1,32,%o1
+	ld	[%o0+4],%o0
+	or	%o0,%o1,%o0
+	srlx	%o0,63-11,%g1
+	or	%g0,1,%o2
+	sllx	%o2,52-1,%o4
+	and	%g1,0x7ff,%g1
+	sllx	%o2,63-0,%o2
+	subcc	%g1,1023+63,%g0
+	bl	0f
+	nop
+	stx	%o0,[%sp+0x48]
+	ldd	[%sp+0x48],%f0
+	fdtox	%f0,%f0
+	std	%f0,[%sp+0x48]
+	ldx	[%sp+0x48],%o1
+	ba	9f
+	nop
+0:
+	add	%o4,%o4,%o5
+	srax	%o2,63-52,%o2
+	sub	%g1,1023+52,%o1
+	xnor	%o2,%g0,%o2
+	and	%o0,%o2,%o3
+	or	%o3,%o5,%o3
+	srax	%o0,63-0,%o2
+	subcc	%g1,1023,%g1
+	bge	1f
+	nop
+	subcc	%g1,-1,%g0
+	or	%g0,0,%o0
+	bne	2f
+	nop
+	or	%g0,1,%o0
+	ba	2f
+	nop
+1:
+	brlz,pt	%o1,3f
+	nop
+	sub	%g1,52,%o0
+	sllx	%o3,%o0,%o0
+	ba	2f
+	nop
+3:
+	srlx	%o4,%g1,%o4
+	add	%o3,%o4,%o3
+	or	%g0,52,%o0
+	sub	%o0,%g1,%o0
+	srlx	%o3,%o0,%o0
+2:
+	xor	%o0,%o2,%o0
+	sub	%o0,%o2,%o1
+9:
+	srlx	%o1,32,%o0
+	.end
+
+	.inline	__anintf,1
+	or	%g0,1,%o1
+	srl	%o0,23,%g1
+	and	%g1,0xff,%g1
+	sub	%g0,%g1,%g1
+	add	%g1,0x95,%g1
+	subcc	%g1,23,%g0
+	sll	%o1,%g1,%o1
+	sub	%o1,1,%o2
+	bcs	1f
+	nop
+	be	2f
+	nop
+	bl	3f
+	nop
+	sethi	%hi(0x80000000),%o1
+	and	%o0,%o1,%o0
+	ba	3f
+	nop
+1:
+	and	%o0,%o1,%o1
+2:
+	add	%o0,%o1,%o0
+	andn	%o0,%o2,%o0
+3:
+	st	%o0,[%sp+0x48]
+	ld	[%sp+0x48],%f0
+	.end
+
+	.inline	__anint,2
+	sllx	%o0,32,%o0
+	or	%o0,%o1,%o0
+	or	%g0,1,%o1
+	srlx	%o0,52,%g1
+	and	%g1,0x7ff,%g1
+	sub	%g0,%g1,%g1
+	add	%g1,0x432,%g1
+	subcc	%g1,52,%g0
+	sllx	%o1,%g1,%o1
+	sub	%o1,1,%o2
+	bcs,pt	%icc,1f
+	nop
+	be,pt	%icc,2f
+	nop
+	bl,pt	%icc,3f
+	nop
+	srlx	%o0,63,%o0
+	sllx	%o0,63,%o0
+	ba	3f
+	nop
+1:
+	and	%o0,%o1,%o1
+2:
+	add	%o0,%o1,%o0
+	andn	%o0,%o2,%o0
+3:
+	stx	%o0,[%sp+0x48]
+	ldd	[%sp+0x48],%f0
+	.end
+
+	.inline	__Fz_minus,3
+	ld	[%o1],%f0
+	ld	[%o1+0x4],%f1
+	ld	[%o2],%f4
+	ld	[%o2+0x4],%f5
+	fsubd	%f0,%f4,%f0
+	ld	[%o1+8],%f2
+	ld	[%o1+0xc],%f3
+	ld	[%o2+8],%f6
+	ld	[%o2+0xc],%f7
+	fsubd	%f2,%f6,%f2
+	st	%f0,[%o0+0x0]
+	st	%f1,[%o0+0x4]
+	st	%f2,[%o0+0x8]
+	st	%f3,[%o0+0xc]
+	.end
+
+	.inline	__Fz_add,3
+	ld	[%o1],%f0
+	ld	[%o1+0x4],%f1
+	ld	[%o2],%f4
+	ld	[%o2+0x4],%f5
+	faddd	%f0,%f4,%f0
+	ld	[%o1+8],%f2
+	ld	[%o1+0xc],%f3
+	ld	[%o2+8],%f6
+	ld	[%o2+0xc],%f7
+	faddd	%f2,%f6,%f2
+	st	%f0,[%o0+0x0]
+	st	%f1,[%o0+0x4]
+	st	%f2,[%o0+0x8]
+	st	%f3,[%o0+0xc]
+	.end
+
+	.inline	__Fz_neg,2
+	ld	[%o1],%f0
+	fnegs	%f0,%f0
+	ld	[%o1+0x4],%f1
+	st	%f1,[%o0+0x4]
+	ld	[%o1+8],%f2
+	fnegs	%f2,%f2
+	ld	[%o1+0xc],%f3
+	st	%f3,[%o0+0xc]
+	st	%f0,[%o0]
+	st	%f2,[%o0+0x8]
+	.end
+
+	.inline	__Ff_conv_z,2
+	st	%o1,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	fstod	%f0,%f0
+	st	%g0,[%o0+0x8]
+	st	%g0,[%o0+0xc]
+	st	%f1,[%o0+0x4]
+	st	%f0,[%o0]
+	.end
+
+	.inline	__Fz_conv_f,1
+	ld	[%o0],%f0
+	ld	[%o0+4],%f1
+	fdtos	%f0,%f0
+	.end
+
+	.inline	__Fz_conv_i,1
+	ld	[%o0],%f0
+	ld	[%o0+4],%f1
+	fdtoi	%f0,%f0
+	st	%f0,[%sp+0x44]
+	ld	[%sp+0x44],%o0
+	.end
+
+	.inline	__Fi_conv_z,2
+	st	%o1,[%sp+0x44]
+	ld	[%sp+0x44],%f0
+	fitod	%f0,%f0
+	st	%g0,[%o0+0x8]
+	st	%g0,[%o0+0xc]
+	st	%f1,[%o0+0x4]
+	st	%f0,[%o0]
+	.end
+
+	.inline	__Fz_conv_d,1
+	ld	[%o0],%f0
+	ld	[%o0+4],%f1
+	.end
+
+	.inline	__Fd_conv_z,3
+	st	%o1,[%o0]
+	st	%o2,[%o0+0x4]
+	st	%g0,[%o0+0x8]
+	st	%g0,[%o0+0xc]
+	.end
+
+	.inline	__Fz_conv_c,2
+	ldd     [%o1],%f0
+        fdtos   %f0,%f0
+        st      %f0,[%o0]
+        ldd     [%o1+0x8],%f2
+        fdtos   %f2,%f1
+        st      %f1,[%o0+0x4]
+	.end
+
+	.inline	__Fz_eq,2
+	ld	[%o0],%f0
+	ld	[%o0+4],%f1
+	ld	[%o1],%f2
+	ld	[%o1+4],%f3
+	fcmpd	%f0,%f2
+	mov	%o0,%o2
+	mov	0,%o0
+	fbne	1f
+	nop
+	ld	[%o2+8],%f0
+	ld	[%o2+12],%f1
+	ld	[%o1+8],%f2
+	ld	[%o1+12],%f3
+	fcmpd	%f0,%f2
+	nop
+	fbne	1f
+	nop
+	mov	1,%o0
+1:
+	.end
+
+	.inline	__Fz_ne,2
+	ld	[%o0],%f0
+	ld	[%o0+4],%f1
+	ld	[%o1],%f2
+	ld	[%o1+4],%f3
+	fcmpd	%f0,%f2
+	mov	%o0,%o2
+	mov	1,%o0
+	fbne	1f
+	nop
+	ld	[%o2+8],%f0
+	ld	[%o2+12],%f1
+	ld	[%o1+8],%f2
+	ld	[%o1+12],%f3
+	fcmpd	%f0,%f2
+	nop
+	fbne	1f
+	nop
+	mov	0,%o0
+1:
+	.end
+
+	.inline	__c_cmplx,3
+	ld	[%o1],%o1
+	st	%o1,[%o0]
+	ld	[%o2],%o2
+	st	%o2,[%o0+4]
+	.end
+
+	.inline	__d_cmplx,3
+	ld	[%o1],%f0
+	st	%f0,[%o0]
+	ld	[%o1+4],%f1
+	st	%f1,[%o0+4]
+	ld	[%o2],%f0
+	st	%f0,[%o0+0x8]
+	ld	[%o2+4],%f1
+	st	%f1,[%o0+0xc]
+	.end
+
+	.inline	__r_cnjg,2
+	ld	[%o1+0x4],%f1
+	fnegs	%f1,%f1
+	ld	[%o1],%f0
+	st	%f0,[%o0]
+	st	%f1,[%o0+4]
+	.end
+
+	.inline	__d_cnjg,2
+	ld	[%o1+0x8],%f0
+	fnegs	%f0,%f0
+	ld	[%o1+0xc],%f1
+	st	%f1,[%o0+0xc]
+	ld	[%o1+0x0],%f1
+	st	%f1,[%o0+0x0]
+	ld	[%o1+0x4],%f1
+	st	%f1,[%o0+0x4]
+	st	%f0,[%o0+0x8]
+	.end
+
+	.inline	__r_dim,2
+	st	%g0,[%sp+0x48]
+	ld	[%sp+0x48],%f4
+	ld	[%o0],%f0
+	ld	[%o1],%f2
+	fcmps	%fcc0,%f0,%f2
+	fmovsule %fcc0,%f4,%f2
+	fsubs	%f0,%f2,%f0
+	fmovsule %fcc0,%f4,%f0
+	.end
+
+	.inline	__d_dim,2
+	stx	%g0,[%sp+0x48]
+	ldd	[%sp+0x48],%f4
+	ld	[%o0],%f0
+	ld	[%o0+4],%f1
+	ld	[%o1],%f2
+	ld	[%o1+4],%f3
+	fcmpd	%fcc0,%f0,%f2
+	fmovdule %fcc0,%f4,%f2
+	fsubd	%f0,%f2,%f0
+	fmovdule %fcc0,%f4,%f0
+	.end
+
+	.inline	__r_imag,1
+	ld	[%o0+4],%f0
+	.end
+
+	.inline	__d_imag,1
+	ld	[%o0+8],%f0
+	ld	[%o0+0xc],%f1
+	.end
+
+	.inline	__f95_signf,2
+	ld	[%o0],%f0
+	ld	[%o1],%o1
+	fabss	%f0,%f0
+	fnegs	%f0,%f1
+	sra	%o1,0,%o1
+	fmovrslz %o1,%f1,%f0
+	.end
+
+	.inline	__f95_sign,2
+	ld	[%o0],%f0
+	ld	[%o0+4],%f1
+	ld	[%o1],%o1
+	fabsd	%f0,%f0
+	fnegd	%f0,%f2
+	sra	%o1,0,%o1
+	fmovrdlz %o1,%f2,%f0
+	.end
+
+	.inline	__r_sign,2
+	ld	[%o0],%f0
+	ld	[%o1],%o1
+	fabss	%f0,%f0
+	fnegs	%f0,%f1
+	sub	%o1,1,%o0
+	and	%o1,%o0,%o1
+	sra	%o1,0,%o1
+	fmovrslz %o1,%f1,%f0
+	.end
+
+	.inline	__d_sign,2
+	ld	[%o0],%f0
+	ld	[%o0+4],%f1
+	ld	[%o1],%o0
+	sllx	%o0,32,%o0
+	ld	[%o1+4],%o1
+	or	%o1,%o0,%o1
+	fabsd	%f0,%f0
+	fnegd	%f0,%f2
+	sub	%o1,1,%o0
+	and	%o1,%o0,%o1
+	fmovrdlz %o1,%f2,%f0
+	.end
+
+	.inline	__Fz_mult,3
+	ld	[%o1],%f0
+	ld	[%o1+0x4],%f1
+	ld	[%o2],%f4
+	ld	[%o2+0x4],%f5
+	fmuld	%f0,%f4,%f8	! f8 = r1*r2
+	ld	[%o1+0x8],%f2
+	ld	[%o1+0xc],%f3
+	ld	[%o2+0x8],%f6
+	ld	[%o2+0xc],%f7
+	fmuld	%f2,%f6,%f10	! f10= i1*i2
+	fsubd	%f8,%f10,%f12	! f12= r1*r2-i1*i2
+	st	%f12,[%o0]
+	st	%f13,[%o0+4]
+	fmuld	%f0,%f6,%f14	! f14= r1*i2
+	fmuld	%f2,%f4,%f16	! f16= r2*i1
+	faddd	%f14,%f16,%f2	! f2 = r1*i2+r2*i1
+	st	%f2,[%o0+8]
+	st	%f3,[%o0+12]
+	.end
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! void
+! __Fc_minus(c, a, b)
+! complex *c, *a, *b;
+! {
+
+	.inline	__Fc_minus,3
+!    30	 	c->real = a->real - b->real
+	ld	[%o1],%f0
+	ld	[%o2],%f1
+	fsubs	%f0,%f1,%f2
+!    31	  	c->imag = a->imag - b->imag
+	ld	[%o1+4],%f3
+	ld	[%o2+4],%f4
+	fsubs	%f3,%f4,%f5
+	st	%f2,[%o0]
+	st	%f5,[%o0+4]
+	.end
+ }
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! void
+! __Fc_add(c, a, b)
+! complex *c, *a, *b;
+! {
+
+	.inline	__Fc_add,3
+!    39	 	c->real = a->real + b->real
+	ld	[%o1],%f0
+	ld	[%o2],%f1
+	fadds	%f0,%f1,%f2
+!    40	 	c->imag = a->imag + b->imag
+	ld	[%o1+4],%f3
+	ld	[%o2+4],%f4
+	fadds	%f3,%f4,%f5
+	st	%f2,[%o0]
+	st	%f5,[%o0+4]
+	.end
+! }
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! void
+! __Fc_neg(c, a)
+! complex *c, *a;
+! {
+
+	.inline	__Fc_neg,2
+!    48	  	c->real = - a->real
+	ld	[%o1],%f0
+	fnegs	%f0,%f1
+!    49	  	c->imag = - a->imag
+	ld	[%o1+4],%f2
+	fnegs	%f2,%f3
+	st	%f1,[%o0]
+	st	%f3,[%o0+4]
+	.end
+! }
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! void
+! __Ff_conv_c(c, x)
+! complex *c;
+! FLOATPARAMETER x;
+! {
+
+	.inline	__Ff_conv_c,2
+!    59		c->real = x
+	st	%o1,[%o0]
+!    60		c->imag = 0.0
+	st	%g0,[%o0+4]
+	.end
+! }
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! FLOATFUNCTIONTYPE
+! __Fc_conv_f(c)
+! complex *c;
+! {
+
+	.inline	__Fc_conv_f,1
+!    69  	RETURNFLOAT(c->real)
+	ld	[%o0],%f0
+	.end
+! }
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! int
+! __Fc_conv_i(c)
+! complex *c;
+! {
+
+	.inline	__Fc_conv_i,1
+!    78		return (int)c->real
+	ld	[%o0],%f0
+	fstoi	%f0,%f1
+	st	%f1,[%sp+68]
+	ld	[%sp+68],%o0
+	.end
+! }
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! void
+! __Fi_conv_c(c, i)
+! complex *c;
+! int i;
+! {
+
+	.inline	__Fi_conv_c,2
+!    88		c->real = (float)i
+	st	%o1,[%sp+68]
+	ld	[%sp+68],%f0
+	fitos	%f0,%f1
+	st	%f1,[%o0]
+!    89		c->imag = 0.0
+	st	%g0,[%o0+4]
+	.end
+! }
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! double
+! __Fc_conv_d(c)
+! complex *c;
+! {
+
+	.inline	__Fc_conv_d,1
+!    98		return (double)c->real
+	ld	[%o0],%f2
+	fstod	%f2,%f0
+	.end
+! }
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! void
+! __Fd_conv_c(c, x)
+! complex *c;
+! double x;
+! {
+
+	.inline	__Fd_conv_c,2
+	st	%o1,[%sp+72]
+	st	%o2,[%sp+76]
+!   109		c->real = (float)(x)
+	ldd	[%sp+72],%f0
+	fdtos	%f0,%f1
+	st	%f1,[%o0]
+!   110		c->imag = 0.0
+	st	%g0,[%o0+4]
+	.end
+! }
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! void
+! __Fc_conv_z(result, c)
+! dcomplex *result;
+! complex *c;
+! {
+
+	.inline	__Fc_conv_z,2
+!   120		result->dreal = (double)c->real
+	ld	[%o1],%f0
+	fstod	%f0,%f2
+	st	%f2,[%o0]
+	st	%f3,[%o0+4]
+!   121		result->dimag = (double)c->imag
+	ld	[%o1+4],%f3
+	fstod	%f3,%f4
+	st	%f4,[%o0+8]
+	st	%f5,[%o0+12]
+	.end
+! }
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! int
+! __Fc_eq(x, y)
+! complex *x, *y;
+! {
+
+	.inline	__Fc_eq,2
+!	return  (x->real == y->real) && (x->imag == y->imag);
+	ld	[%o0],%f0
+	ld	[%o1],%f2
+	mov	%o0,%o2
+	fcmps	%f0,%f2
+	mov	0,%o0
+	fbne	1f
+	nop
+	ld	[%o2+4],%f0
+	ld	[%o1+4],%f2
+	fcmps	%f0,%f2
+	nop
+	fbne	1f
+	nop
+	mov	1,%o0
+1:
+	.end
+! }
+!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! int
+! __Fc_ne(x, y)
+! complex *x, *y;
+! {
+
+	.inline	__Fc_ne,2
+!	return  (x->real != y->real) || (x->imag != y->imag);
+	ld	[%o0],%f0
+	ld	[%o1],%f2
+	mov	%o0,%o2
+	fcmps	%f0,%f2
+	mov	1,%o0
+	fbne	1f
+	nop
+	ld	[%o2+4],%f0
+	ld	[%o1+4],%f2
+	fcmps	%f0,%f2
+	nop
+	fbne	1f
+	nop
+	mov	0,%o0
+1:
+	.end
+! }
