## ffmpeg / libavcodec / x86 / ac3dsp.asm @ a30ac54a

History | View | Annotate | Download (1.99 KB)

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 | |

22 |
%include "x86inc.asm" |

23 |
%include "x86util.asm" |

24 | |

25 |
SECTION .text |

26 | |

27 |
;----------------------------------------------------------------------------- |

28 |
; void ff_ac3_exponent_min(uint8_t *exp, int num_reuse_blocks, int nb_coefs) |

29 |
;----------------------------------------------------------------------------- |

30 | |

31 |
%macro AC3_EXPONENT_MIN 1 |

32 |
cglobal ac3_exponent_min_%1, 3,4,2, exp, reuse_blks, expn, offset |

33 |
shl reuse_blksq, 8 |

34 |
jz .end |

35 |
LOOP_ALIGN |

36 |
.nextexp: |

37 |
mov offsetq, reuse_blksq |

38 |
mova m0, [expq+offsetq] |

39 |
sub offsetq, 256 |

40 |
LOOP_ALIGN |

41 |
.nextblk: |

42 |
PMINUB m0, [expq+offsetq], m1 |

43 |
sub offsetq, 256 |

44 |
jae .nextblk |

45 |
mova [expq], m0 |

46 |
add expq, mmsize |

47 |
sub expnq, mmsize |

48 |
jg .nextexp |

49 |
.end: |

50 |
REP_RET |

51 |
%endmacro |

52 | |

53 |
%define PMINUB PMINUB_MMX |

54 |
%define LOOP_ALIGN |

55 |
INIT_MMX |

56 |
AC3_EXPONENT_MIN mmx |

57 |
%ifdef HAVE_MMX2 |

58 |
%define PMINUB PMINUB_MMXEXT |

59 |
%define LOOP_ALIGN ALIGN 16 |

60 |
AC3_EXPONENT_MIN mmxext |

61 |
%endif |

62 |
%ifdef HAVE_SSE |

63 |
INIT_XMM |

64 |
AC3_EXPONENT_MIN sse2 |

65 |
%endif |

66 |
%undef PMINUB |

67 |
%undef LOOP_ALIGN |