Commit | Line | Data |
---|---|---|
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 | ||
30 | XENTRY(cvtfu, R2|R3|R4|R5) | |
31 | jbr 1f | |
32 | ||
33 | XENTRY(cvtfl, R2|R3|R4|R5) | |
34 | # | |
35 | #Some initializations: | |
36 | # | |
37 | 1: | |
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 | |
54 | positive: | |
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 | |
64 | shift_left: | |
65 | cmpl r2,$7 | |
66 | jgtr overflow | |
67 | go_on: shll r2,r0,r0 # shift right. | |
68 | shifted: | |
69 | bbc $0,r3,done # check for negative | |
70 | mnegl r0,r0 | |
71 | done: | |
72 | ret | |
73 | ||
74 | retzero: | |
75 | clrl r0 | |
76 | ret | |
77 | overflow: | |
78 | callf $4,sfpover | |
79 | jmp go_on | |
80 | ||
81 | is_reserved: | |
82 | bbc $31,r0,retzero | |
83 | ||
84 | callf $4,sfpresop | |
85 | ret |