date and time created 86/07/02 16:25:56 by sam
authorSam Leffler <sam@ucbvax.Berkeley.EDU>
Thu, 3 Jul 1986 07:25:56 +0000 (23:25 -0800)
committerSam Leffler <sam@ucbvax.Berkeley.EDU>
Thu, 3 Jul 1986 07:25:56 +0000 (23:25 -0800)
SCCS-vsn: lib/libc/tahoe/fpe/negf.s 1.1
SCCS-vsn: lib/libc/tahoe/fpe/sfnorm.s 1.1

usr/src/lib/libc/tahoe/fpe/negf.s [new file with mode: 0644]
usr/src/lib/libc/tahoe/fpe/sfnorm.s [new file with mode: 0644]

diff --git a/usr/src/lib/libc/tahoe/fpe/negf.s b/usr/src/lib/libc/tahoe/fpe/negf.s
new file mode 100644 (file)
index 0000000..c570390
--- /dev/null
@@ -0,0 +1,24 @@
+#ifdef LIBC_SCCS
+       .asciz  "@(#)negf.s     1.1 (Berkeley/CCI) %G%"
+#endif LIBC_SCCS
+
+#include <tahoemath/fp.h>
+#include "DEFS.h"
+
+XENTRY(negf, 0)
+       clrl    r1
+       andl3   $EXPMASK,4(fp),r0       /* check for reserved operand,zero. */
+       beql    isreserved
+       movl    4(fp),r0                /* fetch operand. */
+       bbc     $31,r0,seton
+       andl2   $(0!SIGNBIT),r0         /* turn it off. */
+       ret
+seton: orl2    $SIGNBIT,r0             /* turn it on. */
+       ret
+isreserved:
+       bbc     $31,4(fp),retzero
+       callf   $4,sfpresop
+       ret
+retzero:
+       clrl    r0
+       ret
diff --git a/usr/src/lib/libc/tahoe/fpe/sfnorm.s b/usr/src/lib/libc/tahoe/fpe/sfnorm.s
new file mode 100644 (file)
index 0000000..44c7ded
--- /dev/null
@@ -0,0 +1,48 @@
+#ifdef LIBC_SCCS
+       .asciz  "@(#)sfnorm.s   1.1 (Berkeley/CCI) %G%"
+#endif LIBC_SCCS
+
+#include <tahoemath/fp.h>
+#include "DEFS.h"
+
+XENTRY(sfnorm, R2|R3|R4|R5|R6)
+       clrl    r1
+       movl    r0,r4           /* copy to temporary. */
+       jeql    retzero
+       clrl    r3              /* r3 - pos of m.s.b */
+inr00: ffs     r4,r6
+       incl    r6
+       addl2   r6,r3
+       shrl    r6,r4,r4
+       jneq    inr00
+
+cmpshift:
+                               /* compute the shift (r4). */
+       subl3   r3,$HID_POS,r4
+       jlss    shiftr          /* if less then zero we shift right. */
+       shll    r4,r0,r0        /* else we shift left. */
+       subl2   r4,r2           /* uodate exponent. */
+       jleq    underflow       /* if less then 0 (biased) it is underflow. */
+       jmp     combine         /* go to combine exponent and fraction. */
+shiftr:
+       mnegl   r4,r4
+       shrl    r4,r0,r0        /* shift right. */
+       addl2   r4,r2           /* update exponent */
+       cmpl    r2,$256
+       jgeq    overflow        /* check for overflow. */
+combine:
+       andl2   $CLEARHID,r0    /* clear the hidden bit. */
+       shal    $EXPSHIFT,r2,r2 /* shift the exponent to its proper place. */
+       orl2    r2,r0
+       ret
+
+underflow:
+       callf   $4,sfpunder
+       ret
+
+overflow:
+       callf   $4,sfpover
+       ret
+retzero:
+       clrl    r0
+       ret