.global fif8, Fd0, Fd1, Fd80000000, Fs80000000, Fs0

.align 8
Fd0:
.double 0r0
Fd1:
.double 0r1
FxE15:
.word 0x43300000, 0x0	! magic const: (a.b + x) - x == a.0
Fd80000000:
.align 8
.double 0r4294967296
Fs80000000:
.single 0r4294967296
Fs0:
.single 0r0

fif8:
	ld	[%l0], %f0
	ld	[%l0+4], %f1
	ld	[%l0+8], %f2
	ld	[%l0+12], %f3
	fmuld	%f0, %f2, %f0
	fmovs	%f0, %f6
	fmovs	%f1, %f7
	set	Fd0, %o0
	ldd	[%o0], %f8
	fcmpd	%f0, %f8
	nop
	fbuge,a	1f
	mov	%g0, %o1
	set	1, %o1
	fnegs	%f0, %f0
1:
	set	FxE15, %o0
	ldd	[%o0], %f10
	fcmpd	%f0, %f10
	nop
	fbuge	2f
	nop
	faddd	%f0, %f10, %f4
	fsubd	%f4, %f10, %f4
	fsubd	%f0, %f4, %f2
	set	Fd1, %o0
	ldd	[%o0], %f12
4:	fcmpd	%f2, %f12
	nop
	fbge,a	4b
	fsubd	%f2, %f12, %f2
5:	fcmpd	%f2, %f8
	nop
	fbl,a	5b
	faddd	%f2, %f12, %f2
	fsubd	%f0, %f2, %f0
2:
	tst	%o1
	bz	3f
	nop
	fnegs	%f0, %f0
3:
	fsubd	%f6, %f0, %f2
	st	%f0, [%l0]
	st	%f1, [%l0+4]
	st	%f2, [%l0+8]
	st	%f3, [%l0+12]
	retl
	nop