/* ExtendedFloatSupportImpl.sun4.s */
/* Copyright (C) 1991, 1993 by Xerox Corporation.  All rights reserved. */
/* Michael Plass, August 12, 1991 10:09:21 am PDT */
!
! Access to SPARC support for Extended Precision (128-bit) Floating Point
!  now provides both pcr and ppcr style entry points
!
	.seg	"text"

	.global	←XR←ExtendedFloatAdd
←XR←ExtendedFloatAdd:
	.global	XR←ExtendedFloatAdd
XR←ExtendedFloatAdd:
	save	%sp,-80,%sp

	ld	[%i0],%f0
	ld	[%i0+4],%f1
	ld	[%i0+8],%f2
	ld	[%i0+12],%f3

	ld	[%i1],%f4
	ld	[%i1+4],%f5
	ld	[%i1+8],%f6
	ld	[%i1+12],%f7

	faddx	%f0, %f4, %f8
	
	st	%f8,[%i2]
	st	%f9,[%i2+4]
	st	%f10,[%i2+8]
	st	%f11,[%i2+12]

	ret
	restore

	.global	←XR←ExtendedFloatSubtract
←XR←ExtendedFloatSubtract:
	.global	XR←ExtendedFloatSubtract
XR←ExtendedFloatSubtract:
	save	%sp,-80,%sp

	ld	[%i0],%f0
	ld	[%i0+4],%f1
	ld	[%i0+8],%f2
	ld	[%i0+12],%f3

	ld	[%i1],%f4
	ld	[%i1+4],%f5
	ld	[%i1+8],%f6
	ld	[%i1+12],%f7

	fsubx	%f0, %f4, %f8
	
	st	%f8,[%i2]
	st	%f9,[%i2+4]
	st	%f10,[%i2+8]
	st	%f11,[%i2+12]

	ret
	restore

	.global	←XR←ExtendedFloatMultiply
←XR←ExtendedFloatMultiply:
	.global	XR←ExtendedFloatMultiply
XR←ExtendedFloatMultiply:
	save	%sp,-80,%sp

	ld	[%i0],%f0
	ld	[%i0+4],%f1
	ld	[%i0+8],%f2
	ld	[%i0+12],%f3

	ld	[%i1],%f4
	ld	[%i1+4],%f5
	ld	[%i1+8],%f6
	ld	[%i1+12],%f7

	fmulx	%f0, %f4, %f8
	
	st	%f8,[%i2]
	st	%f9,[%i2+4]
	st	%f10,[%i2+8]
	st	%f11,[%i2+12]

	ret
	restore

	.global	←XR←ExtendedFloatDivide
←XR←ExtendedFloatDivide:
	.global	XR←ExtendedFloatDivide
XR←ExtendedFloatDivide:
	save	%sp,-80,%sp

	ld	[%i0],%f0
	ld	[%i0+4],%f1
	ld	[%i0+8],%f2
	ld	[%i0+12],%f3

	ld	[%i1],%f4
	ld	[%i1+4],%f5
	ld	[%i1+8],%f6
	ld	[%i1+12],%f7

	fdivx	%f0, %f4, %f8
	
	st	%f8,[%i2]
	st	%f9,[%i2+4]
	st	%f10,[%i2+8]
	st	%f11,[%i2+12]

	ret
	restore

	.global	←XR←ExtendedFloatLess
←XR←ExtendedFloatLess:
	.global	XR←ExtendedFloatLess
XR←ExtendedFloatLess:
	save	%sp,-64,%sp

	ld	[%i0],%f0
	ld	[%i0+4],%f1
	ld	[%i0+8],%f2
	ld	[%i0+12],%f3

	ld	[%i1],%f4
	ld	[%i1+4],%f5
	ld	[%i1+8],%f6
	ld	[%i1+12],%f7

	fcmpex	%f0,%f4
	nop

	fbuge,a	LE12
	mov	0,%o0
	mov	1,%o0
LE12:
	ret
	restore	%g0,%o0,%o0

	.global	←XR←ExtendedFloatEqual
←XR←ExtendedFloatEqual:
	.global	XR←ExtendedFloatEqual
XR←ExtendedFloatEqual:
	save	%sp,-64,%sp

	ld	[%i0],%f0
	ld	[%i0+4],%f1
	ld	[%i0+8],%f2
	ld	[%i0+12],%f3

	ld	[%i1],%f4
	ld	[%i1+4],%f5
	ld	[%i1+8],%f6
	ld	[%i1+12],%f7

	fcmpx	%f0,%f4
	nop

	nop				! [internal]
	fbne,a	LE15
	mov	0,%o0
	mov	1,%o0
LE15:
	ret
	restore	%g0,%o0,%o0

	.global	←XR←ExtendedFromDReal
←XR←ExtendedFromDReal:
	.global	XR←ExtendedFromDReal
XR←ExtendedFromDReal:
	save	%sp,-80,%sp

	ld	[%i0],%f0
	ld	[%i0+4],%f1

	fdtox	%f0, %f4
	
	st	%f4,[%i1]
	st	%f5,[%i1+4]
	st	%f6,[%i1+8]
	st	%f7,[%i1+12]

	ret
	restore

	.global	←XR←DRealFromExtended
←XR←DRealFromExtended:
	.global	XR←DRealFromExtended
XR←DRealFromExtended:
	save	%sp,-80,%sp

	ld	[%i0],%f0
	ld	[%i0+4],%f1
	ld	[%i0+8],%f2
	ld	[%i0+12],%f3

	fxtod	%f0, %f4
	
	st	%f4,[%i1]
	st	%f5,[%i1+4]

	ret
	restore