################# REMOVE warnings on trimedia compiler 	##############################
################# Not critical to compilation			##############################

1. Change the following statements to remove warning for constant expression
(i)		mdf.c			[if(0) --> #if 0]
(ii)	preprocess.c	[if(1) --> #if 1]

2. add REMARK_ON macro to remove warning on not reference variable
-- uses (void)<variable> to remove warning on not referenced variable
-- #define REMARK_ON
--	  (void)<variable>
-- #endif
-- search for REMARK_ON on the following files 
(i)		jitter.c
(ii)	mdf.c
(iii)	filterbank.c
(iv)	preprocess.c

3. commented out the following in pseudofloat.h for unused variable
//static const spx_float_t FLOAT_HALF = {16384,-15};

################# Patches for trimedia compiler 		##############################
################# Critical to compilation				##############################

-- added the #elif defined (TM_ASM) to the following files for optimized codes
(1)		arch.h 
(2)		fftwrap.c
(3)		filterbank.c
(4) 	kiss_fft.c
(5)		kiss_fftr.c
(6)		mdf.c
(7)		preprocess.c

-- added macro PREPROCESS_MDF_FLOAT to allow using of floating point 
-- in mdf and preprocess while keeping fixed point in encoder/decoder
-- This is due to the fact that preprocess/mdf run faster on floating
-- point on trimedia
-- added the following 3 lines to the files below
#ifdef PREPROCESS_MDF_FLOAT
#undef FIXED_POINT
#endif
(1) mdf.c
(2) preprocess.c
(3) filterbank.c
(4) fftwrap.c
(5) kiss_fft.c
(6) kiss_fftr.c

-- created a new USE_COMPACT_KISS_FFT for fftwrap.c and shifted defination 
-- to config file so that user configure the usage of fft on config.h
-- TOEXPLORE:is it possible to share table between mdf/preprocess?
-- Introducing this macro made the following changes in C code 
-- New macro to facilitate integration
(grouping real/complex for dc and nyquist frequency seems to require a large
amount of memory for mdf, therefore did not made the changes for that)
(1) modify preprocess.c on init and destroy
(2) modify mdf.c on init and destroy
(3) shifted power_spectrum to fftwrap.c to share optimised code between
	preprocess.c and mdf.c
	
################# NOTES 								##############################
(1) fixed point encoding/decoding is tested on narrowband
	-	some of the QX fractions are packed together to 
			(frac1 * a + frac2 * a) >> X (should be more accurate in rounding)
		instead of 
			((frac1 * a) >> X) + ((frac2 * a) >> X)
		will cause some different between optimized and unoptimized code.
		tried decoding/encoding optimized code on some audio files retains 
		the clearity of the word
		
	- wideband/ultrawideband is not heavily tested yet
		
(2) optimized fixed point code requires memory alignment
	-	used config to debug on functions where memory is not align

(3) floating point optimization for preprocess/mdf is tested
	fixed point is not tested yet (except fft/filterbank)
	Note (1) also applies to sround in fft for fixed point
	some optimization is provided for fixed point as it requires lesser
	memory compared to floating point.
	
(4) unroll configurations provided to reduce code size if required

(5) use profile options only if compiler profiling fails to work 

(6) can't include the makefile as it is close proprietary

################# TODO:For Trimedia						##############################
(1) Optimizations for fixed point in mdf/preprocess

################# Added Files							##############################
- _kiss_fft_guts_tm.h
- fftwrap_tm.h
- filterbank_tm.h
- filters_tm.h
- fixed_tm.h
- kiss_fft_tm.h
- kiss_fftr_tm.h
- mdf_tm.h
- misc_tm.h
- preprocess_tm.h
- config.h
- speex_config_types.h
