xref: /original-bsd/lib/libc/tahoe/fpe/cvtld.s (revision 05bf53f3)
1/*
2 * Copyright (c) 1986, 1993
3 *	The Regents of the University of California.  All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Computer Consoles Inc.
7 *
8 * %sccs.include.redist.c%
9 */
10
11#if defined(SYSLIBC_SCCS) && !defined(lint)
12	.asciz "@(#)cvtld.s	8.1 (Berkeley) 06/04/93"
13#endif /* SYSLIBC_SCCS and not lint */
14
15#include <tahoemath/fp.h>
16#include "DEFS.h"
17
18XENTRY(cvtld, R2|R3|R4|R5)
19 #
20 #Some initializations:
21 #
22	clrl	r4		# r4 - negative flag.
23	clrl	r2		# r2 - exponent.
24	movl	4(fp),r0	# fetch operand.
25	movl	r0,r5		# need another copy.
26	jeql	retzero		# return zero.
27	jgtr	positive
28	mnegl	r0,r0
29	jvs	retmin		# return minimum integer.
30	incl	r4		# remember it was negative.
31	movl	r0,r5		# remember the negated value.
32 #
33 #Compute exponent:
34 #
35positive:
36	ffs	r0,r1
37	incl 	r1
38	addl2	r1,r2
39	shrl	r1,r0,r0
40	jneq	positive	# look for more set bits.
41 #
42 #we have the exponent in r2.
43 #
44	movl	r5,r0		# r0,r1 will hold the resulting f.p. number.
45	clrl 	r1
46 #
47 #Shift the fraction part to its proper place:
48 #
49	subl3	r2,$HID_POS,r3
50	jlss	shiftr		# if less then zero we have to shift right.
51	shll	r3,r0,r0	# else we shift left.
52	jmp	shifted
53shiftr:
54	mnegl	r3,r3
55	shrq	r3,r0,r0
56shifted:
57	andl2	$CLEARHID,r0	# clear the hidden bit.
58	shal	$EXPSHIFT,r2,r2	# shift the exponent to its proper place.
59	orl2	$EXPSIGN,r2	# set the exponent sign bit(to bias it).
60	orl2	r2,r0		# combine exponent & fraction.
61	bbc	$0,r4,sign_ok	# do we  have to set the sign bit?
62	orl2	$SIGNBIT,r0	# yes...
63sign_ok:
64	ret
65
66retzero:
67	clrl 	r0
68	clrl	r1
69	ret
70
71retmin:
72 	movl	$0xd0000000,r0
73	clrl	r1
74	ret
75
76
77
78