summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Molenda <jsm@bugshack.cygnus.com>1999-07-05 17:58:37 +0000
committerJason Molenda <jsm@bugshack.cygnus.com>1999-07-05 17:58:37 +0000
commitf2311fe092501c98d6025f363c8f3ed96d3e2268 (patch)
tree03a18c8b2ab2d2b79215cd6e2ae21895c91ac6db
parent86798ef76eb4b525d7e3b43be178ae68402a300c (diff)
downloadgdb-f2311fe092501c98d6025f363c8f3ed96d3e2268.tar.gz
import gdb-1999-07-05 snapshot
-rw-r--r--sim/common/ChangeLog13
-rw-r--r--sim/common/Make-common.in9
-rw-r--r--sim/common/cgen-cpu.h4
-rw-r--r--sim/common/cgen-mem.h88
-rw-r--r--sim/common/cgen-ops.h688
-rw-r--r--sim/common/cgen-sim.h1
-rw-r--r--sim/common/cgen-types.h9
7 files changed, 171 insertions, 641 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index d585aa6dbb6..d8847c605a0 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,3 +1,16 @@
+1999-07-05 Doug Evans <devans@casey.cygnus.com>
+
+ * Make-common.in (CGEN_MAIN_CPU_DEPS): Add cgen-fpu.h.
+ (cgen-fpu.o,cgen-accfp.o): Add rules for.
+ * cgen-fpu.c: New file.
+ * cgen-fpu.h: New file.
+ * cgen-accfp.c: New file.
+ * cgen-cpu.h (CGEN_CPU): New member fpu.
+ * cgen-mem.h: Redo fp support.
+ * cgen-ops.h: Delete k&r support. Redo fp support.
+ * cgen-sim.h: Include cgen-fpu.h.
+ * cgen-types.h (SF,DF,XF,TF): Moved to cgen-fpu.h.
+
1999-06-23 Doug Evans <devans@casey.cygnus.com>
* cgen-engine.h (TARGET_SEM_BRANCH_FINI): Remove cruft at end of
diff --git a/sim/common/Make-common.in b/sim/common/Make-common.in
index 71b4f69a612..b8e98eb9dfb 100644
--- a/sim/common/Make-common.in
+++ b/sim/common/Make-common.in
@@ -556,7 +556,8 @@ CGEN_MAIN_CPU_DEPS = \
$(SIM_MAIN_DEPS) \
$(CGEN_INCLUDE_DEPS) \
$(srccom)/cgen-ops.h \
- $(srccom)/cgen-mem.h
+ $(srccom)/cgen-mem.h \
+ $(srccom)/cgen-fpu.h
cgen-run.o: $(srccom)/cgen-run.c $(sim_main_headers)
$(CC) -c $(srccom)/cgen-run.c $(ALL_CFLAGS)
@@ -567,6 +568,12 @@ cgen-scache.o: $(srccom)/cgen-scache.c $(sim_main_headers)
cgen-trace.o: $(srccom)/cgen-trace.c $(sim_main_headers)
$(CC) -c $(srccom)/cgen-trace.c $(ALL_CFLAGS)
+cgen-fpu.o: $(srccom)/cgen-fpu.c $(sim_main_headers) $(sim-fpu_h)
+ $(CC) -c $(srccom)/cgen-fpu.c $(ALL_CFLAGS)
+
+cgen-accfp.o: $(srccom)/cgen-accfp.c $(sim_main_headers) $(sim-fpu_h)
+ $(CC) -c $(srccom)/cgen-accfp.c $(ALL_CFLAGS)
+
cgen-utils.o: $(srccom)/cgen-utils.c $(sim_main_headers) \
$(srccom)/cgen-mem.h $(srccom)/cgen-ops.h $(srccom)/cgen-engine.h
$(CC) -c $(srccom)/cgen-utils.c $(ALL_CFLAGS)
diff --git a/sim/common/cgen-cpu.h b/sim/common/cgen-cpu.h
index b2121009033..c807182bbc0 100644
--- a/sim/common/cgen-cpu.h
+++ b/sim/common/cgen-cpu.h
@@ -82,6 +82,10 @@ typedef struct {
const CGEN_INSN * (*get_idata) (SIM_CPU *, int);
#define CPU_GET_IDATA(cpu) ((cpu)->cgen_cpu.get_idata)
+ /* Floating point support. */
+ CGEN_FPU fpu;
+#define CGEN_CPU_FPU(cpu) (& (cpu)->cgen_cpu.fpu)
+
/* Disassembler. */
CGEN_DISASSEMBLER *disassembler;
#define CPU_DISASSEMBLER(cpu) ((cpu)->cgen_cpu.disassembler)
diff --git a/sim/common/cgen-mem.h b/sim/common/cgen-mem.h
index c91ccb3f688..b424bba18a8 100644
--- a/sim/common/cgen-mem.h
+++ b/sim/common/cgen-mem.h
@@ -1,5 +1,5 @@
/* Memory ops header for CGEN-based simulators.
- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
Contributed by Cygnus Solutions.
This file is part of the GNU Simulators.
@@ -27,7 +27,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define MEMOPS_INLINE extern inline
#endif
-/* Memory read support. */
+/* Integer memory read support.
+
+ There is no floating point support. In this context there are no
+ floating point modes, only floating point operations (whose arguments
+ and results are arrays of bits that we treat as integer modes). */
#if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
#define DECLARE_GETMEM(mode, size) \
@@ -53,28 +57,8 @@ DECLARE_GETMEM (DI, 8)
DECLARE_GETMEM (UDI, 8)
#undef DECLARE_GETMEM
-
-#if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
-#define DECLARE_GETMEM(mode, size) \
-MEMOPS_INLINE mode \
-XCONCAT2 (GETMEM,mode) (SIM_CPU *cpu, IADDR pc, ADDR a) \
-{ \
- PROFILE_COUNT_READ (cpu, a, XCONCAT2 (MODE_,mode)); \
- /* Don't read anything into "unaligned" here. Bad name choice. */\
- return XCONCAT2 (sim_core_read_unaligned_,size) (cpu, pc, read_map, a); \
-}
-#else
-#define DECLARE_GETMEM(mode, size) \
-extern mode XCONCAT2 (GETMEM,mode) (SIM_CPU *, IADDR, ADDR);
-#endif
-
-DECLARE_GETMEM (SF, 4)
-DECLARE_GETMEM (DF, 8)
-/*DECLARE_GETMEM (TF, 16)*/
-
-#undef DECLARE_GETMEM
-/* Memory write support. */
+/* Integer memory write support. */
#if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
#define DECLARE_SETMEM(mode, size) \
@@ -99,12 +83,6 @@ DECLARE_SETMEM (USI, 4)
DECLARE_SETMEM (DI, 8)
DECLARE_SETMEM (UDI, 8)
-/*
-DECLARE_SETMEM (SF, 4)
-DECLARE_SETMEM (DF, 8)
-DECLARE_SETMEM (TF, 16)
-*/
-
#undef DECLARE_SETMEM
/* Instruction read support. */
@@ -130,6 +108,54 @@ DECLARE_GETIMEM (UDI, 8)
#undef DECLARE_GETIMEM
+/* Floating point support.
+
+ ??? One can specify that the integer memory ops should be used instead,
+ and treat fp values as just a series of bits. One might even bubble
+ that notion up into the description language. However, that departs from
+ gcc. One could cross over from gcc's notion and a "series of bits" notion
+ between there and here, and thus still not require these routines. However,
+ that's a complication of its own (not that having these fns isn't).
+ But for now, we do things this way. */
+
+#if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
+#define DECLARE_GETMEM(mode, size) \
+MEMOPS_INLINE mode \
+XCONCAT2 (GETMEM,mode) (SIM_CPU *cpu, IADDR pc, ADDR a) \
+{ \
+ PROFILE_COUNT_READ (cpu, a, XCONCAT2 (MODE_,mode)); \
+ /* Don't read anything into "unaligned" here. Bad name choice. */\
+ return XCONCAT2 (sim_core_read_unaligned_,size) (cpu, pc, read_map, a); \
+}
+#else
+#define DECLARE_GETMEM(mode, size) \
+extern mode XCONCAT2 (GETMEM,mode) (SIM_CPU *, IADDR, ADDR);
+#endif
+
+DECLARE_GETMEM (SF, 4)
+DECLARE_GETMEM (DF, 8)
+
+#undef DECLARE_GETMEM
+
+#if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
+#define DECLARE_SETMEM(mode, size) \
+MEMOPS_INLINE void \
+XCONCAT2 (SETMEM,mode) (SIM_CPU *cpu, IADDR pc, ADDR a, mode val) \
+{ \
+ PROFILE_COUNT_WRITE (cpu, a, XCONCAT2 (MODE_,mode)); \
+ /* Don't read anything into "unaligned" here. Bad name choice. */ \
+ XCONCAT2 (sim_core_write_unaligned_,size) (cpu, pc, write_map, a, val); \
+}
+#else
+#define DECLARE_SETMEM(mode, size) \
+extern void XCONCAT2 (SETMEM,mode) (SIM_CPU *, IADDR, ADDR, mode);
+#endif
+
+DECLARE_SETMEM (SF, 4)
+DECLARE_SETMEM (DF, 8)
+
+#undef DECLARE_SETMEM
+
/* GETT<mode>: translate target value at P to host value.
This needn't be very efficient (i.e. can call memcpy) as this is
only used when interfacing with the outside world (e.g. gdb). */
@@ -157,7 +183,7 @@ DECLARE_GETT (USI, 4)
DECLARE_GETT (DI, 8)
DECLARE_GETT (UDI, 8)
-/*
+/* ??? defered until necessary
DECLARE_GETT (SF, 4)
DECLARE_GETT (DF, 8)
DECLARE_GETT (TF, 16)
@@ -192,7 +218,7 @@ DECLARE_SETT (USI, 4)
DECLARE_SETT (DI, 8)
DECLARE_SETT (UDI, 8)
-/*
+/* ??? defered until necessary
DECLARE_SETT (SF, 4)
DECLARE_SETT (DF, 8)
DECLARE_SETT (TF, 16)
diff --git a/sim/common/cgen-ops.h b/sim/common/cgen-ops.h
index 6b89859160a..326102f6a3c 100644
--- a/sim/common/cgen-ops.h
+++ b/sim/common/cgen-ops.h
@@ -1,3 +1,4 @@
+
/* Semantics ops support for CGEN-based simulators.
Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
Contributed by Cygnus Solutions.
@@ -33,6 +34,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
/* Semantic operations.
At one point this file was machine generated. Maybe it will be again. */
+/* TODO: Lazy encoding/decoding of fp values. */
+
/* These don't really have a mode. */
#define ANDIF(x, y) ((x) && (y))
#define ORIF(x, y) ((x) || (y))
@@ -53,7 +56,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define LEUBI(x, y) ((BI) (x) <= (BI) (y))
#define GTUBI(x, y) ((BI) (x) > (BI) (y))
#define GEUBI(x, y) ((BI) (x) >= (BI) (y))
-
+
#define ADDQI(x, y) ((x) + (y))
#define SUBQI(x, y) ((x) - (y))
#define MULQI(x, y) ((x) * (y))
@@ -64,8 +67,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define SRAQI(x, y) ((QI) (x) >> (y))
#define SRLQI(x, y) ((UQI) (x) >> (y))
#define SLLQI(x, y) ((UQI) (x) << (y))
-extern QI RORQI PARAMS ((QI, int));
-extern QI ROLQI PARAMS ((QI, int));
+extern QI RORQI (QI, int);
+extern QI ROLQI (QI, int);
#define ANDQI(x, y) ((x) & (y))
#define ORQI(x, y) ((x) | (y))
#define XORQI(x, y) ((x) ^ (y))
@@ -82,7 +85,7 @@ extern QI ROLQI PARAMS ((QI, int));
#define LEUQI(x, y) ((UQI) (x) <= (UQI) (y))
#define GTUQI(x, y) ((UQI) (x) > (UQI) (y))
#define GEUQI(x, y) ((UQI) (x) >= (UQI) (y))
-
+
#define ADDHI(x, y) ((x) + (y))
#define SUBHI(x, y) ((x) - (y))
#define MULHI(x, y) ((x) * (y))
@@ -93,8 +96,8 @@ extern QI ROLQI PARAMS ((QI, int));
#define SRAHI(x, y) ((HI) (x) >> (y))
#define SRLHI(x, y) ((UHI) (x) >> (y))
#define SLLHI(x, y) ((UHI) (x) << (y))
-extern HI RORHI PARAMS ((HI, int));
-extern HI ROLHI PARAMS ((HI, int));
+extern HI RORHI (HI, int);
+extern HI ROLHI (HI, int);
#define ANDHI(x, y) ((x) & (y))
#define ORHI(x, y) ((x) | (y))
#define XORHI(x, y) ((x) ^ (y))
@@ -111,7 +114,7 @@ extern HI ROLHI PARAMS ((HI, int));
#define LEUHI(x, y) ((UHI) (x) <= (UHI) (y))
#define GTUHI(x, y) ((UHI) (x) > (UHI) (y))
#define GEUHI(x, y) ((UHI) (x) >= (UHI) (y))
-
+
#define ADDSI(x, y) ((x) + (y))
#define SUBSI(x, y) ((x) - (y))
#define MULSI(x, y) ((x) * (y))
@@ -122,8 +125,8 @@ extern HI ROLHI PARAMS ((HI, int));
#define SRASI(x, y) ((SI) (x) >> (y))
#define SRLSI(x, y) ((USI) (x) >> (y))
#define SLLSI(x, y) ((USI) (x) << (y))
-extern SI RORSI PARAMS ((SI, int));
-extern SI ROLSI PARAMS ((SI, int));
+extern SI RORSI (SI, int);
+extern SI ROLSI (SI, int);
#define ANDSI(x, y) ((x) & (y))
#define ORSI(x, y) ((x) | (y))
#define XORSI(x, y) ((x) ^ (y))
@@ -140,36 +143,36 @@ extern SI ROLSI PARAMS ((SI, int));
#define LEUSI(x, y) ((USI) (x) <= (USI) (y))
#define GTUSI(x, y) ((USI) (x) > (USI) (y))
#define GEUSI(x, y) ((USI) (x) >= (USI) (y))
-
+
#ifdef DI_FN_SUPPORT
-extern DI ADDDI PARAMS ((DI, DI));
-extern DI SUBDI PARAMS ((DI, DI));
-extern DI MULDI PARAMS ((DI, DI));
-extern DI DIVDI PARAMS ((DI, DI));
-extern DI UDIVDI PARAMS ((DI, DI));
-extern DI MODDI PARAMS ((DI, DI));
-extern DI UMODDI PARAMS ((DI, DI));
-extern DI SRADI PARAMS ((DI, int));
-extern UDI SRLDI PARAMS ((UDI, int));
-extern UDI SLLDI PARAMS ((UDI, int));
-extern DI RORDI PARAMS ((DI, int));
-extern DI ROLDI PARAMS ((DI, int));
-extern DI ANDDI PARAMS ((DI, DI));
-extern DI ORDI PARAMS ((DI, DI));
-extern DI XORDI PARAMS ((DI, DI));
-extern DI NEGDI PARAMS ((DI));
-extern int NOTDI PARAMS ((DI));
-extern DI INVDI PARAMS ((DI));
-extern int EQDI PARAMS ((DI, DI));
-extern int NEDI PARAMS ((DI, DI));
-extern int LTDI PARAMS ((DI, DI));
-extern int LEDI PARAMS ((DI, DI));
-extern int GTDI PARAMS ((DI, DI));
-extern int GEDI PARAMS ((DI, DI));
-extern int LTUDI PARAMS ((UDI, UDI));
-extern int LEUDI PARAMS ((UDI, UDI));
-extern int GTUDI PARAMS ((UDI, UDI));
-extern int GEUDI PARAMS ((UDI, UDI));
+extern DI ADDDI (DI, DI);
+extern DI SUBDI (DI, DI);
+extern DI MULDI (DI, DI);
+extern DI DIVDI (DI, DI);
+extern DI UDIVDI (DI, DI);
+extern DI MODDI (DI, DI);
+extern DI UMODDI (DI, DI);
+extern DI SRADI (DI, int);
+extern UDI SRLDI (UDI, int);
+extern UDI SLLDI (UDI, int);
+extern DI RORDI (DI, int);
+extern DI ROLDI (DI, int);
+extern DI ANDDI (DI, DI);
+extern DI ORDI (DI, DI);
+extern DI XORDI (DI, DI);
+extern DI NEGDI (DI);
+extern int NOTDI (DI);
+extern DI INVDI (DI);
+extern int EQDI (DI, DI);
+extern int NEDI (DI, DI);
+extern int LTDI (DI, DI);
+extern int LEDI (DI, DI);
+extern int GTDI (DI, DI);
+extern int GEDI (DI, DI);
+extern int LTUDI (UDI, UDI);
+extern int LEUDI (UDI, UDI);
+extern int GTUDI (UDI, UDI);
+extern int GEUDI (UDI, UDI);
#else /* ! DI_FN_SUPPORT */
#define ADDDI(x, y) ((x) + (y))
#define SUBDI(x, y) ((x) - (y))
@@ -181,8 +184,8 @@ extern int GEUDI PARAMS ((UDI, UDI));
#define SRADI(x, y) ((DI) (x) >> (y))
#define SRLDI(x, y) ((UDI) (x) >> (y))
#define SLLDI(x, y) ((UDI) (x) << (y))
-extern DI RORDI PARAMS ((DI, int));
-extern DI ROLDI PARAMS ((DI, int));
+extern DI RORDI (DI, int);
+extern DI ROLDI (DI, int);
#define ANDDI(x, y) ((x) & (y))
#define ORDI(x, y) ((x) | (y))
#define XORDI(x, y) ((x) ^ (y))
@@ -200,229 +203,61 @@ extern DI ROLDI PARAMS ((DI, int));
#define GTUDI(x, y) ((UDI) (x) > (UDI) (y))
#define GEUDI(x, y) ((UDI) (x) >= (UDI) (y))
#endif /* DI_FN_SUPPORT */
-
-#ifdef SF_FN_SUPPORT
-extern SF ADDSF PARAMS ((SF, SF));
-extern SF SUBSF PARAMS ((SF, SF));
-extern SF NEGSF PARAMS ((SF));
-extern SF MULSF PARAMS ((SF, SF));
-extern SF DIVSF PARAMS ((SF, SF));
-extern int EQSF PARAMS ((SF, SF));
-extern int NESF PARAMS ((SF, SF));
-extern int LTSF PARAMS ((SF, SF));
-extern int LESF PARAMS ((SF, SF));
-extern int GTSF PARAMS ((SF, SF));
-extern int GESF PARAMS ((SF, SF));
-extern SF ABSSF PARAMS ((SF));
-extern SF SQRTSF PARAMS ((SF));
-extern SF COSSF PARAMS ((SF));
-extern SF SINSF PARAMS ((SF));
-#else /* ! SF_FN_SUPPORT */
-#define ADDSF(x, y) ((x) + (y))
-#define SUBSF(x, y) ((x) - (y))
-#define NEGSF(x) (- (x))
-#define MULSF(x, y) ((x) * (y))
-#define DIVSF(x, y) ((x) / (y))
-#define EQSF(x, y) ((SF) (x) == (SF) (y))
-#define NESF(x, y) ((SF) (x) != (SF) (y))
-#define LTSF(x, y) ((SF) (x) < (SF) (y))
-#define LESF(x, y) ((SF) (x) <= (SF) (y))
-#define GTSF(x, y) ((SF) (x) > (SF) (y))
-#define GESF(x, y) ((SF) (x) >= (SF) (y))
-extern SF ABSSF PARAMS ((SF));
-extern SF SQRTSF PARAMS ((SF));
-extern SF COSSF PARAMS ((SF));
-extern SF SINSF PARAMS ((SF));
-#endif /* SF_FN_SUPPORT */
-
-#ifdef DF_FN_SUPPORT
-extern DF ADDDF PARAMS ((DF, DF));
-extern DF SUBDF PARAMS ((DF, DF));
-extern DF NEGDF PARAMS ((DF));
-extern DF MULDF PARAMS ((DF, DF));
-extern DF DIVDF PARAMS ((DF, DF));
-extern int EQDF PARAMS ((DF, DF));
-extern int NEDF PARAMS ((DF, DF));
-extern int LTDF PARAMS ((DF, DF));
-extern int LEDF PARAMS ((DF, DF));
-extern int GTDF PARAMS ((DF, DF));
-extern int GEDF PARAMS ((DF, DF));
-extern DF ABSDF PARAMS ((DF));
-extern DF SQRTDF PARAMS ((DF));
-extern DF COSDF PARAMS ((DF));
-extern DF SINDF PARAMS ((DF));
-#else /* ! DF_FN_SUPPORT */
-#define ADDDF(x, y) ((x) + (y))
-#define SUBDF(x, y) ((x) - (y))
-#define NEGDF(x) (- (x))
-#define MULDF(x, y) ((x) * (y))
-#define DIVDF(x, y) ((x) / (y))
-#define EQDF(x, y) ((DF) (x) == (DF) (y))
-#define NEDF(x, y) ((DF) (x) != (DF) (y))
-#define LTDF(x, y) ((DF) (x) < (DF) (y))
-#define LEDF(x, y) ((DF) (x) <= (DF) (y))
-#define GTDF(x, y) ((DF) (x) > (DF) (y))
-#define GEDF(x, y) ((DF) (x) >= (DF) (y))
-extern DF ABSDF PARAMS ((DF));
-extern DF SQRTDF PARAMS ((DF));
-extern DF COSDF PARAMS ((DF));
-extern DF SINDF PARAMS ((DF));
-#endif /* DF_FN_SUPPORT */
-
-#ifdef XF_FN_SUPPORT
-extern XF ADDXF PARAMS ((XF, XF));
-extern XF SUBXF PARAMS ((XF, XF));
-extern XF NEGXF PARAMS ((XF));
-extern XF MULXF PARAMS ((XF, XF));
-extern XF DIVXF PARAMS ((XF, XF));
-extern int EQXF PARAMS ((XF, XF));
-extern int NEXF PARAMS ((XF, XF));
-extern int LTXF PARAMS ((XF, XF));
-extern int LEXF PARAMS ((XF, XF));
-extern int GTXF PARAMS ((XF, XF));
-extern int GEXF PARAMS ((XF, XF));
-extern XF ABSXF PARAMS ((XF));
-extern XF SQRTXF PARAMS ((XF));
-extern XF COSXF PARAMS ((XF));
-extern XF SINXF PARAMS ((XF));
-#else /* ! XF_FN_SUPPORT */
-#define ADDXF(x, y) ((x) + (y))
-#define SUBXF(x, y) ((x) - (y))
-#define NEGXF(x) (- (x))
-#define MULXF(x, y) ((x) * (y))
-#define DIVXF(x, y) ((x) / (y))
-#define EQXF(x, y) ((XF) (x) == (XF) (y))
-#define NEXF(x, y) ((XF) (x) != (XF) (y))
-#define LTXF(x, y) ((XF) (x) < (XF) (y))
-#define LEXF(x, y) ((XF) (x) <= (XF) (y))
-#define GTXF(x, y) ((XF) (x) > (XF) (y))
-#define GEXF(x, y) ((XF) (x) >= (XF) (y))
-extern XF ABSXF PARAMS ((XF));
-extern XF SQRTXF PARAMS ((XF));
-extern XF COSXF PARAMS ((XF));
-extern XF SINXF PARAMS ((XF));
-#endif /* XF_FN_SUPPORT */
-
-#ifdef TF_FN_SUPPORT
-extern TF ADDTF PARAMS ((TF, TF));
-extern TF SUBTF PARAMS ((TF, TF));
-extern TF NEGTF PARAMS ((TF));
-extern TF MULTF PARAMS ((TF, TF));
-extern TF DIVTF PARAMS ((TF, TF));
-extern int EQTF PARAMS ((TF, TF));
-extern int NETF PARAMS ((TF, TF));
-extern int LTTF PARAMS ((TF, TF));
-extern int LETF PARAMS ((TF, TF));
-extern int GTTF PARAMS ((TF, TF));
-extern int GETF PARAMS ((TF, TF));
-extern TF ABSTF PARAMS ((TF));
-extern TF SQRTTF PARAMS ((TF));
-extern TF COSTF PARAMS ((TF));
-extern TF SINTF PARAMS ((TF));
-#else /* ! TF_FN_SUPPORT */
-#define ADDTF(x, y) ((x) + (y))
-#define SUBTF(x, y) ((x) - (y))
-#define NEGTF(x) (- (x))
-#define MULTF(x, y) ((x) * (y))
-#define DIVTF(x, y) ((x) / (y))
-#define EQTF(x, y) ((TF) (x) == (TF) (y))
-#define NETF(x, y) ((TF) (x) != (TF) (y))
-#define LTTF(x, y) ((TF) (x) < (TF) (y))
-#define LETF(x, y) ((TF) (x) <= (TF) (y))
-#define GTTF(x, y) ((TF) (x) > (TF) (y))
-#define GETF(x, y) ((TF) (x) >= (TF) (y))
-extern TF ABSTF PARAMS ((TF));
-extern TF SQRTTF PARAMS ((TF));
-extern TF COSTF PARAMS ((TF));
-extern TF SINTF PARAMS ((TF));
-#endif /* TF_FN_SUPPORT */
-
-
+
#define EXTBIQI(x) ((QI) (BI) (x))
#define EXTBIHI(x) ((HI) (BI) (x))
#define EXTBISI(x) ((SI) (BI) (x))
#if defined (DI_FN_SUPPORT)
-extern DI EXTBIDI PARAMS ((BI));
+extern DI EXTBIDI (BI);
#else
#define EXTBIDI(x) ((DI) (BI) (x))
#endif
#define EXTQIHI(x) ((HI) (QI) (x))
#define EXTQISI(x) ((SI) (QI) (x))
#if defined (DI_FN_SUPPORT)
-extern DI EXTQIDI PARAMS ((QI));
+extern DI EXTQIDI (QI);
#else
#define EXTQIDI(x) ((DI) (QI) (x))
#endif
#define EXTHISI(x) ((SI) (HI) (x))
#if defined (DI_FN_SUPPORT)
-extern DI EXTHIDI PARAMS ((HI));
+extern DI EXTHIDI (HI);
#else
#define EXTHIDI(x) ((DI) (HI) (x))
#endif
#if defined (DI_FN_SUPPORT)
-extern DI EXTSIDI PARAMS ((SI));
+extern DI EXTSIDI (SI);
#else
#define EXTSIDI(x) ((DI) (SI) (x))
#endif
-
-#if defined (SF_FN_SUPPORT) || defined (DF_FN_SUPPORT)
-extern DF EXTSFDF PARAMS ((SF));
-#else
-#define EXTSFDF(x) ((DF) (SF) (x))
-#endif
-#if defined (SF_FN_SUPPORT) || defined (XF_FN_SUPPORT)
-extern XF EXTSFXF PARAMS ((SF));
-#else
-#define EXTSFXF(x) ((XF) (SF) (x))
-#endif
-#if defined (SF_FN_SUPPORT) || defined (TF_FN_SUPPORT)
-extern TF EXTSFTF PARAMS ((SF));
-#else
-#define EXTSFTF(x) ((TF) (SF) (x))
-#endif
-#if defined (DF_FN_SUPPORT) || defined (XF_FN_SUPPORT)
-extern XF EXTDFXF PARAMS ((DF));
-#else
-#define EXTDFXF(x) ((XF) (DF) (x))
-#endif
-#if defined (DF_FN_SUPPORT) || defined (TF_FN_SUPPORT)
-extern TF EXTDFTF PARAMS ((DF));
-#else
-#define EXTDFTF(x) ((TF) (DF) (x))
-#endif
-#if defined (XF_FN_SUPPORT) || defined (TF_FN_SUPPORT)
-extern TF EXTXFTF PARAMS ((XF));
-#else
-#define EXTXFTF(x) ((TF) (XF) (x))
-#endif
-
+
#define ZEXTBIQI(x) ((QI) (BI) (x))
#define ZEXTBIHI(x) ((HI) (BI) (x))
#define ZEXTBISI(x) ((SI) (BI) (x))
#if defined (DI_FN_SUPPORT)
-extern DI ZEXTBIDI PARAMS ((BI));
+extern DI ZEXTBIDI (BI);
#else
#define ZEXTBIDI(x) ((DI) (BI) (x))
#endif
#define ZEXTQIHI(x) ((HI) (UQI) (x))
#define ZEXTQISI(x) ((SI) (UQI) (x))
#if defined (DI_FN_SUPPORT)
-extern DI ZEXTQIDI PARAMS ((QI));
+extern DI ZEXTQIDI (QI);
#else
#define ZEXTQIDI(x) ((DI) (UQI) (x))
#endif
#define ZEXTHISI(x) ((SI) (UHI) (x))
#if defined (DI_FN_SUPPORT)
-extern DI ZEXTHIDI PARAMS ((HI));
+extern DI ZEXTHIDI (HI);
#else
#define ZEXTHIDI(x) ((DI) (UHI) (x))
#endif
#if defined (DI_FN_SUPPORT)
-extern DI ZEXTSIDI PARAMS ((SI));
+extern DI ZEXTSIDI (SI);
#else
#define ZEXTSIDI(x) ((DI) (USI) (x))
#endif
-
+
#define TRUNCQIBI(x) ((BI) (QI) (x))
#define TRUNCHIBI(x) ((BI) (HI) (x))
#define TRUNCHIQI(x) ((QI) (HI) (x))
@@ -430,403 +265,31 @@ extern DI ZEXTSIDI PARAMS ((SI));
#define TRUNCSIQI(x) ((QI) (SI) (x))
#define TRUNCSIHI(x) ((HI) (SI) (x))
#if defined (DI_FN_SUPPORT)
-extern BI TRUNCDIBI PARAMS ((DI));
+extern BI TRUNCDIBI (DI);
#else
#define TRUNCDIBI(x) ((BI) (DI) (x))
#endif
#if defined (DI_FN_SUPPORT)
-extern QI TRUNCDIQI PARAMS ((DI));
+extern QI TRUNCDIQI (DI);
#else
#define TRUNCDIQI(x) ((QI) (DI) (x))
#endif
#if defined (DI_FN_SUPPORT)
-extern HI TRUNCDIHI PARAMS ((DI));
+extern HI TRUNCDIHI (DI);
#else
#define TRUNCDIHI(x) ((HI) (DI) (x))
#endif
#if defined (DI_FN_SUPPORT)
-extern SI TRUNCDISI PARAMS ((DI));
+extern SI TRUNCDISI (DI);
#else
#define TRUNCDISI(x) ((SI) (DI) (x))
#endif
-
-#if defined (DF_FN_SUPPORT) || defined (SF_FN_SUPPORT)
-extern SF TRUNCDFSF PARAMS ((DF));
-#else
-#define TRUNCDFSF(x) ((SF) (DF) (x))
-#endif
-#if defined (XF_FN_SUPPORT) || defined (SF_FN_SUPPORT)
-extern SF TRUNCXFSF PARAMS ((XF));
-#else
-#define TRUNCXFSF(x) ((SF) (XF) (x))
-#endif
-#if defined (XF_FN_SUPPORT) || defined (DF_FN_SUPPORT)
-extern DF TRUNCXFDF PARAMS ((XF));
-#else
-#define TRUNCXFDF(x) ((DF) (XF) (x))
-#endif
-#if defined (TF_FN_SUPPORT) || defined (SF_FN_SUPPORT)
-extern SF TRUNCTFSF PARAMS ((TF));
-#else
-#define TRUNCTFSF(x) ((SF) (TF) (x))
-#endif
-#if defined (TF_FN_SUPPORT) || defined (DF_FN_SUPPORT)
-extern DF TRUNCTFDF PARAMS ((TF));
-#else
-#define TRUNCTFDF(x) ((DF) (TF) (x))
-#endif
-#if defined (TF_FN_SUPPORT) || defined (XF_FN_SUPPORT)
-extern XF TRUNCTFXF PARAMS ((TF));
-#else
-#define TRUNCTFXF(x) ((XF) (TF) (x))
-#endif
-
-#if defined (SF_FN_SUPPORT)
-extern SF FLOATQISF PARAMS ((QI));
-#else
-#define FLOATQISF(x) ((SF) (QI) (x))
-#endif
-#if defined (DF_FN_SUPPORT)
-extern DF FLOATQIDF PARAMS ((QI));
-#else
-#define FLOATQIDF(x) ((DF) (QI) (x))
-#endif
-#if defined (XF_FN_SUPPORT)
-extern XF FLOATQIXF PARAMS ((QI));
-#else
-#define FLOATQIXF(x) ((XF) (QI) (x))
-#endif
-#if defined (TF_FN_SUPPORT)
-extern TF FLOATQITF PARAMS ((QI));
-#else
-#define FLOATQITF(x) ((TF) (QI) (x))
-#endif
-#if defined (SF_FN_SUPPORT)
-extern SF FLOATHISF PARAMS ((HI));
-#else
-#define FLOATHISF(x) ((SF) (HI) (x))
-#endif
-#if defined (DF_FN_SUPPORT)
-extern DF FLOATHIDF PARAMS ((HI));
-#else
-#define FLOATHIDF(x) ((DF) (HI) (x))
-#endif
-#if defined (XF_FN_SUPPORT)
-extern XF FLOATHIXF PARAMS ((HI));
-#else
-#define FLOATHIXF(x) ((XF) (HI) (x))
-#endif
-#if defined (TF_FN_SUPPORT)
-extern TF FLOATHITF PARAMS ((HI));
-#else
-#define FLOATHITF(x) ((TF) (HI) (x))
-#endif
-#if defined (SF_FN_SUPPORT)
-extern SF FLOATSISF PARAMS ((SI));
-#else
-#define FLOATSISF(x) ((SF) (SI) (x))
-#endif
-#if defined (DF_FN_SUPPORT)
-extern DF FLOATSIDF PARAMS ((SI));
-#else
-#define FLOATSIDF(x) ((DF) (SI) (x))
-#endif
-#if defined (XF_FN_SUPPORT)
-extern XF FLOATSIXF PARAMS ((SI));
-#else
-#define FLOATSIXF(x) ((XF) (SI) (x))
-#endif
-#if defined (TF_FN_SUPPORT)
-extern TF FLOATSITF PARAMS ((SI));
-#else
-#define FLOATSITF(x) ((TF) (SI) (x))
-#endif
-#if defined (DI_FN_SUPPORT) || defined (SF_FN_SUPPORT)
-extern SF FLOATDISF PARAMS ((DI));
-#else
-#define FLOATDISF(x) ((SF) (DI) (x))
-#endif
-#if defined (DI_FN_SUPPORT) || defined (DF_FN_SUPPORT)
-extern DF FLOATDIDF PARAMS ((DI));
-#else
-#define FLOATDIDF(x) ((DF) (DI) (x))
-#endif
-#if defined (DI_FN_SUPPORT) || defined (XF_FN_SUPPORT)
-extern XF FLOATDIXF PARAMS ((DI));
-#else
-#define FLOATDIXF(x) ((XF) (DI) (x))
-#endif
-#if defined (DI_FN_SUPPORT) || defined (TF_FN_SUPPORT)
-extern TF FLOATDITF PARAMS ((DI));
-#else
-#define FLOATDITF(x) ((TF) (DI) (x))
-#endif
-
-#if defined (SF_FN_SUPPORT)
-extern SF UFLOATQISF PARAMS ((QI));
-#else
-#define UFLOATQISF(x) ((SF) (UQI) (x))
-#endif
-#if defined (DF_FN_SUPPORT)
-extern DF UFLOATQIDF PARAMS ((QI));
-#else
-#define UFLOATQIDF(x) ((DF) (UQI) (x))
-#endif
-#if defined (XF_FN_SUPPORT)
-extern XF UFLOATQIXF PARAMS ((QI));
-#else
-#define UFLOATQIXF(x) ((XF) (UQI) (x))
-#endif
-#if defined (TF_FN_SUPPORT)
-extern TF UFLOATQITF PARAMS ((QI));
-#else
-#define UFLOATQITF(x) ((TF) (UQI) (x))
-#endif
-#if defined (SF_FN_SUPPORT)
-extern SF UFLOATHISF PARAMS ((HI));
-#else
-#define UFLOATHISF(x) ((SF) (UHI) (x))
-#endif
-#if defined (DF_FN_SUPPORT)
-extern DF UFLOATHIDF PARAMS ((HI));
-#else
-#define UFLOATHIDF(x) ((DF) (UHI) (x))
-#endif
-#if defined (XF_FN_SUPPORT)
-extern XF UFLOATHIXF PARAMS ((HI));
-#else
-#define UFLOATHIXF(x) ((XF) (UHI) (x))
-#endif
-#if defined (TF_FN_SUPPORT)
-extern TF UFLOATHITF PARAMS ((HI));
-#else
-#define UFLOATHITF(x) ((TF) (UHI) (x))
-#endif
-#if defined (SF_FN_SUPPORT)
-extern SF UFLOATSISF PARAMS ((SI));
-#else
-#define UFLOATSISF(x) ((SF) (USI) (x))
-#endif
-#if defined (DF_FN_SUPPORT)
-extern DF UFLOATSIDF PARAMS ((SI));
-#else
-#define UFLOATSIDF(x) ((DF) (USI) (x))
-#endif
-#if defined (XF_FN_SUPPORT)
-extern XF UFLOATSIXF PARAMS ((SI));
-#else
-#define UFLOATSIXF(x) ((XF) (USI) (x))
-#endif
-#if defined (TF_FN_SUPPORT)
-extern TF UFLOATSITF PARAMS ((SI));
-#else
-#define UFLOATSITF(x) ((TF) (USI) (x))
-#endif
-#if defined (DI_FN_SUPPORT) || defined (SF_FN_SUPPORT)
-extern SF UFLOATDISF PARAMS ((DI));
-#else
-#define UFLOATDISF(x) ((SF) (UDI) (x))
-#endif
-#if defined (DI_FN_SUPPORT) || defined (DF_FN_SUPPORT)
-extern DF UFLOATDIDF PARAMS ((DI));
-#else
-#define UFLOATDIDF(x) ((DF) (UDI) (x))
-#endif
-#if defined (DI_FN_SUPPORT) || defined (XF_FN_SUPPORT)
-extern XF UFLOATDIXF PARAMS ((DI));
-#else
-#define UFLOATDIXF(x) ((XF) (UDI) (x))
-#endif
-#if defined (DI_FN_SUPPORT) || defined (TF_FN_SUPPORT)
-extern TF UFLOATDITF PARAMS ((DI));
-#else
-#define UFLOATDITF(x) ((TF) (UDI) (x))
-#endif
-
-#if defined (SF_FN_SUPPORT)
-extern BI FIXSFBI PARAMS ((SF));
-#else
-#define FIXSFBI(x) ((BI) (SF) (x))
-#endif
-#if defined (SF_FN_SUPPORT)
-extern QI FIXSFQI PARAMS ((SF));
-#else
-#define FIXSFQI(x) ((QI) (SF) (x))
-#endif
-#if defined (SF_FN_SUPPORT)
-extern HI FIXSFHI PARAMS ((SF));
-#else
-#define FIXSFHI(x) ((HI) (SF) (x))
-#endif
-#if defined (SF_FN_SUPPORT)
-extern SI FIXSFSI PARAMS ((SF));
-#else
-#define FIXSFSI(x) ((SI) (SF) (x))
-#endif
-#if defined (SF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
-extern DI FIXSFDI PARAMS ((SF));
-#else
-#define FIXSFDI(x) ((DI) (SF) (x))
-#endif
-#if defined (DF_FN_SUPPORT)
-extern BI FIXDFBI PARAMS ((DF));
-#else
-#define FIXDFBI(x) ((BI) (DF) (x))
-#endif
-#if defined (DF_FN_SUPPORT)
-extern QI FIXDFQI PARAMS ((DF));
-#else
-#define FIXDFQI(x) ((QI) (DF) (x))
-#endif
-#if defined (DF_FN_SUPPORT)
-extern HI FIXDFHI PARAMS ((DF));
-#else
-#define FIXDFHI(x) ((HI) (DF) (x))
-#endif
-#if defined (DF_FN_SUPPORT)
-extern SI FIXDFSI PARAMS ((DF));
-#else
-#define FIXDFSI(x) ((SI) (DF) (x))
-#endif
-#if defined (DF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
-extern DI FIXDFDI PARAMS ((DF));
-#else
-#define FIXDFDI(x) ((DI) (DF) (x))
-#endif
-#if defined (XF_FN_SUPPORT)
-extern BI FIXXFBI PARAMS ((XF));
-#else
-#define FIXXFBI(x) ((BI) (XF) (x))
-#endif
-#if defined (XF_FN_SUPPORT)
-extern QI FIXXFQI PARAMS ((XF));
-#else
-#define FIXXFQI(x) ((QI) (XF) (x))
-#endif
-#if defined (XF_FN_SUPPORT)
-extern HI FIXXFHI PARAMS ((XF));
-#else
-#define FIXXFHI(x) ((HI) (XF) (x))
-#endif
-#if defined (XF_FN_SUPPORT)
-extern SI FIXXFSI PARAMS ((XF));
-#else
-#define FIXXFSI(x) ((SI) (XF) (x))
-#endif
-#if defined (XF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
-extern DI FIXXFDI PARAMS ((XF));
-#else
-#define FIXXFDI(x) ((DI) (XF) (x))
-#endif
-#if defined (TF_FN_SUPPORT)
-extern BI FIXTFBI PARAMS ((TF));
-#else
-#define FIXTFBI(x) ((BI) (TF) (x))
-#endif
-#if defined (TF_FN_SUPPORT)
-extern QI FIXTFQI PARAMS ((TF));
-#else
-#define FIXTFQI(x) ((QI) (TF) (x))
-#endif
-#if defined (TF_FN_SUPPORT)
-extern HI FIXTFHI PARAMS ((TF));
-#else
-#define FIXTFHI(x) ((HI) (TF) (x))
-#endif
-#if defined (TF_FN_SUPPORT)
-extern SI FIXTFSI PARAMS ((TF));
-#else
-#define FIXTFSI(x) ((SI) (TF) (x))
-#endif
-#if defined (TF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
-extern DI FIXTFDI PARAMS ((TF));
-#else
-#define FIXTFDI(x) ((DI) (TF) (x))
-#endif
-
-#if defined (SF_FN_SUPPORT)
-extern QI UFIXSFQI PARAMS ((SF));
-#else
-#define UFIXSFQI(x) ((UQI) (SF) (x))
-#endif
-#if defined (SF_FN_SUPPORT)
-extern HI UFIXSFHI PARAMS ((SF));
-#else
-#define UFIXSFHI(x) ((UHI) (SF) (x))
-#endif
-#if defined (SF_FN_SUPPORT)
-extern SI UFIXSFSI PARAMS ((SF));
-#else
-#define UFIXSFSI(x) ((USI) (SF) (x))
-#endif
-#if defined (SF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
-extern DI UFIXSFDI PARAMS ((SF));
-#else
-#define UFIXSFDI(x) ((UDI) (SF) (x))
-#endif
-#if defined (DF_FN_SUPPORT)
-extern QI UFIXDFQI PARAMS ((DF));
-#else
-#define UFIXDFQI(x) ((UQI) (DF) (x))
-#endif
-#if defined (DF_FN_SUPPORT)
-extern HI UFIXDFHI PARAMS ((DF));
-#else
-#define UFIXDFHI(x) ((UHI) (DF) (x))
-#endif
-#if defined (DF_FN_SUPPORT)
-extern SI UFIXDFSI PARAMS ((DF));
-#else
-#define UFIXDFSI(x) ((USI) (DF) (x))
-#endif
-#if defined (DF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
-extern DI UFIXDFDI PARAMS ((DF));
-#else
-#define UFIXDFDI(x) ((UDI) (DF) (x))
-#endif
-#if defined (XF_FN_SUPPORT)
-extern QI UFIXXFQI PARAMS ((XF));
-#else
-#define UFIXXFQI(x) ((UQI) (XF) (x))
-#endif
-#if defined (XF_FN_SUPPORT)
-extern HI UFIXXFHI PARAMS ((XF));
-#else
-#define UFIXXFHI(x) ((UHI) (XF) (x))
-#endif
-#if defined (XF_FN_SUPPORT)
-extern SI UFIXXFSI PARAMS ((XF));
-#else
-#define UFIXXFSI(x) ((USI) (XF) (x))
-#endif
-#if defined (XF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
-extern DI UFIXXFDI PARAMS ((XF));
-#else
-#define UFIXXFDI(x) ((UDI) (XF) (x))
-#endif
-#if defined (TF_FN_SUPPORT)
-extern QI UFIXTFQI PARAMS ((TF));
-#else
-#define UFIXTFQI(x) ((UQI) (TF) (x))
-#endif
-#if defined (TF_FN_SUPPORT)
-extern HI UFIXTFHI PARAMS ((TF));
-#else
-#define UFIXTFHI(x) ((UHI) (TF) (x))
-#endif
-#if defined (TF_FN_SUPPORT)
-extern SI UFIXTFSI PARAMS ((TF));
-#else
-#define UFIXTFSI(x) ((USI) (TF) (x))
-#endif
-#if defined (TF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
-extern DI UFIXTFDI PARAMS ((TF));
-#else
-#define UFIXTFDI(x) ((UDI) (TF) (x))
-#endif
/* Composing/decomposing the various types. */
+/* ??? endianness issues undecided */
+/* ??? CURRENT_TARGET_BYTE_ORDER usage wip */
+
#ifdef SEMOPS_DEFINE_INLINE
SEMOPS_INLINE SF
@@ -848,7 +311,6 @@ SUBWORDSFSI (SIM_CPU *cpu, SF in)
SEMOPS_INLINE SI
SUBWORDDISI (SIM_CPU *cpu, DI in, int word)
{
- /* ??? endianness issues undecided */
if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN)
{
if (word == 0)
@@ -868,7 +330,6 @@ SUBWORDDISI (SIM_CPU *cpu, DI in, int word)
SEMOPS_INLINE SI
SUBWORDDFSI (SIM_CPU *cpu, DF in, int word)
{
- /* ??? endianness issues undecided */
union { DF in; SI out[2]; } x;
x.in = in;
if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN)
@@ -878,15 +339,25 @@ SUBWORDDFSI (SIM_CPU *cpu, DF in, int word)
}
SEMOPS_INLINE SI
+SUBWORDXFSI (SIM_CPU *cpu, XF in, int word)
+{
+ union { XF in; SI out[3]; } x;
+ x.in = in;
+ if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN)
+ return x.out[word];
+ else
+ return x.out[2 - word];
+}
+
+SEMOPS_INLINE SI
SUBWORDTFSI (SIM_CPU *cpu, TF in, int word)
{
- /* ??? endianness issues undecided */
union { TF in; SI out[4]; } x;
x.in = in;
if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN)
return x.out[word];
else
- return x.out[word ^ 3];
+ return x.out[3 - word];
}
SEMOPS_INLINE DI
@@ -909,6 +380,17 @@ JOINSIDF (SIM_CPU *cpu, SI x0, SI x1)
return x.out;
}
+SEMOPS_INLINE XF
+JOINSIXF (SIM_CPU *cpu, SI x0, SI x1, SI x2)
+{
+ union { SI in[3]; XF out; } x;
+ if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN)
+ x.in[0] = x0, x.in[1] = x1, x.in[2] = x2;
+ else
+ x.in[2] = x0, x.in[1] = x1, x.in[0] = x2;
+ return x.out;
+}
+
SEMOPS_INLINE TF
JOINSITF (SIM_CPU *cpu, SI x0, SI x1, SI x2, SI x3)
{
@@ -926,10 +408,12 @@ SF SUBWORDSISF (SIM_CPU *, SI);
SI SUBWORDSFSI (SIM_CPU *, SF);
SI SUBWORDDISI (SIM_CPU *, DI, int);
SI SUBWORDDFSI (SIM_CPU *, DF, int);
+SI SUBWORDXFSI (SIM_CPU *, XF, int);
SI SUBWORDTFSI (SIM_CPU *, TF, int);
DI JOINSIDI (SIM_CPU *, SI, SI);
DF JOINSIDF (SIM_CPU *, SI, SI);
+XF JOINSIXF (SIM_CPU *, SI, SI, SI);
TF JOINSITF (SIM_CPU *, SI, SI, SI, SI);
#endif /* SUBWORD,JOIN */
diff --git a/sim/common/cgen-sim.h b/sim/common/cgen-sim.h
index 748015f5724..6b177ec40bc 100644
--- a/sim/common/cgen-sim.h
+++ b/sim/common/cgen-sim.h
@@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "cgen-defs.h"
#include "cgen-scache.h"
+#include "cgen-fpu.h"
#include "cgen-cpu.h"
#include "cgen-trace.h"
diff --git a/sim/common/cgen-types.h b/sim/common/cgen-types.h
index 28c7205ad60..289c7bd1f08 100644
--- a/sim/common/cgen-types.h
+++ b/sim/common/cgen-types.h
@@ -98,13 +98,6 @@ extern DI make_struct_di (SI, SI);
#define MAKEDI(hi, lo) (make_struct_di ((hi), (lo)))
#endif
-/* FIXME: Need to provide libraries if these aren't appropriate for target,
- or user's needs. */
-typedef float SF; /* FIXME: struct */
-typedef double DF; /* FIXME: struct */
-typedef struct { SI parts[3]; } XF; /* FIXME: configure, provide library */
-typedef struct { SI parts[4]; } TF; /* FIXME: configure, provide library */
-
/* These are used to record extracted raw data from an instruction, among other
things. It must be a host data type, and not a target one. */
typedef int INT;
@@ -113,4 +106,6 @@ typedef unsigned int UINT;
typedef unsigned_address ADDR; /* FIXME: wip*/
typedef unsigned_address IADDR; /* FIXME: wip*/
+/* fp types are in cgen-fpu.h */
+
#endif /* CGEN_TYPES_H */