add type to BIG NUMs, so that we can easily know what it is all about.
This commit is contained in:
parent
e8cbc5034e
commit
13dd600f88
4
C/agc.c
4
C/agc.c
@ -312,9 +312,9 @@ mark_global_cell(CELL *pt)
|
|||||||
#endif
|
#endif
|
||||||
case (CELL)FunctorBigInt:
|
case (CELL)FunctorBigInt:
|
||||||
{
|
{
|
||||||
Int sz = 2 +
|
Int sz = 3 +
|
||||||
(sizeof(MP_INT)+
|
(sizeof(MP_INT)+
|
||||||
(((MP_INT *)(pt+1))->_mp_alloc*sizeof(mp_limb_t)))/sizeof(CELL);
|
(((MP_INT *)(pt+2))->_mp_alloc*sizeof(mp_limb_t)))/sizeof(CELL);
|
||||||
return pt + sz;
|
return pt + sz;
|
||||||
}
|
}
|
||||||
case (CELL)FunctorLongInt:
|
case (CELL)FunctorLongInt:
|
||||||
|
@ -34,7 +34,7 @@ Term
|
|||||||
Yap_MkBigIntTerm(MP_INT *big)
|
Yap_MkBigIntTerm(MP_INT *big)
|
||||||
{
|
{
|
||||||
Int nlimbs;
|
Int nlimbs;
|
||||||
MP_INT *dst = (MP_INT *)(H+1);
|
MP_INT *dst = (MP_INT *)(H+2);
|
||||||
CELL *ret = H;
|
CELL *ret = H;
|
||||||
|
|
||||||
if (mpz_fits_slong_p(big)) {
|
if (mpz_fits_slong_p(big)) {
|
||||||
@ -46,6 +46,7 @@ Yap_MkBigIntTerm(MP_INT *big)
|
|||||||
return TermNil;
|
return TermNil;
|
||||||
}
|
}
|
||||||
H[0] = (CELL)FunctorBigInt;
|
H[0] = (CELL)FunctorBigInt;
|
||||||
|
H[1] = BIG_INT;
|
||||||
|
|
||||||
dst->_mp_size = big->_mp_size;
|
dst->_mp_size = big->_mp_size;
|
||||||
dst->_mp_alloc = big->_mp_alloc;
|
dst->_mp_alloc = big->_mp_alloc;
|
||||||
@ -59,7 +60,7 @@ Yap_MkBigIntTerm(MP_INT *big)
|
|||||||
MP_INT *
|
MP_INT *
|
||||||
Yap_BigIntOfTerm(Term t)
|
Yap_BigIntOfTerm(Term t)
|
||||||
{
|
{
|
||||||
MP_INT *new = (MP_INT *)(RepAppl(t)+1);
|
MP_INT *new = (MP_INT *)(RepAppl(t)+2);
|
||||||
|
|
||||||
new->_mp_d = (mp_limb_t *)(new+1);
|
new->_mp_d = (mp_limb_t *)(new+1);
|
||||||
return(new);
|
return(new);
|
||||||
@ -98,7 +99,8 @@ p_is_bignum(void)
|
|||||||
{
|
{
|
||||||
#ifdef USE_GMP
|
#ifdef USE_GMP
|
||||||
Term t = Deref(ARG1);
|
Term t = Deref(ARG1);
|
||||||
return(IsNonVarTerm(t) && IsApplTerm(t) && FunctorOfTerm(t) == FunctorBigInt);
|
return(
|
||||||
|
IsNonVarTerm(t) && IsApplTerm(t) && FunctorOfTerm(t) == FunctorBigInt);
|
||||||
#else
|
#else
|
||||||
return FALSE;
|
return FALSE;
|
||||||
#endif
|
#endif
|
||||||
|
@ -676,7 +676,8 @@ YAP_MkBlobTerm(unsigned int sz)
|
|||||||
}
|
}
|
||||||
I = AbsAppl(H);
|
I = AbsAppl(H);
|
||||||
H[0] = (CELL)FunctorBigInt;
|
H[0] = (CELL)FunctorBigInt;
|
||||||
dst = (MP_INT *)(H+1);
|
H[1] = BIG_INT;
|
||||||
|
dst = (MP_INT *)(H+2);
|
||||||
dst->_mp_size = 0L;
|
dst->_mp_size = 0L;
|
||||||
dst->_mp_alloc = sz;
|
dst->_mp_alloc = sz;
|
||||||
H += (1+sizeof(MP_INT)/sizeof(CELL));
|
H += (1+sizeof(MP_INT)/sizeof(CELL));
|
||||||
|
@ -602,13 +602,14 @@ copy_big_int(CELL *st, CELL *pt)
|
|||||||
{
|
{
|
||||||
Int sz =
|
Int sz =
|
||||||
sizeof(MP_INT)+
|
sizeof(MP_INT)+
|
||||||
(((MP_INT *)(pt+1))->_mp_alloc*sizeof(mp_limb_t));
|
(((MP_INT *)(pt+2))->_mp_alloc*sizeof(mp_limb_t));
|
||||||
|
|
||||||
/* first functor */
|
/* first functor */
|
||||||
st[0] = (CELL)FunctorBigInt;
|
st[0] = (CELL)FunctorBigInt;
|
||||||
|
st[1] = pt[1];
|
||||||
/* then the actual number */
|
/* then the actual number */
|
||||||
memcpy((void *)(st+1), (void *)(pt+1), sz);
|
memcpy((void *)(st+2), (void *)(pt+2), sz);
|
||||||
st = st+1+sz/CellSize;
|
st = st+2+sz/CellSize;
|
||||||
/* then the tail for gc */
|
/* then the tail for gc */
|
||||||
st[0] = EndSpecials;
|
st[0] = EndSpecials;
|
||||||
return st+1;
|
return st+1;
|
||||||
@ -703,7 +704,7 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
|
|||||||
continue;
|
continue;
|
||||||
#ifdef USE_GMP
|
#ifdef USE_GMP
|
||||||
case (CELL)FunctorBigInt:
|
case (CELL)FunctorBigInt:
|
||||||
CheckDBOverflow(2+Yap_SizeOfBigInt(d0));
|
CheckDBOverflow(3+Yap_SizeOfBigInt(d0));
|
||||||
/* first thing, store a link to the list before we move on */
|
/* first thing, store a link to the list before we move on */
|
||||||
*StoPoint++ = AbsAppl(CodeMax);
|
*StoPoint++ = AbsAppl(CodeMax);
|
||||||
CodeMax = copy_big_int(CodeMax, ap2);
|
CodeMax = copy_big_int(CodeMax, ap2);
|
||||||
|
@ -89,7 +89,8 @@ CreateNewArena(CELL *ptr, UInt size)
|
|||||||
MP_INT *dst;
|
MP_INT *dst;
|
||||||
|
|
||||||
ptr[0] = (CELL)FunctorBigInt;
|
ptr[0] = (CELL)FunctorBigInt;
|
||||||
dst = (MP_INT *)(ptr+1);
|
ptr[1] = EMPTY_ARENA;
|
||||||
|
dst = (MP_INT *)(ptr+2);
|
||||||
dst->_mp_size = 0L;
|
dst->_mp_size = 0L;
|
||||||
dst->_mp_alloc = arena2big_sz(size);
|
dst->_mp_alloc = arena2big_sz(size);
|
||||||
ptr[size-1] = EndSpecials;
|
ptr[size-1] = EndSpecials;
|
||||||
|
4
C/grow.c
4
C/grow.c
@ -467,9 +467,9 @@ AdjustGlobal(long sz)
|
|||||||
#if USE_GMP
|
#if USE_GMP
|
||||||
case (CELL)FunctorBigInt:
|
case (CELL)FunctorBigInt:
|
||||||
{
|
{
|
||||||
Int sz = 1+
|
Int sz = 2+
|
||||||
(sizeof(MP_INT)+
|
(sizeof(MP_INT)+
|
||||||
(((MP_INT *)(pt+1))->_mp_alloc*sizeof(mp_limb_t)))/CellSize;
|
(((MP_INT *)(pt+2))->_mp_alloc*sizeof(mp_limb_t)))/CellSize;
|
||||||
pt += sz;
|
pt += sz;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1346,8 +1346,8 @@ mark_variable(CELL_PTR current)
|
|||||||
POP_CONTINUATION();
|
POP_CONTINUATION();
|
||||||
case (CELL)FunctorBigInt:
|
case (CELL)FunctorBigInt:
|
||||||
{
|
{
|
||||||
UInt sz = (sizeof(MP_INT)+
|
UInt sz = (sizeof(MP_INT)+1+
|
||||||
((MP_INT *)(next+1))->_mp_alloc*sizeof(mp_limb_t))/CellSize;
|
((MP_INT *)(next+2))->_mp_alloc*sizeof(mp_limb_t))/CellSize;
|
||||||
MARK(next);
|
MARK(next);
|
||||||
/* size is given by functor + friends */
|
/* size is given by functor + friends */
|
||||||
if (next < HGEN)
|
if (next < HGEN)
|
||||||
|
@ -1164,8 +1164,8 @@ SizeOfExtension(Term t)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (f== FunctorBigInt) {
|
if (f== FunctorBigInt) {
|
||||||
CELL *pt = RepAppl(t)+1;
|
CELL *pt = RepAppl(t)+2;
|
||||||
return 2+sizeof(MP_INT)+(((MP_INT *)(pt+1))->_mp_alloc*sizeof(mp_limb_t));
|
return 3+sizeof(MP_INT)+(((MP_INT *)(pt))->_mp_alloc*sizeof(mp_limb_t));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1634,8 +1634,8 @@ hash_complex_term(register CELL *pt0,
|
|||||||
{
|
{
|
||||||
CELL *pt = RepAppl(d0);
|
CELL *pt = RepAppl(d0);
|
||||||
Int sz =
|
Int sz =
|
||||||
sizeof(MP_INT)+
|
sizeof(MP_INT)+1+
|
||||||
(((MP_INT *)(pt+1))->_mp_alloc*sizeof(mp_limb_t));
|
(((MP_INT *)(pt+2))->_mp_alloc*sizeof(mp_limb_t));
|
||||||
|
|
||||||
if (st + (1024 + sz/CellSize) >= ASP) {
|
if (st + (1024 + sz/CellSize) >= ASP) {
|
||||||
goto global_overflow;
|
goto global_overflow;
|
||||||
|
@ -537,9 +537,9 @@ writeTerm(Term t, int p, int depth, int rinfixarg, struct write_globs *wglb)
|
|||||||
{
|
{
|
||||||
MP_INT *big = Yap_BigIntOfTerm(t);
|
MP_INT *big = Yap_BigIntOfTerm(t);
|
||||||
char *s = (char *)TR;
|
char *s = (char *)TR;
|
||||||
if (s+2+mpz_sizeinbase(big, 10) >= Yap_TrailTop) {
|
if (s+3+mpz_sizeinbase(big, 10) >= Yap_TrailTop) {
|
||||||
s = (char *)H;
|
s = (char *)H;
|
||||||
if (s+2+mpz_sizeinbase(big, 10) >= (char *)ASP) {
|
if (s+3+mpz_sizeinbase(big, 10) >= (char *)ASP) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
12
H/TermExt.h
12
H/TermExt.h
@ -56,6 +56,16 @@ blob_type;
|
|||||||
#define FunctorDouble ((Functor)(double_e))
|
#define FunctorDouble ((Functor)(double_e))
|
||||||
#define EndSpecials (double_e+sizeof(Functor *))
|
#define EndSpecials (double_e+sizeof(Functor *))
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
BIG_INT = 0x01,
|
||||||
|
BIG_RATIONAL = 0x02,
|
||||||
|
BIG_FLOAT = 0x04,
|
||||||
|
EMPTY_ARENA = 0x10,
|
||||||
|
ARRAY_INT = 0x21,
|
||||||
|
ARRAY_FLOAT = 0x22
|
||||||
|
}
|
||||||
|
big_blob_type;
|
||||||
|
|
||||||
inline EXTERN blob_type BlobOfFunctor (Functor f);
|
inline EXTERN blob_type BlobOfFunctor (Functor f);
|
||||||
|
|
||||||
@ -87,7 +97,7 @@ typedef struct
|
|||||||
/* what to do if someone wants to copy our constraint */
|
/* what to do if someone wants to copy our constraint */
|
||||||
int (*copy_term_op) (CELL *, struct cp_frame **, CELL *);
|
int (*copy_term_op) (CELL *, struct cp_frame **, CELL *);
|
||||||
/* copy the constraint into a term and back */
|
/* copy the constraint into a term and back */
|
||||||
Term (*to_term_op) (CELL *);
|
Term (*to_term_op) (CELL *);
|
||||||
int (*term_to_op) (Term, Term);
|
int (*term_to_op) (Term, Term);
|
||||||
/* op called to do marking in GC */
|
/* op called to do marking in GC */
|
||||||
void (*mark_op) (CELL *);
|
void (*mark_op) (CELL *);
|
||||||
|
@ -1374,7 +1374,7 @@ loop:
|
|||||||
return (FALSE);
|
return (FALSE);
|
||||||
#ifdef USE_GMP
|
#ifdef USE_GMP
|
||||||
case (CELL)FunctorBigInt:
|
case (CELL)FunctorBigInt:
|
||||||
if (IsBigIntTerm(d1) && mpz_cmp((MP_INT *)(ap2+1),Yap_BigIntOfTerm(d1)) == 0) continue;
|
if (IsBigIntTerm(d1) && mpz_cmp((MP_INT *)(ap2+2),Yap_BigIntOfTerm(d1)) == 0) continue;
|
||||||
UNWIND_CUNIF();
|
UNWIND_CUNIF();
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
#endif /* USE_GMP */
|
#endif /* USE_GMP */
|
||||||
|
2
LGPL/chr
2
LGPL/chr
@ -1 +1 @@
|
|||||||
Subproject commit 293457c65497bf63027c24cf954e6b4965f70df3
|
Subproject commit 6f4f1a9f182a6ea62de4683ea9f5923ccf20257f
|
@ -149,7 +149,8 @@ C_SOURCES= \
|
|||||||
$(srcdir)/C/corout.c $(srcdir)/C/dbase.c $(srcdir)/C/dlmalloc.c \
|
$(srcdir)/C/corout.c $(srcdir)/C/dbase.c $(srcdir)/C/dlmalloc.c \
|
||||||
$(srcdir)/C/errors.c \
|
$(srcdir)/C/errors.c \
|
||||||
$(srcdir)/C/eval.c $(srcdir)/C/exec.c \
|
$(srcdir)/C/eval.c $(srcdir)/C/exec.c \
|
||||||
$(srcdir)/C/globals.c $(srcdir)/C/gprof.c $(srcdir)/C/grow.c \
|
$(srcdir)/C/globals.c $(srcdir)/C/gmp_support.c \
|
||||||
|
$(srcdir)/C/gprof.c $(srcdir)/C/grow.c \
|
||||||
$(srcdir)/C/heapgc.c $(srcdir)/C/index.c \
|
$(srcdir)/C/heapgc.c $(srcdir)/C/index.c \
|
||||||
$(srcdir)/C/init.c $(srcdir)/C/inlines.c \
|
$(srcdir)/C/init.c $(srcdir)/C/inlines.c \
|
||||||
$(srcdir)/C/iopreds.c $(srcdir)/C/depth_bound.c \
|
$(srcdir)/C/iopreds.c $(srcdir)/C/depth_bound.c \
|
||||||
@ -223,7 +224,7 @@ ENGINE_OBJECTS = \
|
|||||||
bignum.o bb.o \
|
bignum.o bb.o \
|
||||||
cdmgr.o cmppreds.o compiler.o computils.o \
|
cdmgr.o cmppreds.o compiler.o computils.o \
|
||||||
corout.o cut_c.o dbase.o dlmalloc.o errors.o eval.o \
|
corout.o cut_c.o dbase.o dlmalloc.o errors.o eval.o \
|
||||||
exec.o globals.o gprof.o grow.o \
|
exec.o globals.o gmp_support.o gprof.o grow.o \
|
||||||
heapgc.o index.o init.o inlines.o \
|
heapgc.o index.o init.o inlines.o \
|
||||||
iopreds.o depth_bound.o mavar.o \
|
iopreds.o depth_bound.o mavar.o \
|
||||||
myddas_mysql.o myddas_odbc.o myddas_shared.o myddas_initialization.o \
|
myddas_mysql.o myddas_odbc.o myddas_shared.o myddas_initialization.o \
|
||||||
@ -343,6 +344,9 @@ exec.o: $(srcdir)/C/exec.c
|
|||||||
globals.o: $(srcdir)/C/globals.c
|
globals.o: $(srcdir)/C/globals.c
|
||||||
$(CC) -c $(CFLAGS) $(srcdir)/C/globals.c -o $@
|
$(CC) -c $(CFLAGS) $(srcdir)/C/globals.c -o $@
|
||||||
|
|
||||||
|
gmp_support.o: $(srcdir)/C/gmp_support.c
|
||||||
|
$(CC) -c $(CFLAGS) $(srcdir)/C/gmp_support.c -o $@
|
||||||
|
|
||||||
gprof.o: $(srcdir)/C/gprof.c
|
gprof.o: $(srcdir)/C/gprof.c
|
||||||
$(CC) -c $(CFLAGS) $(srcdir)/C/gprof.c -o $@
|
$(CC) -c $(CFLAGS) $(srcdir)/C/gprof.c -o $@
|
||||||
|
|
||||||
|
100
README
100
README
@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
|
|
||||||
README for Yap 5.1
|
README for Yap6
|
||||||
|
|
||||||
|
|
||||||
This directory contains a release of the Yap 5.1.* Prolog system,
|
This directory contains a release of the Yap 6.0.* Prolog system,
|
||||||
originally developed at the Universidade do Porto by Luis Damas and
|
originally developed at the Universidade do Porto by Luis Damas and
|
||||||
Vitor Santos Costa, with contributions from the Edinburgh Prolog
|
Vitor Santos Costa, with contributions from the Edinburgh Prolog
|
||||||
library, the C-Prolog manual authors, Ricardo Lopes, Ricardo Rocha,
|
library, the C-Prolog manual authors, Ricardo Lopes, Ricardo Rocha,
|
||||||
@ -12,17 +12,14 @@ Jan Wielemaker, Paul Singleton, Fred Dushin, Jan Wielemaker, Markus
|
|||||||
Triska, and many others. You should read the rest of this file for
|
Triska, and many others. You should read the rest of this file for
|
||||||
information on what Yap is and for instructions on how to build it.
|
information on what Yap is and for instructions on how to build it.
|
||||||
|
|
||||||
YAP 52 is known to build with many versions of gcc (<= gcc-2.7.2, >=
|
YAP 6 has been built with several versions on GCC on a variety of
|
||||||
gcc-2.8.1, >= egcs-1.0.1, gcc-2.95.*) and on a variety of Linux,
|
Linux, MacOSX. It has been built on Windows XP and VISTA using
|
||||||
MacOSX, and Unix'es: SunOS 4.1, Solaris 2.*, Irix 5.2, HP-UX 10.20,
|
cygwin/mingw from Cygnus Solutions.
|
||||||
Dec Alpha Unix, Linux 1.2 and Linux 2.* (RedHat 4.0 through 5.2,
|
|
||||||
Debian 2.*) in both the x86 and alpha platforms. It has been built on
|
|
||||||
Windows XP using cygwin/mingw from Cygnus Solutions. and on MaxO
|
|
||||||
|
|
||||||
The main core of the YAP distribution is distributed under a dual
|
The main core of the YAP distribution is distributed under a dual
|
||||||
license: the Perl Artistic license 2 and the FSF's LGPL. The YAP
|
license: the Perl Artistic license 2 and the FSF's LGPL. The YAP
|
||||||
distribution also contains files distributed under the LGPL
|
distribution also contains files distributed under the LGPL
|
||||||
exclusively, and under the GPL.
|
exclusively, and under the GPL.
|
||||||
|
|
||||||
The YAP distribution includes several packages ported to Yap, such as
|
The YAP distribution includes several packages ported to Yap, such as
|
||||||
Pillow, JPL, CLP(R) and CHR. We would like to take the opportunity to
|
Pillow, JPL, CLP(R) and CHR. We would like to take the opportunity to
|
||||||
@ -69,7 +66,20 @@ full compatibility, and the manual describes what is still
|
|||||||
missing. The manual also includes a (largely incomplete) comparison
|
missing. The manual also includes a (largely incomplete) comparison
|
||||||
with SICStus Prolog.
|
with SICStus Prolog.
|
||||||
|
|
||||||
2. How to compile YAP
|
2. Obtaining YAP's development sources.
|
||||||
|
|
||||||
|
YAP is now being maintained using the git source management system. A
|
||||||
|
public repository is available at
|
||||||
|
|
||||||
|
http://gitorious.org/projects/yap-git
|
||||||
|
|
||||||
|
Please use
|
||||||
|
|
||||||
|
git clone git://gitorious.org/yap-git/mainline.git
|
||||||
|
|
||||||
|
to obtain a copy of the current YAP tree.
|
||||||
|
|
||||||
|
3. How to compile YAP
|
||||||
|
|
||||||
To compile YAP just do:
|
To compile YAP just do:
|
||||||
|
|
||||||
@ -96,7 +106,7 @@ To compile YAP just do:
|
|||||||
In most systems you will need to be superuser in order to do "make
|
In most systems you will need to be superuser in order to do "make
|
||||||
install" and "make info" on the standard directories.
|
install" and "make info" on the standard directories.
|
||||||
|
|
||||||
2.1 Where to install Yap
|
3.1 Where to install Yap
|
||||||
|
|
||||||
YAP uses autoconf. Recent versions of Yap try to follow GNU
|
YAP uses autoconf. Recent versions of Yap try to follow GNU
|
||||||
conventions on where to place software. You can use the --prefix
|
conventions on where to place software. You can use the --prefix
|
||||||
@ -125,7 +135,7 @@ binary Prolog libraries.
|
|||||||
o INFODIR is where the info help files will be stored. It defaults
|
o INFODIR is where the info help files will be stored. It defaults
|
||||||
to $(SHAREDIR)/info.
|
to $(SHAREDIR)/info.
|
||||||
|
|
||||||
2.2 Which Yap to compile
|
3.2 Which Yap to compile
|
||||||
|
|
||||||
Compiling Yap with the standard options give you a plain vanilla
|
Compiling Yap with the standard options give you a plain vanilla
|
||||||
Prolog. You can tune Yap to use extra functionality by using the
|
Prolog. You can tune Yap to use extra functionality by using the
|
||||||
@ -155,70 +165,12 @@ supported by one of these three forms. This is still highly experimental.
|
|||||||
|
|
||||||
o --enable-tabling=yes allows tabling support. This is still experimental.
|
o --enable-tabling=yes allows tabling support. This is still experimental.
|
||||||
|
|
||||||
2.3 Porting Yap
|
3.3 Porting Yap
|
||||||
|
|
||||||
The system has been mainly tested with GCC, but we have been able to
|
The system has been mainly tested with GCC, but we have been able to
|
||||||
compile versions of Yap under lcc in Linux, Sun's cc compiler, IBM's
|
compile older versions of Yap under lcc in Linux, Sun's cc compiler,
|
||||||
xlc, SGI's cc, HP's cc, and Microsoft's Visual C++ 6.0.
|
IBM's xlc, SGI's cc, HP's cc, and Microsoft's Visual C++ 6.0. Recent
|
||||||
|
versions of YAP have also been compiled using Intel's lcc.
|
||||||
|
|
||||||
2.3.1 Yap and GCC
|
|
||||||
|
|
||||||
Yap has been developed to take advantage of GCC (but not to depend on
|
|
||||||
it). The major advantage of GCC is threaded code and register
|
|
||||||
reservation.
|
|
||||||
|
|
||||||
YAP is set by default to compile with the best compilation flags we
|
|
||||||
know. Even so, a few specific options can be used depending on the
|
|
||||||
architecture:
|
|
||||||
|
|
||||||
2.3.1.1 x86
|
|
||||||
|
|
||||||
The flag:
|
|
||||||
|
|
||||||
YAP_EXTRAS= ... -DBP_FREE=1
|
|
||||||
|
|
||||||
tells us to use the %bp register (frame-pointer) as the emulator's
|
|
||||||
program counter. This seems to be stable and should become default
|
|
||||||
real soon now.
|
|
||||||
|
|
||||||
2.3.1.2 Sparc/Solaris2
|
|
||||||
|
|
||||||
Use:
|
|
||||||
|
|
||||||
YAP_EXTRAS= ... -mno-app-regs -DOPTIMISE_ALL_REGS_FOR_SPARC=1
|
|
||||||
|
|
||||||
and YAP will get two extra registers! This trick does not work on
|
|
||||||
SunOS 4 machines.
|
|
||||||
|
|
||||||
2.3.1.3 Tuning GCC/Yap for your machine model
|
|
||||||
|
|
||||||
Versions of GCC can be tweaked for different processors, eg, 486,
|
|
||||||
Pentium, PentiumPro, Ultrasparc, Supersparc. Unfortunately, some of
|
|
||||||
these tweaks do may make Yap run slower or not at all in other machines
|
|
||||||
with the same instruction set, so they cannot be made default.
|
|
||||||
|
|
||||||
The best options also depends on the version of GCC you are using, and
|
|
||||||
it is a good idea to consult the GCC manual under the menus "Invoking
|
|
||||||
GCC"/"Submodel Options". We next describe a few:
|
|
||||||
|
|
||||||
(a) GCC up to 2.7.*:
|
|
||||||
|
|
||||||
o 486:
|
|
||||||
|
|
||||||
YAP_EXTRAS= ... -m486 -DBP_FREE=1
|
|
||||||
|
|
||||||
to take advantage of 486 specific optimisations in GCC 2.7.*.
|
|
||||||
|
|
||||||
o Pentium:
|
|
||||||
|
|
||||||
YAP_EXTRAS= ... -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2
|
|
||||||
|
|
||||||
o PentiumPros are known not to require alignment.
|
|
||||||
|
|
||||||
o Super and UltraSparcs:
|
|
||||||
YAP_EXTRAS= ... -msupersparc
|
|
||||||
|
|
||||||
(b) GCC 2.8.*, EGCS, GCC 2.95.*
|
|
||||||
|
|
||||||
o Check -march=XXX for fun.
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user