SCCS-vsn: lib/libc/i386/gen/fixdfsi.s 5.3
SCCS-vsn: lib/libc/i386/gen/modf.s 5.2
*/
#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
*/
#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 */
/*
*/
/* 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