#ifndef _OS_H
#define _OS_H
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <math.h>
#include <ogg/os_types.h>
#include "misc.h"
#ifndef _V_IFDEFJAIL_H_
#define _V_IFDEFJAIL_H_
# ifdef __GNUC__
#define STIN …
# elif defined(_WIN32)
#define STIN …
# else
#define STIN …
# endif
#ifdef DJGPP
#define rint …
#endif
#ifndef M_PI
#define M_PI …
#endif
#if defined(_WIN32) && !defined(__SYMBIAN32__)
# include <malloc.h>
#define rint …
#define NO_FLOAT_MATH_LIB
#define FAST_HYPOT …
#endif
#if defined(__SYMBIAN32__) && defined(__WINS__)
void *_alloca(size_t size);
#define alloca …
#endif
#ifndef FAST_HYPOT
#define FAST_HYPOT …
#endif
#endif
#ifdef HAVE_ALLOCA_H
# include <alloca.h>
#endif
#ifdef USE_MEMORY_H
# include <memory.h>
#endif
#ifndef min
#define min(x,y) …
#endif
#ifndef max
#define max(x,y) …
#endif
#if defined(__i386__) && defined(__GNUC__) && !defined(__BEOS__) && !defined(__SSE2_MATH__)
#define VORBIS_FPU_CONTROL
typedef ogg_int16_t vorbis_fpu_control;
static inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){
ogg_int16_t ret;
ogg_int16_t temp;
__asm__ __volatile__("fnstcw %0\n\t"
"movw %0,%%dx\n\t"
"andw $62463,%%dx\n\t"
"movw %%dx,%1\n\t"
"fldcw %1\n\t":"=m"(ret):"m"(temp): "dx");
*fpu=ret;
}
static inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
__asm__ __volatile__("fldcw %0":: "m"(fpu));
}
static inline int vorbis_ftoi(double f){
int i;
__asm__("fistl %0": "=m"(i) : "t"(f));
return(i);
}
#endif
#if defined(_MSC_VER) && defined(_M_IX86) && !defined(_WIN32_WCE)
#define VORBIS_FPU_CONTROL
typedef ogg_int16_t vorbis_fpu_control;
static __inline int vorbis_ftoi(double f){
int i;
__asm{
fld f
fistp i
}
return i;
}
static __inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){
(void)fpu;
}
static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
(void)fpu;
}
#endif
#if (defined(_MSC_VER) && defined(_M_X64)) || (defined(__GNUC__) && defined (__SSE2_MATH__))
#define VORBIS_FPU_CONTROL
vorbis_fpu_control;
#include <emmintrin.h>
static __inline int vorbis_ftoi(double f){ … }
static __inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){ … }
static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){ … }
#endif
#ifndef VORBIS_FPU_CONTROL
typedef int vorbis_fpu_control;
STIN int vorbis_ftoi(double f){
return (int)floor(f+.5);
}
#define vorbis_fpu_setround …
#define vorbis_fpu_restore …
#endif
#endif