Module Name: src Committed By: christos Date: Thu Sep 29 22:46:00 UTC 2011
Modified Files: src/lib/libc/arch/i386/gen: flt_rounds.S Log Message: add a simpler version To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/lib/libc/arch/i386/gen/flt_rounds.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/arch/i386/gen/flt_rounds.S diff -u src/lib/libc/arch/i386/gen/flt_rounds.S:1.6 src/lib/libc/arch/i386/gen/flt_rounds.S:1.7 --- src/lib/libc/arch/i386/gen/flt_rounds.S:1.6 Mon Aug 23 04:45:09 1999 +++ src/lib/libc/arch/i386/gen/flt_rounds.S Thu Sep 29 18:46:00 2011 @@ -1,33 +1,20 @@ -/* $NetBSD: flt_rounds.S,v 1.6 1999/08/23 08:45:09 kleink Exp $ */ - -/* - * Written by J.T. Conklin, Apr 4, 1995 - * Public domain. - */ +/* $NetBSD: flt_rounds.S,v 1.7 2011/09/29 22:46:00 christos Exp $ */ #include <machine/asm.h> +/* + * 00 0 round to zero + * 01 1 round to nearest + * 10 2 round to positive infinity + * 11 3 round to negative infinity + */ .text _ALIGN_TEXT -_map: - .byte 1 /* round to nearest */ - .byte 3 /* round to negative infinity */ - .byte 2 /* round to positive infinity */ - .byte 0 /* round to zero */ - ENTRY(__flt_rounds) - subl $4,%esp - fnstcw (%esp) - movl (%esp),%eax - shrl $10,%eax - andl $3,%eax -#ifdef PIC - PIC_PROLOGUE - leal PIC_GOTOFF(_map),%ecx - PIC_EPILOGUE - movb (%ecx,%eax,1),%al -#else - movb _map(,%eax,1),%al -#endif - addl $4,%esp + fnstcw -4(%esp) + movl -4(%esp), %ecx + shrl $9, %ecx + andl $6, %ecx + xorl $1, %eax /* map 0,1,2,3 -> 1,0,3,2 */ + andl $3, %eax ret