[BACK]Return to fpu.h CVS log [TXT][DIR] Up to [local] / sys / arch / alpha / include

Annotation of sys/arch/alpha/include/fpu.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: fpu.h,v 1.1 2002/04/28 20:55:14 pvalchev Exp $        */
                      2: /*     $NetBSD: fpu.h,v 1.4 2001/04/26 03:10:46 ross Exp $     */
                      3:
                      4: /*-
                      5:  * Copyright (c) 2001 Ross Harvey
                      6:  * All rights reserved.
                      7:  *
                      8:  * This software was written for NetBSD.
                      9:  *
                     10:  * Redistribution and use in source and binary forms, with or without
                     11:  * modification, are permitted provided that the following conditions
                     12:  * are met:
                     13:  * 1. Redistributions of source code must retain the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer.
                     15:  * 2. Redistributions in binary form must reproduce the above copyright
                     16:  *    notice, this list of conditions and the following disclaimer in the
                     17:  *    documentation and/or other materials provided with the distribution.
                     18:  * 3. All advertising materials mentioning features or use of this software
                     19:  *    must display the following acknowledgement:
                     20:  *     This product includes software developed by the NetBSD
                     21:  *     Foundation, Inc. and its contributors.
                     22:  * 4. Neither the name of The NetBSD Foundation nor the names of its
                     23:  *    contributors may be used to endorse or promote products derived
                     24:  *    from this software without specific prior written permission.
                     25:  *
                     26:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
                     27:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     28:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     29:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
                     30:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     31:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     32:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     33:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     34:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     35:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     36:  * POSSIBILITY OF SUCH DAMAGE.
                     37:  */
                     38:
                     39: #ifndef _ALPHA_FPU_H_
                     40: #define _ALPHA_FPU_H_
                     41:
                     42: #define        _FP_C_DEF(n) (1UL << (n))
                     43:
                     44: /*
                     45:  * Most of these next definitions were moved from <ieeefp.h>. Apparently the
                     46:  * names happen to match those exported by Compaq and Linux from their fpu.h
                     47:  * files.
                     48:  */
                     49:
                     50: #define        FPCR_SUM        _FP_C_DEF(63)
                     51: #define        FPCR_INED       _FP_C_DEF(62)
                     52: #define        FPCR_UNFD       _FP_C_DEF(61)
                     53: #define        FPCR_UNDZ       _FP_C_DEF(60)
                     54: #define        FPCR_DYN(rm)    ((unsigned long)(rm) << 58)
                     55: #define        FPCR_IOV        _FP_C_DEF(57)
                     56: #define        FPCR_INE        _FP_C_DEF(56)
                     57: #define        FPCR_UNF        _FP_C_DEF(55)
                     58: #define        FPCR_OVF        _FP_C_DEF(54)
                     59: #define        FPCR_DZE        _FP_C_DEF(53)
                     60: #define        FPCR_INV        _FP_C_DEF(52)
                     61: #define        FPCR_OVFD       _FP_C_DEF(51)
                     62: #define        FPCR_DZED       _FP_C_DEF(50)
                     63: #define        FPCR_INVD       _FP_C_DEF(49)
                     64: #define        FPCR_DNZ        _FP_C_DEF(48)
                     65: #define        FPCR_DNOD       _FP_C_DEF(47)
                     66:
                     67: #define        FPCR_MIRRORED (FPCR_INE | FPCR_UNF | FPCR_OVF | FPCR_DZE | FPCR_INV)
                     68: #define FPCR_MIR_START 52
                     69:
                     70: /*
                     71:  * The AARM specifies the bit positions of the software word used for
                     72:  * user mode interface to the control and status of the kernel completion
                     73:  * routines. Although it largely just redefines the FPCR, it shuffles
                     74:  * the bit order. The names of the bits are defined in the AARM, and
                     75:  * the definition prefix can easily be determined from public domain
                     76:  * programs written to either the Compaq or Linux interfaces, which
                     77:  * appear to be identical.
                     78:  */
                     79:
                     80: #define IEEE_STATUS_DNO _FP_C_DEF(22)
                     81: #define IEEE_STATUS_INE _FP_C_DEF(21)
                     82: #define IEEE_STATUS_UNF _FP_C_DEF(20)
                     83: #define IEEE_STATUS_OVF _FP_C_DEF(19)
                     84: #define IEEE_STATUS_DZE _FP_C_DEF(18)
                     85: #define IEEE_STATUS_INV _FP_C_DEF(17)
                     86:
                     87: #define        IEEE_TRAP_ENABLE_DNO _FP_C_DEF(6)
                     88: #define        IEEE_TRAP_ENABLE_INE _FP_C_DEF(5)
                     89: #define        IEEE_TRAP_ENABLE_UNF _FP_C_DEF(4)
                     90: #define        IEEE_TRAP_ENABLE_OVF _FP_C_DEF(3)
                     91: #define        IEEE_TRAP_ENABLE_DZE _FP_C_DEF(2)
                     92: #define        IEEE_TRAP_ENABLE_INV _FP_C_DEF(1)
                     93:
                     94: #define        IEEE_INHERIT _FP_C_DEF(14)
                     95: #define        IEEE_MAP_UMZ _FP_C_DEF(13)
                     96: #define        IEEE_MAP_DMZ _FP_C_DEF(12)
                     97:
                     98: #define FP_C_MIRRORED (IEEE_STATUS_INE | IEEE_STATUS_UNF | IEEE_STATUS_OVF\
                     99:                                | IEEE_STATUS_DZE | IEEE_STATUS_INV)
                    100: #define        FP_C_MIR_START 17
                    101:
                    102: #ifdef _KERNEL
                    103:
                    104: #define        FLD_MASK(len) ((1UL << (len)) - 1)
                    105: #define FLD_CLEAR(obj, origin, len)    \
                    106:                ((obj) & ~(FLD_MASK(len) << (origin)))
                    107: #define        FLD_INSERT(obj, origin, len, value)     \
                    108:                (FLD_CLEAR(obj, origin, len) | (value) << origin)
                    109:
                    110: #define        FP_C_TO_OPENBSD_MASK(fp_c)      ((fp_c) >> 1 & 0x3f)
                    111: #define        FP_C_TO_OPENBSD_FLAG(fp_c)      ((fp_c) >> 17 & 0x3f)
                    112: #define OPENBSD_MASK_TO_FP_C(m)                (((m) & 0x3f) << 1)
                    113: #define OPENBSD_FLAG_TO_FP_C(s)                (((s) & 0x3f) << 17)
                    114: #define        CLEAR_FP_C_MASK(fp_c)           ((fp_c) & ~(0x3f << 1))
                    115: #define        CLEAR_FP_C_FLAG(fp_c)           ((fp_c) & ~(0x3f << 17))
                    116: #define        SET_FP_C_MASK(fp_c, m) (CLEAR_FP_C_MASK(fp_c) | OPENBSD_MASK_TO_FP_C(m))
                    117: #define        SET_FP_C_FLAG(fp_c, m) (CLEAR_FP_C_FLAG(fp_c) | OPENBSD_FLAG_TO_FP_C(m))
                    118:
                    119: #endif
                    120:
                    121: #endif

CVSweb