* configure.in: Add calls to AC_CONFIG_HEADER, AC_CHECK_HEADERS,
AC_CHECK_LIB, and AC_CHECK_FUNCS. Change AC_OUTPUT to set stamp-h. * configure: Rebuild. * config.in: New file, generated by autoheader. * interp.c: Include "config.h". Include <stdlib.h>, <string.h>, and <strings.h> if they exist. Replace #ifdef sun with #ifdef HAVE_ANINT and HAVE_AINT, as appropriate. * Makefile.in (run): Use @LIBS@ rather than -lm. (interp.o): Depend upon config.h. (Makefile): Just rebuild Makefile. (clean): Remove stamp-h. (mostlyclean): Make the same as clean, not as distclean. (config.h, stamp-h): New targets.
This commit is contained in:
parent
3b426f5a60
commit
4fa134beac
|
@ -1,3 +1,25 @@
|
||||||
|
Mon Jun 3 11:55:03 1996 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
|
* configure.in: Add calls to AC_CONFIG_HEADER, AC_CHECK_HEADERS,
|
||||||
|
AC_CHECK_LIB, and AC_CHECK_FUNCS. Change AC_OUTPUT to set
|
||||||
|
stamp-h.
|
||||||
|
* configure: Rebuild.
|
||||||
|
* config.in: New file, generated by autoheader.
|
||||||
|
* interp.c: Include "config.h". Include <stdlib.h>, <string.h>,
|
||||||
|
and <strings.h> if they exist. Replace #ifdef sun with #ifdef
|
||||||
|
HAVE_ANINT and HAVE_AINT, as appropriate.
|
||||||
|
* Makefile.in (run): Use @LIBS@ rather than -lm.
|
||||||
|
(interp.o): Depend upon config.h.
|
||||||
|
(Makefile): Just rebuild Makefile.
|
||||||
|
(clean): Remove stamp-h.
|
||||||
|
(mostlyclean): Make the same as clean, not as distclean.
|
||||||
|
(config.h, stamp-h): New targets.
|
||||||
|
|
||||||
|
Fri May 10 00:41:17 1996 James G. Smith <jsmith@cygnus.co.uk>
|
||||||
|
|
||||||
|
* interp.c (ColdReset): Fix boolean test. Make all simulator
|
||||||
|
globals static.
|
||||||
|
|
||||||
Wed May 8 15:12:58 1996 James G. Smith <jsmith@cygnus.co.uk>
|
Wed May 8 15:12:58 1996 James G. Smith <jsmith@cygnus.co.uk>
|
||||||
|
|
||||||
* interp.c (xfer_direct_word, xfer_direct_long,
|
* interp.c (xfer_direct_word, xfer_direct_long,
|
||||||
|
|
|
@ -0,0 +1,136 @@
|
||||||
|
# Makefile template for Configure for the MIPS simulator.
|
||||||
|
# Written by Cygnus Support.
|
||||||
|
|
||||||
|
VPATH = @srcdir@:@srcdir@/../common:@srcdir@/../../gdb/
|
||||||
|
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 = $(exec_prefix)/bin
|
||||||
|
|
||||||
|
libdir = $(exec_prefix)/lib
|
||||||
|
tooldir = $(libdir)/$(target_alias)
|
||||||
|
|
||||||
|
datadir = $(prefix)/lib
|
||||||
|
mandir = $(prefix)/man
|
||||||
|
man1dir = $(mandir)/man1
|
||||||
|
man2dir = $(mandir)/man2
|
||||||
|
man3dir = $(mandir)/man3
|
||||||
|
man4dir = $(mandir)/man4
|
||||||
|
man5dir = $(mandir)/man5
|
||||||
|
man6dir = $(mandir)/man6
|
||||||
|
man7dir = $(mandir)/man7
|
||||||
|
man8dir = $(mandir)/man8
|
||||||
|
man9dir = $(mandir)/man9
|
||||||
|
infodir = $(prefix)/info
|
||||||
|
includedir = $(prefix)/include
|
||||||
|
docdir = $(datadir)/doc
|
||||||
|
|
||||||
|
SHELL = /bin/sh
|
||||||
|
|
||||||
|
INSTALL = $(srcroot)/install.sh -c
|
||||||
|
INSTALL_PROGRAM = $(INSTALL)
|
||||||
|
INSTALL_DATA = $(INSTALL)
|
||||||
|
INSTALL_XFORM = $(INSTALL) -t='$(program_transform_name)'
|
||||||
|
INSTALL_XFORM1= $(INSTALL_XFORM) -b=.1
|
||||||
|
|
||||||
|
AR = @AR@
|
||||||
|
AR_FLAGS = rc
|
||||||
|
CC = @CC@
|
||||||
|
CFLAGS = @CFLAGS@
|
||||||
|
MAKEINFO = makeinfo
|
||||||
|
RANLIB = @RANLIB@
|
||||||
|
CC_FOR_BUILD = @CC_FOR_BUILD@
|
||||||
|
|
||||||
|
HDEFINES = @HDEFINES@
|
||||||
|
TDEFINES =
|
||||||
|
|
||||||
|
.NOEXPORT:
|
||||||
|
MAKEOVERRIDES=
|
||||||
|
|
||||||
|
X=xstuff.o
|
||||||
|
XL=-lX11
|
||||||
|
X=
|
||||||
|
XL=
|
||||||
|
|
||||||
|
INCDIR = $(srcdir)/../../include
|
||||||
|
CSEARCH = -I. -I$(srcdir) -I../../include \
|
||||||
|
-I../../bfd -I$(INCDIR) -I$(srcdir)/../../bfd -I$(srcdir)/../../gdb -I$(srcdir)/../../newlib/libc/sys/idt
|
||||||
|
DEP = mkdep
|
||||||
|
|
||||||
|
all: run libsim.a
|
||||||
|
|
||||||
|
run: interp.o $(X) callback.o run.o
|
||||||
|
$(CC) $(CFLAGS) -o run $(X) interp.o callback.o run.o ../../bfd/libbfd.a ../../libiberty/libiberty.a $(XL) @LIBS@
|
||||||
|
|
||||||
|
interp.o:interp.c engine.c support.h config.h
|
||||||
|
run.o:run.c
|
||||||
|
|
||||||
|
libsim.a:interp.o
|
||||||
|
$(AR) $(ARFLAGS) $@ interp.o
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
engine.c:gencode
|
||||||
|
./gencode -mips0 --warnings > $@
|
||||||
|
|
||||||
|
gencode:${srcdir}/gencode.c
|
||||||
|
$(CC_FOR_BUILD) -I${srcroot}/include -o $@ $< -liberty
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
$(CC) -c -DINSIDE_SIMULATOR $(CFLAGS) $(HDEFINES) $(TDEFINES) $(CSEARCH) $(CSWITCHES) $<
|
||||||
|
|
||||||
|
check:
|
||||||
|
|
||||||
|
info:
|
||||||
|
clean-info:
|
||||||
|
install-info:
|
||||||
|
|
||||||
|
tags etags: TAGS
|
||||||
|
|
||||||
|
TAGS: force
|
||||||
|
etags $(INCDIR)/*.h $(srcdir)/*.h $(srcdir)/*.c
|
||||||
|
|
||||||
|
clean mostlyclean:
|
||||||
|
rm -f *.[oa] *~ core *.E *.p *.ip aout-params.h gen-aout stamp-h
|
||||||
|
rm -f run libsim.a
|
||||||
|
|
||||||
|
distclean maintainer-clean realclean: clean
|
||||||
|
rm -f TAGS
|
||||||
|
rm -f Makefile config.cache config.log config.status
|
||||||
|
|
||||||
|
# Dummy target to force execution of dependent targets.
|
||||||
|
#
|
||||||
|
force:
|
||||||
|
|
||||||
|
# Copy the files into directories where they will be run.
|
||||||
|
install:
|
||||||
|
$(INSTALL_XFORM) run $(bindir)/run
|
||||||
|
|
||||||
|
install-man: run.1
|
||||||
|
$(INSTALL_XFORM1) $(srcdir)/run.1 $(man1dir)/run.1
|
||||||
|
|
||||||
|
Makefile: Makefile.in config.status
|
||||||
|
CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status
|
||||||
|
|
||||||
|
config.h: stamp-h ; @true
|
||||||
|
stamp-h: config.in config.status
|
||||||
|
CONFIG_FILES= CONFIG_HEADERS=config.h:config.in $(SHELL) ./config.status
|
||||||
|
|
||||||
|
config.status: configure
|
||||||
|
$(SHELL) ./config.status --recheck
|
||||||
|
|
||||||
|
dep: $(CFILES)
|
||||||
|
mkdep $(CFLAGS) $?
|
||||||
|
|
||||||
|
# What appears below is generated by a hacked mkdep using gcc -MM.
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- mkdep uses it.
|
||||||
|
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
|
||||||
|
|
||||||
|
|
||||||
|
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
|
File diff suppressed because it is too large
Load Diff
|
@ -2,6 +2,8 @@ dnl Process this file with autoconf to produce a configure script.
|
||||||
AC_PREREQ(2.3)dnl
|
AC_PREREQ(2.3)dnl
|
||||||
AC_INIT(Makefile.in)
|
AC_INIT(Makefile.in)
|
||||||
|
|
||||||
|
AC_CONFIG_HEADER(config.h:config.in)
|
||||||
|
|
||||||
AC_CONFIG_AUX_DIR(`cd $srcdir;pwd`/../..)
|
AC_CONFIG_AUX_DIR(`cd $srcdir;pwd`/../..)
|
||||||
AC_CANONICAL_SYSTEM
|
AC_CANONICAL_SYSTEM
|
||||||
AC_ARG_PROGRAM
|
AC_ARG_PROGRAM
|
||||||
|
@ -24,4 +26,9 @@ else
|
||||||
fi
|
fi
|
||||||
AC_SUBST(CC_FOR_BUILD)
|
AC_SUBST(CC_FOR_BUILD)
|
||||||
|
|
||||||
AC_OUTPUT(Makefile)
|
AC_CHECK_HEADERS(string.h strings.h stdlib.h)
|
||||||
|
AC_CHECK_LIB(m, fabs)
|
||||||
|
AC_CHECK_FUNCS(aint anint)
|
||||||
|
|
||||||
|
AC_OUTPUT(Makefile,
|
||||||
|
[case x$CONFIG_HEADERS in xconfig.h:config.in) echo > stamp-h ;; esac])
|
||||||
|
|
|
@ -40,6 +40,8 @@ code on the hardware.
|
||||||
#define PROFILE (1)
|
#define PROFILE (1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <ansidecl.h>
|
#include <ansidecl.h>
|
||||||
|
@ -47,6 +49,16 @@ code on the hardware.
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#ifdef HAVE_STDLIB_H
|
||||||
|
#include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_STRING_H
|
||||||
|
#include <string.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_STRINGS_H
|
||||||
|
#include <strings.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "getopt.h"
|
#include "getopt.h"
|
||||||
#include "libiberty.h"
|
#include "libiberty.h"
|
||||||
|
@ -177,8 +189,8 @@ static host_callback *callback = NULL; /* handle onto the current callback struc
|
||||||
/* To keep this default simulator simple, and fast, we use a direct
|
/* To keep this default simulator simple, and fast, we use a direct
|
||||||
vector of registers. The internal simulator engine then uses
|
vector of registers. The internal simulator engine then uses
|
||||||
manifests to access the correct slot. */
|
manifests to access the correct slot. */
|
||||||
ut_reg registers[LAST_EMBED_REGNUM + 1];
|
static ut_reg registers[LAST_EMBED_REGNUM + 1];
|
||||||
int register_widths[LAST_EMBED_REGNUM + 1];
|
static int register_widths[LAST_EMBED_REGNUM + 1];
|
||||||
|
|
||||||
#define GPR (®isters[0])
|
#define GPR (®isters[0])
|
||||||
#if defined(HASFPU)
|
#if defined(HASFPU)
|
||||||
|
@ -208,19 +220,19 @@ int register_widths[LAST_EMBED_REGNUM + 1];
|
||||||
#define SP (registers[29])
|
#define SP (registers[29])
|
||||||
#define RA (registers[31])
|
#define RA (registers[31])
|
||||||
|
|
||||||
ut_reg EPC = 0; /* Exception PC */
|
static ut_reg EPC = 0; /* Exception PC */
|
||||||
|
|
||||||
#if defined(HASFPU)
|
#if defined(HASFPU)
|
||||||
/* Keep the current format state for each register: */
|
/* Keep the current format state for each register: */
|
||||||
FP_formats fpr_state[32];
|
static FP_formats fpr_state[32];
|
||||||
#endif /* HASFPU */
|
#endif /* HASFPU */
|
||||||
|
|
||||||
/* VR4300 CP0 configuration register: */
|
/* VR4300 CP0 configuration register: */
|
||||||
unsigned int CONFIG = 0;
|
static unsigned int CONFIG = 0;
|
||||||
|
|
||||||
/* The following are internal simulator state variables: */
|
/* The following are internal simulator state variables: */
|
||||||
ut_reg IPC = 0; /* internal Instruction PC */
|
static ut_reg IPC = 0; /* internal Instruction PC */
|
||||||
ut_reg DSPC = 0; /* delay-slot PC */
|
static ut_reg DSPC = 0; /* delay-slot PC */
|
||||||
|
|
||||||
|
|
||||||
/* TODO : these should be the bitmasks for these bits within the
|
/* TODO : these should be the bitmasks for these bits within the
|
||||||
|
@ -301,12 +313,12 @@ ut_reg DSPC = 0; /* delay-slot PC */
|
||||||
the register update to be delayed for a single instruction
|
the register update to be delayed for a single instruction
|
||||||
cycle. */
|
cycle. */
|
||||||
#define PSLOTS (5) /* Maximum number of instruction cycles */
|
#define PSLOTS (5) /* Maximum number of instruction cycles */
|
||||||
int pending_in;
|
static int pending_in;
|
||||||
int pending_out;
|
static int pending_out;
|
||||||
int pending_total;
|
static int pending_total;
|
||||||
int pending_slot_count[PSLOTS];
|
static int pending_slot_count[PSLOTS];
|
||||||
int pending_slot_reg[PSLOTS];
|
static int pending_slot_reg[PSLOTS];
|
||||||
ut_reg pending_slot_value[PSLOTS];
|
static ut_reg pending_slot_value[PSLOTS];
|
||||||
|
|
||||||
/* The following are not used for MIPS IV onwards: */
|
/* The following are not used for MIPS IV onwards: */
|
||||||
#define PENDING_FILL(r,v) {\
|
#define PENDING_FILL(r,v) {\
|
||||||
|
@ -324,7 +336,7 @@ printf("DBG: FILL reg %d value = 0x%08X%08X\n",(r),WORD64HI(v),WORD64LO(v
|
||||||
printf("DBG: FILL AFTER pending_in = %d, pending_out = %d, pending_total = %d\n",pending_in,pending_out,pending_total);\
|
printf("DBG: FILL AFTER pending_in = %d, pending_out = %d, pending_total = %d\n",pending_in,pending_out,pending_total);\
|
||||||
}
|
}
|
||||||
|
|
||||||
int LLBIT = 0;
|
static int LLBIT = 0;
|
||||||
/* LLBIT = Load-Linked bit. A bit of "virtual" state used by atomic
|
/* LLBIT = Load-Linked bit. A bit of "virtual" state used by atomic
|
||||||
read-write instructions. It is set when a linked load occurs. It is
|
read-write instructions. It is set when a linked load occurs. It is
|
||||||
tested and cleared by the conditional store. It is cleared (during
|
tested and cleared by the conditional store. It is cleared (during
|
||||||
|
@ -332,8 +344,8 @@ int LLBIT = 0;
|
||||||
be atomic. In particular, it is cleared by exception return
|
be atomic. In particular, it is cleared by exception return
|
||||||
instructions. */
|
instructions. */
|
||||||
|
|
||||||
int HIACCESS = 0;
|
static int HIACCESS = 0;
|
||||||
int LOACCESS = 0;
|
static int LOACCESS = 0;
|
||||||
/* The HIACCESS and LOACCESS counts are used to ensure that
|
/* The HIACCESS and LOACCESS counts are used to ensure that
|
||||||
corruptions caused by using the HI or LO register to close to a
|
corruptions caused by using the HI or LO register to close to a
|
||||||
following operation are spotted. */
|
following operation are spotted. */
|
||||||
|
@ -384,9 +396,9 @@ int LOACCESS = 0;
|
||||||
/* At the moment these values will be the same, since we do not have
|
/* At the moment these values will be the same, since we do not have
|
||||||
access to the pipeline cycle count information from the simulator
|
access to the pipeline cycle count information from the simulator
|
||||||
engine. */
|
engine. */
|
||||||
unsigned int instruction_fetches = 0;
|
static unsigned int instruction_fetches = 0;
|
||||||
unsigned int instruction_fetch_overflow = 0;
|
static unsigned int instruction_fetch_overflow = 0;
|
||||||
unsigned int pipeline_ticks = 0;
|
static unsigned int pipeline_ticks = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Flags in the "state" variable: */
|
/* Flags in the "state" variable: */
|
||||||
|
@ -408,8 +420,8 @@ unsigned int pipeline_ticks = 0;
|
||||||
#define simEXCEPTION (1 << 26) /* 0 = no exception; 1 = exception has occurred */
|
#define simEXCEPTION (1 << 26) /* 0 = no exception; 1 = exception has occurred */
|
||||||
#define simEXIT (1 << 27) /* 0 = do nothing; 1 = run-time exit() processing */
|
#define simEXIT (1 << 27) /* 0 = do nothing; 1 = run-time exit() processing */
|
||||||
|
|
||||||
unsigned int state = 0;
|
static unsigned int state = 0;
|
||||||
unsigned int rcexit = 0; /* _exit() reason code holder */
|
static unsigned int rcexit = 0; /* _exit() reason code holder */
|
||||||
|
|
||||||
#define DELAYSLOT() {\
|
#define DELAYSLOT() {\
|
||||||
if (state & simDELAYSLOT) callback->printf_filtered(callback,"SIM Warning: Delay slot already activated (branch in delay slot?)\n");\
|
if (state & simDELAYSLOT) callback->printf_filtered(callback,"SIM Warning: Delay slot already activated (branch in delay slot?)\n");\
|
||||||
|
@ -427,27 +439,27 @@ unsigned int rcexit = 0; /* _exit() reason code holder */
|
||||||
#define K1SIZE (0x20000000)
|
#define K1SIZE (0x20000000)
|
||||||
|
|
||||||
/* Very simple memory model to start with: */
|
/* Very simple memory model to start with: */
|
||||||
unsigned char *membank = NULL;
|
static unsigned char *membank = NULL;
|
||||||
ut_reg membank_base = K1BASE;
|
static ut_reg membank_base = K1BASE;
|
||||||
unsigned membank_size = (1 << 20); /* (16 << 20); */ /* power-of-2 */
|
static unsigned membank_size = (1 << 20); /* (16 << 20); */ /* power-of-2 */
|
||||||
|
|
||||||
/* Simple run-time monitor support */
|
/* Simple run-time monitor support */
|
||||||
unsigned char *monitor = NULL;
|
static unsigned char *monitor = NULL;
|
||||||
ut_reg monitor_base = 0xBFC00000;
|
static ut_reg monitor_base = 0xBFC00000;
|
||||||
unsigned monitor_size = (1 << 11); /* power-of-2 */
|
static unsigned monitor_size = (1 << 11); /* power-of-2 */
|
||||||
|
|
||||||
#if defined(TRACE)
|
#if defined(TRACE)
|
||||||
char *tracefile = "trace.din"; /* default filename for trace log */
|
static char *tracefile = "trace.din"; /* default filename for trace log */
|
||||||
FILE *tracefh = NULL;
|
static FILE *tracefh = NULL;
|
||||||
#endif /* TRACE */
|
#endif /* TRACE */
|
||||||
|
|
||||||
#if defined(PROFILE)
|
#if defined(PROFILE)
|
||||||
unsigned profile_frequency = 256;
|
static unsigned profile_frequency = 256;
|
||||||
unsigned profile_nsamples = (128 << 10);
|
static unsigned profile_nsamples = (128 << 10);
|
||||||
unsigned short *profile_hist = NULL;
|
static unsigned short *profile_hist = NULL;
|
||||||
ut_reg profile_minpc;
|
static ut_reg profile_minpc;
|
||||||
ut_reg profile_maxpc;
|
static ut_reg profile_maxpc;
|
||||||
int profile_shift = 0; /* address shift amount */
|
static int profile_shift = 0; /* address shift amount */
|
||||||
#endif /* PROFILE */
|
#endif /* PROFILE */
|
||||||
|
|
||||||
/* The following are used to provide shortcuts to the required version
|
/* The following are used to provide shortcuts to the required version
|
||||||
|
@ -458,10 +470,10 @@ typedef unsigned int (*fnptr_swap_word) PARAMS((unsigned int data));
|
||||||
typedef uword64 (*fnptr_read_long) PARAMS((unsigned char *memory));
|
typedef uword64 (*fnptr_read_long) PARAMS((unsigned char *memory));
|
||||||
typedef uword64 (*fnptr_swap_long) PARAMS((uword64 data));
|
typedef uword64 (*fnptr_swap_long) PARAMS((uword64 data));
|
||||||
|
|
||||||
fnptr_read_word host_read_word;
|
static fnptr_read_word host_read_word;
|
||||||
fnptr_read_long host_read_long;
|
static fnptr_read_long host_read_long;
|
||||||
fnptr_swap_word host_swap_word;
|
static fnptr_swap_word host_swap_word;
|
||||||
fnptr_swap_long host_swap_long;
|
static fnptr_swap_long host_swap_long;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/*-- GDB simulator interface ------------------------------------------------*/
|
/*-- GDB simulator interface ------------------------------------------------*/
|
||||||
|
@ -3185,7 +3197,7 @@ Convert(rm,op,from,to)
|
||||||
/* Round result to nearest representable value. When two
|
/* Round result to nearest representable value. When two
|
||||||
representable values are equally near, round to the value
|
representable values are equally near, round to the value
|
||||||
that has a least significant bit of zero (i.e. is even). */
|
that has a least significant bit of zero (i.e. is even). */
|
||||||
#if defined(sun)
|
#ifdef HAVE_ANINT
|
||||||
tmp = (float)anint((double)tmp);
|
tmp = (float)anint((double)tmp);
|
||||||
#else
|
#else
|
||||||
/* TODO: Provide round-to-nearest */
|
/* TODO: Provide round-to-nearest */
|
||||||
|
@ -3195,7 +3207,7 @@ Convert(rm,op,from,to)
|
||||||
case FP_RM_TOZERO:
|
case FP_RM_TOZERO:
|
||||||
/* Round result to the value closest to, and not greater in
|
/* Round result to the value closest to, and not greater in
|
||||||
magnitude than, the result. */
|
magnitude than, the result. */
|
||||||
#if defined(sun)
|
#ifdef HAVE_AINT
|
||||||
tmp = (float)aint((double)tmp);
|
tmp = (float)aint((double)tmp);
|
||||||
#else
|
#else
|
||||||
/* TODO: Provide round-to-zero */
|
/* TODO: Provide round-to-zero */
|
||||||
|
@ -3241,7 +3253,7 @@ Convert(rm,op,from,to)
|
||||||
|
|
||||||
switch (rm) {
|
switch (rm) {
|
||||||
case FP_RM_NEAREST:
|
case FP_RM_NEAREST:
|
||||||
#if defined(sun)
|
#ifdef HAVE_ANINT
|
||||||
tmp = anint(*(double *)&tmp);
|
tmp = anint(*(double *)&tmp);
|
||||||
#else
|
#else
|
||||||
/* TODO: Provide round-to-nearest */
|
/* TODO: Provide round-to-nearest */
|
||||||
|
@ -3249,7 +3261,7 @@ Convert(rm,op,from,to)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RM_TOZERO:
|
case FP_RM_TOZERO:
|
||||||
#if defined(sun)
|
#ifdef HAVE_AINT
|
||||||
tmp = aint(*(double *)&tmp);
|
tmp = aint(*(double *)&tmp);
|
||||||
#else
|
#else
|
||||||
/* TODO: Provide round-to-zero */
|
/* TODO: Provide round-to-zero */
|
||||||
|
|
Loading…
Reference in New Issue