1. 06 Mar, 2019 1 commit
  2. 17 Jan, 2018 1 commit
  3. 24 Dec, 2017 4 commits
    • Martin Storsjö's avatar
      arm: Check for __ELF__ instead of !__APPLE__, for using .arch/.fpu · 7b13b31b
      Martin Storsjö authored
      For windows, when building with armasm, we already filtered these out
      with gas-preprocessor.
      
      By filtering them out already in the source, we can also build directly
      with clang for windows (which also require wrapping the assembler in
      gas-preprocessor for converting instructions to thumb form, but
      gas-preprocessor doesn't and shouldn't filter out them in the clang
      configuration).
      7b13b31b
    • Vittorio Giovara's avatar
      Unify 8-bit and 10-bit CLI and libraries · 71ed44c7
      Vittorio Giovara authored
      Add 'i_bitdepth' to x264_param_t with the corresponding '--output-depth' CLI
      option to set the bit depth at runtime.
      
      Drop the 'x264_bit_depth' global variable. Rather than hardcoding it to an
      incorrect value, it's preferable to induce a linking failure. If applications
      relies on this symbol this will make it more obvious where the problem is.
      
      Add Makefile rules that compiles modules with different bit depths. Assembly
      on x86 is prefixed with the 'private_prefix' define, while all other archs
      modify their function prefix internally.
      
      Templatize the main C library, x86/x86_64 assembly, ARM assembly, AARCH64
      assembly, PowerPC assembly, and MIPS assembly.
      
      The depth and cache CLI filters heavily depend on bit depth size, so they
      need to be duplicated for each value. This means having to rename these
      filters, and adjust the callers to use the right version.
      
      Unfortunately the threaded input CLI module inherits a common.h dependency
      (input/frame -> common/threadpool -> common/frame -> common/common) which
      is extremely complicated to address in a sensible way. Instead duplicate
      the module and select the appropriate one at run time.
      
      Each bitdepth needs different checkasm compilation rules, so split the main
      checkasm target into two executables.
      71ed44c7
    • Vittorio Giovara's avatar
    • Vittorio Giovara's avatar
  4. 14 Jun, 2017 1 commit
    • Martin Storsjö's avatar
      arm: Update the var2 functions to the new signature · 824802ad
      Martin Storsjö authored
      The existing functions could easily be used by just calling them
      twice - this would give the following cycle numbers from checkasm:
      
                   Cortex A7     A8     A9   A53
      var2_8x8_c:       7302   5342   5050  4400
      var2_8x8_neon:    2645   1612   1932  1715
      var2_8x16_c:     14300  10528  10020  8637
      var2_8x16_neon:   5127   2695   3217  2651
      
      However, by merging both passes into the same function, we get the
      following speedup:
      var2_8x8_neon:    2312   1190   1389  1300
      var2_8x16_neon:   4862   2130   2293  2422
      824802ad
  5. 21 May, 2017 6 commits
  6. 21 Jan, 2017 2 commits
  7. 29 Dec, 2016 1 commit
  8. 01 Dec, 2016 1 commit
    • Anton Mitrofanov's avatar
      Cosmetics · b2b39dae
      Anton Mitrofanov authored
      Also make x264_weighted_reference_duplicate() static.
      b2b39dae
  9. 21 Nov, 2016 1 commit
    • Martin Storsjö's avatar
      arm: Don't use vcmp.f64 for testing for an all-zeros register · 834e1b11
      Martin Storsjö authored
      On iOS, vcmp.f64 can behave as if the register was zero, if the
      register (interpreted as a f64), was a denormal number.
      
      The vcmp.f64 (and other VFP instructions) will trap to the kernel
      (which is supposed to implement the FP operation, which it apparently
      doesn't do properly on iOS) if the value is a denormal. If this happens,
      the whole comparison ends up way more costly.
      834e1b11
  10. 17 Sep, 2016 1 commit
  11. 13 Jun, 2016 1 commit
  12. 16 Jan, 2016 1 commit
  13. 20 Dec, 2015 2 commits
    • Janne Grunau's avatar
      arm: do not fill mc_weight*_neon tabs for HIGH_BIT_DEPTH · 42453453
      Janne Grunau authored
      The asm is only for 8-bit and function prototypes reflect that. Avoids
      numerous warnings with --bit-depth=9/10.
      42453453
    • Janne Grunau's avatar
      arm: Eliminate text relocations in asm · df51d8ef
      Janne Grunau authored
      Android 6 does not link shared libraries with text relocations.
      
      Make the movrel macro position independent and add movrelx for indirect
      loads of external symbols.
      
      Move the function pointer table for the aligned memcpy variants to the
      data.rel.ro section on Linux/Android.
      df51d8ef
  14. 17 Oct, 2015 1 commit
  15. 11 Oct, 2015 16 commits
    • Martin Storsjö's avatar
      arm: Implement x264_mbtree_propagate_{cost, list}_neon · 6f04b146
      Martin Storsjö authored
      The cost function could be simplified to avoid having to clobber
      q4/q5, but this requires reordering instructions which increase
      the total runtime.
      
      checkasm timing       Cortex-A7      A8      A9
      mbtree_propagate_cost_c      63702   155835  62829
      mbtree_propagate_cost_neon   17199   10454   11106
      
      mbtree_propagate_list_c      104203  108949  84532
      mbtree_propagate_list_neon   82035   78348   60410
      6f04b146
    • Martin Storsjö's avatar
      arm: Implement luma intra deblocking · 654901df
      Martin Storsjö authored
      checkasm timing       Cortex-A7      A8     A9
      deblock_luma_intra[0]_c      5988    4653   4316
      deblock_luma_intra[0]_neon   3103    2170   2128
      deblock_luma_intra[1]_c      7119    5905   5347
      deblock_luma_intra[1]_neon   2068    1381   1412
      
      This includes extra optimizations by Janne Grunau.
      
      Timings from a separate build, on Exynos 5422:
      
                            Cortex-A7     A15
      deblock_luma_intra[0]_c      6627   3300
      deblock_luma_intra[0]_neon   3059   1128
      deblock_luma_intra[1]_c      7314   4128
      deblock_luma_intra[1]_neon   2038   720
      654901df
    • Martin Storsjö's avatar
      arm: Implement some neon 8x16c intra predict functions · e2696a60
      Martin Storsjö authored
      checkasm timing       Cortex-A7      A8     A9
      intra_predict_8x16c_dct_c    862     540    590
      intra_predict_8x16c_dct_neon 608     511    657
      intra_predict_8x16c_h_c      972     707    719
      intra_predict_8x16c_h_neon   722     656    672
      intra_predict_8x16c_p_c      10183   9819   8655
      intra_predict_8x16c_p_neon   2622    1972   1983
      e2696a60
    • Martin Storsjö's avatar
      arm: Implement x264_plane_copy_neon · 5db8b6b9
      Martin Storsjö authored
      checkasm timing       Cortex-A7      A8     A9
      plane_copy_c                 13124   10925  9106
      plane_copy_neon              7349    5103   8945
      5db8b6b9
    • Martin Storsjö's avatar
      arm: Implement x284_decimate_score15/16/64_neon · 5c13589b
      Martin Storsjö authored
      checkasm timing       Cortex-A7      A8     A9
      decimate_score15_c           764     736    535
      decimate_score15_neon        487     494    453
      decimate_score16_c           782     727    553
      decimate_score16_neon        487     494    521
      decimate_score64_c           2361    2597   2011
      decimate_score64_neon        1017    802    785
      5c13589b
    • Martin Storsjö's avatar
      arm: Implement chroma intra deblock · 3902ae02
      Martin Storsjö authored
      checkasm timing              Cortex-A7      A8     A9
      deblock_chroma_420_intra_mbaff_c    1469    1276   1181
      deblock_chroma_420_intra_mbaff_neon 981     717    644
      deblock_chroma_intra[1]_c           2954    2402   2321
      deblock_chroma_intra[1]_neon        947     581    575
      deblock_h_chroma_420_intra_c        2859    2509   2264
      deblock_h_chroma_420_intra_neon     1480    1119   1028
      deblock_h_chroma_422_intra_c        6211    5030   4792
      deblock_h_chroma_422_intra_neon     2894    1990   2077
      3902ae02
    • Martin Storsjö's avatar
      arm: Implement x264_pixel_sa8d_satd_16x16_neon · e8b95e92
      Martin Storsjö authored
      This requires spilling some registers to the stack,
      contray to the aarch64 version.
      
      checkasm timing        Cortex-A7      A8     A9
      sa8d_satd_16x16_neon          12936   6365   7492
      sa8d_satd_16x16_separate_neon 14841   6605   8324
      e8b95e92
    • Martin Storsjö's avatar
      arm: Implement x264_deblock_h_chroma_mbaff_neon · 6bbaa275
      Martin Storsjö authored
      checkasm timing        Cortex-A7      A8     A9
      deblock_chroma_420_mbaff_c    1944    1706   1526
      deblock_chroma_420_mbaff_neon 1210    873    865
      6bbaa275
    • Martin Storsjö's avatar
      arm: Implement x264_deblock_h_chroma_422_neon · 3c66591e
      Martin Storsjö authored
      checkasm timing       Cortex-A7      A8     A9
      deblock_h_chroma_422_c       6953    6269   5145
      deblock_h_chroma_422_neon    3905    2569   2551
      3c66591e
    • Martin Storsjö's avatar
      arm: Implement integral_init4/8h/v_neon · 5265b927
      Martin Storsjö authored
      checkasm timing       Cortex-A7      A8     A9
      integral_init4h_c            10466   8590   6161
      integral_init4h_neon         3021    1494   1800
      integral_init4v_c            16250   13590  13628
      integral_init4v_neon         3473    2073   3291
      integral_init8h_c            10100   8275   5705
      integral_init8h_neon         4403    2344   2751
      integral_init8v_c            6403    4632   4999
      integral_init8v_neon         1184    783    1306
      5265b927
    • Martin Storsjö's avatar
      arm: Implement x264_denoise_dct_neon · b08403b5
      Martin Storsjö authored
      checkasm timing       Cortex-A7      A8     A9
      denoise_dct_c                6604    5510   5858
      denoise_dct_neon             1774    1139   1614
      b08403b5
    • Martin Storsjö's avatar
      arm: Add x264_nal_escape_neon · ceee976b
      Martin Storsjö authored
      checkasm timing      Cortex-A7      A8      A9
      nal_escape_c                852758  879566  655497
      nal_escape_neon             376831  450678  371673
      ceee976b
    • Martin Storsjö's avatar
      arm: Add neon versions of vsad, asd8 and ssd_nv12_core · 8feb733e
      Martin Storsjö authored
      These are straight translations of the aarch64 versions.
      
      checkasm timing      Cortex-A7      A8      A9
      vsad_c                      16234   10984   9850
      vsad_neon                   2132    1020    789
      
      asd8_c                      5859    3561    3543
      asd8_neon                   1407    1279    1250
      
      ssd_nv12_c                  608096  591072  426285
      ssd_nv12_neon               72752   33549   41347
      8feb733e
    • Martin Storsjö's avatar
      arm: Implement x264_sub8x16_dct_dc_neon · 6efb57ad
      Martin Storsjö authored
      checkasm timing      Cortex-A7      A8     A9
      sub8x16_dct_dc_c            6386    3901   4080
      sub8x16_dct_dc_neon         1491    698    917
      6efb57ad
    • Martin Storsjö's avatar
      arm: Optimize x264_deblock_h_chroma_neon · 89439b2c
      Martin Storsjö authored
      Shuffle both chroma components together as a 16 bit unit, and
      don't write the unchanged columns (like in x264_deblock_h_luma_neon
      and in the aarch64 version of the function).
      
      This causes a minor slowdown for x264_deblock_v_chroma_neon, but
      it is negligible compared to the speedup.
      
      checkasm timing      Cortex-A7    A8    A9
      deblock_chroma[1]_c         4817  4057  3601
      deblock_chroma[1]_neon      1249  716   817   (before)
      deblock_chroma[1]_neon      1249  766   845   (after)
      
      deblock_h_chroma_420_c      3699  3275  2830
      deblock_h_chroma_420_neon   2068  1414  1400  (before)
      deblock_h_chroma_420_neon   1838  1355  1291  (after)
      89439b2c
    • Martin Storsjö's avatar
      arm: Use aligned loads in x264_coeff_last15_neon · d2b04a26
      Martin Storsjö authored
      After subtracting 2, the pointer will be aligned.
      
      checkasm timing      Cortex-A7    A8    A9
      coeff_last15_c              423   375   230
      coeff_last15_neon           350   420   404  (before)
      coeff_last15_neon           350   400   394  (after)
      d2b04a26