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