|
|
1.1 root 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: *
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.
21: */
22:
23: #if defined(SYSLIBC_SCCS) && !defined(lint)
24: .asciz "@(#)cvtfl.s 1.3 (Berkeley) 6/1/90"
25: #endif /* SYSLIBC_SCCS and not lint */
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.