Home | History | Annotate | Download | only in Arm
      1 /*  $NetBSD: flt_rounds.c,v 1.3 2006/02/25 00:58:35 wiz Exp $ */
      2 
      3 /*
      4  * Copyright (c) 1996 Mark Brinicombe
      5  * All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  * 3. All advertising materials mentioning features or use of this software
     16  *    must display the following acknowledgement:
     17  *      This product includes software developed by Mark Brinicombe
     18  *  for the NetBSD Project.
     19  * 4. The name of the author may not be used to endorse or promote products
     20  *    derived from this software without specific prior written permission
     21  *
     22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     23  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     24  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     25  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     27  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     31  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     32  */
     33 
     34 #include <sys/EfiCdefs.h>
     35 #if defined(LIBC_SCCS) && !defined(lint)
     36 __RCSID("$NetBSD: flt_rounds.c,v 1.3 2006/02/25 00:58:35 wiz Exp $");
     37 #endif /* LIBC_SCCS and not lint */
     38 
     39 #include <sys/types.h>
     40 //#include <ieeefp.h>
     41 
     42 static const int map[] = {
     43   1,  /* round to nearest */
     44   2,  /* round to positive infinity */
     45   3,  /* round to negative infinity */
     46   0   /* round to zero */
     47 };
     48 
     49 /*
     50  * Return the current FP rounding mode
     51  *
     52  * Returns:
     53  *  0 - round to zero
     54  *  1 - round to nearest
     55  *  2 - round to postive infinity
     56  *  3 - round to negative infinity
     57  *
     58  * ok all we need to do is get the current FP rounding mode
     59  * index our map table and return the appropriate value.
     60  *
     61  * HOWEVER:
     62  * The ARM FPA codes the rounding mode into the actual FP instructions
     63  * so there is no such thing as a global rounding mode.
     64  * The default is round to nearest if rounding is not explicitly specified.
     65  * FP instructions generated by GCC will not explicitly specify a rounding
     66  * mode.
     67  *
     68  * So the best we can do it to return the rounding mode FP instructions
     69  * use if rounding is not specified which is round to nearest.
     70  *
     71  * This could change in the future with new floating point emulators or
     72  * soft float FP libraries.
     73  */
     74 
     75 int __flt_rounds(void);
     76 
     77 int
     78 __flt_rounds()
     79 {
     80   //return(map[fpgetround()]);
     81   return 1; //TODO: FixMe
     82 }
     83