[BACK]Return to ieee_handler.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / pc532 / fpu

Annotation of src/sys/arch/pc532/fpu/ieee_handler.h, Revision 1.7

1.7     ! chs         1: /*     $NetBSD: ieee_handler.h,v 1.6 2004/01/23 04:12:39 simonb Exp $  */
1.1       phil        2:
1.6       simonb      3: /*
1.1       phil        4:  * IEEE floating point support for NS32081 and NS32381 fpus.
                      5:  * Copyright (c) 1995 Ian Dall
                      6:  * All Rights Reserved.
1.6       simonb      7:  *
1.1       phil        8:  * Permission to use, copy, modify and distribute this software and its
                      9:  * documentation is hereby granted, provided that both the copyright
                     10:  * notice and this permission notice appear in all copies of the
                     11:  * software, derivative works or modified versions, and any portions
                     12:  * thereof, and that both notices appear in supporting documentation.
1.6       simonb     13:  *
1.1       phil       14:  * IAN DALL ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.
                     15:  * IAN DALL DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY DAMAGES
                     16:  * WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     17:  */
1.6       simonb     18: /*
1.1       phil       19:  *     File:   ieee_handler.h
                     20:  *     Author: Ian Dall
                     21:  *     Date:   November 1995
                     22:  *
                     23:  *     Prototypes for entry points. Customization for in kernel version
                     24:  *      or unix signal handler version.
                     25:  *
                     26:  * HISTORY
1.2       phil       27:  * 02-Apr-96 Matthias Pfaller <leo@dachau.marco.de>)
                     28:  *     Add NetBSD kernel support.
                     29:  *
1.1       phil       30:  * 14-Dec-95  Ian Dall (Ian.Dall@dsto.defence.gov.au)
                     31:  *     First release.
                     32:  *
                     33:  */
                     34: #ifndef _IEEE_HANDLER_H_
                     35: #define _IEEE_HANDLER_H_
                     36:
                     37: #if defined(KERNEL) || defined(_KERNEL)
                     38: #ifdef MACH
                     39:
                     40: #include <ns532/thread.h>
                     41: #include <mach/vm_param.h>
                     42: #include "mach_kdb.h"
                     43: #if MACH_KDB
                     44: #define DEBUG
                     45: #endif
                     46:
                     47: typedef struct {
                     48:   struct ns532_saved_state *regs;
                     49:   struct ns532_fp_state *fps;
                     50: } state;
                     51:
1.4       matthias   52: #define LREGBASE(s) ((vaddr_t) (s)->fps)
1.1       phil       53: #define LREGOFFSET(n) offsetof(struct ns532_fp_state, regs.l.l ## n)
1.4       matthias   54: #define FREGBASE(s) ((vaddr_t) (s)->fps)
1.1       phil       55: #define FREGOFFSET(n) offsetof(struct ns532_fp_state, regs.f.f ## n)
1.4       matthias   56: #define REGBASE(s) ((vaddr_t) (s)->regs)
1.1       phil       57: #define REGOFFSET(n) offsetof(struct ns532_saved_state, r ## n)
                     58:
                     59: #define FSR fps->fsr
                     60: #define FP regs->fp
                     61: #define SP regs->usp
                     62: #define SB regs->sb
                     63: #define PC regs->pc
                     64: #define PSR regs->psr
                     65:
                     66: #elif defined(__NetBSD__)  /* MACH */
                     67: #include <sys/param.h>
                     68: #include <sys/kernel.h>
                     69: #include <sys/proc.h>
                     70: #include <sys/user.h>
                     71:
1.5       thorpej    72: typedef struct lwp state;
1.1       phil       73:
1.5       thorpej    74: #define LREGBASE(s) ((vaddr_t) (s)->l_addr->u_pcb.pcb_freg)
1.1       phil       75: #define LREGOFFSET(n) (n * sizeof(double))
1.5       thorpej    76: #define FREGBASE(s) ((vaddr_t) (s)->l_addr->u_pcb.pcb_freg)
1.1       phil       77: #define FREGOFFSET(n) ((n & ~1) * sizeof(double) + (n & 1) * sizeof(float))
1.5       thorpej    78: #define REGBASE(s) ((vaddr_t) (s)->l_md.md_regs)
1.1       phil       79: #define REGOFFSET(n) offsetof(struct reg, r_r ## n)
                     80:
1.5       thorpej    81: #define FSR l_addr->u_pcb.pcb_fsr
                     82: #define FP l_md.md_regs->r_fp
                     83: #define SP l_md.md_regs->r_sp
                     84: #define SB l_md.md_regs->r_sb
                     85: #define PC l_md.md_regs->r_pc
                     86: #define PSR l_md.md_regs->r_psr
1.1       phil       87:
                     88: #define PSR_N  PSL_N
                     89: #define PSR_Z  PSL_Z
                     90: #define PSR_L  PSL_L
                     91:
                     92: #else  /* __NetBSD__ */
                     93: #error OS unsupported
                     94: #endif /* __NetBSD__ */
                     95: #else /* KERNEL || _KERNEL */
                     96: #include <signal.h>
                     97:
                     98: struct fstate {
                     99:   unsigned int fsr;
                    100:   union {
                    101:     struct { double l0, l2, l4, l6, l1, l3, l5, l7;} l;
                    102:     struct { float f0, f1, f2, f3, f4, f5, f6, f7;} f;
                    103:   } regs;
                    104: };
                    105:
                    106: struct ns532_combined_state {
                    107:   struct sigcontext *scp;
                    108:   struct fstate fs;
                    109: };
                    110:
                    111: typedef struct ns532_combined_state state;
                    112:
                    113: #define LREG(REG) fs.regs.l.l ## REG
1.4       matthias  114: #define LREGBASE(s) ((vaddr_t) &(s)->fs)
1.1       phil      115: #define LREGOFFSET(n) offsetof(struct fstate, regs.l.l ## n)
1.4       matthias  116: #define FREGBASE(s) ((vaddr_t) &(s)->fs)
1.1       phil      117: #define FREGOFFSET(n) offsetof(struct fstate, regs.f.f ## n)
1.4       matthias  118: #define REGBASE(s) ((vaddr_t) (s)->scp)
1.1       phil      119: #define REGOFFSET(n) offsetof(struct sigcontext, sc_reg[n])
                    120: #define FSR fs.fsr
                    121: #define FP scp->sc_fp
                    122: #define SP scp->sc_sp
                    123: #define SB scp->sc_sb
                    124: #define PC scp->sc_pc
                    125: #define PSR scp->sc_ps
                    126:
1.7     ! chs       127: int ieee_sig(int, int, struct sigcontext *);
1.3       matthias  128:
                    129: #ifdef __NetBSD__
                    130: #define PSR_N  PSL_N
                    131: #define PSR_Z  PSL_Z
                    132: #define PSR_L  PSL_L
                    133: #endif /* __NetBSD */
                    134:
1.1       phil      135: #endif /* KERNEL */
                    136:
1.7     ! chs       137: int ieee_handle_exception(state *);
1.1       phil      138:
                    139: #endif /* _IEEE_HANDLER_H_ */

CVSweb <webmaster@jp.NetBSD.org>