Add a number of per-simulator options: hostendian, endian, inline, warnings.
authorAndrew Cagney <cagney@redhat.com>
Fri, 14 Mar 1997 15:13:58 +0000 (15:13 +0000)
committerAndrew Cagney <cagney@redhat.com>
Fri, 14 Mar 1997 15:13:58 +0000 (15:13 +0000)
Rename *-n.h files to be dos compatible

13 files changed:
sim/common/ChangeLog
sim/common/Make-common.in [new file with mode: 0644]
sim/common/aclocal.m4
sim/common/configure [new file with mode: 0755]
sim/common/sim-bits-n.h [deleted file]
sim/common/sim-bits.c [new file with mode: 0644]
sim/common/sim-core-n.h [deleted file]
sim/common/sim-core.c [new file with mode: 0644]
sim/common/sim-endian-n.h [deleted file]
sim/common/sim-endian.c [new file with mode: 0644]
sim/common/sim-n-bits.h [new file with mode: 0644]
sim/common/sim-n-core.h [new file with mode: 0644]
sim/common/sim-n-endian.h [new file with mode: 0644]

index be43ce8064a044090610bd782a01d44e6931729c..d5e2b58789306c04a5d7b7b67da9f840c007b6ec 100644 (file)
@@ -1,3 +1,19 @@
+Fri Mar 14 19:51:21 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>
+
+       * aclocal.m4 (--enable-sim-hostendian): New option.  Allow the
+       host endianness to be overridden.
+       (--enable-sim-endian): Allow the target platform's byte order
+       to be overridden.
+       (--enable-sim-inline): Control the inlining of common components.
+       (--enable-sim-bswap): For compatibility, also define WITH_BSWAP.
+       (--enable-sim-warnings): Enable additional GCC compiler checks.
+       * Make-common.in (SIM_ENDIAN, SIM_HOSTENDIAN, SIM_INLINE,
+       SIM_WARNINGS): Add.
+       
+       * sim-n-core.h, sim-n-bits.h, sim-n-endian.h: Rename from
+       sim-*-n.h so that the names are uniq on dos machines
+       * sim-core.c, sim-bits.c, sim-endian.c: Update.
+       
 Thu Mar 13 12:32:42 1997  Doug Evans  <dje@canuck.cygnus.com>
 
        * run.c: #include "libiberty.h".
diff --git a/sim/common/Make-common.in b/sim/common/Make-common.in
new file mode 100644 (file)
index 0000000..9964b92
--- /dev/null
@@ -0,0 +1,214 @@
+# Makefile fragment for common parts of all simulators.
+# Copyright (C) 1997 Free Software Foundation, Inc.
+# Contributed by Cygnus Support.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# This Makefile fragment consists of two separate parts.
+# They are merged into the final Makefile at points denoted by
+# "## COMMON_PRE_CONFIG_FRAG" and "## COMMON_POST_CONFIG_FRAG".
+#
+# The target Makefile should look like:
+#
+#># Copyright blah blah
+#>
+#>## COMMON_PRE_CONFIG_FRAG
+#>
+#># Any overrides necessary for the SIM_FOO config vars.
+#>SIM_FOO = ...
+#>
+#>## COMMON_POST_CONFIG_FRAG
+#>
+#># Rules to build target specific .o's.
+
+## COMMON_PRE_CONFIG_FRAG
+
+VPATH = @srcdir@
+srcdir = @srcdir@
+srcroot = $(srcdir)/../..
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+host_alias = @host_alias@
+target_alias = @target_alias@
+program_transform_name = @program_transform_name@
+bindir = @bindir@
+
+libdir = @libdir@
+tooldir = $(libdir)/$(target_alias)
+
+datadir = @datadir@
+mandir = @mandir@
+man1dir = $(mandir)/man1
+infodir = @infodir@
+includedir = @includedir@
+
+SHELL = /bin/sh
+
+INSTALL = $(srcroot)/install.sh -c
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_XFORM = $(INSTALL) -t='$(program_transform_name)'
+INSTALL_XFORM1= $(INSTALL_XFORM) -b=.1
+
+CC = @CC@
+CC_FOR_BUILD = @CC_FOR_BUILD@
+CFLAGS = @CFLAGS@
+SIM_BSWAP = @sim_bswap@
+SIM_CFLAGS = @sim_cflags@
+SIM_DEBUG = @sim_debug@
+SIM_ENDIAN = @sim_endian@
+SIM_HOSTENDIAN = @sim_hostendian@
+SIM_INLINE = @sim_inline@
+SIM_TRACE = @sim_trace@
+SIM_WARNINGS = @sim_warnings@
+
+HDEFINES = @HDEFINES@
+TDEFINES =
+
+AR = @AR@
+AR_FLAGS = rc
+RANLIB = @RANLIB@
+MAKEINFO = makeinfo
+
+# Each simulator's Makefile.in defines one or more of these variables
+# to override our settings as necessary.
+
+# List of object files, less common parts.
+SIM_OBJS =
+# List of flags to always pass to $(CC).
+SIM_EXTRA_CFLAGS =
+# List of extra libraries to link with.
+SIM_EXTRA_LIBS =
+# List of extra program dependencies.
+SIM_EXTRA_LIBDEPS =
+# List of main object files for `run'.
+SIM_RUN_OBJS = run.o
+# Dependency of `all' to build any extra files.
+SIM_EXTRA_ALL =
+# Dependency of `install' to install any extra files.
+SIM_EXTRA_INSTALL =
+# Dependency of `clean' to clean any extra files.
+SIM_EXTRA_CLEAN =
+
+## End COMMON_PRE_CONFIG_FRAG
+
+## COMMON_POST_CONFIG_FRAG
+
+CONFIG_CFLAGS = @DEFS@ $(SIM_CFLAGS) $(SIM_DEBUG) $(SIM_TRACE) $(SIM_BSWAP) \
+  $(SIM_HOSTENDIAN) $(SIM_ENDIAN) $(SIM_INLINE) $(SIM_WARNINGS) \
+  $(SIM_EXTRA_CFLAGS) $(HDEFINES) $(TDEFINES)
+CSEARCH = -I. -I$(srcdir) -I../common -I$(srcdir)/../common \
+  -I../../include -I$(srcroot)/include \
+  -I../../bfd -I$(srcroot)/bfd -I$(srcroot)/gdb \
+  -I../../opcodes -I$(srcroot)/opcodes
+ALL_CFLAGS = $(CONFIG_CFLAGS) $(CSEARCH) $(CFLAGS)
+BUILD_CFLAGS = -g -O $(CSEARCH)
+
+LIBIBERTY_LIB = ../../libiberty/libiberty.a
+BFD_LIB = ../../bfd/libbfd.a
+OPCODES_LIB = ../../opcodes/libopcodes.a
+CONFIG_LIBS = @LIBS@
+LIBDEPS = $(BFD_LIB) $(OPCODES_LIB) $(LIBIBERTY_LIB) \
+       $(SIM_EXTRA_LIBDEPS)
+EXTRA_LIBS = $(BFD_LIB) $(OPCODES_LIB) $(LIBIBERTY_LIB) \
+       $(CONFIG_LIBS) $(SIM_EXTRA_LIBS)
+
+LIB_OBJS = callback.o targ-map.o $(SIM_OBJS)
+
+all: libsim.a run $(SIM_EXTRA_ALL)
+
+libsim.a: $(LIB_OBJS)
+       rm -f libsim.a
+       $(AR) $(ARFLAGS) libsim.a $(LIB_OBJS)
+       $(RANLIB) libsim.a
+
+run: $(SIM_RUN_OBJS) libsim.a $(LIBDEPS)
+       $(CC) $(ALL_CFLAGS) -o run \
+         $(SIM_RUN_OBJS) libsim.a $(EXTRA_LIBS)
+
+run.o: $(srcdir)/../common/run.c config.h tconfig.h \
+         $(srcroot)/include/callback.h
+       $(CC) -c $(srcdir)/../common/run.c $(ALL_CFLAGS)
+
+# FIXME: Ideally, callback.o and friends live in a library outside of
+# both the gdb and simulator source trees (e.g. devo/remote.  Not
+# devo/libremote because this directory would contain more than just
+# a library).
+
+callback.o: $(srcdir)/../common/callback.c config.h tconfig.h \
+         $(srcroot)/include/callback.h targ-vals.h
+       $(CC) -c $(srcdir)/../common/callback.c $(ALL_CFLAGS)
+
+targ-map.o: targ-map.c targ-vals.h
+
+gentmap: Makefile $(srcdir)/../common/gentmap.c targ-vals.def
+       $(CC_FOR_BUILD) $(srcdir)/../common/gentmap.c -o gentmap $(BUILD_CFLAGS)
+
+targ-vals.h: gentmap
+       rm -f targ-vals.h
+       ./gentmap -h >targ-vals.h
+
+targ-map.c: gentmap
+       rm -f targ-map.c
+       ./gentmap -c >targ-map.c
+
+install: install-common $(SIM_EXTRA_INSTALL)
+
+install-common:
+       $(INSTALL_XFORM) run $(bindir)/run
+
+check:
+
+info:
+clean-info:
+install-info:
+
+.NOEXPORT:
+MAKEOVERRIDES=
+
+tags etags: TAGS
+
+TAGS: force
+       etags *.c *.h
+
+clean: $(SIM_EXTRA_CLEAN)
+       rm -f *.[oa] *~ core
+       rm -f run libsim.a
+       rm -f gentmap targ-map.c targ-vals.h
+
+distclean mostlyclean maintainer-clean realclean: clean
+       rm -f TAGS
+       rm -f Makefile config.cache config.log config.status
+       rm -f tconfig.h config.h stamp-h
+
+.c.o:
+       $(CC) -c $(ALL_CFLAGS) $<
+
+# Dummy target to force execution of dependent targets.
+force:
+
+Makefile: Makefile.in $(srcdir)/../common/Make-common.in config.status
+       CONFIG_HEADERS= $(SHELL) ./config.status
+
+config.status: configure
+       $(SHELL) ./config.status --recheck
+
+config.h: stamp-h ; @true
+stamp-h: config.in config.status
+       CONFIG_FILES= CONFIG_HEADERS=config.h:config.in $(SHELL) ./config.status
+
+## End COMMON_POST_CONFIG_FRAG
index e25c37bf0e81d80433b30abfd1098a3bbbee715e..301c5ec65cb9a1474191c60422865c575c1a276f 100644 (file)
@@ -7,9 +7,11 @@
 #
 # The simulator's configure.in should look like:
 #
-# dnl Process this file with `autoconf -l ../common' to produce a configure script.
+# dnl Process this file with autoconf to produce a configure script.
+# sinclude(../common/aclocal.m4)
 # AC_PREREQ(2.5)dnl
 # AC_INIT(Makefile.in)
+#
 # SIM_AC_COMMON
 #
 # ... target specific stuff ...
@@ -26,7 +28,6 @@ AC_CANONICAL_SYSTEM
 AC_ARG_PROGRAM
 AC_PROG_CC
 AC_PROG_INSTALL
-AC_C_BIGENDIAN
 
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 AC_C_CROSS
@@ -51,6 +52,22 @@ dnl Do not add any here that cannot be supported by all simulators.
 dnl Do not add similar but different options to a particular simulator,
 dnl all shall eventually behave the same way.
 
+
+dnl This is a generic option to enable special byte swapping
+dnl insns on *any* cpu.
+AC_ARG_ENABLE(sim-bswap,
+[  --enable-sim-bswap                  Use Host specific BSWAP instruction.],
+[case "${enableval}" in
+  yes) sim_bswap="-DWITH_BSWAP=1 -DUSE_BSWAP";;
+  no)  sim_bswap="-DWITH_BSWAP=0";;
+  *)   AC_MSG_ERROR("--enable-sim-bswap does not take a value"); sim_bswap="";;
+esac
+if test x"$silent" != x"yes" && test x"$sim_bswap" != x""; then
+  echo "Setting bswap flags = $sim_bswap" 6>&1
+fi],[sim_bswap=""])dnl
+AC_SUBST(sim_bswap)
+
+
 AC_ARG_ENABLE(sim-cflags,
 [  --enable-sim-cflags=opts            Extra CFLAGS for use in building simulator],
 [case "${enableval}" in
@@ -64,6 +81,7 @@ if test x"$silent" != x"yes" && test x"$sim_cflags" != x""; then
 fi],[sim_cflags=""])dnl
 AC_SUBST(sim_cflags)
 
+
 dnl --enable-sim-debug is for developers of the simulator
 dnl the allowable values are work-in-progress
 AC_ARG_ENABLE(sim-debug,
@@ -78,6 +96,7 @@ if test x"$silent" != x"yes" && test x"$sim_debug" != x""; then
 fi],[sim_debug=""])dnl
 AC_SUBST(sim_debug)
 
+
 dnl --enable-sim-trace is for users of the simulator
 dnl the allowable values are work-in-progress
 AC_ARG_ENABLE(sim-trace,
@@ -92,19 +111,6 @@ if test x"$silent" != x"yes" && test x"$sim_trace" != x""; then
 fi],[sim_trace=""])dnl
 AC_SUBST(sim_trace)
 
-dnl This is a generic option to enable special byte swapping
-dnl insns on *any* cpu.
-AC_ARG_ENABLE(sim-bswap,
-[  --enable-sim-bswap                  Use Host specific BSWAP instruction.],
-[case "${enableval}" in
-  yes) sim_bswap="-DUSE_BSWAP";;
-  no)  sim_bswap="";;
-  *)   AC_MSG_ERROR("--enable-sim-bswap does not take a value"); sim_bswap="";;
-esac
-if test x"$silent" != x"yes" && test x"$sim_bswap" != x""; then
-  echo "Setting bswap flags = $sim_bswap" 6>&1
-fi],[sim_bswap=""])dnl
-AC_SUBST(sim_bswap)
 
 dnl These are available to append to as desired.
 sim_link_files=
@@ -120,203 +126,161 @@ else
   sim_link_files=../common/tconfig.in
 fi
 
+# targ-vals.def points to the libc macro description file.
 case "${target}" in
-*-*-*)
-       sim_link_files="${sim_link_files} ../common/nltvals.def"
-       sim_link_links="${sim_link_links} targ-vals.def"
-       ;;
+*-*-*) TARG_VALS_DEF=../common/nltvals.def ;;
 esac
+sim_link_files="${sim_link_files} ${TARG_VALS_DEF}"
+sim_link_links="${sim_link_links} targ-vals.def"
 
 ]) dnl End of SIM_AC_COMMON
 
-dnl Generate the Makefile in a target specific directory.
-dnl Substitutions aren't performed on the file in AC_SUBST_FILE,
-dnl so this is a cover macro to tuck the details away of how we cope.
-dnl It also inserts default definitions of the SIM_FOO variables.
 
-AC_DEFUN(SIM_AC_OUTPUT,
+dnl Almost standard simulator options.
+dnl Eventually all simulators will support these.
+
+
+dnl --enable-sim-endian={yes,no,big,little} is for simulators
+dnl that support both big and little endian targets.
+AC_DEFUN(SIM_AC_OPTION_ENDIAN,
 [
+default_sim_endian="ifelse([$1],,,-DWITH_TARGET_BYTE_ORDER=[$1])"
+AC_ARG_ENABLE(sim-endian,
+[  --enable-sim-endian=endian          Specify target byte endian orientation.],
+[case "${enableval}" in
+  yes) case "$target" in
+         *powerpc-*) sim_endian="-DWITH_TARGET_BYTE_ORDER=BIG_ENDIAN";;
+         *powerpcle-*) sim_endian="-DWITH_TARGET_BYTE_ORDER=LITTLE_ENDIAN";;
+         *) echo "Unknown target $target" 1>&6; sim_endian="-DWITH_TARGET_BYTE_ORDER=0";;
+       esac;;
+  no)   sim_endian="-DWITH_TARGET_BYTE_ORDER=0";;
+  b*|B*) sim_endian="-DWITH_TARGET_BYTE_ORDER=BIG_ENDIAN";;
+  l*|L*) sim_endian="-DWITH_TARGET_BYTE_ORDER=LITTLE_ENDIAN";;
+  *)    AC_MSG_ERROR("Unknown value $enableval for --enable-sim-endian"); sim_endian="";;
+esac
+if test x"$silent" != x"yes" && test x"$sim_endian" != x""; then
+  echo "Setting endian flags = $sim_endian" 6>&1
+fi],[sim_endian="${default_sim_endian}"])dnl
+])
 
-dnl Stuff that gets inserted into the Makefile.
-dnl This is done now and not in SIM_AC_COMMON to catch updated values for
-dnl LIBS, etc. that may get changed by target specific checks.
-
-COMMON_MAKEFILE_FRAG=makefile-temp-$$
-cat > $COMMON_MAKEFILE_FRAG <<EOF
-VPATH = ${srcdir}
-srcdir = ${srcdir}
-srcroot = \$(srcdir)/../..
-
-prefix = ${prefix}
-exec_prefix = ${exec_prefix}
-
-host_alias = ${host_alias}
-target_alias = ${target_alias}
-program_transform_name = ${program_transform_name}
-bindir = ${bindir}
-
-libdir = ${libdir}
-tooldir = \$(libdir)/\$(target_alias)
-
-datadir = ${datadir}
-mandir = ${mandir}
-man1dir = \$(mandir)/man1
-infodir = ${infodir}
-includedir = ${includedir}
-
-SHELL = /bin/sh
-
-INSTALL = \$(srcroot)/install.sh -c
-INSTALL_PROGRAM = ${INSTALL_PROGRAM}
-INSTALL_DATA = ${INSTALL_DATA}
-INSTALL_XFORM = \$(INSTALL) -t='\$(program_transform_name)'
-INSTALL_XFORM1= \$(INSTALL_XFORM) -b=.1
-
-CC = ${CC}
-CC_FOR_BUILD = ${CC_FOR_BUILD}
-CFLAGS = ${CFLAGS}
-SIM_CFLAGS = ${sim_cflags}
-SIM_DEBUG = ${sim_debug}
-SIM_TRACE = ${sim_trace}
-SIM_BSWAP = ${sim_bswap}
-
-HDEFINES = ${HDEFINES}
-TDEFINES =
-
-AR = ${AR}
-AR_FLAGS = rc
-RANLIB = ${RANLIB}
-MAKEINFO = makeinfo
-
-# Each simulator's Makefile.in defines one or more of these variables
-# as necessary.  The SIM_AC_OUTPUT macro then inserts those values
-# at '## Config'.
-
-# List of object files, less common parts.
-#SIM_OBJS =
-# List of flags to always pass to \$(CC).
-#SIM_EXTRA_CFLAGS =
-# List of extra libraries to link with.
-#SIM_EXTRA_LIBS =
-# List of extra program dependencies.
-#SIM_EXTRA_LIBDEPS =
-# Dependency of 'all' to build any extra files.
-#SIM_EXTRA_ALL =
-# Dependency of 'install' to install any extra files.
-#SIM_EXTRA_INSTALL =
-# Dependency of 'clean' to clean any extra files.
-#SIM_EXTRA_CLEAN =
-
-CONFIG_CFLAGS = ${DEFS} \$(SIM_CFLAGS) \$(SIM_DEBUG) \$(SIM_TRACE) \$(SIM_BSWAP) \
-  \$(SIM_EXTRA_CFLAGS) \$(HDEFINES) \$(TDEFINES)
-CSEARCH = -I. -I\$(srcdir) -I../common -I\$(srcdir)/../common \
-  -I../../include -I\$(srcroot)/include \
-  -I../../bfd -I\$(srcroot)/bfd -I\$(srcroot)/gdb \
-  -I../../opcodes -I\$(srcroot)/opcodes
-ALL_CFLAGS = \$(CONFIG_CFLAGS) \$(CSEARCH) \$(CFLAGS)
-BUILD_CFLAGS = -g -O \$(CSEARCH)
-
-.NOEXPORT:
-MAKEOVERRIDES=
-
-LIBIBERTY_LIB = ../../libiberty/libiberty.a
-BFD_LIB = ../../bfd/libbfd.a
-OPCODES_LIB = ../../opcodes/libopcodes.a
-CONFIG_LIBS = ${LIBS}
-LIBDEPS = \$(BFD_LIB) \$(OPCODES_LIB) \$(LIBIBERTY_LIB) \
-       \$(SIM_EXTRA_LIBDEPS)
-EXTRA_LIBS = \$(BFD_LIB) \$(OPCODES_LIB) \$(LIBIBERTY_LIB) \
-       \$(CONFIG_LIBS) \$(SIM_EXTRA_LIBS)
-
-LIB_OBJS = callback.o targ-map.o \$(SIM_OBJS)
-
-all: run libsim.a \$(SIM_EXTRA_ALL)
-
-libsim.a: \$(LIB_OBJS)
-       rm -f libsim.a
-       \$(AR) \$(ARFLAGS) libsim.a \$(LIB_OBJS)
-       \$(RANLIB) libsim.a
-
-run: run.o libsim.a \$(LIBDEPS)
-       \$(CC) \$(ALL_CFLAGS) -o run \
-         run.o libsim.a \$(EXTRA_LIBS)
-
-run.o: \$(srcdir)/../common/run.c config.h tconfig.h \
-         \$(srcroot)/include/callback.h
-       \$(CC) -c \$(srcdir)/../common/run.c \$(ALL_CFLAGS)
-
-callback.o: \$(srcdir)/../common/callback.c config.h tconfig.h \
-         \$(srcroot)/include/callback.h targ-vals.h
-       \$(CC) -c \$(srcdir)/../common/callback.c \$(ALL_CFLAGS)
-
-gentmap: \$(srcdir)/../common/gentmap.c targ-vals.def
-       \$(CC_FOR_BUILD) \$(srcdir)/../common/gentmap.c -o gentmap \$(BUILD_CFLAGS) -I\$(srcdir)/../common
-
-targ-vals.h: gentmap
-       rm -f targ-vals.h
-       ./gentmap -h >targ-vals.h
-
-targ-map.c: gentmap
-       rm -f targ-map.c
-       ./gentmap -c >targ-map.c
-
-install: install-common \$(SIM_EXTRA_INSTALL)
-
-install-common:
-       \$(INSTALL_XFORM) run \$(bindir)/run
-
-check:
-
-info:
-clean-info:
-install-info:
-
-tags etags: TAGS
-
-TAGS: force
-       etags *.c *.h
-
-clean: \$(SIM_EXTRA_CLEAN)
-       rm -f *.[[oa]] *~ core gentmap targ-map.c targ-vals.h 
-       rm -f run libsim.a
 
-distclean mostlyclean maintainer-clean realclean: clean
-       rm -f TAGS
-       rm -f Makefile config.cache config.log config.status
-       rm -f tconfig.h config.h stamp-h targ-vals.def
-
-.c.o:
-       \$(CC) -c \$(ALL_CFLAGS) \$<
+dnl --enable-sim-hostendian is for users of the simulator when
+dnl they find that AC_C_BIGENDIAN does not function correctly
+dnl (for instance in a canadian cross)
+AC_DEFUN(SIM_AC_OPTION_HOSTENDIAN,
+[
+AC_ARG_ENABLE(sim-hostendian,
+[  --enable-sim-hostendain=end         Specify host byte endian orientation.],
+[case "${enableval}" in
+  no)   sim_hostendian="-DWITH_HOST_BYTE_ORDER=0";;
+  b*|B*) sim_hostendian="-DWITH_HOST_BYTE_ORDER=BIG_ENDIAN";;
+  l*|L*) sim_hostendian="-DWITH_HOST_BYTE_ORDER=LITTLE_ENDIAN";;
+  *)    AC_MSG_ERROR("Unknown value $enableval for --enable-sim-hostendian"); sim_hostendian="";;
+esac
+if test x"$silent" != x"yes" && test x"$sim_hostendian" != x""; then
+  echo "Setting hostendian flags = $sim_hostendian" 6>&1
+fi],[
+if test "x$cross_compiling" = "xno"; then
+  AC_C_BIGENDIAN
+  if test $ac_cv_c_bigendian = yes; then
+    sim_hostendian="-DWITH_HOST_BYTE_ORDER=BIG_ENDIAN"
+  else
+    sim_hostendian="-DWITH_HOST_BYTE_ORDER=LITTLE_ENDIAN"
+  fi
+else
+  sim_hostendian="-DWITH_HOST_BYTE_ORDER=0"
+fi])dnl
+])
+
 
-# Dummy target to force execution of dependent targets.
-force:
+dnl --enable-sim-inline is for users that wish to ramp up the simulator's
+dnl performance by inlining functions.
+AC_DEFUN(SIM_AC_OPTION_INLINE,
+[
+default_sim_inline="ifelse([$1],,,-DDEFAULT_INLINE=[$1])"
+AC_ARG_ENABLE(sim-inline,
+[  --enable-sim-inline=inlines         Specify which functions should be inlined.],
+[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";;
+  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";;
+       esac
+       if test x"$sim_inline" = x""; then
+        sim_inline="$new_flag"
+       else
+        sim_inline="$sim_inline $new_flag"
+       fi
+     done;;
+esac
+if test x"$silent" != x"yes" && test x"$sim_inline" != x""; then
+  echo "Setting inline flags = $sim_inline" 6>&1
+fi],[if test x"$GCC" != "x" -a x"${default_sim_inline}" != "x" ; then
+  sim_inline="${default_sim_inline}"
+  if test x"$silent" != x"yes"; then
+    echo "Setting inline flags = $sim_inline" 6>&1
+  fi
+else
+  sim_inline=""
+fi])dnl
+])
 
-Makefile: Makefile.in config.status
-       CONFIG_HEADERS= \$(SHELL) ./config.status
 
-config.status: configure
-       \$(SHELL) ./config.status --recheck
+dnl --enable-sim-warnings is for developers of the simulator.
+dnl it enables extra GCC specific warnings.
+AC_DEFUN(SIM_AC_OPTION_WARNINGS,
+[
+AC_ARG_ENABLE(sim-warnings,
+[  --enable-sim-warnings=opts          Extra CFLAGS for turning on compiler warnings except for idecode.o, semantics.o and psim.o],
+[case "${enableval}" in
+  yes) sim_warnings="-Werror -Wall -Wpointer-arith -Wmissing-prototypes -Wmissing-declarations ";;
+  no)  sim_warnings="-w";;
+  *)   sim_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
+esac
+if test x"$silent" != x"yes" && test x"$sim_warnings" != x""; then
+  echo "Setting warning flags = $sim_warnings" 6>&1
+fi],[sim_warnings=""])dnl
+])
 
-config.h: stamp-h ; @true
-stamp-h: config.in config.status
-       CONFIG_FILES= CONFIG_HEADERS=config.h:config.in \$(SHELL) ./config.status
 
-# We can't add dependencies to configure because it causes too much trouble
-# to end users if configure's timestamp is out of sync.
-.PHONY: run-autoconf
-run-autoconf:
-       cd \$(srcdir) && autoconf -l ../common
-EOF
 
-dnl end of COMMON_MAKEFILE_FRAG
 
-AC_SUBST_FILE(COMMON_MAKEFILE_FRAG)
+dnl Generate the Makefile in a target specific directory.
+dnl Substitutions aren't performed on the file in AC_SUBST_FILE,
+dnl so this is a cover macro to tuck the details away of how we cope.
+dnl We cope by having autoconf generate two files and then merge them into
+dnl one afterwards.  The two pieces of the common fragment are inserted into
+dnl the target's fragment at the appropriate points.
 
+AC_DEFUN(SIM_AC_OUTPUT,
+[
+dnl Optional options
+AC_SUBST(sim_endian)
+AC_SUBST(sim_hostendian)
+AC_SUBST(sim_inline)
+AC_SUBST(sim_warnings)
+dnl
 AC_LINK_FILES($sim_link_files, $sim_link_links)
- AC_OUTPUT(Makefile,[
+AC_OUTPUT(Makefile.sim:Makefile.in Make-common.sim:../common/Make-common.in,
+[case "x$CONFIG_FILES" in xMakefile*)
+   echo "Merging Makefile.sim+Make-common.sim into Makefile ..."
+   rm -f Makesim1.tmp Makesim2.tmp Makefile
+   sed -n -e '/^## COMMON_PRE_/,/^## End COMMON_PRE_/ p' <Make-common.sim >Makesim1.tmp
+   sed -n -e '/^## COMMON_POST_/,/^## End COMMON_POST_/ p' <Make-common.sim >Makesim2.tmp
+   sed -e '/^## COMMON_PRE_/ r Makesim1.tmp' \
+       -e '/^## COMMON_POST_/ r Makesim2.tmp' \
+       <Makefile.sim >Makefile
+   rm -f Makefile.sim Make-common.sim Makesim1.tmp Makesim2.tmp
+   ;;
+ esac
  case "x$CONFIG_HEADERS" in xconfig.h:config.in) echo > stamp-h ;; esac
- ])
-
-rm $COMMON_MAKEFILE_FRAG
-
-])dnl End of SIM_AC_OUTPUT
+])
+])
diff --git a/sim/common/configure b/sim/common/configure
new file mode 100755 (executable)
index 0000000..623a7ae
--- /dev/null
@@ -0,0 +1,1435 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.10 
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+  --enable-sim-bswap                   Use Host specific BSWAP instruction."
+ac_help="$ac_help
+  --enable-sim-cflags=opts             Extra CFLAGS for use in building simulator"
+ac_help="$ac_help
+  --enable-sim-debug=opts              Enable debugging flags"
+ac_help="$ac_help
+  --enable-sim-trace=opts              Enable tracing flags"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+
+ac_prev=
+for ac_option
+do
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  case "$ac_option" in
+  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) ac_optarg= ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case "$ac_option" in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir="$ac_optarg" ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build="$ac_optarg" ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file="$ac_optarg" ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir="$ac_optarg" ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    eval "enable_${ac_feature}=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix="$ac_optarg" ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he)
+    # Omit some internal or obsolete options to make the list less imposing.
+    # This message is too long to be a string in the A/UX 3.1 sh.
+    cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+  --cache-file=FILE       cache test results in FILE
+  --help                  print this message
+  --no-create             do not create output files
+  --quiet, --silent       do not print \`checking...' messages
+  --version               print the version of autoconf that created configure
+Directory and file names:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [same as prefix]
+  --bindir=DIR            user executables in DIR [EPREFIX/bin]
+  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
+  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
+  --datadir=DIR           read-only architecture-independent data in DIR
+                          [PREFIX/share]
+  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
+                          [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
+  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
+  --includedir=DIR        C header files in DIR [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
+  --infodir=DIR           info documentation in DIR [PREFIX/info]
+  --mandir=DIR            man documentation in DIR [PREFIX/man]
+  --srcdir=DIR            find the sources in DIR [configure dir or ..]
+  --program-prefix=PREFIX prepend PREFIX to installed program names
+  --program-suffix=SUFFIX append SUFFIX to installed program names
+  --program-transform-name=PROGRAM
+                          run sed PROGRAM on installed program names
+EOF
+    cat << EOF
+Host type:
+  --build=BUILD           configure for building on BUILD [BUILD=HOST]
+  --host=HOST             configure for HOST [guessed]
+  --target=TARGET         configure for TARGET [TARGET=HOST]
+Features and packages:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --x-includes=DIR        X include files are in DIR
+  --x-libraries=DIR       X library files are in DIR
+EOF
+    if test -n "$ac_help"; then
+      echo "--enable and --with options recognized:$ac_help"
+    fi
+    exit 0 ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host="$ac_optarg" ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir="$ac_optarg" ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir="$ac_optarg" ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir="$ac_optarg" ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir="$ac_optarg" ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir="$ac_optarg" ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir="$ac_optarg" ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir="$ac_optarg" ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix="$ac_optarg" ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix="$ac_optarg" ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix="$ac_optarg" ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name="$ac_optarg" ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir="$ac_optarg" ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir="$ac_optarg" ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site="$ac_optarg" ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir="$ac_optarg" ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir="$ac_optarg" ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target="$ac_optarg" ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers)
+    echo "configure generated by autoconf version 2.10"
+    exit 0 ;;
+
+  -with-* | --with-*)
+    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_${ac_package}='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    eval "with_${ac_package}=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes="$ac_optarg" ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries="$ac_optarg" ;;
+
+  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+    ;;
+
+  *)
+    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+      echo "configure: warning: $ac_option: invalid host type" 1>&2
+    fi
+    if test "x$nonopt" != xNONE; then
+      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+    fi
+    nonopt="$ac_option"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+  exec 6>/dev/null
+else
+  exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+  case "$ac_arg" in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  esac
+done
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=Makefile.in
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_prog=$0
+  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+  else
+    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+  fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    echo "loading site script $ac_site_file"
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  echo "loading cache $cache_file"
+  . $cache_file
+else
+  echo "creating cache $cache_file"
+  > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='       '
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+# This is intended for use by the target specific directories, and by us.
+
+# autoconf.info says this should be called right after AC_INIT.
+
+
+ac_aux_dir=
+for ac_dir in `cd $srcdir;pwd`/../.. $srcdir/`cd $srcdir;pwd`/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in `cd $srcdir;pwd`/../.. $srcdir/`cd $srcdir;pwd`/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+
+# Do some error checking and defaulting for the host and target type.
+# The inputs are:
+#    configure --host=HOST --target=TARGET --build=BUILD NONOPT
+#
+# The rules are:
+# 1. You are not allowed to specify --host, --target, and nonopt at the
+#    same time.
+# 2. Host defaults to nonopt.
+# 3. If nonopt is not specified, then host defaults to the current host,
+#    as determined by config.guess.
+# 4. Target and build default to nonopt.
+# 5. If nonopt is not specified, then target and build default to host.
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+case $host---$target---$nonopt in
+NONE---*---* | *---NONE---* | *---*---NONE) ;;
+*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
+esac
+
+
+# Make sure we can run config.sub.
+if $ac_config_sub sun4 >/dev/null 2>&1; then :
+else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking host system type""... $ac_c" 1>&6
+
+host_alias=$host
+case "$host_alias" in
+NONE)
+  case $nonopt in
+  NONE)
+    if host_alias=`$ac_config_guess`; then :
+    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
+    fi ;;
+  *) host_alias=$nonopt ;;
+  esac ;;
+esac
+
+host=`$ac_config_sub $host_alias`
+host_cpu=`echo $host | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'`
+echo "$ac_t""$host" 1>&6
+
+echo $ac_n "checking target system type""... $ac_c" 1>&6
+
+target_alias=$target
+case "$target_alias" in
+NONE)
+  case $nonopt in
+  NONE) target_alias=$host_alias ;;
+  *) target_alias=$nonopt ;;
+  esac ;;
+esac
+
+target=`$ac_config_sub $target_alias`
+target_cpu=`echo $target | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'`
+target_vendor=`echo $target | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'`
+target_os=`echo $target | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'`
+echo "$ac_t""$target" 1>&6
+
+echo $ac_n "checking build system type""... $ac_c" 1>&6
+
+build_alias=$build
+case "$build_alias" in
+NONE)
+  case $nonopt in
+  NONE) build_alias=$host_alias ;;
+  *) build_alias=$nonopt ;;
+  esac ;;
+esac
+
+build=`$ac_config_sub $build_alias`
+build_cpu=`echo $build | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'`
+build_vendor=`echo $build | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'`
+build_os=`echo $build | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'`
+echo "$ac_t""$build" 1>&6
+
+test "$host_alias" != "$target_alias" &&
+  test "$program_prefix$program_suffix$program_transform_name" = \
+    NONENONEs,x,x, &&
+  program_prefix=${target_alias}-
+
+if test "$program_transform_name" = s,x,x,; then
+  program_transform_name=
+else
+  # Double any \ or $.  echo might interpret backslashes.
+  cat <<\EOF_SED > conftestsed
+s,\\,\\\\,g; s,\$,$$,g
+EOF_SED
+  program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
+  rm -f conftestsed
+fi
+test "$program_prefix" != NONE &&
+  program_transform_name="s,^,${program_prefix},; $program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+
+# sed with no file args requires a program.
+test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="gcc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  ac_prog_rejected=no
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+       continue
+      fi
+      ac_cv_prog_CC="cc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# -gt 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    set dummy "$ac_dir/$ac_word" "$@"
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.c <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:740: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_gcc=yes
+else
+  ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+if test $ac_cv_prog_gcc = yes; then
+  GCC=yes
+  if test "${CFLAGS+set}" != set; then
+    echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_prog_gcc_g'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  ac_cv_prog_gcc_g=yes
+else
+  ac_cv_prog_gcc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6
+    if test $ac_cv_prog_gcc_g = yes; then
+      CFLAGS="-g -O"
+    else
+      CFLAGS="-O"
+    fi
+  fi
+else
+  GCC=
+  test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS=        }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      for ac_prog in ginstall installbsd scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+         if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           # OSF/1 installbsd also uses dspmsg, but is usable.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_ifs"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+# Put a plausible default for CC_FOR_BUILD in Makefile.
+# If we cannot run a trivial program, we must be cross compiling.
+echo $ac_n "checking whether cross-compiling""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_c_cross'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_c_cross=yes
+else
+cat > conftest.$ac_ext <<EOF
+#line 847 "configure"
+#include "confdefs.h"
+main(){return(0);}
+EOF
+{ (eval echo configure:851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
+if test -s conftest && (./conftest; exit) 2>/dev/null; then
+  ac_cv_c_cross=no
+else
+  ac_cv_c_cross=yes
+fi
+fi
+rm -fr conftest*
+fi
+
+echo "$ac_t""$ac_cv_c_cross" 1>&6
+cross_compiling=$ac_cv_c_cross
+
+if test "x$cross_compiling" = "xno"; then
+  CC_FOR_BUILD='$(CC)'
+else
+  CC_FOR_BUILD=gcc
+fi
+
+
+
+
+AR=${AR-ar}
+
+# Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_RANLIB="ranlib"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+fi
+fi
+RANLIB="$ac_cv_prog_RANLIB"
+if test -n "$RANLIB"; then
+  echo "$ac_t""$RANLIB" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+. ${srcdir}/../../bfd/configure.host
+
+
+
+# Check whether --enable-sim-bswap or --disable-sim-bswap was given.
+if test "${enable_sim_bswap+set}" = set; then
+  enableval="$enable_sim_bswap"
+  case "${enableval}" in
+  yes) sim_bswap="-DWITH_BSWAP=1 -DUSE_BSWAP";;
+  no)  sim_bswap="-DWITH_BSWAP=0";;
+  *)   { echo "configure: error: "--enable-sim-bswap does not take a value"" 1>&2; exit 1; }; sim_bswap="";;
+esac
+if test x"$silent" != x"yes" && test x"$sim_bswap" != x""; then
+  echo "Setting bswap flags = $sim_bswap" 6>&1
+fi
+else
+  sim_bswap=""
+fi
+
+
+
+# Check whether --enable-sim-cflags or --disable-sim-cflags was given.
+if test "${enable_sim_cflags+set}" = set; then
+  enableval="$enable_sim_cflags"
+  case "${enableval}" in
+  yes)  sim_cflags="-O2";;
+  trace) { echo "configure: error: "Please use --enable-sim-debug instead."" 1>&2; exit 1; }; sim_cflags="";;
+  no)   sim_cflags="";;
+  *)    sim_cflags=`echo "${enableval}" | sed -e "s/,/ /g"`;;
+esac
+if test x"$silent" != x"yes" && test x"$sim_cflags" != x""; then
+  echo "Setting sim cflags = $sim_cflags" 6>&1
+fi
+else
+  sim_cflags=""
+fi
+
+
+
+# Check whether --enable-sim-debug or --disable-sim-debug was given.
+if test "${enable_sim_debug+set}" = set; then
+  enableval="$enable_sim_debug"
+  case "${enableval}" in
+  yes) sim_debug="-DDEBUG=7";;
+  no)  sim_debug="-DDEBUG=0";;
+  *)   sim_debug="-DDEBUG='(${enableval})'";;
+esac
+if test x"$silent" != x"yes" && test x"$sim_debug" != x""; then
+  echo "Setting sim debug = $sim_debug" 6>&1
+fi
+else
+  sim_debug=""
+fi
+
+
+
+# Check whether --enable-sim-trace or --disable-sim-trace was given.
+if test "${enable_sim_trace+set}" = set; then
+  enableval="$enable_sim_trace"
+  case "${enableval}" in
+  yes) sim_trace="-DTRACE=1";;
+  no)  sim_trace="-DTRACE=0";;
+  *)   sim_trace="-DTRACE='(${enableval})'";;
+esac
+if test x"$silent" != x"yes" && test x"$sim_trace" != x""; then
+  echo "Setting sim trace = $sim_trace" 6>&1
+fi
+else
+  sim_trace=""
+fi
+
+
+
+sim_link_files=
+sim_link_links=
+
+sim_link_links=tconfig.h
+if test -f ${srcdir}/tconfig.in
+then
+  sim_link_files=tconfig.in
+else
+  sim_link_files=../common/tconfig.in
+fi
+
+# targ-vals.def points to the libc macro description file.
+case "${target}" in
+*-*-*) TARG_VALS_DEF=../common/nltvals.def ;;
+esac
+sim_link_files="${sim_link_files} ${TARG_VALS_DEF}"
+sim_link_links="${sim_link_links} targ-vals.def"
+
+
+
+# Put a useful copy of CPP_FOR_TARGET in Makefile.
+# This is only used to build the target values header files.  These files are
+# shipped with distributions so CPP_FOR_TARGET only needs to work in
+# developer's trees.  This value is borrowed from ../../Makefile.in.
+CPP_FOR_TARGET="\` \
+  if test -f \$\${rootme}/../../gcc/Makefile ; then \
+    if test -f \$\${rootme}/../../\$(TARGET_SUBDIR)/newlib/Makefile ; then \
+      echo \$\${rootme}/../../gcc/xgcc -B\$\${rootme}/../../gcc/ -idirafter \$\${rootme}/../../\$(TARGET_SUBDIR)/newlib/targ-include -idirafter \$(srcroot)/newlib/libc/include -nostdinc; \
+    else \
+      echo \$\${rootme}/../../gcc/xgcc -B\$\${rootme}/../../gcc/; \
+    fi; \
+  else \
+    if test '\$(host_canonical)' = '\$(target_canonical)' ; then \
+      echo \$(CC); \
+    else \
+      t='\$(program_transform_name)'; echo gcc | sed -e 's/x/x/' \$\$t; \
+    fi; \
+  fi\` -E"
+
+
+# Set TARGET_SUBDIR, needed by CPP_FOR_TARGET.
+if test x"${host}" = x"${target}" ; then
+       TARGET_SUBDIR="."
+else
+       TARGET_SUBDIR=${target_alias}
+fi
+
+
+# These aren't all needed yet, but will be eventually.
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    # This must be in double quotes, not single quotes, because CPP may get
+  # substituted into the Makefile and "${CC-cc}" will confuse make.
+  CPP="${CC-cc} -E"
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp.
+  cat > conftest.$ac_ext <<EOF
+#line 1041 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1047: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -E -traditional-cpp"
+  cat > conftest.$ac_ext <<EOF
+#line 1056 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1062: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  rm -rf conftest*
+  CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+  ac_cv_prog_CPP="$CPP"
+fi
+  CPP="$ac_cv_prog_CPP"
+else
+  ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+for ac_hdr in stdlib.h string.h strings.h time.h sys/times.h
+do
+ac_safe=`echo "$ac_hdr" | tr './\055' '___'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1090 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1095: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdefghijklmnopqrstuvwxyz./\055' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ___'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \
+  >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[        ]*VPATH[        ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+  case "\$ac_option" in
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+    echo "$CONFIG_STATUS generated by autoconf version 2.10"
+    exit 0 ;;
+  -help | --help | --hel | --he | --h)
+    echo "\$ac_cs_usage"; exit 0 ;;
+  *) echo "\$ac_cs_usage"; exit 1 ;;
+  esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile config.h:config.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@host@%$host%g
+s%@host_alias@%$host_alias%g
+s%@host_cpu@%$host_cpu%g
+s%@host_vendor@%$host_vendor%g
+s%@host_os@%$host_os%g
+s%@target@%$target%g
+s%@target_alias@%$target_alias%g
+s%@target_cpu@%$target_cpu%g
+s%@target_vendor@%$target_vendor%g
+s%@target_os@%$target_os%g
+s%@build@%$build%g
+s%@build_alias@%$build_alias%g
+s%@build_cpu@%$build_cpu%g
+s%@build_vendor@%$build_vendor%g
+s%@build_os@%$build_os%g
+s%@CC@%$CC%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@CC_FOR_BUILD@%$CC_FOR_BUILD%g
+s%@HDEFINES@%$HDEFINES%g
+s%@AR@%$AR%g
+s%@RANLIB@%$RANLIB%g
+s%@sim_bswap@%$sim_bswap%g
+s%@sim_cflags@%$sim_cflags%g
+s%@sim_debug@%$sim_debug%g
+s%@sim_trace@%$sim_trace%g
+s%@CPP_FOR_TARGET@%$CPP_FOR_TARGET%g
+s%@TARGET_SUBDIR@%$TARGET_SUBDIR%g
+s%@CPP@%$CPP%g
+
+CEOF
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  # Adjust relative srcdir, etc. for subdirectories.
+
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    # The file is in a subdirectory.
+    test ! -d "$ac_dir" && mkdir "$ac_dir"
+    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case "$ac_given_srcdir" in
+  .)  srcdir=.
+      if test -z "$ac_dots"; then top_srcdir=.
+      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+  *) # Relative path.
+    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+    top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  case "$ac_given_INSTALL" in
+  [/$]*) INSTALL="$ac_given_INSTALL" ;;
+  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  esac
+  echo creating "$ac_file"
+  rm -f "$ac_file"
+  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+  case "$ac_file" in
+  *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+  *) ac_comsub= ;;
+  esac
+  sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file
+fi; done
+rm -f conftest.subs
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([  ]*\)#\([        ]*define[       ][      ]*\)'
+ac_dB='\([     ][      ]*\)[^  ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_uB='\([     ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+CONFIG_HEADERS=${CONFIG_HEADERS-"config.h:config.in"}
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  echo creating $ac_file
+
+  rm -f conftest.frag conftest.in conftest.out
+  cp $ac_given_srcdir/$ac_file_in conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h.  And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[   ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+# Maximum number of lines to put in a single here document.
+ac_max_here_lines=12
+
+rm -f conftest.tail
+while :
+do
+  ac_lines=`grep -c . conftest.vals`
+  # grep -c gives empty output for an empty file on some AIX systems.
+  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+  # Write a limited-size here document to conftest.frag.
+  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+  echo 'CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+  rm -f conftest.vals
+  mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+  rm -f conftest.frag conftest.h
+  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
+  cat conftest.in >> conftest.h
+  rm -f conftest.in
+  if cmp -s $ac_file conftest.h 2>/dev/null; then
+    echo "$ac_file is unchanged"
+    rm -f conftest.h
+  else
+    # Remove last slash and all that follows it.  Not all systems have dirname.
+      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+      # The file is in a subdirectory.
+      test ! -d "$ac_dir" && mkdir "$ac_dir"
+    fi
+    rm -f $ac_file
+    mv conftest.h $ac_file
+  fi
+fi; done
+
+
+case x$CONFIG_HEADERS in xconfig.h:config.in) echo > stamp-h ;; esac
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
diff --git a/sim/common/sim-bits-n.h b/sim/common/sim-bits-n.h
deleted file mode 100644 (file)
index 0359c03..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*  This file is part of the program psim.
-
-    Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au>
-    Copyright (C) 1997, Free Software Foundation, Inc.
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-    */
-
-
-#ifndef N
-#error "N must be #defined"
-#endif
-
-/* NOTE: See end of file for #undef */
-#define unsignedN XCONCAT2(unsigned,N)
-#define signedN XCONCAT2(signed,N)
-#define MASKEDn XCONCAT2(MASKED,N)
-#define MASKn XCONCAT2(MASK,N)
-#define LSMASKEDn XCONCAT2(LSMASKED,N)
-#define EXTRACTEDn XCONCAT2(EXTRACTED,N)
-#define INSERTEDn XCONCAT2(INSERTED,N)
-#define ROTn XCONCAT2(ROT,N)
-#define ROTLn XCONCAT2(ROTL,N)
-#define ROTRn XCONCAT2(ROTR,N)
-#define SEXTn XCONCAT2(SEXT,N)
-
-
-INLINE_SIM_BITS\
-(unsignedN)
-MASKEDn(unsignedN word,
-       unsigned start,
-       unsigned stop)
-{
-  return (word & MASKn(start, stop));
-}
-
-
-INLINE_SIM_BITS\
-(unsignedN)
-LSMASKEDn(unsignedN word,
-         unsigned nr_bits)
-{
-  return (word & MASKn(N - nr_bits, N - 1));
-}
-
-
-INLINE_SIM_BITS\
-(unsignedN)
-EXTRACTEDn(unsignedN val,
-          unsigned start,
-          unsigned stop)
-{
-  return LSMASKEDn((((unsignedN)(val)) >> (N - stop - 1)),
-                  stop - start + 1);
-}
-
-
-INLINE_SIM_BITS\
-(unsignedN)
-INSERTEDn(unsignedN val,
-         unsigned start,
-         unsigned stop)
-{
-  return (((unsignedN)(val)
-          << _MAKE_SHIFT(N, stop))
-         & MASKn(start, stop));
-}
-
-
-INLINE_SIM_BITS\
-(unsignedN)
-ROTn(unsignedN val,
-     int shift)
-{
-  unsignedN result;
-  if (shift > 0)
-    return ROTRn(val, shift);
-  else if (shift < 0)
-    return ROTLn(val, -shift);
-  else
-    return val;
-}
-
-
-INLINE_SIM_BITS\
-(unsignedN)
-ROTLn(unsignedN val,
-      unsigned shift)
-{
-  unsignedN result;
-  ASSERT(shift <= N);
-  result = (((val) << (shift)) | ((val) >> ((N)-(shift))));
-  return result;
-}
-
-
-INLINE_SIM_BITS\
-(unsignedN)
-ROTRn(unsignedN val,
-      unsigned shift)
-{
-  unsignedN result;
-  ASSERT(shift <= N);
-  result = (((val) >> (shift)) | ((val) << ((N)-(shift))));
-  return result;
-}
-
-
-INLINE_SIM_BITS\
-(unsignedN)
-SEXTn(signedN val,
-            unsigned sign_bit)
-{
-  /* make the sign-bit most significant and then smear it back into
-     position */
-  ASSERT(sign_bit < N);
-  return (val << sign_bit) >> sign_bit;
-}
-
-
-/* NOTE: See start of file for #define */
-#undef SEXTn
-#undef ROTLn
-#undef ROTRn
-#undef ROTn
-#undef INSERTEDn
-#undef EXTRACTEDn
-#undef LSMASKEDn
-#undef MASKn
-#undef MASKEDn
-#undef signedN
-#undef unsignedN
diff --git a/sim/common/sim-bits.c b/sim/common/sim-bits.c
new file mode 100644 (file)
index 0000000..1f0a8e5
--- /dev/null
@@ -0,0 +1,105 @@
+/*  This file is part of the program psim.
+
+    Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+    */
+
+
+#ifndef _SIM_BITS_C_
+#define _SIM_BITS_C_
+
+#include "sim-basics.h"
+
+
+INLINE_SIM_BITS\
+(unsigned_word)
+MASKED(unsigned_word val,
+       unsigned start,
+       unsigned stop)
+{
+  return ((val) & MASK(start, stop));
+}
+
+
+
+INLINE_SIM_BITS\
+(unsigned_word)
+LSMASKED(unsigned_word val,
+        unsigned nr_bits)
+{
+  return MASKED(val,
+               WITH_TARGET_WORD_BITSIZE - nr_bits,
+               WITH_TARGET_WORD_BITSIZE - 1);
+}
+
+
+
+INLINE_SIM_BITS\
+(unsigned_word)
+EXTRACTED(unsigned_word val,
+         unsigned start,
+         unsigned stop)
+{
+  ASSERT(start <= stop);
+#if (WITH_TARGET_WORD_BITSIZE == 64)
+  return EXTRACTED64(val, start, stop);
+#endif
+#if (WITH_TARGET_WORD_BITSIZE == 32)
+  if (stop < 32)
+    return 0;
+  else
+    return ((val >> (63 - stop))
+           & MASK(start+(63-stop), 63));
+#endif
+}
+
+
+INLINE_SIM_BITS\
+(unsigned_word)
+INSERTED(unsigned_word val,
+        unsigned start,
+        unsigned stop)
+{
+  ASSERT(start <= stop);
+#if (WITH_TARGET_WORD_BITSIZE == 64)
+  return INSERTED64(val, start, stop);
+#endif
+#if (WITH_TARGET_WORD_BITSIZE == 32)
+  if (stop < 32)
+    return 0;
+  else
+    return ((val & MASK(start+(63-stop), 63))
+           << (63 - stop));
+#endif
+}
+
+
+
+
+#define N 16
+#include "sim-n-bits.h"
+#undef N
+
+#define N 32
+#include "sim-n-bits.h"
+#undef N
+
+#define N 64
+#include "sim-n-bits.h"
+#undef N
+
+#endif /* _SIM_BITS_C_ */
diff --git a/sim/common/sim-core-n.h b/sim/common/sim-core-n.h
deleted file mode 100644 (file)
index 1bcb722..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*  This file is part of the program psim.
-
-    Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-    */
-
-
-#ifndef N
-#error "N must be #defined"
-#endif
-
-/* NOTE: see end of file for #undef of these macros */
-#define unsigned_N XCONCAT2(unsigned_,N)
-#define T2H_N XCONCAT2(T2H_,N)
-#define H2T_N XCONCAT2(H2T_,N)
-
-#define core_map_read_N XCONCAT2(core_map_read_,N)
-#define core_map_write_N XCONCAT2(core_map_write_,N)
-
-
-INLINE_SIM_CORE(unsigned_N)
-core_map_read_N(engine *system,
-               core_maps map,
-               unsigned_word addr)
-{
-  core_mapping *mapping = core_map_find_mapping(system, map,
-                                               addr,
-                                               sizeof(unsigned_N),
-                                               1); /*abort*/
-#if (WITH_DEVICES)
-  if (WITH_CALLBACK_MEMORY && mapping->device != NULL) {
-    unsigned_N data;
-    if (device_io_read_buffer(mapping->device,
-                             &data,
-                             mapping->space,
-                             addr,
-                             sizeof(unsigned_N)) != sizeof(unsigned_N))
-      device_error(mapping->device, "internal error - core_read_N() - io_read_buffer should not fail");
-    return T2H_N(data);
-  }
-  else
-#endif
-    return T2H_N(*(unsigned_N*)core_translate(mapping, addr));
-}
-
-
-
-INLINE_SIM_CORE(void)
-core_map_write_N(engine *system,
-                core_maps map,
-                unsigned_word addr,
-                unsigned_N val)
-{
-  core_mapping *mapping = core_map_find_mapping(system, map,
-                                               addr,
-                                               sizeof(unsigned_N),
-                                               1); /*abort*/
-#if (WITH_DEVICES)
-  if (WITH_CALLBACK_MEMORY && mapping->device != NULL) {
-    unsigned_N data = H2T_N(val);
-    if (device_io_write_buffer(mapping->device,
-                              &data,
-                              mapping->space,
-                              addr,
-                              sizeof(unsigned_N), /* nr_bytes */
-                              processor,
-                              cia) != sizeof(unsigned_N))
-      device_error(mapping->device, "internal error - core_write_N() - io_write_buffer should not fail");
-  }
-  else
-#endif
-    *(unsigned_N*)core_translate(mapping, addr) = H2T_N(val);
-}
-
-
-/* NOTE: see start of file for #define of these macros */
-#undef unsigned_N
-#undef T2H_N
-#undef H2T_N
-#undef core_map_read_N
-#undef core_map_write_N
diff --git a/sim/common/sim-core.c b/sim/common/sim-core.c
new file mode 100644 (file)
index 0000000..f822dad
--- /dev/null
@@ -0,0 +1,375 @@
+/*  This file is part of the program psim.
+
+    Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+    */
+
+
+#ifndef _SIM_CORE_C_
+#define _SIM_CORE_C_
+
+#include "engine.h"
+
+
+INLINE_SIM_CORE\
+(void)
+core_init(engine *system)
+{
+  core *memory = &system->memory;
+  core_maps map;
+  for (map = 0;
+       map < nr_core_maps;
+       map++) {
+    /* blow away old mappings */
+    core_mapping *curr = memory->map[map].first;
+    while (curr != NULL) {
+      core_mapping *tbd = curr;
+      curr = curr->next;
+      if (tbd->free_buffer) {
+       ASSERT(tbd->buffer != NULL);
+       zfree(tbd->buffer);
+      }
+      zfree(tbd);
+    }
+    memory->map[map].first = NULL;
+  }
+}
+
+
+
+STATIC_INLINE_SIM_CORE\
+(core_mapping *)
+new_core_mapping(engine *system,
+                attach_type attach,
+                int space,
+                unsigned_word addr,
+                unsigned nr_bytes,
+                device *device,
+                void *buffer,
+                int free_buffer)
+{
+  core_mapping *new_mapping = ZALLOC(core_mapping);
+  /* common */
+  new_mapping->level = attach;
+  new_mapping->space = space;
+  new_mapping->base = addr;
+  new_mapping->nr_bytes = nr_bytes;
+  new_mapping->bound = addr + (nr_bytes - 1);
+  if (attach == attach_raw_memory) {
+    new_mapping->buffer = buffer;
+    new_mapping->free_buffer = free_buffer;
+  }
+  else if (attach >= attach_callback) {
+    new_mapping->device = device;
+  }
+  else {
+    engine_error(system, "new_core_mapping - internal error - unknown attach type %d\n",
+                attach);
+  }
+  return new_mapping;
+}
+
+
+STATIC_INLINE_SIM_CORE\
+(void)
+core_map_attach(engine *system,
+               core_map *access_map,
+               attach_type attach,
+               int space,
+               unsigned_word addr,
+               unsigned nr_bytes, /* host limited */
+               device *client, /*callback/default*/
+               void *buffer, /*raw_memory*/
+               int free_buffer) /*raw_memory*/
+{
+  /* find the insertion point for this additional mapping and then
+     insert */
+  core_mapping *next_mapping;
+  core_mapping **last_mapping;
+
+  ASSERT((attach >= attach_callback && client != NULL && buffer == NULL && !free_buffer)
+        || (attach == attach_raw_memory && client == NULL && buffer != NULL));
+
+  /* actually do occasionally get a zero size map */
+  if (nr_bytes == 0) {
+#if (WITH_DEVICES)
+    device_error(client, "called on core_map_attach with size zero");
+#else
+    engine_error(system, "called on core_map_attach with size zero");
+#endif
+  }
+
+  /* find the insertion point (between last/next) */
+  next_mapping = access_map->first;
+  last_mapping = &access_map->first;
+  while(next_mapping != NULL
+       && (next_mapping->level < attach
+           || (next_mapping->level == attach
+               && next_mapping->bound < addr))) {
+    /* provided levels are the same */
+    /* assert: next_mapping->base > all bases before next_mapping */
+    /* assert: next_mapping->bound >= all bounds before next_mapping */
+    last_mapping = &next_mapping->next;
+    next_mapping = next_mapping->next;
+  }
+
+  /* check insertion point correct */
+  ASSERT(next_mapping == NULL || next_mapping->level >= attach);
+  if (next_mapping != NULL && next_mapping->level == attach
+      && next_mapping->base < (addr + (nr_bytes - 1))) {
+#if (WITH_DEVICES)
+    device_error(client, "map overlap when attaching %d:0x%lx (%ld)",
+                space, (long)addr, (long)nr_bytes);
+#else
+    engine_error(system, "map overlap when attaching %d:0x%lx (%ld)",
+                space, (long)addr, (long)nr_bytes);
+#endif
+  }
+
+  /* create/insert the new mapping */
+  *last_mapping = new_core_mapping(system,
+                                  attach,
+                                  space, addr, nr_bytes,
+                                  client, buffer, free_buffer);
+  (*last_mapping)->next = next_mapping;
+}
+
+
+INLINE_SIM_CORE\
+(void)
+core_attach(engine *system,
+           attach_type attach,
+           access_type access,
+           int space,
+           unsigned_word addr,
+           unsigned nr_bytes, /* host limited */
+           device *client,
+           void *optional_buffer)
+{
+  core *memory = &system->memory;
+  core_maps map;
+  void *buffer;
+  int buffer_freed;
+  if ((access & access_read_write_exec) == 0
+      || (access & ~access_read_write_exec) != 0) {
+#if (WITH_DEVICES)
+    device_error(client, "invalid access for core attach");
+#else
+    engine_error(system, "invalid access for core attach");
+#endif
+  }
+  /* verify the attach type */
+  if (attach == attach_raw_memory) {
+    if (optional_buffer == NULL) {
+      buffer = zalloc(nr_bytes);
+      buffer_freed = 0;
+    }
+    else {
+      buffer = optional_buffer;
+      buffer_freed = 1;
+    }
+  }
+  else if (attach >= attach_callback) {
+    buffer = NULL;
+    buffer_freed = 1;
+  }
+  else {
+#if (WITH_DEVICES)
+    device_error(client, "core_attach - conflicting buffer and attach arguments");
+#else
+    engine_error(system, "core_attach - conflicting buffer and attach arguments");
+#endif
+    buffer = NULL;
+    buffer_freed = 1;
+  }
+  /* attach the region to all applicable access maps */
+  for (map = 0; 
+       map < nr_core_maps;
+       map++) {
+    switch (map) {
+    case core_read_map:
+      if (access & access_read)
+       core_map_attach(system, &memory->map[map],
+                       attach,
+                       space, addr, nr_bytes,
+                       client, buffer, !buffer_freed);
+      buffer_freed ++;
+      break;
+    case core_write_map:
+      if (access & access_write)
+       core_map_attach(system, &memory->map[map],
+                       attach,
+                       space, addr, nr_bytes,
+                       client, buffer, !buffer_freed);
+      buffer_freed ++;
+      break;
+    case core_execute_map:
+      if (access & access_exec)
+       core_map_attach(system, &memory->map[map],
+                       attach,
+                       space, addr, nr_bytes,
+                       client, buffer, !buffer_freed);
+      buffer_freed ++;
+      break;
+    case nr_core_maps:
+      engine_error(system, "core_attach - internal error - bad switch");
+      break;
+    }
+  }
+}
+
+
+STATIC_INLINE_SIM_CORE\
+(core_mapping *)
+core_map_find_mapping(engine *system,
+                     core_maps map,
+                     unsigned_word addr,
+                     unsigned nr_bytes,
+                     int abort) /*either 0 or 1 - helps inline */
+{
+  core_mapping *mapping = system->memory.map[map].first;
+  ASSERT((addr & (nr_bytes - 1)) == 0); /* must be aligned */
+  ASSERT((addr + (nr_bytes - 1)) >= addr); /* must not wrap */
+  while (mapping != NULL) {
+    if (addr >= mapping->base
+       && (addr + (nr_bytes - 1)) <= mapping->bound)
+      return mapping;
+    mapping = mapping->next;
+  }
+  if (abort)
+    engine_error(system, "access to unmaped address 0x%x (%d bytes)\n",
+                addr, nr_bytes);
+  return NULL;
+}
+
+
+STATIC_INLINE_SIM_CORE\
+(void *)
+core_translate(core_mapping *mapping,
+              unsigned_word addr)
+{
+  return (void *)(((char *)mapping->buffer) + addr - mapping->base);
+}
+
+
+INLINE_SIM_CORE\
+(unsigned)
+core_map_read_buffer(engine *system,
+                    core_maps map,
+                    void *buffer,
+                    unsigned_word addr,
+                    unsigned len)
+{
+  unsigned count = 0;
+  while (count < len) {
+    unsigned_word raddr = addr + count;
+    core_mapping *mapping =
+      core_map_find_mapping(system, map,
+                           raddr, 1,
+                           0); /*dont-abort*/
+    if (mapping == NULL)
+      break;
+#if (WITH_DEVICES)
+    if (mapping->device != NULL) {
+      int nr_bytes = len - count;
+      if (raddr + nr_bytes - 1> mapping->bound)
+       nr_bytes = mapping->bound - raddr + 1;
+      if (device_io_read_buffer(mapping->device,
+                               (unsigned_1*)buffer + count,
+                               mapping->space,
+                               raddr,
+                               nr_bytes) != nr_bytes)
+       break;
+      count += nr_bytes;
+    }
+    else
+#endif
+      {
+       ((unsigned_1*)buffer)[count] =
+         *(unsigned_1*)core_translate(mapping, raddr);
+       count += 1;
+      }
+  }
+  return count;
+}
+
+
+INLINE_SIM_CORE\
+(unsigned)
+core_map_write_buffer(engine *system,
+                     core_maps map,
+                     const void *buffer,
+                     unsigned_word addr,
+                     unsigned len)
+{
+  unsigned count = 0;
+  while (count < len) {
+    unsigned_word raddr = addr + count;
+    core_mapping *mapping = core_map_find_mapping(system, map,
+                                                 raddr, 1,
+                                                 0); /*dont-abort*/
+    if (mapping == NULL)
+      break;
+#if (WITH_DEVICES)
+    if (WITH_CALLBACK_MEMORY
+       && mapping->device != NULL) {
+      int nr_bytes = len - count;
+      if (raddr + nr_bytes - 1 > mapping->bound)
+       nr_bytes = mapping->bound - raddr + 1;
+      if (device_io_write_buffer(mapping->device,
+                                (unsigned_1*)buffer + count,
+                                mapping->space,
+                                raddr,
+                                nr_bytes) != nr_bytes)
+       break;
+      count += nr_bytes;
+    }
+    else
+#endif
+      {
+       *(unsigned_1*)core_translate(mapping, raddr) =
+         ((unsigned_1*)buffer)[count];
+       count += 1;
+      }
+  }
+  return count;
+}
+
+
+/* define the read/write 1/2/4/8/word functions */
+
+#define N 1
+#include "sim-n-core.h"
+#undef N
+
+#define N 2
+#include "sim-n-core.h"
+#undef N
+
+#define N 4
+#include "sim-n-core.h"
+#undef N
+
+#define N 8
+#include "sim-n-core.h"
+#undef N
+
+#define N word
+#include "sim-n-core.h"
+#undef N
+
+#endif
diff --git a/sim/common/sim-endian-n.h b/sim/common/sim-endian-n.h
deleted file mode 100644 (file)
index 840b467..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/*  This file is part of the program psim.
-
-    Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-    */
-
-
-#ifndef N
-#error "N must be #defined"
-#endif
-
-/* NOTE: See end of file for #undef */
-#define unsigned_N XCONCAT2(unsigned_,N)
-#define endian_t2h_N XCONCAT2(endian_t2h_,N)
-#define endian_h2t_N XCONCAT2(endian_h2t_,N)
-#define _SWAP_N XCONCAT2(_SWAP_,N)
-#define swap_N XCONCAT2(swap_,N)
-#define endian_h2be_N XCONCAT2(endian_h2be_,N)
-#define endian_be2h_N XCONCAT2(endian_be2h_,N)
-#define endian_h2le_N XCONCAT2(endian_h2le_,N)
-#define endian_le2h_N XCONCAT2(endian_le2h_,N)
-#define offset_N XCONCAT2(offset_,N)
-
-
-INLINE_SIM_ENDIAN\
-(unsigned_N)
-endian_t2h_N(unsigned_N raw_in)
-{
-  if (CURRENT_TARGET_BYTE_ORDER == CURRENT_HOST_BYTE_ORDER) {
-    return raw_in;
-  }
-  else {
-    _SWAP_N(return,raw_in);
-  }
-}
-
-
-INLINE_SIM_ENDIAN\
-(unsigned_N)
-endian_h2t_N(unsigned_N raw_in)
-{
-  if (CURRENT_TARGET_BYTE_ORDER == CURRENT_HOST_BYTE_ORDER) {
-    return raw_in;
-  }
-  else {
-    _SWAP_N(return,raw_in);
-  }
-}
-
-
-INLINE_SIM_ENDIAN\
-(unsigned_N)
-swap_N(unsigned_N raw_in)
-{
-  _SWAP_N(return,raw_in);
-}
-
-
-
-INLINE_SIM_ENDIAN\
-(unsigned_N)
-endian_h2be_N(unsigned_N raw_in)
-{
-  if (CURRENT_HOST_BYTE_ORDER == BIG_ENDIAN) {
-    return raw_in;
-  }
-  else {
-    _SWAP_N(return,raw_in);
-  }
-}
-
-
-INLINE_SIM_ENDIAN\
-(unsigned_N)
-endian_be2h_N(unsigned_N raw_in)
-{
-  if (CURRENT_HOST_BYTE_ORDER == BIG_ENDIAN) {
-    return raw_in;
-  }
-  else {
-    _SWAP_N(return,raw_in);
-  }
-}
-
-
-INLINE_SIM_ENDIAN\
-(unsigned_N)
-endian_h2le_N(unsigned_N raw_in)
-{
-  if (CURRENT_HOST_BYTE_ORDER == LITTLE_ENDIAN) {
-    return raw_in;
-  }
-  else {
-    _SWAP_N(return,raw_in);
-  }
-}
-
-
-INLINE_SIM_ENDIAN\
-(unsigned_N)
-endian_le2h_N(unsigned_N raw_in)
-{
-  if (CURRENT_HOST_BYTE_ORDER == LITTLE_ENDIAN) {
-    return raw_in;
-  }
-  else {
-    _SWAP_N(return,raw_in);
-  }
-}
-
-
-
-INLINE_SIM_ENDIAN\
-(void*)
-offset_N(unsigned_N *x,
-        int sizeof_word,
-        int word)
-{
-  char *in = (char*)x;
-  char *out;
-  int offset = sizeof_word * word;
-  ASSERT(offset + sizeof_word <= sizeof(unsigned_N));
-  ASSERT(word < (sizeof_word / sizeof(unsigned_N)));
-  ASSERT((sizeof(unsigned_N) % sizeof_word) == 0);
-  if (WITH_HOST_BYTE_ORDER == LITTLE_ENDIAN) {
-    out = in + sizeof(unsigned_N) - offset;
-  }
-  else {
-    out = in + offset;
-  }
-  return out;
-}
-
-
-/* NOTE: See start of file for #define */
-#undef unsigned_N
-#undef endian_t2h_N
-#undef endian_h2t_N
-#undef _SWAP_N
-#undef swap_N
-#undef endian_h2be_N
-#undef endian_be2h_N
-#undef endian_h2le_N
-#undef endian_le2h_N
-#undef offset_N
diff --git a/sim/common/sim-endian.c b/sim/common/sim-endian.c
new file mode 100644 (file)
index 0000000..3a32986
--- /dev/null
@@ -0,0 +1,74 @@
+/*  This file is part of the program psim.
+
+    Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+    */
+
+
+#ifndef _SIM_ENDIAN_C_
+#define _SIM_ENDIAN_C_
+
+#include "sim-basics.h"
+
+
+#if !defined(_SWAP_1)
+#define _SWAP_1(SET,RAW) SET (RAW)
+#endif
+
+#if !defined(_SWAP_2) && (WITH_HOST_BYTE_ORDER == LITTLE_ENDIAN) && defined(htons)
+#define _SWAP_2(SET,RAW) SET htons (RAW)
+#endif
+
+#ifndef        _SWAP_2
+#define _SWAP_2(SET,RAW) SET (((RAW) >> 8) | ((RAW) << 8))
+#endif
+
+#if !defined(_SWAP_4) && (WITH_HOST_BYTE_ORDER == LITTLE_ENDIAN) && defined(htonl)
+#define _SWAP_4(SET,RAW) SET htonl (RAW)
+#endif
+
+#ifndef _SWAP_4
+#define        _SWAP_4(SET,RAW) SET (((RAW) << 24) | (((RAW) & 0xff00) << 8) | (((RAW) & 0xff0000) >> 8) | ((RAW) >> 24))
+#endif
+
+#ifndef _SWAP_8
+#define _SWAP_8(SET,RAW) \
+  union { unsigned_8 dword; unsigned_4 words[2]; } in, out; \
+  in.dword = RAW; \
+  _SWAP_4 (out.words[0] =, in.words[1]); \
+  _SWAP_4 (out.words[1] =, in.words[0]); \
+  SET out.dword;
+#endif
+
+
+#define N 1
+#include "sim-n-endian.h"
+#undef N
+
+#define N 2
+#include "sim-n-endian.h"
+#undef N
+
+#define N 4
+#include "sim-n-endian.h"
+#undef N
+
+#define N 8
+#include "sim-n-endian.h"
+#undef N
+
+#endif /* _SIM_ENDIAN_C_ */
diff --git a/sim/common/sim-n-bits.h b/sim/common/sim-n-bits.h
new file mode 100644 (file)
index 0000000..0359c03
--- /dev/null
@@ -0,0 +1,145 @@
+/*  This file is part of the program psim.
+
+    Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au>
+    Copyright (C) 1997, Free Software Foundation, Inc.
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+    */
+
+
+#ifndef N
+#error "N must be #defined"
+#endif
+
+/* NOTE: See end of file for #undef */
+#define unsignedN XCONCAT2(unsigned,N)
+#define signedN XCONCAT2(signed,N)
+#define MASKEDn XCONCAT2(MASKED,N)
+#define MASKn XCONCAT2(MASK,N)
+#define LSMASKEDn XCONCAT2(LSMASKED,N)
+#define EXTRACTEDn XCONCAT2(EXTRACTED,N)
+#define INSERTEDn XCONCAT2(INSERTED,N)
+#define ROTn XCONCAT2(ROT,N)
+#define ROTLn XCONCAT2(ROTL,N)
+#define ROTRn XCONCAT2(ROTR,N)
+#define SEXTn XCONCAT2(SEXT,N)
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+MASKEDn(unsignedN word,
+       unsigned start,
+       unsigned stop)
+{
+  return (word & MASKn(start, stop));
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+LSMASKEDn(unsignedN word,
+         unsigned nr_bits)
+{
+  return (word & MASKn(N - nr_bits, N - 1));
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+EXTRACTEDn(unsignedN val,
+          unsigned start,
+          unsigned stop)
+{
+  return LSMASKEDn((((unsignedN)(val)) >> (N - stop - 1)),
+                  stop - start + 1);
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+INSERTEDn(unsignedN val,
+         unsigned start,
+         unsigned stop)
+{
+  return (((unsignedN)(val)
+          << _MAKE_SHIFT(N, stop))
+         & MASKn(start, stop));
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+ROTn(unsignedN val,
+     int shift)
+{
+  unsignedN result;
+  if (shift > 0)
+    return ROTRn(val, shift);
+  else if (shift < 0)
+    return ROTLn(val, -shift);
+  else
+    return val;
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+ROTLn(unsignedN val,
+      unsigned shift)
+{
+  unsignedN result;
+  ASSERT(shift <= N);
+  result = (((val) << (shift)) | ((val) >> ((N)-(shift))));
+  return result;
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+ROTRn(unsignedN val,
+      unsigned shift)
+{
+  unsignedN result;
+  ASSERT(shift <= N);
+  result = (((val) >> (shift)) | ((val) << ((N)-(shift))));
+  return result;
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+SEXTn(signedN val,
+            unsigned sign_bit)
+{
+  /* make the sign-bit most significant and then smear it back into
+     position */
+  ASSERT(sign_bit < N);
+  return (val << sign_bit) >> sign_bit;
+}
+
+
+/* NOTE: See start of file for #define */
+#undef SEXTn
+#undef ROTLn
+#undef ROTRn
+#undef ROTn
+#undef INSERTEDn
+#undef EXTRACTEDn
+#undef LSMASKEDn
+#undef MASKn
+#undef MASKEDn
+#undef signedN
+#undef unsignedN
diff --git a/sim/common/sim-n-core.h b/sim/common/sim-n-core.h
new file mode 100644 (file)
index 0000000..1bcb722
--- /dev/null
@@ -0,0 +1,95 @@
+/*  This file is part of the program psim.
+
+    Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+    */
+
+
+#ifndef N
+#error "N must be #defined"
+#endif
+
+/* NOTE: see end of file for #undef of these macros */
+#define unsigned_N XCONCAT2(unsigned_,N)
+#define T2H_N XCONCAT2(T2H_,N)
+#define H2T_N XCONCAT2(H2T_,N)
+
+#define core_map_read_N XCONCAT2(core_map_read_,N)
+#define core_map_write_N XCONCAT2(core_map_write_,N)
+
+
+INLINE_SIM_CORE(unsigned_N)
+core_map_read_N(engine *system,
+               core_maps map,
+               unsigned_word addr)
+{
+  core_mapping *mapping = core_map_find_mapping(system, map,
+                                               addr,
+                                               sizeof(unsigned_N),
+                                               1); /*abort*/
+#if (WITH_DEVICES)
+  if (WITH_CALLBACK_MEMORY && mapping->device != NULL) {
+    unsigned_N data;
+    if (device_io_read_buffer(mapping->device,
+                             &data,
+                             mapping->space,
+                             addr,
+                             sizeof(unsigned_N)) != sizeof(unsigned_N))
+      device_error(mapping->device, "internal error - core_read_N() - io_read_buffer should not fail");
+    return T2H_N(data);
+  }
+  else
+#endif
+    return T2H_N(*(unsigned_N*)core_translate(mapping, addr));
+}
+
+
+
+INLINE_SIM_CORE(void)
+core_map_write_N(engine *system,
+                core_maps map,
+                unsigned_word addr,
+                unsigned_N val)
+{
+  core_mapping *mapping = core_map_find_mapping(system, map,
+                                               addr,
+                                               sizeof(unsigned_N),
+                                               1); /*abort*/
+#if (WITH_DEVICES)
+  if (WITH_CALLBACK_MEMORY && mapping->device != NULL) {
+    unsigned_N data = H2T_N(val);
+    if (device_io_write_buffer(mapping->device,
+                              &data,
+                              mapping->space,
+                              addr,
+                              sizeof(unsigned_N), /* nr_bytes */
+                              processor,
+                              cia) != sizeof(unsigned_N))
+      device_error(mapping->device, "internal error - core_write_N() - io_write_buffer should not fail");
+  }
+  else
+#endif
+    *(unsigned_N*)core_translate(mapping, addr) = H2T_N(val);
+}
+
+
+/* NOTE: see start of file for #define of these macros */
+#undef unsigned_N
+#undef T2H_N
+#undef H2T_N
+#undef core_map_read_N
+#undef core_map_write_N
diff --git a/sim/common/sim-n-endian.h b/sim/common/sim-n-endian.h
new file mode 100644 (file)
index 0000000..840b467
--- /dev/null
@@ -0,0 +1,159 @@
+/*  This file is part of the program psim.
+
+    Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+    */
+
+
+#ifndef N
+#error "N must be #defined"
+#endif
+
+/* NOTE: See end of file for #undef */
+#define unsigned_N XCONCAT2(unsigned_,N)
+#define endian_t2h_N XCONCAT2(endian_t2h_,N)
+#define endian_h2t_N XCONCAT2(endian_h2t_,N)
+#define _SWAP_N XCONCAT2(_SWAP_,N)
+#define swap_N XCONCAT2(swap_,N)
+#define endian_h2be_N XCONCAT2(endian_h2be_,N)
+#define endian_be2h_N XCONCAT2(endian_be2h_,N)
+#define endian_h2le_N XCONCAT2(endian_h2le_,N)
+#define endian_le2h_N XCONCAT2(endian_le2h_,N)
+#define offset_N XCONCAT2(offset_,N)
+
+
+INLINE_SIM_ENDIAN\
+(unsigned_N)
+endian_t2h_N(unsigned_N raw_in)
+{
+  if (CURRENT_TARGET_BYTE_ORDER == CURRENT_HOST_BYTE_ORDER) {
+    return raw_in;
+  }
+  else {
+    _SWAP_N(return,raw_in);
+  }
+}
+
+
+INLINE_SIM_ENDIAN\
+(unsigned_N)
+endian_h2t_N(unsigned_N raw_in)
+{
+  if (CURRENT_TARGET_BYTE_ORDER == CURRENT_HOST_BYTE_ORDER) {
+    return raw_in;
+  }
+  else {
+    _SWAP_N(return,raw_in);
+  }
+}
+
+
+INLINE_SIM_ENDIAN\
+(unsigned_N)
+swap_N(unsigned_N raw_in)
+{
+  _SWAP_N(return,raw_in);
+}
+
+
+
+INLINE_SIM_ENDIAN\
+(unsigned_N)
+endian_h2be_N(unsigned_N raw_in)
+{
+  if (CURRENT_HOST_BYTE_ORDER == BIG_ENDIAN) {
+    return raw_in;
+  }
+  else {
+    _SWAP_N(return,raw_in);
+  }
+}
+
+
+INLINE_SIM_ENDIAN\
+(unsigned_N)
+endian_be2h_N(unsigned_N raw_in)
+{
+  if (CURRENT_HOST_BYTE_ORDER == BIG_ENDIAN) {
+    return raw_in;
+  }
+  else {
+    _SWAP_N(return,raw_in);
+  }
+}
+
+
+INLINE_SIM_ENDIAN\
+(unsigned_N)
+endian_h2le_N(unsigned_N raw_in)
+{
+  if (CURRENT_HOST_BYTE_ORDER == LITTLE_ENDIAN) {
+    return raw_in;
+  }
+  else {
+    _SWAP_N(return,raw_in);
+  }
+}
+
+
+INLINE_SIM_ENDIAN\
+(unsigned_N)
+endian_le2h_N(unsigned_N raw_in)
+{
+  if (CURRENT_HOST_BYTE_ORDER == LITTLE_ENDIAN) {
+    return raw_in;
+  }
+  else {
+    _SWAP_N(return,raw_in);
+  }
+}
+
+
+
+INLINE_SIM_ENDIAN\
+(void*)
+offset_N(unsigned_N *x,
+        int sizeof_word,
+        int word)
+{
+  char *in = (char*)x;
+  char *out;
+  int offset = sizeof_word * word;
+  ASSERT(offset + sizeof_word <= sizeof(unsigned_N));
+  ASSERT(word < (sizeof_word / sizeof(unsigned_N)));
+  ASSERT((sizeof(unsigned_N) % sizeof_word) == 0);
+  if (WITH_HOST_BYTE_ORDER == LITTLE_ENDIAN) {
+    out = in + sizeof(unsigned_N) - offset;
+  }
+  else {
+    out = in + offset;
+  }
+  return out;
+}
+
+
+/* NOTE: See start of file for #define */
+#undef unsigned_N
+#undef endian_t2h_N
+#undef endian_h2t_N
+#undef _SWAP_N
+#undef swap_N
+#undef endian_h2be_N
+#undef endian_be2h_N
+#undef endian_h2le_N
+#undef endian_le2h_N
+#undef offset_N