diff options
Diffstat (limited to 'media/sphinxbase/sphinxbase/fixpoint.h')
-rw-r--r-- | media/sphinxbase/sphinxbase/fixpoint.h | 145 |
1 files changed, 0 insertions, 145 deletions
diff --git a/media/sphinxbase/sphinxbase/fixpoint.h b/media/sphinxbase/sphinxbase/fixpoint.h deleted file mode 100644 index 30b5cb202..000000000 --- a/media/sphinxbase/sphinxbase/fixpoint.h +++ /dev/null @@ -1,145 +0,0 @@ -/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ -/* ==================================================================== - * Copyright (c) 2005 Carnegie Mellon University. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * This work was supported in part by funding from the Defense Advanced - * Research Projects Agency and the National Science Foundation of the - * United States of America, and the CMU Sphinx Speech Consortium. - * - * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND - * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY - * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * ==================================================================== */ - -/* Fixed-point arithmetic macros. - * - * Author: David Huggins-Daines <dhuggins@cs.cmu.edu> - */ - -#ifndef _FIXPOINT_H_ -#define _FIXPOINT_H_ - -#include <limits.h> - -/* Win32/WinCE DLL gunk */ -#include <sphinxbase/sphinxbase_export.h> -#include <sphinxbase/prim_type.h> - -#ifdef __cplusplus -extern "C" { -#endif -#if 0 -/* Fool Emacs. */ -} -#endif - -#ifndef DEFAULT_RADIX -#define DEFAULT_RADIX 12 -#endif - -/** Fixed-point computation type. */ -typedef int32 fixed32; - -/** Convert floating point to fixed point. */ -#define FLOAT2FIX_ANY(x,radix) \ - (((x)<0.0) ? \ - ((fixed32)((x)*(float32)(1<<(radix)) - 0.5)) \ - : ((fixed32)((x)*(float32)(1<<(radix)) + 0.5))) -#define FLOAT2FIX(x) FLOAT2FIX_ANY(x,DEFAULT_RADIX) -/** Convert fixed point to floating point. */ -#define FIX2FLOAT_ANY(x,radix) ((float32)(x)/(1<<(radix))) -#define FIX2FLOAT(x) FIX2FLOAT_ANY(x,DEFAULT_RADIX) - -/** - * Multiply two fixed point numbers with an arbitrary radix point. - * - * A veritable multiplicity of implementations exist, starting with - * the fastest ones... - */ - -#if defined(__arm__) && !defined(__thumb__) -/* - * This works on most modern ARMs but *only* in ARM mode (for obvious - * reasons), so don't use it in Thumb mode (but why are you building - * signal processing code in Thumb mode?!) - */ -#define FIXMUL(a,b) FIXMUL_ANY(a,b,DEFAULT_RADIX) -#define FIXMUL_ANY(a,b,r) ({ \ - int cl, ch, _a = a, _b = b; \ - __asm__ ("smull %0, %1, %2, %3\n" \ - "mov %0, %0, lsr %4\n" \ - "orr %0, %0, %1, lsl %5\n" \ - : "=&r" (cl), "=&r" (ch) \ - : "r" (_a), "r" (_b), "i" (r), "i" (32-(r)));\ - cl; }) - -#elif defined(_MSC_VER) || (defined(HAVE_LONG_LONG) && SIZEOF_LONG_LONG == 8) -/* Standard systems*/ -#define FIXMUL(a,b) FIXMUL_ANY(a,b,DEFAULT_RADIX) -#define FIXMUL_ANY(a,b,radix) ((fixed32)(((int64)(a)*(b))>>(radix))) - -#else -/* Most general case where 'long long' doesn't exist or is slow. */ -#define FIXMUL(a,b) FIXMUL_ANY(a,b,DEFAULT_RADIX) -#define FIXMUL_ANY(a,b,radix) ({ \ - int32 _ah, _bh; \ - uint32 _al, _bl, _t, c; \ - _ah = ((int32)(a)) >> 16; \ - _bh = ((int32)(b)) >> 16; \ - _al = ((uint32)(a)) & 0xffff; \ - _bl = ((uint32)(b)) & 0xffff; \ - _t = _ah * _bl + _al * _bh; \ - c = (fixed32)(((_al * _bl) >> (radix)) \ - + ((_ah * _bh) << (32 - (radix))) \ - + ((radix) > 16 ? (_t >> (radix - 16)) : (_t << (16 - radix)))); \ - c;}) -#endif - -/* Various fixed-point logarithmic functions that we need. */ -/** Minimum value representable in log format. */ -#define MIN_FIXLOG -2829416 /* log(1e-300) * (1<<DEFAULT_RADIX) */ -#define MIN_FIXLOG2 -4081985 /* log2(1e-300) * (1<<DEFAULT_RADIX) */ -/** Fixed-point representation of log(2) */ -#define FIXLN_2 ((fixed32)(0.693147180559945 * (1<<DEFAULT_RADIX))) -/** Take natural logarithm of a fixedpoint number. */ -#define FIXLN(x) (fixlog(x) - (FIXLN_2 * DEFAULT_RADIX)) - -/** - * Take natural logarithm of an integer, yielding a fixedpoint number - * with DEFAULT_RADIX as radix point. - */ -int32 fixlog(uint32 x); -/** - * Take base-2 logarithm of an integer, yielding a fixedpoint number - * with DEFAULT_RADIX as radix point. - */ -int32 fixlog2(uint32 x); - -#ifdef __cplusplus -} -#endif - - -#endif /* _FIXPOINT_H_ */ |