Changeset: 0e0c18fc9da6 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0e0c18fc9da6 Added Files: common/utils/math_private.h common/utils/s_nextafterf.c Modified Files: clients/Tests/exports.stable.out common/utils/Makefile.ag common/utils/mutils.c gdk/gdk.h gdk/gdk_posix.c gdk/gdk_posix.h gdk/gdk_select.c gdk/gdk_storage.c gdk/gdk_utils.c monetdb5/modules/mal/mal_io.c Branch: default Log Message:
Merge with Feb2013 branch. diffs (truncated from 520 to 300 lines): diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -263,7 +263,7 @@ BAT *GDKkey; void *GDKmalloc(size_t size); size_t GDKmem_cursize(void); size_t GDKmem_inuse(void); -void *GDKmmap(const char *path, int mode, off_t off, size_t len); +void *GDKmmap(const char *path, int mode, size_t len); int GDKms(void); int GDKnr_threads; void GDKqsort(void *h, void *t, const void *base, size_t n, int hs, int ts, int tpe); @@ -311,7 +311,7 @@ void MT_locktrace_end(void); char *MT_locktrace_nme[65536]; void MT_locktrace_start(void); struct Mallinfo MT_mallinfo(void); -void *MT_mmap(const char *path, int mode, off_t off, size_t len); +void *MT_mmap(const char *path, int mode, size_t len); int MT_munmap(void *p, size_t len); int MT_path_absolute(const char *path); void MT_sleep_ms(unsigned int ms); @@ -1584,6 +1584,7 @@ int MALkeyword(Client cntxt, str kw, int int MALlookahead(Client cntxt, str kw, int length); str MALoptimizer(Client c); str MALparser(Client c); +str MALpass(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); str MALpipeline(Client c); str MALreader(Client c); void MALresourceFairness(Client cntxt, MalBlkPtr mb, lng usec); @@ -2943,6 +2944,7 @@ str packRef; str parseError(Client cntxt, str msg); int parseMAL(Client cntxt, Symbol curPrg); str partitionRef; +str passRef; str pcreRef; void pcre_del(Heap *h, var_t *index); int pcre_fromstr(str instr, int *l, pcre **val); diff --git a/common/utils/Makefile.ag b/common/utils/Makefile.ag --- a/common/utils/Makefile.ag +++ b/common/utils/Makefile.ag @@ -40,3 +40,5 @@ lib_msabaoth = { NOINST SOURCES = msabaoth.h msabaoth.c } + +EXTRA_DIST = s_nextafterf.c math_private.h diff --git a/common/utils/math_private.h b/common/utils/math_private.h new file mode 100644 --- /dev/null +++ b/common/utils/math_private.h @@ -0,0 +1,224 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#ifndef _MATH_PRIVATE_H_ +#define _MATH_PRIVATE_H_ + +#include <sys/types.h> + +/* The original fdlibm code used statements like: + n0 = ((*(int*)&one)>>29)^1; * index of high word * + ix0 = *(n0+(int*)&x); * high word of x * + ix1 = *((1-n0)+(int*)&x); * low word of x * + to dig two 32 bit words out of the 64 bit IEEE floating point + value. That is non-ANSI, and, moreover, the gcc instruction + scheduler gets it wrong. We instead use the following macros. + Unlike the original code, we determine the endianness at compile + time, not at run time; I don't see much benefit to selecting + endianness at run time. */ + +/* A union which permits us to convert between a double and two 32 bit + ints. */ + +/* + * The ARM ports are little endian except for the FPA word order which is + * big endian. + */ + +#if (BYTE_ORDER == BIG_ENDIAN) || (defined(__arm__) && !defined(__VFP_FP__)) + +typedef union +{ + double value; + struct + { + u_int32_t msw; + u_int32_t lsw; + } parts; +} ieee_double_shape_type; + +#endif + +#if (BYTE_ORDER == LITTLE_ENDIAN) && \ + !(defined(__arm__) && !defined(__VFP_FP__)) + +typedef union +{ + double value; + struct + { + u_int32_t lsw; + u_int32_t msw; + } parts; +} ieee_double_shape_type; + +#endif + +/* Get two 32 bit ints from a double. */ + +#define EXTRACT_WORDS(ix0,ix1,d) \ +do { \ + ieee_double_shape_type ew_u; \ + ew_u.value = (d); \ + (ix0) = ew_u.parts.msw; \ + (ix1) = ew_u.parts.lsw; \ +} while (/*CONSTCOND*/0) + +/* Get the more significant 32 bit int from a double. */ + +#define GET_HIGH_WORD(i,d) \ +do { \ + ieee_double_shape_type gh_u; \ + gh_u.value = (d); \ + (i) = gh_u.parts.msw; \ +} while (/*CONSTCOND*/0) + +/* Get the less significant 32 bit int from a double. */ + +#define GET_LOW_WORD(i,d) \ +do { \ + ieee_double_shape_type gl_u; \ + gl_u.value = (d); \ + (i) = gl_u.parts.lsw; \ +} while (/*CONSTCOND*/0) + +/* Set a double from two 32 bit ints. */ + +#define INSERT_WORDS(d,ix0,ix1) \ +do { \ + ieee_double_shape_type iw_u; \ + iw_u.parts.msw = (ix0); \ + iw_u.parts.lsw = (ix1); \ + (d) = iw_u.value; \ +} while (/*CONSTCOND*/0) + +/* Set the more significant 32 bits of a double from an int. */ + +#define SET_HIGH_WORD(d,v) \ +do { \ + ieee_double_shape_type sh_u; \ + sh_u.value = (d); \ + sh_u.parts.msw = (v); \ + (d) = sh_u.value; \ +} while (/*CONSTCOND*/0) + +/* Set the less significant 32 bits of a double from an int. */ + +#define SET_LOW_WORD(d,v) \ +do { \ + ieee_double_shape_type sl_u; \ + sl_u.value = (d); \ + sl_u.parts.lsw = (v); \ + (d) = sl_u.value; \ +} while (/*CONSTCOND*/0) + +/* A union which permits us to convert between a float and a 32 bit + int. */ + +typedef union +{ + float value; + u_int32_t word; +} ieee_float_shape_type; + +/* Get a 32 bit int from a float. */ + +#define GET_FLOAT_WORD(i,d) \ +do { \ + ieee_float_shape_type gf_u; \ + gf_u.value = (d); \ + (i) = gf_u.word; \ +} while (/*CONSTCOND*/0) + +/* Set a float from a 32 bit int. */ + +#define SET_FLOAT_WORD(d,i) \ +do { \ + ieee_float_shape_type sf_u; \ + sf_u.word = (i); \ + (d) = sf_u.value; \ +} while (/*CONSTCOND*/0) + +/* ieee style elementary functions */ +extern double __ieee754_sqrt(double); +extern double __ieee754_acos(double); +extern double __ieee754_acosh(double); +extern double __ieee754_log(double); +extern double __ieee754_atanh(double); +extern double __ieee754_asin(double); +extern double __ieee754_atan2(double,double); +extern double __ieee754_exp(double); +extern double __ieee754_cosh(double); +extern double __ieee754_fmod(double,double); +extern double __ieee754_pow(double,double); +extern double __ieee754_lgamma_r(double,int *); +extern double __ieee754_gamma_r(double,int *); +extern double __ieee754_lgamma(double); +extern double __ieee754_gamma(double); +extern double __ieee754_log10(double); +extern double __ieee754_log2(double); +extern double __ieee754_sinh(double); +extern double __ieee754_hypot(double,double); +extern double __ieee754_j0(double); +extern double __ieee754_j1(double); +extern double __ieee754_y0(double); +extern double __ieee754_y1(double); +extern double __ieee754_jn(int,double); +extern double __ieee754_yn(int,double); +extern double __ieee754_remainder(double,double); +extern int __ieee754_rem_pio2(double,double*); +extern double __ieee754_scalb(double,double); + +/* fdlibm kernel function */ +extern double __kernel_standard(double,double,int); +extern double __kernel_sin(double,double,int); +extern double __kernel_cos(double,double); +extern double __kernel_tan(double,double,int); +extern int __kernel_rem_pio2(double*,double*,int,int,int,const int*); + + +/* ieee style elementary float functions */ +extern float __ieee754_sqrtf(float); +extern float __ieee754_acosf(float); +extern float __ieee754_acoshf(float); +extern float __ieee754_logf(float); +extern float __ieee754_atanhf(float); +extern float __ieee754_asinf(float); +extern float __ieee754_atan2f(float,float); +extern float __ieee754_expf(float); +extern float __ieee754_coshf(float); +extern float __ieee754_fmodf(float,float); +extern float __ieee754_powf(float,float); +extern float __ieee754_lgammaf_r(float,int *); +extern float __ieee754_gammaf_r(float,int *); +extern float __ieee754_lgammaf(float); +extern float __ieee754_gammaf(float); +extern float __ieee754_log10f(float); +extern float __ieee754_log2f(float); +extern float __ieee754_sinhf(float); +extern float __ieee754_hypotf(float,float); +extern float __ieee754_j0f(float); +extern float __ieee754_j1f(float); +extern float __ieee754_y0f(float); +extern float __ieee754_y1f(float); +extern float __ieee754_jnf(int,float); +extern float __ieee754_ynf(int,float); +extern float __ieee754_remainderf(float,float); +extern int __ieee754_rem_pio2f(float,float*); +extern float __ieee754_scalbf(float,float); + +/* float versions of fdlibm kernel functions */ +extern float __kernel_sinf(float,float,int); +extern float __kernel_cosf(float,float); +extern float __kernel_tanf(float,float,int); +extern int __kernel_rem_pio2f(float*,float*,int,int,int,const int*); + +#endif /* _MATH_PRIVATE_H_ */ diff --git a/common/utils/mutils.c b/common/utils/mutils.c --- a/common/utils/mutils.c +++ b/common/utils/mutils.c @@ -50,6 +50,16 @@ #ifdef NATIVE_WIN32 +/* Some definitions that we need to compile on Windows. + * Note that Windows only runs on little endian architectures. */ +typedef unsigned int u_int32_t; +typedef int int32_t; +#define BIG_ENDIAN 4321 +#define LITTLE_ENDIAN 1234 +#define BYTE_ORDER LITTLE_ENDIAN + +#include "s_nextafterf.c" + #include <stdio.h> DIR * diff --git a/common/utils/s_nextafterf.c b/common/utils/s_nextafterf.c new file mode 100644 --- /dev/null +++ b/common/utils/s_nextafterf.c @@ -0,0 +1,62 @@ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list