root/lib/libc/arch/i386/gen/flt_rounds.S
/* $OpenBSD: flt_rounds.S,v 1.7 2017/11/29 05:13:57 guenther Exp $ */
/*
 * Written by J.T. Conklin, Apr 4, 1995
 * Public domain.
 */

#include "DEFS.h"

        .section .rodata
        .align 2
_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
        ret
END_STRONG(__flt_rounds);