Annotation of coherent/b/kernel/emulator/fpu_emu.h, revision 1.1.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.