5 years agoFix AVX2 detection bug with "limit CPUID" enabled in BIOS
Jason Garrett-Glaser [Fri, 12 Jul 2013 23:07:35 +0000 (16:07 -0700)]
Fix AVX2 detection bug with "limit CPUID" enabled in BIOS

6 years agox86: Remove X264_CPU_SSE_MISALIGN functions
Henrik Gramner [Fri, 5 Jul 2013 19:15:43 +0000 (21:15 +0200)]
x86: Remove X264_CPU_SSE_MISALIGN functions

Prevents a crash if the misaligned exception mask bit is cleared for some reason.

Misaligned SSE functions are only used on AMD Phenom CPUs and the benefit is miniscule.
They also require modifying the MXCSR control register and by removing those functions
we can get rid of that complexity altogether.

VEX-encoded instructions also supports unaligned memory operands. I tried adding AVX
implementations of all removed functions but there were no performance improvements on
Ivy Bridge. pixel_sad_x3 and pixel_sad_x4 had significant code size reductions though
so I kept them and added some minor cosmetics fixes and tweaks.

6 years agoTweak i16x16-delta-quant-avoidance code
Jason Garrett-Glaser [Thu, 20 Jun 2013 22:51:39 +0000 (15:51 -0700)]
Tweak i16x16-delta-quant-avoidance code

Don't omit the delta quant if it'd raise the quantizer to do so; this fixes
a rare flickering issue caused by deblocking.

6 years agox86: faster AVX2 iDCT, AVX deblock_luma_h, deblock_luma_h_intra
Jason Garrett-Glaser [Sun, 9 Jun 2013 16:06:27 +0000 (09:06 -0700)]
x86: faster AVX2 iDCT, AVX deblock_luma_h, deblock_luma_h_intra

6 years agoAdd new color primaries, transfer characteristics, matrix coefficients
Lucien [Mon, 17 Jun 2013 18:28:09 +0000 (18:28 +0000)]
Add new color primaries, transfer characteristics, matrix coefficients

6 years agoAdd "--stitchable" option for segmented encoding
Jason Garrett-Glaser [Sat, 1 Jun 2013 00:01:29 +0000 (17:01 -0700)]
Add "--stitchable" option for segmented encoding

Stops x264 from attempting to optimize global stream headers, ensuring that
different segments of a video will have identical headers when used with
identical encoding settings.

6 years agoInterface: if vbv-maxrate < bitrate, set bitrate = vbv-maxrate
Jason Garrett-Glaser [Thu, 27 Jun 2013 15:29:06 +0000 (08:29 -0700)]
Interface: if vbv-maxrate < bitrate, set bitrate = vbv-maxrate

This probably makes more sense to the user than setting vbv-maxrate = bitrate,
as before.

6 years agoOpenCL cosmetics
Anton Mitrofanov [Tue, 28 May 2013 12:02:42 +0000 (05:02 -0700)]
OpenCL cosmetics

6 years agoFix possible crash when writing very large filler NALUs
Anton Mitrofanov [Mon, 17 Jun 2013 20:16:33 +0000 (00:16 +0400)]
Fix possible crash when writing very large filler NALUs

Bitstream-reallocation function didn't handle the case of filler.

6 years agoFix build with PIC on some systems
Loren Merritt [Mon, 17 Jun 2013 18:27:09 +0000 (11:27 -0700)]
Fix build with PIC on some systems

6 years agoFix potential misaligment crash in AVX2 denoise_dct
Henrik Gramner [Sun, 2 Jun 2013 16:41:17 +0000 (18:41 +0200)]
Fix potential misaligment crash in AVX2 denoise_dct

6 years agoFix building with compilers without inline asm support
Anton Mitrofanov [Mon, 27 May 2013 21:48:15 +0000 (01:48 +0400)]
Fix building with compilers without inline asm support

Also fix crash in high bit depth builds compiled with unaligned stack.

6 years agoFix compilation with OpenCL on MacOS X
Anton Mitrofanov [Wed, 22 May 2013 18:43:59 +0000 (22:43 +0400)]
Fix compilation with OpenCL on MacOS X

Also fix crash in the case of OpenCL error during encoding.

6 years agoOpenCL support improvement/refactoring
Anton Mitrofanov [Mon, 6 May 2013 18:51:11 +0000 (22:51 +0400)]
OpenCL support improvement/refactoring

Autoload the OpenCL library so that it's not required to run an openCL-enabled
build of x264.

Update X264_BUILD, which should have been changed with the first patch.

6 years agox86: shave a few instructions off AVX deblock
Jason Garrett-Glaser [Thu, 16 May 2013 20:51:37 +0000 (13:51 -0700)]
x86: shave a few instructions off AVX deblock

6 years agox86: AVX2 dequant_4x4_dc
Henrik Gramner [Tue, 14 May 2013 16:57:40 +0000 (18:57 +0200)]
x86: AVX2 dequant_4x4_dc

6 years agox86: AVX2 high bit-depth dequant
Henrik Gramner [Tue, 14 May 2013 16:53:12 +0000 (18:53 +0200)]
x86: AVX2 high bit-depth dequant

6 years agox86-64: 64-bit variant of AVX2 hpel_filter
Jason Garrett-Glaser [Fri, 10 May 2013 00:20:05 +0000 (17:20 -0700)]
x86-64: 64-bit variant of AVX2 hpel_filter

~5% faster than 32-bit.

6 years agox86: AVX2 high bit-depth denoise_dct
Henrik Gramner [Mon, 6 May 2013 16:41:24 +0000 (18:41 +0200)]
x86: AVX2 high bit-depth denoise_dct

28->15 cycles

Also reorder instructions to use fewer registers, 3 cycles faster on Ivy Bridge with 64-bit Windows.

6 years agox86: AVX2 high bit-depth quant
Henrik Gramner [Sat, 4 May 2013 16:48:58 +0000 (18:48 +0200)]
x86: AVX2 high bit-depth quant

quant_4x4: 13->6 cycles
quant_4x4_dc: 14->8 cycles
quant_8x8: 47->24 cycles
quant_4x4x4: 48->25 cycles

6 years agox86: AVX2 add16x16_idct_dc
Jason Garrett-Glaser [Wed, 1 May 2013 21:32:11 +0000 (14:32 -0700)]
x86: AVX2 add16x16_idct_dc

27 -> 19 cycles

6 years agox86: faster AVX2 quant_4x4x4
Jason Garrett-Glaser [Mon, 29 Apr 2013 23:16:54 +0000 (16:16 -0700)]
x86: faster AVX2 quant_4x4x4

10->9 cycles

6 years agox86: AVX2 intra_sad_x3_8x8c
Jason Garrett-Glaser [Sun, 28 Apr 2013 04:03:32 +0000 (21:03 -0700)]
x86: AVX2 intra_sad_x3_8x8c

30->22 cycles

6 years agox86: AVX2 high bit-depth intra_sad_x3_8x8
Henrik Gramner [Sun, 28 Apr 2013 09:11:03 +0000 (11:11 +0200)]
x86: AVX2 high bit-depth intra_sad_x3_8x8

43->24 cycles

6 years agox86: AVX2 deblock strength
Jason Garrett-Glaser [Wed, 24 Apr 2013 21:22:15 +0000 (14:22 -0700)]
x86: AVX2 deblock strength

30->18 cycles

6 years agox86: Faster high bit-depth intra_sad_x3_4x4
Henrik Gramner [Wed, 1 May 2013 15:42:48 +0000 (17:42 +0200)]
x86: Faster high bit-depth intra_sad_x3_4x4

20->16 cycles on Ivy Bridge

6 years agox86: faster SSSE3 hpel
Jason Garrett-Glaser [Wed, 1 May 2013 00:36:46 +0000 (17:36 -0700)]
x86: faster SSSE3 hpel

~7% faster using the pmulhrsw trick from mc_chroma.

6 years agox86-64: faster SSSE3 trellis
Jason Garrett-Glaser [Mon, 29 Apr 2013 21:22:23 +0000 (14:22 -0700)]
x86-64: faster SSSE3 trellis

~2% faster trellis.

6 years agox86: 32-byte align the stack if possible
Jason Garrett-Glaser [Fri, 3 May 2013 00:10:26 +0000 (17:10 -0700)]
x86: 32-byte align the stack if possible

Avoids the need for manual 32 byte array alignment on compilers that support

6 years agox86inc: Utilize the shadow space on 64-bit Windows
Henrik Gramner [Sat, 11 May 2013 21:39:09 +0000 (23:39 +0200)]
x86inc: Utilize the shadow space on 64-bit Windows

Store XMM6 and XMM7 in the shadow space in functions that clobbers them.
This way we don't have to adjust the stack pointer as often,
reducing the number of instructions as well as code size.

6 years agox86: Don't use explicitly aligned versions of SAD on AVX CPUs
Henrik Gramner [Fri, 3 May 2013 21:06:10 +0000 (23:06 +0200)]
x86: Don't use explicitly aligned versions of SAD on AVX CPUs

On modern CPUs movdqu isn't slower than movdqa when used on aligned data and using the same code in both cases saves cache.

This was already done for the high bit-depth AVX2 implementation but the aligned version still exists as dead code so remove that.

6 years agox86: Add missing initializations for high bit-depth sad_aligned
Henrik Gramner [Fri, 3 May 2013 18:18:03 +0000 (20:18 +0200)]
x86: Add missing initializations for high bit-depth sad_aligned

6 years agox86: add Jaguar CPU detection
Jason Garrett-Glaser [Mon, 13 May 2013 23:52:18 +0000 (16:52 -0700)]
x86: add Jaguar CPU detection

6 years agox86inc: Remove .rodata kludges
Henrik Gramner [Tue, 7 May 2013 15:21:03 +0000 (17:21 +0200)]
x86inc: Remove .rodata kludges

The Mach-O bug was fixed in yasm 0.8.0 and we don't support versions that old.

a.out was superseded by ELF on sane systems a few decades ago.

6 years agocheckasm: Use 64-bit cycle counters
Henrik Gramner [Sat, 4 May 2013 14:21:32 +0000 (16:21 +0200)]
checkasm: Use 64-bit cycle counters

Prevents overflows that can occur in some cases.

6 years agocheckasm: Fix stack alignment bug
Henrik Gramner [Fri, 10 May 2013 11:55:32 +0000 (13:55 +0200)]
checkasm: Fix stack alignment bug

6 years agoFix invalid memcpy in sliced-threads
Jason Garrett-Glaser [Wed, 8 May 2013 17:48:41 +0000 (10:48 -0700)]
Fix invalid memcpy in sliced-threads

Likely didn't actually break in practice, but memcpy with src==dst
is incorrect.

6 years agoFix two bugs in slice-min-mbs and slices-max
Jason Garrett-Glaser [Mon, 29 Apr 2013 19:14:01 +0000 (12:14 -0700)]
Fix two bugs in slice-min-mbs and slices-max

Slices-max broke slice-max-size when slice-max wasn't used.
Slice-min-mbs broke in rare cases near the end of a threadslice.

6 years agox86: SSSE3 LUT-based faster coeff_level_run
Jason Garrett-Glaser [Fri, 5 Apr 2013 01:00:23 +0000 (18:00 -0700)]
x86: SSSE3 LUT-based faster coeff_level_run

~2x faster coeff_level_run.
Faster CAVLC encoding: {1%,2%,7%} overall with {superfast,medium,slower}.
Uses the same pshufb LUT abuse trick as in the previous ads_mvs patch.

6 years agox86-64: BMI2 cabac_residual functions
Jason Garrett-Glaser [Mon, 25 Mar 2013 21:03:37 +0000 (14:03 -0700)]
x86-64: BMI2 cabac_residual functions

6 years agox86: SSSE3 ads_mvs
Jason Garrett-Glaser [Wed, 20 Mar 2013 22:08:35 +0000 (15:08 -0700)]
x86: SSSE3 ads_mvs

~55% faster ads in benchasm, ~15-30% in real encoding.
~4% faster "placebo" preset overall.

6 years agox86: AVX2 pixel_ssd_nv12_core
Henrik Gramner [Tue, 16 Apr 2013 21:27:53 +0000 (23:27 +0200)]
x86: AVX2 pixel_ssd_nv12_core

6 years agox86: AVX2 high bit-depth pixel_ssd
Henrik Gramner [Tue, 16 Apr 2013 21:27:50 +0000 (23:27 +0200)]
x86: AVX2 high bit-depth pixel_ssd

6 years agox86: AVX2 high bit-depth pixel_sad_x3/pixel_sad_x4
Henrik Gramner [Tue, 16 Apr 2013 21:27:46 +0000 (23:27 +0200)]
x86: AVX2 high bit-depth pixel_sad_x3/pixel_sad_x4

Also reduce the number of xmm registers used by sse2/ssse3 pixel_sad_x3.

6 years agox86: AVX2 high bit-depth vsad
Henrik Gramner [Tue, 16 Apr 2013 21:27:43 +0000 (23:27 +0200)]
x86: AVX2 high bit-depth vsad

6 years agox86: AVX2 high bit-depth pixel_sad
Henrik Gramner [Tue, 16 Apr 2013 21:27:39 +0000 (23:27 +0200)]
x86: AVX2 high bit-depth pixel_sad

Also use loops instead of duplicating code; reduces code size by ~10kB with
negligible effect on performance.

6 years agox86: AVX2 high_bit_depth pixel_avg2, get_ref, mc_copy_w16, mc_luma
Henrik Gramner [Tue, 16 Apr 2013 21:27:35 +0000 (23:27 +0200)]
x86: AVX2 high_bit_depth pixel_avg2, get_ref, mc_copy_w16, mc_luma

Also reduce the number of xmm registers used by mc_copy_* to avoid
saving and restoring xmm6 and xmm7 on 64-bit Windows.

6 years agox86: AVX2 nal_escape
Henrik Gramner [Tue, 16 Apr 2013 21:27:32 +0000 (23:27 +0200)]
x86: AVX2 nal_escape

Also rewrite the entire function to be faster and drop the AVX version which is no longer useful.

6 years agox86: AVX memzero_aligned
Henrik Gramner [Tue, 16 Apr 2013 21:27:29 +0000 (23:27 +0200)]
x86: AVX memzero_aligned

6 years agox86: AVX2 predict_16x16_dc
Henrik Gramner [Tue, 16 Apr 2013 21:27:25 +0000 (23:27 +0200)]
x86: AVX2 predict_16x16_dc

6 years agox86: AVX2 predict_8x8c_p/predict_8x16c_p
Henrik Gramner [Tue, 16 Apr 2013 21:27:22 +0000 (23:27 +0200)]
x86: AVX2 predict_8x8c_p/predict_8x16c_p

6 years agox86: AVX2 predict_16x16_p
Henrik Gramner [Tue, 16 Apr 2013 21:27:18 +0000 (23:27 +0200)]
x86: AVX2 predict_16x16_p

Also fix the AVX implementation to correctly use the SSSE3 inline asm
instead of SSE2.

6 years agox86: AVX high bit-depth predict_16x16_v
Henrik Gramner [Tue, 16 Apr 2013 21:27:14 +0000 (23:27 +0200)]
x86: AVX high bit-depth predict_16x16_v

Also restructure some code to reduce code size of various functions,
especially in high bit-depth.

6 years agox86: AVX2 high bit-depth predict_4x4_h
Henrik Gramner [Tue, 16 Apr 2013 21:27:08 +0000 (23:27 +0200)]
x86: AVX2 high bit-depth predict_4x4_h

6 years agox86: AVX2 high bit-depth predict_16x16_h
Henrik Gramner [Tue, 16 Apr 2013 21:27:04 +0000 (23:27 +0200)]
x86: AVX2 high bit-depth predict_16x16_h

6 years agox86: AVX2 high bit-depth predict_8x8c_h/predict_8x16c_h
Henrik Gramner [Tue, 16 Apr 2013 21:27:00 +0000 (23:27 +0200)]
x86: AVX2 high bit-depth predict_8x8c_h/predict_8x16c_h

6 years agox86util: Support ymm registers in HADD macros
Henrik Gramner [Tue, 16 Apr 2013 21:26:47 +0000 (23:26 +0200)]
x86util: Support ymm registers in HADD macros

6 years agox86: more AVX2 framework, AVX2 functions, plus some existing asm tweaks
Jason Garrett-Glaser [Wed, 27 Feb 2013 00:26:34 +0000 (16:26 -0800)]
x86: more AVX2 framework, AVX2 functions, plus some existing asm tweaks

AVX2 functions:
zigzag interleave

6 years agox86inc: create xm# and ym#, analagous to m#
Loren Merritt [Mon, 25 Feb 2013 21:16:45 +0000 (21:16 +0000)]
x86inc: create xm# and ym#, analagous to m#

For when we want to mix simd sizes within one function.

6 years agox86inc: fix AVX emulation of cmp(p|s)(s|d)
Jason Garrett-Glaser [Fri, 5 Apr 2013 23:08:35 +0000 (16:08 -0700)]
x86inc: fix AVX emulation of cmp(p|s)(s|d)

6 years agox86-64: cabac_block_residual assembly
Jason Garrett-Glaser [Wed, 6 Feb 2013 01:15:00 +0000 (17:15 -0800)]
x86-64: cabac_block_residual assembly

RDO: ~20% faster than C
Bitstream: ~50% faster than C
1-2% faster overall, highest on preset superfast/fast/medium.

6 years agoOpenCL lookahead
Steve Borho [Thu, 21 Feb 2013 18:48:40 +0000 (12:48 -0600)]
OpenCL lookahead

OpenCL support is compiled in by default, but must be enabled at runtime by an
--opencl command line flag. Compiling OpenCL support requires perl. To avoid
the perl requirement use: configure --disable-opencl.

When enabled, the lookahead thread is mostly off-loaded to an OpenCL capable GPU
device.  Lowres intra cost prediction, lowres motion search (including subpel)
and bidir cost predictions are all done on the GPU.  MB-tree and final slice
decisions are still done by the CPU.  Presets which do not use a threaded
lookahead will not use OpenCL at all (superfast, ultrafast).

Because of data dependencies, the GPU must use an iterative motion search which
performs more total work than the CPU would do, so this is not work efficient
or power efficient. But if there are spare GPU cycles to spare, it can often
speed up the encode. Output quality when OpenCL lookahead is enabled is often
very slightly worse in quality than the CPU quality (because of the same data

x264 must compile its OpenCL kernels for your device before running them, and in
order to avoid doing this every run it caches the compiled kernel binary in a
file named x264_lookahead.clbin (--opencl-clbin FNAME to override).  The cache
file will be ignored if the device, driver, or OpenCL source are changed.

x264 will use the first GPU device which supports the required cl_image
features required by its kernels. Most modern discrete GPUs and all AMD
integrated GPUs will work.  Intel integrated GPUs (up to IvyBridge) do not
support those necessary features. Use --opencl-device N to specify a number of
capable GPUs to skip during device detection.

Switchable graphics environments (e.g. AMD Enduro) are currently not supported,
as some have bugs in their OpenCL drivers that cause output to be silently

Developed by MulticoreWare with support from AMD and Telestream.

6 years agoweightp: improve scale/offset search, chroma
Jason Garrett-Glaser [Mon, 4 Mar 2013 23:19:47 +0000 (15:19 -0800)]
weightp: improve scale/offset search, chroma

Rescale the scale factor if the offset clips. This makes weightp more effective
in fades to/from white (and an other situation that requires big offsets).

Search more than 1 scale factor and more than 1 offset, depending on --subme.

Try to find the optimal chroma denominator instead of hardcoding it.

Overall improvement: a few percent in fade-heavy clips, such as a sample from
Avatar: TLA.

6 years agoAdd slices-max feature
Jason Garrett-Glaser [Tue, 19 Feb 2013 21:48:44 +0000 (13:48 -0800)]
Add slices-max feature

The H.264 spec technically has limits on the number of slices per frame. x264
normally ignores this, since most use-cases that require large numbers of
slices prefer it to. However, certain decoders may break with extremely large
numbers of slices, as can occur with some slice-max-size/mbs settings.

When set, x264 will refuse to create any slices beyond the maximum number,
even if slice-max-size/mbs requires otherwise.

6 years agoAdd slice-min-mbs feature
Jason Garrett-Glaser [Fri, 15 Feb 2013 01:22:02 +0000 (17:22 -0800)]
Add slice-min-mbs feature

Works in conjunction with slice-max-mbs and/or slice-max-size to avoid overly
small slices.
Useful with certain decoders that barf on extremely small slices.

If slice-min-mbs would be violated as a result of slice-max-size, x264 will
exceed slice-max-size and print a warning.

6 years agoDisable mbtree asm with cpu-independent option
Anton Mitrofanov [Tue, 26 Mar 2013 14:56:21 +0000 (18:56 +0400)]
Disable mbtree asm with cpu-independent option

Results vary between versions because of different rounding results.

6 years agoShow "avs: no" --disable-avs option instead of empty string
Anton Mitrofanov [Tue, 26 Mar 2013 14:30:00 +0000 (18:30 +0400)]
Show "avs: no" --disable-avs option instead of empty string

6 years agolavf input: don't use deprecated AVStream fields
Tim Walker [Tue, 19 Mar 2013 22:42:43 +0000 (23:42 +0100)]
lavf input: don't use deprecated AVStream fields

Fixes building against newer libavcodecs from the Libav project.

6 years agoFix y4m input with C420paldv colorspace
Anton Mitrofanov [Tue, 26 Mar 2013 15:54:36 +0000 (19:54 +0400)]
Fix y4m input with C420paldv colorspace

6 years agox86: correctly check stack alignment for Atom hadamard_ac
Jason Garrett-Glaser [Sat, 2 Mar 2013 09:22:29 +0000 (01:22 -0800)]
x86: correctly check stack alignment for Atom hadamard_ac

Regression in r2265 (only affected compilers with broken stack alignment,
like ICL on win32).

6 years agox86inc: fix some corner cases of SWAP
Loren Merritt [Mon, 25 Feb 2013 21:23:55 +0000 (21:23 +0000)]
x86inc: fix some corner cases of SWAP

SWAP with >=3 named (rather than numbered) args
PERMUTE followed by SWAP with 2 named args
used to produce the wrong permutation

6 years agoFix array overreads that caused miscompilation in gcc 4.8
Jason Garrett-Glaser [Wed, 27 Feb 2013 21:30:22 +0000 (13:30 -0800)]
Fix array overreads that caused miscompilation in gcc 4.8

6 years agoFix undefined behavior in x264_ratecontrol_mb
Jason Garrett-Glaser [Thu, 28 Feb 2013 21:32:37 +0000 (13:32 -0800)]
Fix undefined behavior in x264_ratecontrol_mb

6 years agoARM: Fix bug in x264_quant_4x4x4_neon
Stefan Groenroos [Fri, 1 Mar 2013 20:35:34 +0000 (22:35 +0200)]
ARM: Fix bug in x264_quant_4x4x4_neon

Regression in r2273.

6 years agoARM: update NEON mc_chroma to work with NV12 and re-enable it
Stefan Groenroos [Mon, 25 Feb 2013 21:43:09 +0000 (23:43 +0200)]
ARM: update NEON mc_chroma to work with NV12 and re-enable it

Up to 10-15% faster overall.

6 years agoCABAC/CAVLC: use the new bit-iterating macro here too
Jason Garrett-Glaser [Thu, 14 Feb 2013 23:00:48 +0000 (15:00 -0800)]
CABAC/CAVLC: use the new bit-iterating macro here too

6 years agoquant_4x4x4: quant one 8x8 block at a time
Jason Garrett-Glaser [Fri, 8 Feb 2013 23:34:38 +0000 (15:34 -0800)]
quant_4x4x4: quant one 8x8 block at a time

This reduces overhead and lets us use less branchy code for zigzag, dequant,
decimate, and so on.
Reorganize and optimize a lot of macroblock_encode using this new function.
~1-2% faster overall.

Includes NEON and x86 versions of the new function.
Using larger merged functions like this will also make wider SIMD, like
AVX2, more effective.

6 years agoAdd AvxSynth support to the AviSynth input module.
Stephen Hutchinson [Wed, 13 Feb 2013 02:55:43 +0000 (21:55 -0500)]
Add AvxSynth support to the AviSynth input module.

Uses dlopen to load AvxSynth on Linux and OS X.

Allows the use of --demuxer avs for AvxSynth, though the only source filter it
can currently use is FFMS2.

Add a local copy of avxsynth_c.h and its dependent headers in extras/ so that
users don't need to actually have AvxSynth development headers installed to
enable support for it (mirroring the AviSynth behavior).

Based on a patch by 0x09 (tab@lavabit.com)

6 years agoEliminate some branchiness in ME/analysis
Jason Garrett-Glaser [Fri, 8 Feb 2013 08:13:15 +0000 (00:13 -0800)]
Eliminate some branchiness in ME/analysis

Faster, fewer branch mispredictions.

6 years agoFix some store forwarding stalls
Jason Garrett-Glaser [Thu, 7 Feb 2013 00:55:39 +0000 (16:55 -0800)]
Fix some store forwarding stalls
There's quite a few others, but most of them don't help to fix or there's no
easy way to avoid them.

6 years agox86: faster AVX satd/sa8d/sa8d_satd/hadamard_ac
Jason Garrett-Glaser [Tue, 5 Feb 2013 09:23:23 +0000 (01:23 -0800)]
x86: faster AVX satd/sa8d/sa8d_satd/hadamard_ac

Use Conroe-style movddup in AVX transforms; both Sandy Bridge and Bulldozer
do movddup in the load unit, so it's totally free this way.

On Sandy Bridge:
~6% faster sa8d_satd
~5% faster hadamard_ac
~9% faster 32-bit satd
~2% faster sa8d

6 years agox86: detect Bobcat, improve Atom optimizations, reorganize flags
Jason Garrett-Glaser [Sat, 2 Feb 2013 20:37:08 +0000 (12:37 -0800)]
x86: detect Bobcat, improve Atom optimizations, reorganize flags

The Bobcat has a 64-bit SIMD unit reminiscent of the Athlon 64; detect this
and apply the appropriate flags.

It also has an extremely slow palignr instruction; create a flag for this to
avoid massive penalties on palignr-heavy functions.

Improve Atom function selection and document exactly what the SLOW_ATOM flag

Add Atom-optimized SATD/SA8D/hadamard_ac functions: simply combine the ssse3
optimizations with the sse2 algorithm to avoid pmaddubsw, which is slow on
Atom along with other SIMD multiplies.

Drop TBM detection; it'll probably never be useful for x264.

Invert FastShuffle to SlowShuffle; it only ever applied to one CPU (Conroe).

Detect CMOV, to fail more gracefully when run on a chip with MMX2 but no CMOV.

6 years agox86: combined SA8D/SATD dsp function
Oskar Arvidsson [Sat, 19 Jan 2013 00:47:09 +0000 (01:47 +0100)]
x86: combined SA8D/SATD dsp function

Speedup is most apparent for 8-bit (~30%), but gives some improvements
for 10-bit too (~12%).
64-bit only for now.

6 years agox86: port SSE2+ SATD functions to high bit depth
Oskar Arvidsson [Tue, 29 Jan 2013 22:44:32 +0000 (23:44 +0100)]
x86: port SSE2+ SATD functions to high bit depth

Makes SATD 20-50% faster across all partition sizes but 4x4.

6 years agox86: faster high bit depth ssd
Oskar Arvidsson [Wed, 6 Feb 2013 01:07:53 +0000 (02:07 +0100)]
x86: faster high bit depth ssd

About 15% faster on average.

6 years agox86: optimize and clean up predictor checking
Jason Garrett-Glaser [Sat, 19 Jan 2013 06:55:46 +0000 (22:55 -0800)]
x86: optimize and clean up predictor checking
Branchlessly handle elimination of candidates in MMX roundclip asm.
Add a new asm function, similar to roundclip, except without the round part.
Optimize and organize the C code, and make both subme>=3 and subme<3 consistent.
Add lots of explanatory comments and try to make things a little more understandable.
~5-10% faster with subme>=3, ~15-20% faster with subme<3.

6 years agoFix two bugs in predictor checking
Jason Garrett-Glaser [Tue, 22 Jan 2013 20:31:55 +0000 (12:31 -0800)]
Fix two bugs in predictor checking
pmv wasn't checked properly in some cases, as well as zero vector.
Output-changing portion of the following patch.

6 years agoImprove lookahead-threads auto selection
Jason Garrett-Glaser [Thu, 10 Jan 2013 21:15:52 +0000 (13:15 -0800)]
Improve lookahead-threads auto selection
Smarter decision to improve fast-first-pass performance in 2-pass encodes.
Dramatically improves CPU utilization on multi-core systems.

Tested on a quad-core Ivy Bridge (12 threads, 1080p):
Fast first pass:
veryfast:     ~7% faster
faster:      ~11% faster
fast/medium: ~15% faster
slow/slower: ~42% faster
veryslow:    ~55% faster
veryfast:     ~9% faster
(all others remained the same)

6 years agox86: Use SSE instead of SSE2 for copying data
Henrik Gramner [Sun, 27 Jan 2013 22:01:59 +0000 (23:01 +0100)]
x86: Use SSE instead of SSE2 for copying data

Reduces code size because movaps/movups is one byte shorter than movdqa/movdqu.
Also merge MMX and SSE versions of memcpy_aligned into a single macro.

6 years ago64-bit cabac optimizations
Henrik Gramner [Sun, 13 Jan 2013 17:27:08 +0000 (18:27 +0100)]
64-bit cabac optimizations

~4% faster PIC

~3% faster and 16 byte shorter cabac_encode_bypass
~8% faster cabac_encode_terminal
Benchmarked on Ivy Bridge

One instruction less in cabac_encode_bypass

6 years agoconfigure: add QNX support
Mike Gorchak [Sun, 3 Feb 2013 07:35:00 +0000 (23:35 -0800)]
configure: add QNX support

6 years agoWindows: Enable DEP and ASLR
Henrik Gramner [Sun, 20 Jan 2013 18:35:06 +0000 (19:35 +0100)]
Windows: Enable DEP and ASLR

6 years agox86inc: Set ELF hidden visibility for global constants
Henrik Gramner [Thu, 17 Jan 2013 18:17:24 +0000 (19:17 +0100)]
x86inc: Set ELF hidden visibility for global constants

6 years agox86inc: Add cvisible macro for C functions with public prefix
Diego Biurrun [Thu, 17 Jan 2013 10:18:31 +0000 (11:18 +0100)]
x86inc: Add cvisible macro for C functions with public prefix

This allows defining externally visible library symbols.

Signed-off-by: Diego Biurrun <diego@biurrun.de>
6 years agox86inc: rename program_name to private_prefix
Diego Biurrun [Thu, 17 Jan 2013 19:30:37 +0000 (11:30 -0800)]
x86inc: rename program_name to private_prefix
Synced from libav.
The new name is more descriptive and will allow defining a separate public
prefix for externally visible library symbols.

6 years agox264.h: improve x264_encoder_reconfig documentation
Jason Garrett-Glaser [Mon, 14 Jan 2013 13:35:30 +0000 (05:35 -0800)]
x264.h: improve x264_encoder_reconfig documentation

6 years agoCosmetics: stricter definition of parameterless functions
Henrik Gramner [Sat, 16 Feb 2013 18:36:50 +0000 (19:36 +0100)]
Cosmetics: stricter definition of parameterless functions

6 years agoUpdate "Install and compile x264" in doc/regression_test.txt
Neil [Mon, 28 Jan 2013 02:47:38 +0000 (10:47 +0800)]
Update "Install and compile x264" in doc/regression_test.txt

6 years agoFix possible non-determinism with mbtree + open-gop + sync-lookahead
Anton Mitrofanov [Thu, 24 Jan 2013 08:11:26 +0000 (12:11 +0400)]
Fix possible non-determinism with mbtree + open-gop + sync-lookahead

Code assumed keyframe analysis would only pull one frame off the list; this
isn't true with open-gop.

6 years agox86: don't use the red zone on win64
Anton Mitrofanov [Mon, 25 Feb 2013 15:28:19 +0000 (19:28 +0400)]
x86: don't use the red zone on win64