1INSTALLATION INSTRUCTIONS 2 3To build and install the Viterbi decoder libraries, simply say 4 5./configure 6make 7make install (as root) 8 9This will put the libraries in /usr/local/lib, the include files in 10/usr/local/include, and the manual page in /usr/local/man. 11 12SIMD-ASSISTED VERSIONS 13 14Four separate versions of each decoder are provided. One is in 15portable C and should run on any system with the GCC compiler and 16linker. Three more versions in assembler use the three Intel SIMD 17(single instruction, multiple data) instruction sets: MMX, SSE and 18SSE2. These SIMD-assisted versions yield dramatically better 19performance than the portable C version and should be used whenever 20possible. 21 22The MMX (MultiMedia eXtension) instruction set was introduced on later 23Pentium CPUs; it is also implemented on the Pentium II and most AMD 24CPUs starting with the K6. SSE (SIMD Streaming Extensions) was 25introduced in the Pentium III; AMD calls it "3D Now! Professional". 26Intel introduced SSE2 on the Pentium 4; to my knowledge it has not yet 27been implemented on any AMD CPU. 28 29SSE support implies MMX support, while SSE2 support implies both SSE 30and MMX support. 31 32If the target system is IA32 (i.e., i386/i486/i586/i686), all four 33versions of the decoder (portable C,MMX,SSE and SSE2) are 34built. Additionally, the configure script determines which, if any, of 35the three SIMD instruction sets (MMX/SSE/SSE2) are supported on the 36local CPU and installs the "best" one as the default for both the 37static and shared versions. If none of the SIMD instruction sets are 38supported, the portable C version is installed as the default. 39 40On non-IA32 targets only the portable C version is built. 41 42Since the usual GNU-style target_cpu name (e.g., "i686") does not 43indicate which SIMD instructions are supported (if any), the configure 44script has to run local tests to determine this information. This 45currently precludes cross-compilation of the package. 46 47TESTING THE VITERBI DECODER LIBRARY 48 49After running the ./configure script, optional tests can be run as 50follows: 51 52make tests 53make alltests 54 55"make tests" tests each decoder using the default library, verifying 56correct operation and estimating decoding speed. These tests should 57always succeed unless something is broken. 58 59On a IA32 machine, "make alltests" tests all four versions of the 60library. (On non-IA32 machines, "make alltests" is identical to "make 61tests"). Because "make alltests" tries every available SIMD version, 62whether or not the local CPU supports it, some of these tests may 63fail. E.g., on a Pentium III, the portable C, MMX and SSE tests will 64succeed while the SSE2 test will fail. 65 66LINKING APPLICATIONS TO THE VITERBI DECODER LIBRARY 67 68Specifying -lviterbi to the linker links with the default version as 69determined by the configure script. Unless the -static flag is also 70specified to the loader, the shared version will be used. 71 72This default can be overridden, for static linking only, as follows: 73 74-lviterbi_port - portable C version 75-lviterbi_mmx - MMX version 76-lviterbi_sse - SSE version 77-lviterbi_sse2 - SSE2 version 78 797 Dec 2001 80Phil Karn, karn@ka9q.net 81 82 83 84