diff options
Diffstat (limited to 'sim/common/cgen-fpu.h')
-rw-r--r-- | sim/common/cgen-fpu.h | 212 |
1 files changed, 0 insertions, 212 deletions
diff --git a/sim/common/cgen-fpu.h b/sim/common/cgen-fpu.h deleted file mode 100644 index bc3364e00cd..00000000000 --- a/sim/common/cgen-fpu.h +++ /dev/null @@ -1,212 +0,0 @@ -/* CGEN fpu support - Copyright (C) 1999 Cygnus Solutions. */ - -#ifndef CGEN_FPU_H -#define CGEN_FPU_H - -/* Floating point support is a little more complicated. - We want to support using either host fp insns or an accurate fp library. - We also want to support easily added variants (e.g. modified ieee). - This is done by vectoring all calls through a table. */ - -typedef USI SF; -typedef UDI DF; -typedef struct { SI parts[3]; } XF; -typedef struct { SI parts[4]; } TF; - -#ifndef TARGET_EXT_FP_WORDS -#define TARGET_EXT_FP_WORDS 4 -#endif - -/* forward decl */ -typedef struct cgen_fp_ops CGEN_FP_OPS; - -/* Instance of an fpu. */ - -typedef struct { - /* Usually a pointer back to the SIM_CPU struct. */ - void* owner; - /* Pointer to ops struct, rather than copy of it, to avoid bloating - SIM_CPU struct. */ - CGEN_FP_OPS* ops; -} CGEN_FPU; - -/* result of cmp */ - -typedef enum { - /* ??? May wish to distinguish qnan/snan here. */ - FP_CMP_EQ, FP_CMP_LT, FP_CMP_GT, FP_CMP_NAN -} CGEN_FP_CMP; - -/* error handler */ - -typedef void (CGEN_FPU_ERROR_FN) (CGEN_FPU*, int); - -/* fpu operation table */ - -struct cgen_fp_ops { - - /* error (e.g. signalling nan) handler, supplied by owner */ - - CGEN_FPU_ERROR_FN *error; - - /* basic SF ops */ - - SF (*addsf) (CGEN_FPU*, SF, SF); - SF (*subsf) (CGEN_FPU*, SF, SF); - SF (*mulsf) (CGEN_FPU*, SF, SF); - SF (*divsf) (CGEN_FPU*, SF, SF); - SF (*negsf) (CGEN_FPU*, SF); - SF (*abssf) (CGEN_FPU*, SF); - SF (*sqrtsf) (CGEN_FPU*, SF); - SF (*invsf) (CGEN_FPU*, SF); - SF (*cossf) (CGEN_FPU*, SF); - SF (*sinsf) (CGEN_FPU*, SF); - SF (*minsf) (CGEN_FPU*, SF, SF); - SF (*maxsf) (CGEN_FPU*, SF, SF); - - /* ??? to be revisited */ - CGEN_FP_CMP (*cmpsf) (CGEN_FPU*, SF, SF); - int (*eqsf) (CGEN_FPU*, SF, SF); - int (*nesf) (CGEN_FPU*, SF, SF); - int (*ltsf) (CGEN_FPU*, SF, SF); - int (*lesf) (CGEN_FPU*, SF, SF); - int (*gtsf) (CGEN_FPU*, SF, SF); - int (*gesf) (CGEN_FPU*, SF, SF); - - /* basic DF ops */ - - DF (*adddf) (CGEN_FPU*, DF, DF); - DF (*subdf) (CGEN_FPU*, DF, DF); - DF (*muldf) (CGEN_FPU*, DF, DF); - DF (*divdf) (CGEN_FPU*, DF, DF); - DF (*negdf) (CGEN_FPU*, DF); - DF (*absdf) (CGEN_FPU*, DF); - DF (*sqrtdf) (CGEN_FPU*, DF); - DF (*invdf) (CGEN_FPU*, DF); - DF (*cosdf) (CGEN_FPU*, DF); - DF (*sindf) (CGEN_FPU*, DF); - DF (*mindf) (CGEN_FPU*, DF, DF); - DF (*maxdf) (CGEN_FPU*, DF, DF); - - /* ??? to be revisited */ - CGEN_FP_CMP (*cmpdf) (CGEN_FPU*, DF, DF); - int (*eqdf) (CGEN_FPU*, DF, DF); - int (*nedf) (CGEN_FPU*, DF, DF); - int (*ltdf) (CGEN_FPU*, DF, DF); - int (*ledf) (CGEN_FPU*, DF, DF); - int (*gtdf) (CGEN_FPU*, DF, DF); - int (*gedf) (CGEN_FPU*, DF, DF); - - /* SF/DF conversion ops */ - - DF (*fextsfdf) (CGEN_FPU*, SF); - SF (*ftruncdfsf) (CGEN_FPU*, DF); - - SF (*floatsisf) (CGEN_FPU*, SI); - SF (*floatdisf) (CGEN_FPU*, DI); - SF (*ufloatsisf) (CGEN_FPU*, USI); - SF (*ufloatdisf) (CGEN_FPU*, UDI); - - SI (*fixsfsi) (CGEN_FPU*, SF); - DI (*fixsfdi) (CGEN_FPU*, SF); - USI (*ufixsfsi) (CGEN_FPU*, SF); - UDI (*ufixsfdi) (CGEN_FPU*, SF); - - DF (*floatsidf) (CGEN_FPU*, SI); - DF (*floatdidf) (CGEN_FPU*, DI); - DF (*ufloatsidf) (CGEN_FPU*, USI); - DF (*ufloatdidf) (CGEN_FPU*, UDI); - - SI (*fixdfsi) (CGEN_FPU*, DF); - DI (*fixdfdi) (CGEN_FPU*, DF); - USI (*ufixdfsi) (CGEN_FPU*, DF); - UDI (*ufixdfdi) (CGEN_FPU*, DF); - - /* XF mode support (kept separate 'cus not always present) */ - - XF (*addxf) (CGEN_FPU*, XF, XF); - XF (*subxf) (CGEN_FPU*, XF, XF); - XF (*mulxf) (CGEN_FPU*, XF, XF); - XF (*divxf) (CGEN_FPU*, XF, XF); - XF (*negxf) (CGEN_FPU*, XF); - XF (*absxf) (CGEN_FPU*, XF); - XF (*sqrtxf) (CGEN_FPU*, XF); - XF (*invxf) (CGEN_FPU*, XF); - XF (*cosxf) (CGEN_FPU*, XF); - XF (*sinxf) (CGEN_FPU*, XF); - XF (*minxf) (CGEN_FPU*, XF, XF); - XF (*maxxf) (CGEN_FPU*, XF, XF); - - CGEN_FP_CMP (*cmpxf) (CGEN_FPU*, XF, XF); - int (*eqxf) (CGEN_FPU*, XF, XF); - int (*nexf) (CGEN_FPU*, XF, XF); - int (*ltxf) (CGEN_FPU*, XF, XF); - int (*lexf) (CGEN_FPU*, XF, XF); - int (*gtxf) (CGEN_FPU*, XF, XF); - int (*gexf) (CGEN_FPU*, XF, XF); - - XF (*extsfxf) (CGEN_FPU*, SF); - XF (*extdfxf) (CGEN_FPU*, DF); - SF (*truncxfsf) (CGEN_FPU*, XF); - DF (*truncxfdf) (CGEN_FPU*, XF); - - XF (*floatsixf) (CGEN_FPU*, SI); - XF (*floatdixf) (CGEN_FPU*, DI); - XF (*ufloatsixf) (CGEN_FPU*, USI); - XF (*ufloatdixf) (CGEN_FPU*, UDI); - - SI (*fixxfsi) (CGEN_FPU*, XF); - DI (*fixxfdi) (CGEN_FPU*, XF); - USI (*ufixxfsi) (CGEN_FPU*, XF); - UDI (*ufixxfdi) (CGEN_FPU*, XF); - - /* TF mode support (kept separate 'cus not always present) */ - - TF (*addtf) (CGEN_FPU*, TF, TF); - TF (*subtf) (CGEN_FPU*, TF, TF); - TF (*multf) (CGEN_FPU*, TF, TF); - TF (*divtf) (CGEN_FPU*, TF, TF); - TF (*negtf) (CGEN_FPU*, TF); - TF (*abstf) (CGEN_FPU*, TF); - TF (*sqrttf) (CGEN_FPU*, TF); - TF (*invtf) (CGEN_FPU*, TF); - TF (*costf) (CGEN_FPU*, TF); - TF (*sintf) (CGEN_FPU*, TF); - TF (*mintf) (CGEN_FPU*, TF, TF); - TF (*maxtf) (CGEN_FPU*, TF, TF); - - CGEN_FP_CMP (*cmptf) (CGEN_FPU*, TF, TF); - int (*eqtf) (CGEN_FPU*, TF, TF); - int (*netf) (CGEN_FPU*, TF, TF); - int (*lttf) (CGEN_FPU*, TF, TF); - int (*letf) (CGEN_FPU*, TF, TF); - int (*gttf) (CGEN_FPU*, TF, TF); - int (*getf) (CGEN_FPU*, TF, TF); - - TF (*extsftf) (CGEN_FPU*, SF); - TF (*extdftf) (CGEN_FPU*, DF); - SF (*trunctfsf) (CGEN_FPU*, TF); - DF (*trunctfdf) (CGEN_FPU*, TF); - - TF (*floatsitf) (CGEN_FPU*, SI); - TF (*floatditf) (CGEN_FPU*, DI); - TF (*ufloatsitf) (CGEN_FPU*, USI); - TF (*ufloatditf) (CGEN_FPU*, UDI); - - SI (*fixtfsi) (CGEN_FPU*, TF); - DI (*fixtfdi) (CGEN_FPU*, TF); - USI (*ufixtfsi) (CGEN_FPU*, TF); - UDI (*ufixtfdi) (CGEN_FPU*, TF); - -}; - -extern void cgen_init_accurate_fpu (SIM_CPU*, CGEN_FPU*, CGEN_FPU_ERROR_FN*); - -BI cgen_sf_snan_p (CGEN_FPU*, SF); -BI cgen_df_snan_p (CGEN_FPU*, DF); - -/* no-op fp error handler */ -extern CGEN_FPU_ERROR_FN cgen_fpu_ignore_errors; - -#endif /* CGEN_FPU_H */ |