1. 08 Aug, 2012 1 commit
  2. 07 Aug, 2012 3 commits
  3. 05 Aug, 2012 1 commit
  4. 03 Aug, 2012 5 commits
  5. 02 Aug, 2012 5 commits
  6. 01 Aug, 2012 2 commits
  7. 31 Jul, 2012 3 commits
  8. 28 Jul, 2012 6 commits
  9. 27 Jul, 2012 5 commits
  10. 26 Jul, 2012 2 commits
  11. 25 Jul, 2012 3 commits
    • Ronald S. Bultje's avatar
      vp3: don't use calls to inline asm in yasm code. · a1878a88
      Ronald S. Bultje authored
      Mixing yasm and inline asm is a bad idea, since if either yasm or inline
      asm is not supported by your toolchain, all of the asm stops working.
      Thus, better to use either one or the other alone.
      Signed-off-by: 's avatarDerek Buitenhuis <derek.buitenhuis@gmail.com>
      a1878a88
    • Ronald S. Bultje's avatar
      x86/dsputil: put inline asm under HAVE_INLINE_ASM. · 79195ce5
      Ronald S. Bultje authored
      This allows compiling with compilers that don't support gcc-style
      inline assembly.
      Signed-off-by: 's avatarDerek Buitenhuis <derek.buitenhuis@gmail.com>
      79195ce5
    • Yang Wang's avatar
      dsputil_mmx: fix incorrect assembly code · 845e92fd
      Yang Wang authored
      In ff_put_pixels_clamped_mmx(), there are two assembly code blocks.
      In the first block (in the unrolled loop), the instructions
      "movq 8%3, %%mm1 \n\t", and so forth, have problems.
      
      From above instruction, it is clear what the programmer wants: a load from
      p + 8. But this assembly code doesn’t guarantee that. It only works if the
      compiler puts p in a register to produce an instruction like this:
      "movq 8(%edi), %mm1". During compiler optimization, it is possible that the
      compiler will be able to constant propagate into p. Suppose p = &x[10000].
      Then operand 3 can become 10000(%edi), where %edi holds &x. And the instruction
      becomes "movq 810000(%edx)". That is, it will stride by 810000 instead of 8.
      
      This will cause a segmentation fault.
      
      This error was fixed in the second block of the assembly code, but not in
      the unrolled loop.
      
      How to reproduce:
          This error is exposed when we build using Intel C++ Compiler, with
          IPO+PGO optimization enabled. Crashed when decoding an MJPEG video.
      Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
      Signed-off-by: 's avatarDerek Buitenhuis <derek.buitenhuis@gmail.com>
      845e92fd
  12. 23 Jul, 2012 1 commit
    • yang's avatar
      dsputil_mmx: fix incorrect assembly code · 6a2bad2c
      yang authored
      In file libavcodec/x86/dsputil_mmx.c, function ff_put_pixels_clamped_mmx(), there are two assembly code blocks. In the first block (in the unrolled loop), the instructions "movq 8%3, %%mm1 \n\t" etc have problem.
      For above instruction, it is clear what the programmer wants: a load from p + 8. But this assembly code doesn’t guarantee that. It only works if the compiler puts p in a register to produce an instruction like this: “movq 8(%edi), %mm1”. During compiler optimization, it is possible that the compiler will be able to constant propagate into p. Suppose p = &x[10000]. Then operand 3 can become 10000(%edi), where %edi holds &x. And the instruction becomes “movq 810000(%edx)”. That is, it will stride by 810000 instead of 8.
      This will cause the segmentation fault.
      This error was fixed in the second block of the assembly code, but not in the unrolled loop.
      
      How to reproduce:
      This error is exposed when we build the ffmpeg using Intel C++ Compiler, IPO+PGO optimization. The ffmpeg was crashed when decoding a mjpeg video.
      Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
      6a2bad2c
  13. 22 Jul, 2012 1 commit
  14. 19 Jul, 2012 1 commit
  15. 18 Jul, 2012 1 commit