diff options
Diffstat (limited to 'sim/common')
-rw-r--r-- | sim/common/ChangeLog | 32 | ||||
-rw-r--r-- | sim/common/Make-common.in | 32 | ||||
-rw-r--r-- | sim/common/aclocal.m4 | 16 | ||||
-rw-r--r-- | sim/common/sim-bits.h | 40 | ||||
-rw-r--r-- | sim/common/sim-fpu.c | 26 | ||||
-rw-r--r-- | sim/common/sim-fpu.h | 80 |
6 files changed, 171 insertions, 55 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog index 9c3b535..d4036d9 100644 --- a/sim/common/ChangeLog +++ b/sim/common/ChangeLog @@ -1,3 +1,35 @@ +Sat Apr 4 20:36:25 1998 Andrew Cagney <cagney@b1.cygnus.com> + + * aclocal.m4 (sim-cflags): Add -fomit-frame-pointer to defaults. + (sim-inline): Update to match sim-inline.[hc] + + * configure: Regenerated to track ../common/aclocal.m4 changes. + + * Make-common.in (sim_main_headers): Add sim-inline.h + + * sim-bits.h (sim-bits.c): Include when H_REVEALS_MODULE_P. + selected. + * sim-endian.h (sim-endian.c): Ditto. + + * sim-events.h (_SIM_EVENTS_H_): Replace with SIM_EVENTS_H. + (sim_events_set_trace): Delete unused prototype. + + * sim-core.h (_SIM_CORE_H_): Replace with SIM_CORE_H. + * sim-core.c (_SIM_CORE_C_): Ditto for SIM_CORE_C. + + * sim-fpu.h (sim-fpu.c): Include when H_REVEALS_MODULE_P. + (sim_fpu_to232i, sim_fpu_to232u, sim_fpu_i232to, sim_fpu_u232to): + Comment out, not yet implemented in sim-fpu.c. + (sim_fpu_zero, sim_fpu_one, sim_fpu_two, sim_fpu_qnan, + sim_fpu_max32, sim_fpu_max64): Mark as EXTERN_SIM_FPU. + + * sim-inline.h: Rewrite description. + (H_REVEALS_MODULE_P, C_REVEALS_MODULE_P): Define. + (SIM_MAIN_INLINE): Add inline option. + + * sim-inline.c (semantics.c, idecode.c, engine.c, ...): Do not + include generated files. Handled by generator directly. + Sat Apr 4 01:07:06 1998 Andrew Cagney <cagney@b1.cygnus.com> * sim-trace.c (set_trace_option_mask): Keep TRACE_ANY_P diff --git a/sim/common/Make-common.in b/sim/common/Make-common.in index f0cd32f..eac0c7b 100644 --- a/sim/common/Make-common.in +++ b/sim/common/Make-common.in @@ -81,8 +81,7 @@ SIM_ENVIRONMENT = @sim_environment@ SIM_FLOAT = @sim_float@ SIM_HARDWARE = @sim_hardware@ SIM_HW_OBJS = @sim_hw_obj@ -SIM_DV_OBJS = @sim_dv_obj@ -SIM_DV_SRC = @sim_dv_src@ +SIM_HW = @sim_hw@ SIM_HOSTENDIAN = @sim_hostendian@ SIM_INLINE = @sim_inline@ SIM_PACKAGES = @sim_packages@ @@ -159,7 +158,6 @@ SIM_NEW_COMMON_OBJS = \ sim-watch.o \ \ $(SIM_HW_OBJS) \ - $(SIM_DV_OBJS) \ ## End COMMON_PRE_CONFIG_FRAG @@ -263,6 +261,7 @@ stamp-tvals: gentmap sim_main_headers = \ sim-main.h \ + $(srccom)/sim-inline.h \ $(srccom)/sim-config.h \ $(srccom)/sim-base.h \ $(srccom)/sim-basics.h \ @@ -295,6 +294,7 @@ sim-options_h = $(srccom)/sim-options.h sim-break_h = $(srccom)/sim-break.h sim-signal_h = $(srccom)/sim-signal.h +# start-sanitize-am30 hw-base_h = $(srccom)/hw-base.h hw-device_h = $(srccom)/hw-device.h hw-handles_h = #$(srccom)/hw-handles.h @@ -310,7 +310,7 @@ hw_base_headers = \ $(hw-handles_h) \ $(hw-ports_h) \ $(hw-properties_h) \ - +# end-sanitize-am30 # FIXME: If this complicated way of building .o files from ../common is # necessary, the reason should be documented here. @@ -360,6 +360,11 @@ sim-hrw.o: $(srccom)/sim-hrw.c $(sim-assert_h) $(sim_core_h) \ $(SIM_EXTRA_DEPS) $(CC) -c $(srccom)/sim-hrw.c $(ALL_CFLAGS) +#start-sanitize-am30 +sim-hw.o: $(srccom)/sim-hw.c $(sim_main_headers) $(SIM_EXTRA_DEPS) + $(CC) -c $(srccom)/sim-hw.c $(ALL_CFLAGS) + +#end-sanitize-am30 sim-info.o: $(srccom)/sim-info.c $(sim-assert_h) \ $(srcroot)/include/remote-sim.h \ $(SIM_EXTRA_DEPS) @@ -430,8 +435,24 @@ sim-break.o: $(srccom)/sim-break.c $(sim_main_headers) \ $(CC) -c $(srccom)/sim-break.c $(ALL_CFLAGS) +# start-sanitize-am30 +# FIXME This is one very simple-minded way of generating the file hw-config.h +hw-config.h: Makefile.in $(srccom)/Make-common.in config.status Makefile + rm -f tmp-hw.h + echo "/* generated by Makefile */" > tmp-hw.h + for hw in $(SIM_HW) ; do \ + echo "extern const struct hw_device_descriptor dv_$${hw}_descriptor[];" ; \ + done >> tmp-hw.h + echo "const struct hw_device_descriptor *hw_descriptors[] = {" >> tmp-hw.h + for hw in $(SIM_HW) ; do \ + echo " dv_$${hw}_descriptor," ; \ + done >> tmp-hw.h + echo " NULL," >> tmp-hw.h + echo "};" >> tmp-hw.h + mv tmp-hw.h hw-config.h + hw-base.o: $(srccom)/hw-base.c $(sim_main_headers) \ - $(hw_base_headers) + $(hw_base_headers) hw-config.h $(CC) -c $(srccom)/hw-base.c $(ALL_CFLAGS) hw-device.o: $(srccom)/hw-device.c $(sim_main_headers) \ @@ -471,6 +492,7 @@ dv-pal.o: $(srccom)/dv-pal.c $(sim_main_headers) \ $(sim-main_h) $(hw_base_headers) $(CC) -c $(srccom)/dv-pal.c $(ALL_CFLAGS) +#end-sanitize-am30 nrun.o: $(srccom)/nrun.c config.h tconfig.h \ $(srcroot)/include/remote-sim.h $(srcroot)/include/callback.h \ diff --git a/sim/common/aclocal.m4 b/sim/common/aclocal.m4 index 481ae33..4550b66 100644 --- a/sim/common/aclocal.m4 +++ b/sim/common/aclocal.m4 @@ -94,7 +94,7 @@ AC_SUBST(sim_bswap) AC_ARG_ENABLE(sim-cflags, [ --enable-sim-cflags=opts Extra CFLAGS for use in building simulator], [case "${enableval}" in - yes) sim_cflags="-O2";; + yes) sim_cflags="-O2 -fomit-frame-pointer";; trace) AC_MSG_ERROR("Please use --enable-sim-debug instead."); sim_cflags="";; no) sim_cflags="";; *) sim_cflags=`echo "${enableval}" | sed -e "s/,/ /g"`;; @@ -551,7 +551,7 @@ dnl arg[2] is a space separated list of extra target specific devices. AC_DEFUN(SIM_AC_OPTION_HARDWARE, [ sim_hardware="-DWITH_HW=1" -sim_hw_obj="hw-device.o hw-ports.o hw-properties.o hw-base.o hw-tree.o" +sim_hw_obj="hw-device.o hw-ports.o hw-properties.o hw-base.o hw-tree.o sim-hw.o" hardware="ifelse([$1],,[core pal glue],[$1]) ifelse([$2],,,[$2])" AC_ARG_ENABLE(sim-hardware, [ --enable-sim-hardware=LIST Specify the hardware to be included in the build.], @@ -572,12 +572,12 @@ for i in x $hardware ; do *) sim_hw="$sim_hw $i" ;; esac done -sim_hw_obj="$sim_hw_obj `echo $sim_hw | sed -e 's/\([[^ ]]*\)/dv-\1.o/g'`" +sim_hw_obj="$sim_hw_obj `echo $sim_hw | sed -e 's/\([[^ ]][[^ ]]*\)/dv-\1.o/g'`" if test x"$silent" != x"yes" && test x"$hardware" != x""; then echo "Setting hardware to $sim_hardware, $sim_hw, $sim_hw_obj" fi],[ sim_hw="$hardware" -sim_hw_obj="$sim_hw_obj `echo $sim_hw | sed -e 's/\([[^ ]]*\)/dv-\1.o/g'`" +sim_hw_obj="$sim_hw_obj `echo $sim_hw | sed -e 's/\([[^ ]][[^ ]]*\)/dv-\1.o/g'`" if test x"$silent" != x"yes"; then echo "Setting hardware to $sim_hardware, $sim_hw, $sim_hw_obj" fi])dnl @@ -589,6 +589,8 @@ AC_SUBST(sim_hw) dnl --enable-sim-inline is for users that wish to ramp up the simulator's dnl performance by inlining functions. +dnl Guarantee that unconfigured simulators do not do any inlining +sim_inline="-DDEFAULT_INLINE=0" AC_DEFUN(SIM_AC_OPTION_INLINE, [ default_sim_inline="ifelse([$1],,,-DDEFAULT_INLINE=[$1])" @@ -598,15 +600,15 @@ AC_ARG_ENABLE(sim-inline, case "$enableval" in no) sim_inline="-DDEFAULT_INLINE=0";; 0) sim_inline="-DDEFAULT_INLINE=0";; - yes | 2) sim_inline="-DDEFAULT_INLINE=ALL_INLINE";; + yes | 2) sim_inline="-DDEFAULT_INLINE=ALL_C_INLINE";; 1) sim_inline="-DDEFAULT_INLINE=INLINE_LOCALS";; *) for x in `echo "$enableval" | sed -e "s/,/ /g"`; do new_flag="" case "$x" in *_INLINE=*) new_flag="-D$x";; *=*) new_flag=`echo "$x" | sed -e "s/=/_INLINE=/" -e "s/^/-D/"`;; - *_INLINE) new_flag="-D$x=ALL_INLINE";; - *) new_flag="-D$x""_INLINE=ALL_INLINE";; + *_INLINE) new_flag="-D$x=ALL_C_INLINE";; + *) new_flag="-D$x""_INLINE=ALL_C_INLINE";; esac if test x"$sim_inline" = x""; then sim_inline="$new_flag" diff --git a/sim/common/sim-bits.h b/sim/common/sim-bits.h index 3170c61..1433c4c 100644 --- a/sim/common/sim-bits.h +++ b/sim/common/sim-bits.h @@ -24,7 +24,7 @@ #define _SIM_BITS_H_ -/* bit manipulation routines: +/* Bit manipulation routines: Bit numbering: The bits are numbered according to the target ISA's convention. That being controlled by WITH_TARGET_WORD_MSB. For @@ -42,15 +42,17 @@ NB: Use EXTRACTED, MSEXTRACTED and LSEXTRACTED as a guideline for naming. LSMASK and LSMASKED are wrong. - BIT*(POS): Constant with just 1 bit set. + BIT*(POS): `*' bit constant with just 1 bit set. - LSBIT*(OFFSET): Constant with just 1 bit set - LS bit is zero. + LSBIT*(OFFSET): `*' bit constant with just 1 bit set - LS bit is + zero. - MSBIT*(OFFSET): Constant with just 1 bit set - MS bit is zero. + MSBIT*(OFFSET): `*' bit constant with just 1 bit set - MS bit is + zero. - MASK*(FIRST, LAST): Constant with bits [FIRST .. LAST] set. The - <MACRO> (no size) version permits FIRST >= LAST and generates a - wrapped bit mask vis ([0..LAST] | [FIRST..LSB]). + MASK*(FIRST, LAST): `*' bit constant with bits [FIRST .. LAST] + set. The <MACRO> (no size) version permits FIRST >= LAST and + generates a wrapped bit mask vis ([0..LAST] | [FIRST..LSB]). LSMASK*(FIRST, LAST): Like MASK - LS bit is zero. @@ -87,18 +89,26 @@ IEA_MASKED(SHOULD_MASK, ADDR): Convert the address to the targets natural size. If in 32bit mode, discard the high 32bits. - EXTENDED*(VALUE): Convert the `*' bit value to the targets natural - word size. Sign extned the value if needed. + EXTEND*(VALUE): Convert the `*' bit value to the targets natural + word size. Sign extend the value if needed. + + ALIGN_*(VALUE): Round the value upwards so that it is aligned to a + `_*' byte boundary. - ALIGN_*(VALUE): Round upwards the value so that it is aligned. + FLOOR_*(VALUE): Truncate the value so that it is aligned to a `_*' + byte boundary. - FLOOR_*(VALUE): Truncate the value so that it is aligned. + ROT*(VALUE, NR_BITS): Return the `*' bit VALUE rotated by NR_BITS + right (positive) or left (negative). - ROTL*(VALUE, NR_BITS): Return the value rotated by NR_BITS left. + ROTL*(VALUE, NR_BITS): Return the `*' bit value rotated by NR_BITS + left. 0 <= NR_BITS <= `*'. - ROTR*(VALUE, NR_BITS): Return the value rotated by NR_BITS right. + ROTR*(VALUE, NR_BITS): Return the `*' bit value rotated by NR_BITS + right. 0 <= NR_BITS <= N. - SEXT*(VAL, SIGN_BIT): Treat SIGN_BIT as the sign, extend it. + SEXT*(VALUE, SIGN_BIT): Treat SIGN_BIT as VALUEs sign, extend it ti + `*' bits. Note: Only the BIT* and MASK* macros return a constant that can be used in variable declarations. @@ -542,7 +552,7 @@ INLINE_SIM_BITS(unsigned_word) MSSEXT (signed_word val, int sign_bit); -#if ((SIM_BITS_INLINE & INCLUDE_MODULE) && (SIM_BITS_INLINE & INCLUDED_BY_MODULE)) +#if H_REVEALS_MODULE_P (SIM_BITS_INLINE) #include "sim-bits.c" #endif diff --git a/sim/common/sim-fpu.c b/sim/common/sim-fpu.c index efc9244..99e922c 100644 --- a/sim/common/sim-fpu.c +++ b/sim/common/sim-fpu.c @@ -139,7 +139,7 @@ typedef union { #define PADMASK (is_double ? 0 : LSMASK64 (NR_PAD32 - 1, 0)) #define NR_GUARDS32 (7 + NR_PAD32) -#define NR_GUARDS64 (8 + NR_PAD32) +#define NR_GUARDS64 (8 + NR_PAD64) #define NR_GUARDS (is_double ? NR_GUARDS64 : NR_GUARDS32) #define GUARDMASK LSMASK64 (NR_GUARDS - 1, 0) @@ -2401,12 +2401,24 @@ sim_fpu_gt (int *is, /* A number of useful constants */ -const sim_fpu sim_fpu_zero = { sim_fpu_class_zero, }; -const sim_fpu sim_fpu_qnan = { sim_fpu_class_qnan, }; -const sim_fpu sim_fpu_one = { sim_fpu_class_number, 0, IMPLICIT_1, 1 }; -const sim_fpu sim_fpu_two = { sim_fpu_class_number, 0, IMPLICIT_1, 2 }; -const sim_fpu sim_fpu_max32 = { sim_fpu_class_number, 0, LSMASK64 (NR_FRAC_GUARD, NR_GUARDS32), NORMAL_EXPMAX32 }; -const sim_fpu sim_fpu_max64 = { sim_fpu_class_number, 0, LSMASK64 (NR_FRAC_GUARD, NR_GUARDS64), NORMAL_EXPMAX64 }; +EXTERN_SIM_FPU (const sim_fpu) sim_fpu_zero = { + sim_fpu_class_zero, +}; +EXTERN_SIM_FPU (const sim_fpu) sim_fpu_qnan = { + sim_fpu_class_qnan, +}; +EXTERN_SIM_FPU (const sim_fpu) sim_fpu_one = { + sim_fpu_class_number, 0, IMPLICIT_1, 1 +}; +EXTERN_SIM_FPU (const sim_fpu) sim_fpu_two = { + sim_fpu_class_number, 0, IMPLICIT_1, 2 +}; +EXTERN_SIM_FPU (const sim_fpu) sim_fpu_max32 = { + sim_fpu_class_number, 0, LSMASK64 (NR_FRAC_GUARD, NR_GUARDS32), NORMAL_EXPMAX32 +}; +EXTERN_SIM_FPU (const sim_fpu) sim_fpu_max64 = { + sim_fpu_class_number, 0, LSMASK64 (NR_FRAC_GUARD, NR_GUARDS64), NORMAL_EXPMAX64 +}; /* For debugging */ diff --git a/sim/common/sim-fpu.h b/sim/common/sim-fpu.h index 4871006..b48a04c 100644 --- a/sim/common/sim-fpu.h +++ b/sim/common/sim-fpu.h @@ -89,10 +89,9 @@ typedef enum typedef struct _sim_fpu { sim_fpu_class class; - int normal_exp; - int result; int sign; unsigned64 fraction; + int normal_exp; } sim_fpu; @@ -116,6 +115,7 @@ typedef enum typedef enum { + sim_fpu_denorm_default = 0, sim_fpu_denorm_underflow_inexact = 1, sim_fpu_denorm_zero = 2, } sim_fpu_denorm; @@ -177,16 +177,6 @@ INLINE_SIM_FPU (void) sim_fpu_to32 (unsigned32 *s, const sim_fpu *f); INLINE_SIM_FPU (void) sim_fpu_to232 (unsigned32 *h, unsigned32 *l, const sim_fpu *f); INLINE_SIM_FPU (void) sim_fpu_to64 (unsigned64 *d, const sim_fpu *f); -#if WITH_TARGET_FLOATING_POINT_BITSIZE == 32 -#define sim_fpu_tofp sim_fpu_to32 -#define sim_fpu_fpto sim_fpu_32to -#define sim_fpu_round_fp sim_fpu_round_32 -#endif -#if WITH_TARGET_FLOATING_POINT_BITSIZE == 64 -#define sim_fpu_tofp sim_fpu_to64 -#define sim_fpu_fpto sim_fpu_64to -#define sim_fpu_round_fp sim_fpu_round_64 -#endif /* Rounding operators. @@ -208,6 +198,12 @@ INLINE_SIM_FPU (int) sim_fpu_round_64 (sim_fpu *f, FIXME: In the future, additional arguments ROUNDING and BITSIZE may be added. */ +typedef int (sim_fpu_op1) (sim_fpu *f, + const sim_fpu *l); +typedef int (sim_fpu_op2) (sim_fpu *f, + const sim_fpu *l, + const sim_fpu *r); + INLINE_SIM_FPU (int) sim_fpu_add (sim_fpu *f, const sim_fpu *l, const sim_fpu *r); INLINE_SIM_FPU (int) sim_fpu_sub (sim_fpu *f, @@ -216,6 +212,10 @@ INLINE_SIM_FPU (int) sim_fpu_mul (sim_fpu *f, const sim_fpu *l, const sim_fpu *r); INLINE_SIM_FPU (int) sim_fpu_div (sim_fpu *f, const sim_fpu *l, const sim_fpu *r); +INLINE_SIM_FPU (int) sim_fpu_max (sim_fpu *f, + const sim_fpu *l, const sim_fpu *r); +INLINE_SIM_FPU (int) sim_fpu_min (sim_fpu *f, + const sim_fpu *l, const sim_fpu *r); INLINE_SIM_FPU (int) sim_fpu_neg (sim_fpu *f, const sim_fpu *a); INLINE_SIM_FPU (int) sim_fpu_abs (sim_fpu *f, @@ -237,10 +237,14 @@ INLINE_SIM_FPU (int) sim_fpu_i64to (sim_fpu *f, signed64 i, sim_fpu_round round); INLINE_SIM_FPU (int) sim_fpu_u64to (sim_fpu *f, unsigned64 u, sim_fpu_round round); +#if 0 INLINE_SIM_FPU (int) sim_fpu_i232to (sim_fpu *f, signed32 h, signed32 l, sim_fpu_round round); +#endif +#if 0 INLINE_SIM_FPU (int) sim_fpu_u232to (sim_fpu *f, unsigned32 h, unsigned32 l, sim_fpu_round round); +#endif INLINE_SIM_FPU (int) sim_fpu_to32i (signed32 *i, const sim_fpu *f, sim_fpu_round round); @@ -250,11 +254,14 @@ INLINE_SIM_FPU (int) sim_fpu_to64i (signed64 *i, const sim_fpu *f, sim_fpu_round round); INLINE_SIM_FPU (int) sim_fpu_to64u (unsigned64 *u, const sim_fpu *f, sim_fpu_round round); +#if 0 INLINE_SIM_FPU (int) sim_fpu_to232i (signed64 *h, signed64 *l, const sim_fpu *f, sim_fpu_round round); +#endif +#if 0 INLINE_SIM_FPU (int) sim_fpu_to232u (unsigned64 *h, unsigned64 *l, const sim_fpu *f, sim_fpu_round round); - +#endif /* Conversion of internal sim_fpu type to host double format. @@ -271,11 +278,11 @@ INLINE_SIM_FPU (void) sim_fpu_d2 (sim_fpu *f, double d); /* Specific number classes. - NB: When either a 32/64 bit floating points is converted to + NB: When either, a 32/64 bit floating points is converted to internal format, or an internal format number is rounded to 32/64 bit precision, a special marker is retained that indicates that the value was normalized. For such numbers both is_number and - is_denorm will return true. */ + is_denorm return true. */ INLINE_SIM_FPU (int) sim_fpu_is_nan (const sim_fpu *s); /* 1 => SNaN or QNaN */ INLINE_SIM_FPU (int) sim_fpu_is_snan (const sim_fpu *s); /* 1 => SNaN */ @@ -287,10 +294,18 @@ INLINE_SIM_FPU (int) sim_fpu_is_number (const sim_fpu *s); /* !zero */ INLINE_SIM_FPU (int) sim_fpu_is_denorm (const sim_fpu *s); /* !zero */ + +/* Floating point fields */ + +INLINE_SIM_FPU (int) sim_fpu_sign (const sim_fpu *s); +INLINE_SIM_FPU (int) sim_fpu_exp (const sim_fpu *s); + + + /* Specific comparison operators - The comparison operators set *IS to zero and return a nonzero - result for NaNs et.al. */ + For NaNs et.al., the comparison operators will set IS to zero and + return a nonzero result. */ INLINE_SIM_FPU (int) sim_fpu_lt (int *is, const sim_fpu *l, const sim_fpu *r); INLINE_SIM_FPU (int) sim_fpu_le (int *is, const sim_fpu *l, const sim_fpu *r); @@ -341,10 +356,29 @@ INLINE_SIM_FPU (int) sim_fpu_cmp (const sim_fpu *l, const sim_fpu *r); /* A constant of useful numbers */ -extern const sim_fpu sim_fpu_zero; -extern const sim_fpu sim_fpu_one; -extern const sim_fpu sim_fpu_two; -extern const sim_fpu sim_fpu_qnan; +EXTERN_SIM_FPU (const sim_fpu) sim_fpu_zero; +EXTERN_SIM_FPU (const sim_fpu) sim_fpu_one; +EXTERN_SIM_FPU (const sim_fpu) sim_fpu_two; +EXTERN_SIM_FPU (const sim_fpu) sim_fpu_qnan; +EXTERN_SIM_FPU (const sim_fpu) sim_fpu_max32; +EXTERN_SIM_FPU (const sim_fpu) sim_fpu_max64; + + +/* Select the applicable functions for the fp_word type */ + +#if WITH_TARGET_FLOATING_POINT_BITSIZE == 32 +#define sim_fpu_tofp sim_fpu_to32 +#define sim_fpu_fpto sim_fpu_32to +#define sim_fpu_round_fp sim_fpu_round_32 +#define sim_fpu_maxfp sim_fpu_max32 +#endif +#if WITH_TARGET_FLOATING_POINT_BITSIZE == 64 +#define sim_fpu_tofp sim_fpu_to64 +#define sim_fpu_fpto sim_fpu_64to +#define sim_fpu_round_fp sim_fpu_round_64 +#define sim_fpu_maxfp sim_fpu_max64 +#endif + /* For debugging */ @@ -359,4 +393,8 @@ INLINE_SIM_FPU (void) sim_fpu_print_status (int status, sim_fpu_print_func *print, void *arg); +#if H_REVEALS_MODULE_P (SIM_FPU_INLINE) +#include "sim-fpu.c" +#endif + #endif |