Commit Graph

3268 Commits

Author SHA1 Message Date
Erik de Castro Lopo
8e4a45ac86 libFLAC/ia32/lpc_asm.nasm : Match calls and returns.
According to Agner Fog, "...you must make sure that all calls
are matched with returns. Never jump out of a subroutine without
a return and never use a return as an indirect jump."

(see paragraph 3.15 in microarchitecture.pdf and
examples 3.5a and 3.5b in optimizing_assembly.pdf)

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2014-01-07 21:27:09 +11:00
Erik de Castro Lopo
6cd8b42438 Add FLAC__ prefix to precompute_partition_info_sums....
Most non-static functions have FLAC__ prefix, but they were missing
from the precompute_partition_info_sums_* functions.

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2014-01-07 21:27:00 +11:00
Erik de Castro Lopo
b84f07248e compat.h : Simplify definition of FLAC__U64L.
Patch-from: lvqcl <lvqcl.mail@gmail.com>
2014-01-07 21:26:45 +11:00
Gustavo Zacarias
d65ede3e87 Fix Makefile.am altivec logic
Besides SPE (FSL e500v? cores) there are other powerpc processors
that don't support altivec instructions so only enable them when it's
100% sure that the target has it.

Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
2013-12-20 05:57:33 +11:00
Erik de Castro Lopo
a6a4b6f205 Detect Clang masquerading as GCC.
Autoconf detects the Clang compiler as GNU GCC (clang sets defines like
__GNUC__ etc) but Clang is *not* completely compatible. If we detect
Clang we set ac_vc_c_compiler_gnu to 'no'.
2013-11-22 18:13:40 +11:00
Erik de Castro Lopo
8e2eea6322 Silence warning message when doxygen disabled. 2013-10-15 18:01:28 +11:00
Erik de Castro Lopo
64f34e6e99 libFLAC/stream_encoder.c : Fix MSVS profiler hot spot.
Patch-from: vqcl <lvqcl.mail@gmail.com>
2013-10-10 21:32:07 +11:00
Erik de Castro Lopo
55049aad8b win_utf8_io_static.vcproj : LF -> CRLF conversion. 2013-10-10 19:22:06 +11:00
Erik de Castro Lopo
cf28c0144b Adds use of restrict keyword to improve encoding speed.
Restrict works very poorly in Visual Studio (much slower than without)
so defined flac_restrict in share/compat.h and use that in:

    lpc_compute_residual...()
    lpc_restore_signal...()

As a result, FLAC__lpc_compute_residual_from_qlp_coefficients_wide_intrin_sse41()
offers no advantage for 64-bit compiles and was removed from x86-64 part
of stream_encoder.c

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-10-10 18:24:19 +11:00
Erik de Castro Lopo
a1abfa3df2 Vcproj file updates.
rplaces
     OutputDirectory="..\..\..\..\objs\debug\bin"
with
     OutputDirectory="$(SolutionDir)objs\$(ConfigurationName)\bin
and so on.

Rmoves
     OutputFile="..\..\objs\debug\lib\$(ProjectName).lib
when possible.

Also, in the current version "Whole program optimization" compiler option
is set, but the corresponding linker option isn't. From MSDN:
   "If you do not explicitly specify /LTCG when you pass /GL or MSIL modules
   to the linker, the linker eventually detects this and restarts the link
   by using /LTCG. Explicitly specify /LTCG when you pass /GL and MSIL modules
   to the linker for the fastest possible build performance."
So /LTCG option was added too.

Debug build now uses libogg_static.lib from .\objs\debug\lib folder.
(the dependency for both release and debug is
    objs\$(ConfigurationName)\lib\libogg_static.lib)

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-10-04 13:50:01 +10:00
Erik de Castro Lopo
ecd0acba75 Improve x86 instrinsic implementation.
* Splits lpc_x86intrin.c to lpc_intrin_sse.c and lpc_intrin_sse2.c
* Add FLAC__lpc_compute_residual_from_qlp_coefficients_intrin_sse2()
  function to lpc_intrin_sse2.c
* Add lpc_intrin_sse41.c with two ..._wide_intrin_sse41() functions
  (useful for 24-bit en-/decoding)
* Add precompute_partition_info_sums_intrin_sse2() / ...ssse3() and
  disables precompute_partition_info_sums_32bit_asm_ia32_().
  SSE2 version uses 4 SSE2 instructions instead of 1 SSSE3 instruction
  PABSD so it is slightly slower.

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-10-04 01:41:48 +10:00
Erik de Castro Lopo
bd6a920e40 Add FLAC__HAS_X86INTRIN to vcproj files.
Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-27 03:10:37 +10:00
Erik de Castro Lopo
674fdc2f00 FLAC.sln : Fix for MSVS 2005.
Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-27 03:07:53 +10:00
Erik de Castro Lopo
31a79d7e9a Move M_PI definition to include/share/compat.h.
Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-27 03:05:06 +10:00
Martijn van Beurden
733efde227 Fix documentation rice partition order
For some reason all documentation lists the max rice partition
order to be 16, while the maximum is 15. This fixes flac -H, the
man page and the HTML source code documentation

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
2013-09-25 23:33:55 +10:00
Erik de Castro Lopo
899599e506 configure.ac : Tweaks.
* Add FLAC__ALIGN_MALLOC_DATA for x86_64.
* Removes XIPH_ADD_CFLAGS([-msse]) as -msse2 implies -msse.
* Fix typo.

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-25 23:30:15 +10:00
Erik de Castro Lopo
be6468d38c replaygain_synthesis.c : Replace float literal with double literal.
The variable its multipled by is double so there is no sense in
having the literal as a float.

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-25 23:20:03 +10:00
Erik de Castro Lopo
4a78cd4e4c Remove union data from FLAC__CPUInfo.
Before this patch it was possible to set or get data.ia32.sse3 value
from x86-64 code, etc which is a potential source of errors.

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-25 23:07:46 +10:00
Erik de Castro Lopo
8fe2c23e31 Add SSE4.1/SSE4.2 detection.
Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-25 23:05:17 +10:00
Erik de Castro Lopo
99f5a57d2a Fix minor Makefile.am issues arising from 943384d7c3.
Commit 943384d7c3 removed two directories in the doc/ tree and
those directories had to be removed from the Makefile.ams one
level up.
2013-09-18 06:56:42 +10:00
Martijn van Beurden
943384d7c3 Clean up source documentation
This patch removes all content that is better viewed online (i.e.
downloads, links etc.) and not necessary for development.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
2013-09-18 06:10:22 +10:00
Martijn van Beurden
a68082be0b Convert logo to SVG
While developing FLAC Frontend, there where several occasions where
I felt little restrained because the FLAC logo is available only in
gif. I made an SVG version and rendered a new GIF version from it.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
2013-09-17 18:25:08 +10:00
Erik de Castro Lopo
a9712a2279 Factor out common test functionality to test/common.sh.in. 2013-09-17 06:14:57 +10:00
Erik de Castro Lopo
1d3d50a918 Switch test scripts to bash. 2013-09-17 06:14:54 +10:00
Erik de Castro Lopo
ae4d720417 Fix/re-enable SSE/SSE2 lpc optimisations. 2013-09-17 06:14:50 +10:00
Erik de Castro Lopo
d6fa29071f test/test_seeking.sh : Fix detection of Ogg support. 2013-09-15 20:10:06 +10:00
Erik de Castro Lopo
e21237a87f configure.ac : Report Ogg/FLAC support. 2013-09-15 20:10:06 +10:00
Erik de Castro Lopo
bd9770ffd1 Only allow SSE2 intrinsics for x86_64. 2013-09-15 19:37:53 +10:00
Erik de Castro Lopo
95552e11ba Fix numerous warnings arising from addition of -Weffc++. 2013-09-15 18:10:55 +10:00
Erik de Castro Lopo
24a644718f configure.ac : Add -Weffc++ to CXXFLAGS.
Also rearrange CFLAGS somewhat.
2013-09-15 18:09:54 +10:00
Erik de Castro Lopo
0752740d8d src/libFLAC/lpc.c : Fix compiler warning. 2013-09-15 10:29:19 +10:00
Erik de Castro Lopo
e07bd181b1 lpc_x86intrin.c : Tweaks.
Include <config.h> before trying to use values defined in that file.
Fix compiler warnings.
2013-09-15 10:29:19 +10:00
Erik de Castro Lopo
5e5ee2720c Adds SSE-accelerated lpc functions.
New functions are:
    FLAC__lpc_compute_autocorrelation_intrin_sse_lag_4()
    FLAC__lpc_compute_autocorrelation_intrin_sse_lag_8()
    FLAC__lpc_compute_autocorrelation_intrin_sse_lag_12()
    FLAC__lpc_compute_autocorrelation_intrin_sse_lag_16()
    FLAC__lpc_compute_residual_from_qlp_coefficients_16_intrin_sse2()

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-15 10:29:19 +10:00
Erik de Castro Lopo
84c3e3d52c Add CPU features (sse3, ssse3) detection code for x86-64.
Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-15 09:46:20 +10:00
Erik de Castro Lopo
b72540b43c configure.ac : Prepare for x86_64 initrinsics based optimisations.
Detect presence of <x86intrin.h> and set FLAC__HAS_X86INTRIN.
Define FLAC__CPU_X86_64 when CPU is x96_64.
2013-09-15 09:42:36 +10:00
Erik de Castro Lopo
d11c66ffce bitmath.h : Minor improvements.
This is part of a larger patch from lvqcl.

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-08 12:15:57 +10:00
Erik de Castro Lopo
ce6832bb62 Move defintion of M_LN2 to include/share/compat.h. 2013-09-07 22:00:23 +10:00
Erik de Castro Lopo
c532d34c11 MSVS : Define _USE_MATH_DEFINES.
MSVS does defined the M_LN2 constant in <math.h> but only makes it
visible if _USE_MATH_DEFINES is defined.

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-07 22:00:23 +10:00
Erik de Castro Lopo
2e165ec569 Rename win_utf8_io.lib -> win_utf8_io_static.lib.
All MSVS projects that generate .lib files have '_static' suffix in their
names; all but win_utf8_io.

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-07 22:00:13 +10:00
Erik de Castro Lopo
58ecf3ae35 MSVS : Fix library output directory.
Fix the output directory for plugin_common_static.vcproj and
test_libs_common_static.vcproj.

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-07 21:58:29 +10:00
Erik de Castro Lopo
9e392706c9 MSVS : Add FLAC__ALIGN_MALLOC_DATA definition for MSVS projects.
A preprocessor macro FLAC__ALIGN_MALLOC_DATA is defined in the Makefiles
but absent in *.vcproj files. This patch adds it to libFLAC_static.vcproj
and libFLAC_dynamic.vcproj.

Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-07 21:58:11 +10:00
Erik de Castro Lopo
b250132aa1 src/flac/iffscan.c : Fix typo.
Patch-from: lvqcl <lvqcl.mail@gmail.com>
2013-09-05 19:50:40 +10:00
Erik de Castro Lopo
3ece67d71f include/share/compat.h : Remove deinition of restrict.
Wasn't being used anywhere in the code and clashes with a symbol in
MSVC.

Suggested-by: lvqcl <lvqcl.mail@gmail.com>
2013-09-01 10:32:52 +10:00
Erik de Castro Lopo
deb209906c Add ASM function FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_16.
For the 32 bit x86 ASM functions there were already versions of this
function for lags (N = 4, 8, 12). They require lpc_order less than N.
The best compression preset (flac -8) uses lpc_order up to 12; it
means that during encoding FLAC also uses unaccelerated C function.

Patch-from: lvqcl <lvqcl.mail@gmail.com>
Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
2013-08-31 13:53:37 +10:00
Erik de Castro Lopo
740eb68f53 src/libFLAC/cpu.c : Remove MSVC6 only code.
Patch from: lvqcl <lvqcl.mail@gmail.com>
2013-08-26 21:45:19 +10:00
Erik de Castro Lopo
3cea079a2f Fix a couple of NASM warnings.
Suggested by Ozkan Sezer <sezeroz@gmail.com>.
2013-08-13 19:30:24 +10:00
Erik de Castro Lopo
7050033b8f src/libFLAC/ia32/nasm.h : Fix nasm warning on windows.
Patch from Ozkan Sezer <sezeroz@gmail.com>.
2013-08-13 19:30:21 +10:00
Erik de Castro Lopo
1ec41a97da configure.ac : Improve asm optimisation detection.
When compiling for ia32 on an x86_64 kernel, the configure script
was not detecting the ability to do asm optimisations because the
configure script was detecting the x86_64 kernel not the ia32
user space.
2013-08-11 21:46:22 +10:00
Erik de Castro Lopo
5797009fa2 test/test_replaygain.sh : Prefer mawk over gawk.
The AWK script used to generate tones for this test fails with gawk
version 4.0.1, but used to work for earlier versions. Use mawk instead
if it exists.
2013-08-02 06:32:29 +10:00
Erik de Castro Lopo
187e596e4c stream_encoder.c : Improve fix for arithmetic overflow.
Only use the 32 bit accumulator if the input data is 16 bits or less.
2013-08-02 06:21:02 +10:00