History log of /external/libjpeg-turbo/simd/jidctred-sse2-64.asm
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
498d9bc92fcf39124b6f08e57326944dedd2ddd6 15-Sep-2015 Chandler Carruth <chandlerc@gmail.com> Fix x86-64 ABI conformance issue in SIMD code
(descriptions cribbed by DRC from discussion in #20)
In the x86-64 ABI, the high (unused) DWORD of a 32-bit argument's
register is undefined, so it was incorrect to use a 64-bit mov
instruction to transfer a JDIMENSION argument in the 64-bit SSE2 SIMD
functions. The code worked thus far only because the existing compiler
optimizers weren't smart enough to do anything else with the register in
question, so the upper 32 bits happened to be all zeroes-- for the past
6 years, on every x86-64 compiler previously known to mankind.

The bleeding-edge Clang/LLVM compiler has a smarter optimizer, and
under certain circumstances, it will attempt to load-combine adjacent
32-bit integers from one of the libjpeg structures into a single 64-bit
integer and pass that 64-bit integer as a 32-bit argument to one of the
SIMD functions (which is allowed by the ABI, since the upper 32 bits of
the 32-bit argument's register are undefined.) This caused the
libjpeg-turbo regression tests to crash.

Also enhance the documentation of JDIMENSION to explain that its size
is significant to the implementation of the SIMD code.

Closes #20. Refer also to http://crbug.com/532214.
/external/libjpeg-turbo/simd/jidctred-sse2-64.asm
24e92e9fc0e3d3c0b3107d5dfcb49649e3b67a49 10-May-2014 DRC <dcommander@users.sourceforge.net> Using subdirectories unfortunately opened up a can of worms. In order to prevent object name conflicts, it is necessary to use the subdir-objects automake directive, but it simply doesn't work right on some of the versions of automake we still have to support. Another option would be to add a separate Makefile.am file to each subdirectory, but that requires maintaining a completely different set of build rules for each one. Fortunately, however, we're in the 21st century now, so we can use filenames longer than 8.3.


git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@1282 632fc199-4ca6-4c93-a231-07263d6284db
/external/libjpeg-turbo/simd/jidctred-sse2-64.asm