BSD 4_3_Reno release
[unix-history] / usr / src / lib / libc / tahoe / fpe / cvtfl.s
CommitLineData
1f0502d3
KB
1/*
2 * Copyright (c) 1986 Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Computer Consoles Inc.
7 *
1c15e888
C
8 * Redistribution and use in source and binary forms are permitted
9 * provided that: (1) source distributions retain this entire copyright
10 * notice and comment, and (2) distributions including binaries display
11 * the following acknowledgement: ``This product includes software
12 * developed by the University of California, Berkeley and its contributors''
13 * in the documentation or other materials provided with the distribution
14 * and in all advertising materials mentioning features or use of this
15 * software. Neither the name of the University nor the names of its
16 * contributors may be used to endorse or promote products derived
17 * from this software without specific prior written permission.
18 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
1f0502d3
KB
21 */
22
23#if defined(SYSLIBC_SCCS) && !defined(lint)
1c15e888 24 .asciz "@(#)cvtfl.s 1.3 (Berkeley) 6/1/90"
1f0502d3 25#endif /* SYSLIBC_SCCS and not lint */
61051f6a
SL
26
27#include <tahoemath/fp.h>
28#include "DEFS.h"
29
30XENTRY(cvtfu, R2|R3|R4|R5)
31 jbr 1f
32
33XENTRY(cvtfl, R2|R3|R4|R5)
34 #
35 #Some initializations:
36 #
371:
38 movl 4(fp),r0 # fetch operand.
39 clrl r3 # r3 - negative flag.
40 #
41 #get exponent
42 #
43 andl3 $EXPMASK,r0,r2 # r2 will hold the exponent.
44 jeql is_reserved # check for reserved operand.
45 cmpl $ONE_EXP,r2 # if exponent is less then 1,return zero.
46 jgtr retzero
47 andl2 $0!EXPSIGN,r2 # turn off biased exponent sign
48 shrl $EXPSHIFT,r2,r2
49 #
50 #get fraction
51 #
52 bbc $31,r0,positive # if negative remember it.
53 incl r3
54positive:
55 # clear the non fraction parts.
56 andl2 $(0!(EXPMASK | SIGNBIT)),r0
57 # add the hidden bit.
58 orl2 $(0!CLEARHID),r0
59 subl2 $24,r2 # compute the shift.
60 jgtr shift_left
61 mnegl r2,r2
62 shrl r2,r0,r0 # shift right.
63 jmp shifted
64shift_left:
65 cmpl r2,$7
66 jgtr overflow
67go_on: shll r2,r0,r0 # shift right.
68shifted:
69 bbc $0,r3,done # check for negative
70 mnegl r0,r0
71done:
72 ret
73
74retzero:
75 clrl r0
76 ret
77overflow:
78 callf $4,sfpover
79 jmp go_on
80
81is_reserved:
82 bbc $31,r0,retzero
83
84 callf $4,sfpresop
85 ret