You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.0KB

  1. ;*****************************************************************************
  2. ;* x86-optimized AC-3 DSP utils
  3. ;* Copyright (c) 2011 Justin Ruggles
  4. ;*
  5. ;* This file is part of FFmpeg.
  6. ;*
  7. ;* FFmpeg is free software; you can redistribute it and/or
  8. ;* modify it under the terms of the GNU Lesser General Public
  9. ;* License as published by the Free Software Foundation; either
  10. ;* version 2.1 of the License, or (at your option) any later version.
  11. ;*
  12. ;* FFmpeg is distributed in the hope that it will be useful,
  13. ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. ;* Lesser General Public License for more details.
  16. ;*
  17. ;* You should have received a copy of the GNU Lesser General Public
  18. ;* License along with FFmpeg; if not, write to the Free Software
  19. ;* 51, Inc., Foundation Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. ;******************************************************************************
  21. %include "x86inc.asm"
  22. %include "x86util.asm"
  23. SECTION .text
  24. ;-----------------------------------------------------------------------------
  25. ; void ff_ac3_exponent_min(uint8_t *exp, int num_reuse_blocks, int nb_coefs)
  26. ;-----------------------------------------------------------------------------
  27. %macro AC3_EXPONENT_MIN 1
  28. cglobal ac3_exponent_min_%1, 3,4,2, exp, reuse_blks, expn, offset
  29. shl reuse_blksq, 8
  30. jz .end
  31. LOOP_ALIGN
  32. .nextexp:
  33. mov offsetq, reuse_blksq
  34. mova m0, [expq+offsetq]
  35. sub offsetq, 256
  36. LOOP_ALIGN
  37. .nextblk:
  38. PMINUB m0, [expq+offsetq], m1
  39. sub offsetq, 256
  40. jae .nextblk
  41. mova [expq], m0
  42. add expq, mmsize
  43. sub expnq, mmsize
  44. jg .nextexp
  45. .end:
  46. REP_RET
  47. %endmacro
  48. %define PMINUB PMINUB_MMX
  49. %define LOOP_ALIGN
  50. INIT_MMX
  51. AC3_EXPONENT_MIN mmx
  52. %ifdef HAVE_MMX2
  53. %define PMINUB PMINUB_MMXEXT
  54. %define LOOP_ALIGN ALIGN 16
  55. AC3_EXPONENT_MIN mmxext
  56. %endif
  57. %ifdef HAVE_SSE
  58. INIT_XMM
  59. AC3_EXPONENT_MIN sse2
  60. %endif
  61. %undef PMINUB
  62. %undef LOOP_ALIGN