turn C files into asm form due to obnoxious gcc "template" bug
authorWilliam Nesheim <william@ucbvax.Berkeley.EDU>
Tue, 18 Dec 1990 07:14:04 +0000 (23:14 -0800)
committerWilliam Nesheim <william@ucbvax.Berkeley.EDU>
Tue, 18 Dec 1990 07:14:04 +0000 (23:14 -0800)
SCCS-vsn: lib/libc/i386/gen/fixdfsi.s 5.3
SCCS-vsn: lib/libc/i386/gen/modf.s 5.2

usr/src/lib/libc/i386/gen/fixdfsi.s
usr/src/lib/libc/i386/gen/modf.s

index bd469c7..72f9454 100644 (file)
@@ -9,13 +9,12 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)fixdfsi.s  5.2 (Berkeley) %G%";
+       .asciz "@(#)fixdfsi.s   5.1 (Berkeley) 5/15/90"
 #endif /* LIBC_SCCS and not lint */
 
 #endif /* LIBC_SCCS and not lint */
 
-__fixdfsi(d)
-double d;
-{
-       int val;
-       asm("fldl %1 ; fistpl %0" : "=g" (val) : "g" (d) );
-       return(val);
-}
+       .globl ___fixdfsi
+___fixdfsi:
+       fldl    4(%esp)
+       fistpl  4(%esp)
+       movl    4(%esp),%eax
+       ret
index 2dee9ec..dfbeb6d 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)modf.s     5.1 (Berkeley) %G%";
+.asciz  "@(#)modf.c    5.1 (Berkeley) 4/23/90"
 #endif /* LIBC_SCCS and not lint */
 
 /*
 #endif /* LIBC_SCCS and not lint */
 
 /*
@@ -21,16 +21,37 @@ static char sccsid[] = "@(#)modf.s  5.1 (Berkeley) %G%";
  */
 
 /* With CHOP mode on, frndint behaves as TRUNC does.  Useful. */
  */
 
 /* With CHOP mode on, frndint behaves as TRUNC does.  Useful. */
-double
-modf(double value, double *iptr)
-{
-       double temp;
-       short i87flag, i87temp;
-       __asm ("fnstcw %0" : "=g" (i87flag) : );
-       i87temp = i87flag | 0xc00 ; /* turn on chop mode [truncation] */
-       __asm ("fldcw %0" : : "g" (i87temp));
-       __asm ("frndint" : "=f" (temp) : "0" (value)); /* temp = int of value */
-       __asm ("fldcw %0" : : "g" (i87flag));
-       *iptr = temp;
-       return (value - temp);
-}
+.text
+.globl _modf
+_modf:
+       pushl %ebp
+       movl %esp,%ebp
+       subl $16,%esp
+/APP
+       fnstcw -12(%ebp)
+/NO_APP
+       movw -12(%ebp),%dx
+       orw $3072,%dx
+       movw %dx,-16(%ebp)
+/APP
+       fldcw -16(%ebp)
+/NO_APP
+       fldl 8(%ebp)
+/APP
+       frndint
+/NO_APP
+       fstpl -8(%ebp)
+/APP
+       fldcw -12(%ebp)
+/NO_APP
+       movl 16(%ebp),%eax
+       movl -8(%ebp),%edx
+       movl -4(%ebp),%ecx
+       movl %edx,(%eax)
+       movl %ecx,4(%eax)
+       fldl 8(%ebp)
+       fsubl -8(%ebp)
+       jmp L1
+L1:
+       leave
+       ret