2.9BSD/usr/src/lib/c/crt/longops.s.sav

/ C library-- versions of long *, /, % for floating point hardware
/  also *= , %=, /=

.globl	lmul,	ldiv,	lrem,	almul,	aldiv,	alrem

/
/ called: 2(sp): LHS 6(sp):RHS

lmul:
	setl
	movif	2(sp),r0
	movif	6(sp),r1
	mulf	r1,r0
	movfi	r0,-(sp)
	mov	(sp)+,r0
	mov	(sp)+,r1
	seti
	rts	pc

ldiv:
	setl
	movif	2(sp),r0
	movif	6(sp),r1
	divf	r1,r0
	movfi	r0,-(sp)
	mov	(sp)+,r0
	mov	(sp)+,r1
	seti
	rts	pc

lrem:
	setl
	movif	2(sp),r0
	movf	r0,r2
	movif	6(sp),r1
	movf	r1,r3
	divf	r1,r0
	modf	$40200,r0
	mulf	r3,r1
	subf	r1,r2
	movfi	r2,-(sp)
	mov	(sp)+,r0
	mov	(sp)+,r1
	seti
	rts	pc

/
/ called: 2(sp):ptr
/ called: 2(sp): ptr to LHS, 4(sp):RHS
almul:
	setl
	mov	2(sp),r0
	movif	(r0),fr0
	movif	4(sp),fr1
	mulf	fr1,fr0
	movfi	fr0,(r0)
	mov	2(r0),r1
	mov	(r0),r0
	seti
	rts pc

aldiv:
	setl
	mov	2(sp),r0
	movif	(r0),fr0
	movif	4(sp),fr1
	divf	fr1,fr0
	movfi	fr0,(r0)
	mov	2(r0),r1
	mov	(r0),r0
	seti
	rts	pc

alrem:
	setl
	mov	2(sp),r0
	movif	(r0),fr0
	movif	4(sp),fr1
	movf	fr0,fr2
	movf	fr1,fr3
	divf	fr1,fr0
	modf	$40200,fr0
	mulf	fr3,fr1
	subf	fr1,fr2
	movfi	fr2,(r0)
	mov	2(r0),r1
	mov	(r0),r0
	seti
	rts	pc