aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/iemlib.h69
1 files changed, 29 insertions, 40 deletions
diff --git a/src/iemlib.h b/src/iemlib.h
index ba62f68..973bfeb 100644
--- a/src/iemlib.h
+++ b/src/iemlib.h
@@ -1,7 +1,7 @@
/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
-iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */
+iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2007 */
#ifndef __IEMLIB_H__
#define __IEMLIB_H__
@@ -15,8 +15,13 @@ iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 *
#define IS_A_SEMI(atom,index) ((atom+index)->a_type == A_SEMI)
#define IS_A_COMMA(atom,index) ((atom+index)->a_type == A_COMMA)
+/* now miller's code starts :
+ for 4 point interpolation
+ for lookup tables
+ for denormal floats
+ */
-#ifdef NT
+#ifdef MSW
int sys_noloadbang;
//t_symbol *iemgui_key_sym=0;
#include <io.h>
@@ -30,76 +35,60 @@ extern int sys_noloadbang;
#define XTRASAMPS 4
#define SAMPBLK 4
-
#define UNITBIT32 1572864. /* 3*2^19; bit 32 has place value 1 */
-/* machine-dependent definitions. These ifdefs really
-should have been by CPU type and not by operating system! */
+ /* machine-dependent definitions. These ifdefs really
+ should have been by CPU type and not by operating system! */
#ifdef IRIX
-/* big-endian. Most significant byte is at low address in memory */
+ /* big-endian. Most significant byte is at low address in memory */
#define HIOFFSET 0 /* word offset to find MSB */
#define LOWOFFSET 1 /* word offset to find LSB */
#define int32 long /* a data type that has 32 bits */
-#else
+#endif /* IRIX */
+
#ifdef MSW
-/* little-endian; most significant byte is at highest address */
+ /* little-endian; most significant byte is at highest address */
#define HIOFFSET 1
#define LOWOFFSET 0
#define int32 long
-#else
-#ifdef __FreeBSD__
+#endif /* MSW */
+
+#if defined(__FreeBSD__) || defined(__APPLE__)
#include <machine/endian.h>
-#if BYTE_ORDER == LITTLE_ENDIAN
-#define HIOFFSET 1
-#define LOWOFFSET 0
-#else
-#define HIOFFSET 0 /* word offset to find MSB */
-#define LOWOFFSET 1 /* word offset to find LSB */
-#endif /* BYTE_ORDER */
-#include <sys/types.h>
-#define int32 int32_t
#endif
-#ifdef __linux__
+#ifdef __linux__
#include <endian.h>
+#endif
-#if !defined(__BYTE_ORDER) || !defined(__LITTLE_ENDIAN)
+#if defined(__unix__) || defined(__APPLE__)
+#if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN)
#error No byte order defined
#endif
-#if __BYTE_ORDER == __LITTLE_ENDIAN
+#if BYTE_ORDER == LITTLE_ENDIAN
#define HIOFFSET 1
#define LOWOFFSET 0
#else
#define HIOFFSET 0 /* word offset to find MSB */
#define LOWOFFSET 1 /* word offset to find LSB */
#endif /* __BYTE_ORDER */
-
#include <sys/types.h>
#define int32 int32_t
+#endif /* __unix__ or __APPLE__*/
-#else
-#ifdef __APPLE__
-#ifdef __BIG_ENDIAN__
-#define HIOFFSET 0 /* word offset to find MSB */
-#define LOWOFFSET 1 /* word offset to find LSB */
-#else
-#define HIOFFSET 1 /* word offset to find MSB */
-#define LOWOFFSET 0 /* word offset to find LSB */
-#endif
-#define int32 int /* a data type that has 32 bits */
-
-#endif /* __APPLE__ */
-#endif /* __linux__ */
-#endif /* MSW */
-#endif /* SGI */
-
-union tabfudge
+union tabfudge_d
{
double tf_d;
int32 tf_i[2];
};
+union tabfudge_f
+{
+ float tf_f;
+ long tf_l;
+};
+
#if defined __i386__ || defined __x86_64__
#define IEM_DENORMAL(f) ((((*(unsigned int*)&(f))&0x60000000)==0) || \
(((*(unsigned int*)&(f))&0x60000000)==0x60000000))