## ffmpeg / libavcodec / ppc / mathops.h @ 1ee076b1

History | View | Annotate | Download (2.43 KB)

1 | 99aed7c8 | Luca Barbato | ```
/*
``` |
---|---|---|---|

2 | ```
* simple math operations
``` |
||

3 | 406792e7 | Diego Biurrun | ```
* Copyright (c) 2001, 2002 Fabrice Bellard
``` |

4 | 99aed7c8 | Luca Barbato | ```
* Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> et al
``` |

5 | ```
*
``` |
||

6 | b78e7197 | Diego Biurrun | ```
* This file is part of FFmpeg.
``` |

7 | ```
*
``` |
||

8 | ```
* FFmpeg is free software; you can redistribute it and/or
``` |
||

9 | 99aed7c8 | Luca Barbato | ```
* modify it under the terms of the GNU Lesser General Public
``` |

10 | ```
* License as published by the Free Software Foundation; either
``` |
||

11 | b78e7197 | Diego Biurrun | ```
* version 2.1 of the License, or (at your option) any later version.
``` |

12 | 99aed7c8 | Luca Barbato | ```
*
``` |

13 | b78e7197 | Diego Biurrun | ```
* FFmpeg is distributed in the hope that it will be useful,
``` |

14 | 99aed7c8 | Luca Barbato | ```
* but WITHOUT ANY WARRANTY; without even the implied warranty of
``` |

15 | ```
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
``` |
||

16 | ```
* Lesser General Public License for more details.
``` |
||

17 | ```
*
``` |
||

18 | ```
* You should have received a copy of the GNU Lesser General Public
``` |
||

19 | b78e7197 | Diego Biurrun | ```
* License along with FFmpeg; if not, write to the Free Software
``` |

20 | 99aed7c8 | Luca Barbato | ```
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
``` |

21 | ```
*/
``` |
||

22 | |||

23 | 98790382 | Stefano Sabatini | ```
#ifndef AVCODEC_PPC_MATHOPS_H
``` |

24 | ```
#define AVCODEC_PPC_MATHOPS_H
``` |
||

25 | 699b3f99 | Måns Rullgård | |

26 | c7312933 | Måns Rullgård | #include <stdint.h> |

27 | deb1b2b6 | Diego Biurrun | #include "config.h" |

28 | c7312933 | Måns Rullgård | #include "libavutil/common.h" |

29 | 4ceb4e31 | Diego Biurrun | |

30 | 799fde37 | Diego Biurrun | ```
#if HAVE_PPC4XX
``` |

31 | 99aed7c8 | Luca Barbato | ```
/* signed 16x16 -> 32 multiply add accumulate */
``` |

32 | e3905ce0 | Diego Biurrun | ```
#define MAC16(rt, ra, rb) \
``` |

33 | be449fca | Diego Pettenò | __asm__ ("maclhw %0, %2, %3" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb)); |

34 | 99aed7c8 | Luca Barbato | |

35 | ```
/* signed 16x16 -> 32 multiply */
``` |
||

36 | e3905ce0 | Diego Biurrun | ```
#define MUL16(ra, rb) \
``` |

37 | ```
({ int __rt; \
``` |
||

38 | be449fca | Diego Pettenò | __asm__ ("mullhw %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb)); \ |

39 | e3905ce0 | Diego Biurrun | __rt; }) |

40 | 99aed7c8 | Luca Barbato | ```
#endif
``` |

41 | 699b3f99 | Måns Rullgård | |

42 | 3737dd1c | Måns Rullgård | ```
#define MULH MULH
``` |

43 | static inline av_const int MULH(int a, int b){ |
||

44 | ```
int r;
``` |
||

45 | __asm__ ("mulhw %0, %1, %2" : "=r"(r) : "r"(a), "r"(b)); |
||

46 | ```
return r;
``` |
||

47 | } |
||

48 | |||

49 | 34d11b87 | Reimar Döffinger | ```
#if !ARCH_PPC64
``` |

50 | 014b7ecb | Måns Rullgård | static inline av_const int64_t MAC64(int64_t d, int a, int b) |

51 | { |
||

52 | union { uint64_t x; unsigned hl[2]; } x = { d }; |
||

53 | ```
int h, l;
``` |
||

54 | ```
__asm__ ("mullw %3, %4, %5 \n\t"
``` |
||

55 | ```
"mulhw %2, %4, %5 \n\t"
``` |
||

56 | ```
"addc %1, %1, %3 \n\t"
``` |
||

57 | ```
"adde %0, %0, %2 \n\t"
``` |
||

58 | : "+r"(x.hl[0]), "+r"(x.hl[1]), "=&r"(h), "=&r"(l) |
||

59 | : "r"(a), "r"(b)); |
||

60 | ```
return x.x;
``` |
||

61 | } |
||

62 | ```
#define MAC64(d, a, b) ((d) = MAC64(d, a, b))
``` |
||

63 | |||

64 | static inline av_const int64_t MLS64(int64_t d, int a, int b) |
||

65 | { |
||

66 | union { uint64_t x; unsigned hl[2]; } x = { d }; |
||

67 | ```
int h, l;
``` |
||

68 | ```
__asm__ ("mullw %3, %4, %5 \n\t"
``` |
||

69 | ```
"mulhw %2, %4, %5 \n\t"
``` |
||

70 | ```
"subfc %1, %3, %1 \n\t"
``` |
||

71 | ```
"subfe %0, %2, %0 \n\t"
``` |
||

72 | : "+r"(x.hl[0]), "+r"(x.hl[1]), "=&r"(h), "=&r"(l) |
||

73 | : "r"(a), "r"(b)); |
||

74 | ```
return x.x;
``` |
||

75 | } |
||

76 | ```
#define MLS64(d, a, b) ((d) = MLS64(d, a, b))
``` |
||

77 | ```
#endif
``` |
||

78 | |||

79 | 98790382 | Stefano Sabatini | #endif /* AVCODEC_PPC_MATHOPS_H */ |