Annotation of coherent/b/kernel/emulator/fpu_emu.h, revision 1.1

1.1     ! root        1: /*---------------------------------------------------------------------------+
        !             2:  |  fpu_emu.h                                                                |
        !             3:  |                                                                           |
        !             4:  | Copyright (C) 1992    W. Metzenthen, 22 Parker St, Ormond, Vic 3163,      |
        !             5:  |                       Australia.  E-mail [email protected]    |
        !             6:  |                                                                           |
        !             7:  +---------------------------------------------------------------------------*/
        !             8: 
        !             9: 
        !            10: #ifndef _FPU_EMU_H_
        !            11: #define _FPU_EMU_H_
        !            12: 
        !            13: #ifdef __ASSEMBLER__
        !            14: #include "fpu_asm.h"
        !            15: #define        Const(x)        $##x
        !            16: #else
        !            17: #define        Const(x)        x
        !            18: #endif
        !            19: 
        !            20: #define EXP_BIAS       Const(0)
        !            21: #define EXP_OVER       Const(0x4000)    /* smallest invalid large exponent */
        !            22: /* #define EXP_MAX             Const(16384) */
        !            23: #define        EXP_UNDER       Const(-0x3fff)   /* largest invalid small exponent */
        !            24: /* #define     EXP_MIN         Const(-16384) */
        !            25: 
        !            26: #define SIGN_POS       Const(0)
        !            27: #define SIGN_NEG       Const(1)
        !            28: 
        !            29: /* Keep the order TW_Valid, TW_Zero, TW_Denormal */
        !            30: #define TW_Valid       Const(0)        /* valid */
        !            31: #define TW_Zero                Const(1)        /* zero */
        !            32: /* The following fold to 2 (Special) in the Tag Word */
        !            33: #define TW_Denormal     Const(4)        /* De-normal */
        !            34: #define TW_Infinity    Const(5)        /* + or - infinity */
        !            35: #define        TW_NaN          Const(6)        /* Not a Number */
        !            36: 
        !            37: #define TW_Empty       Const(7)        /* empty */
        !            38: 
        !            39: 
        !            40: 
        !            41: #ifndef __ASSEMBLER__
        !            42: #ifndef COHERENT
        !            43: #include <linux/math_emu.h>
        !            44: #endif
        !            45: 
        !            46: #ifdef PARANOID
        !            47: extern char emulating;
        !            48: #  define RE_ENTRANT_CHECK_OFF emulating = 0;
        !            49: #  define RE_ENTRANT_CHECK_ON emulating = 1;
        !            50: #else
        !            51: #  define RE_ENTRANT_CHECK_OFF
        !            52: #  define RE_ENTRANT_CHECK_ON
        !            53: #endif PARANOID
        !            54: 
        !            55: typedef void (*FUNC)();
        !            56: typedef struct _fpem_reg FPU_REG;
        !            57: 
        !            58: #define        st(x)   ( fpregs[((top+x) &7 )] )
        !            59: 
        !            60: #define        STACK_OVERFLOW  (st_new_ptr = &st(-1), st_new_ptr->tag != TW_Empty)
        !            61: #define        NOT_EMPTY(i)    (st(i).tag != TW_Empty)
        !            62: #define        NOT_EMPTY_0     (FPU_st0_tag ^ TW_Empty)
        !            63: 
        !            64: extern unsigned char FPU_rm;
        !            65: 
        !            66: extern char    FPU_st0_tag;
        !            67: extern FPU_REG *FPU_st0_ptr;
        !            68: 
        !            69: extern void  *FPU_data_address;
        !            70: 
        !            71: extern  FPU_REG  FPU_loaded_data;
        !            72: 
        !            73: #define pop()  { FPU_st0_ptr->tag = TW_Empty; top++; }
        !            74: 
        !            75: /* push() does not affect the tags */
        !            76: #define push() { top--; FPU_st0_ptr = st_new_ptr; }
        !            77: 
        !            78: 
        !            79: #define reg_move(x, y) { \
        !            80:                 *(short *)&((y)->sign) = *(short *)&((x)->sign); \
        !            81:                 *(long *)&((y)->exp) = *(long *)&((x)->exp); \
        !            82:                 *(long long *)&((y)->sigl) = *(long long *)&((x)->sigl); }
        !            83: 
        !            84: 
        !            85: /*----- Prototypes for functions written in assembler -----*/
        !            86: /* extern void reg_move(FPU_REG *a, FPU_REG *b); */
        !            87: 
        !            88: extern void mul64(long long *a, long long *b, long long *result);
        !            89: extern void poly_div2(long long *x);
        !            90: extern void poly_div4(long long *x);
        !            91: extern void poly_div16(long long *x);
        !            92: extern void polynomial(unsigned accum[], unsigned x[],
        !            93:                       unsigned short terms[][4], int n);
        !            94: extern void normalize(FPU_REG *x);
        !            95: extern void reg_div(FPU_REG *arg1, FPU_REG *arg2, FPU_REG *answ);
        !            96: extern void reg_u_sub(FPU_REG *arg1, FPU_REG *arg2, FPU_REG *answ);
        !            97: extern void reg_u_mul(FPU_REG *arg1, FPU_REG *arg2, FPU_REG *answ);
        !            98: extern void reg_u_div(long long *arg1, long long *arg2, FPU_REG *answ);
        !            99: extern void reg_u_add(FPU_REG *arg1, FPU_REG *arg2, FPU_REG *answ);
        !           100: extern void wm_sqrt(FPU_REG *n);
        !           101: extern unsigned        shrx(void *l, unsigned x);
        !           102: extern unsigned        shrxs(void *v, unsigned x);
        !           103: extern unsigned long div_small(unsigned long long *x, unsigned long y);
        !           104: 
        !           105: #ifndef MAKING_PROTO
        !           106: #include "fpu_proto.h"
        !           107: #endif
        !           108: 
        !           109: #endif __ASSEMBLER__
        !           110: 
        !           111: #endif _FPU_EMU_H_

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.