[haiku-commits] r38593 - in haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil: . arm ppc

  • From: korli@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 9 Sep 2010 21:55:09 +0200 (CEST)

Author: korli
Date: 2010-09-09 21:55:09 +0200 (Thu, 09 Sep 2010)
New Revision: 38593
Changeset: http://dev.haiku-os.org/changeset/38593

Added:
   haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/arm/
   haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/arm/intreadwrite.h
   haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/arm/timer.h
   haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/ppc/
   haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/ppc/intreadwrite.h
   haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/ppc/timer.h
Log:
added missing ppc and arm files


Added: haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/arm/intreadwrite.h
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/arm/intreadwrite.h   
                        (rev 0)
+++ haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/arm/intreadwrite.h   
2010-09-09 19:55:09 UTC (rev 38593)
@@ -0,0 +1,78 @@
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVUTIL_ARM_INTREADWRITE_H
+#define AVUTIL_ARM_INTREADWRITE_H
+
+#include <stdint.h>
+#include "config.h"
+
+#if HAVE_FAST_UNALIGNED && HAVE_INLINE_ASM
+
+#define AV_RN16 AV_RN16
+static av_always_inline uint16_t AV_RN16(const void *p)
+{
+    uint16_t v;
+    __asm__ ("ldrh %0, %1" : "=r"(v) : "m"(*(const uint16_t *)p));
+    return v;
+}
+
+#define AV_WN16 AV_WN16
+static av_always_inline void AV_WN16(void *p, uint16_t v)
+{
+    __asm__ ("strh %1, %0" : "=m"(*(uint16_t *)p) : "r"(v));
+}
+
+#define AV_RN32 AV_RN32
+static av_always_inline uint32_t AV_RN32(const void *p)
+{
+    uint32_t v;
+    __asm__ ("ldr  %0, %1" : "=r"(v) : "m"(*(const uint32_t *)p));
+    return v;
+}
+
+#define AV_WN32 AV_WN32
+static av_always_inline void AV_WN32(void *p, uint32_t v)
+{
+    __asm__ ("str  %1, %0" : "=m"(*(uint32_t *)p) : "r"(v));
+}
+
+#define AV_RN64 AV_RN64
+static av_always_inline uint64_t AV_RN64(const void *p)
+{
+    union { uint64_t v; uint32_t hl[2]; } v;
+    __asm__ ("ldr   %0, %2  \n\t"
+             "ldr   %1, %3  \n\t"
+             : "=&r"(v.hl[0]), "=r"(v.hl[1])
+             : "m"(*(const uint32_t*)p), "m"(*((const uint32_t*)p+1)));
+    return v.v;
+}
+
+#define AV_WN64 AV_WN64
+static av_always_inline void AV_WN64(void *p, uint64_t v)
+{
+    union { uint64_t v; uint32_t hl[2]; } vv = { v };
+    __asm__ ("str  %2, %0  \n\t"
+             "str  %3, %1  \n\t"
+             : "=m"(*(uint32_t*)p), "=m"(*((uint32_t*)p+1))
+             : "r"(vv.hl[0]), "r"(vv.hl[1]));
+}
+
+#endif /* HAVE_INLINE_ASM */
+
+#endif /* AVUTIL_ARM_INTREADWRITE_H */

Added: haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/arm/timer.h
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/arm/timer.h          
                (rev 0)
+++ haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/arm/timer.h  
2010-09-09 19:55:09 UTC (rev 38593)
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2009 Mans Rullgard <mans@xxxxxxxxx>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVUTIL_ARM_TIMER_H
+#define AVUTIL_ARM_TIMER_H
+
+#include <stdint.h>
+#include "config.h"
+
+#if HAVE_INLINE_ASM && defined(__ARM_ARCH_7A__)
+
+#define AV_READ_TIME read_time
+
+static inline uint64_t read_time(void)
+{
+    unsigned cc;
+    __asm__ volatile ("mrc p15, 0, %0, c9, c13, 0" : "=r"(cc));
+    return cc;
+}
+
+#endif /* HAVE_INLINE_ASM && __ARM_ARCH_7A__ */
+
+#endif /* AVUTIL_ARM_TIMER_H */

Added: haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/ppc/intreadwrite.h
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/ppc/intreadwrite.h   
                        (rev 0)
+++ haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/ppc/intreadwrite.h   
2010-09-09 19:55:09 UTC (rev 38593)
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2008 Mans Rullgard <mans@xxxxxxxxx>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVUTIL_PPC_INTREADWRITE_H
+#define AVUTIL_PPC_INTREADWRITE_H
+
+#include <stdint.h>
+#include "config.h"
+
+#if HAVE_XFORM_ASM
+
+#define AV_RL16 AV_RL16
+static av_always_inline uint16_t AV_RL16(const void *p)
+{
+    uint16_t v;
+    __asm__ ("lhbrx   %0, %y1" : "=r"(v) : "Z"(*(const uint16_t*)p));
+    return v;
+}
+
+#define AV_WL16 AV_WL16
+static av_always_inline void AV_WL16(void *p, uint16_t v)
+{
+    __asm__ ("sthbrx  %1, %y0" : "=Z"(*(uint16_t*)p) : "r"(v));
+}
+
+#define AV_RL32 AV_RL32
+static av_always_inline uint32_t AV_RL32(const void *p)
+{
+    uint32_t v;
+    __asm__ ("lwbrx   %0, %y1" : "=r"(v) : "Z"(*(const uint32_t*)p));
+    return v;
+}
+
+#define AV_WL32 AV_WL32
+static av_always_inline void AV_WL32(void *p, uint32_t v)
+{
+    __asm__ ("stwbrx  %1, %y0" : "=Z"(*(uint32_t*)p) : "r"(v));
+}
+
+#if HAVE_LDBRX
+
+#define AV_RL64 AV_RL64
+static av_always_inline uint64_t AV_RL64(const void *p)
+{
+    uint64_t v;
+    __asm__ ("ldbrx   %0, %y1" : "=r"(v) : "Z"(*(const uint64_t*)p));
+    return v;
+}
+
+#define AV_WL64 AV_WL64
+static av_always_inline void AV_WL64(void *p, uint64_t v)
+{
+    __asm__ ("stdbrx  %1, %y0" : "=Z"(*(uint64_t*)p) : "r"(v));
+}
+
+#else
+
+#define AV_RL64 AV_RL64
+static av_always_inline uint64_t AV_RL64(const void *p)
+{
+    union { uint64_t v; uint32_t hl[2]; } v;
+    __asm__ ("lwbrx   %0, %y2  \n\t"
+             "lwbrx   %1, %y3  \n\t"
+             : "=&r"(v.hl[1]), "=r"(v.hl[0])
+             : "Z"(*(const uint32_t*)p), "Z"(*((const uint32_t*)p+1)));
+    return v.v;
+}
+
+#define AV_WL64 AV_WL64
+static av_always_inline void AV_WL64(void *p, uint64_t v)
+{
+    union { uint64_t v; uint32_t hl[2]; } vv = { v };
+    __asm__ ("stwbrx  %2, %y0  \n\t"
+             "stwbrx  %3, %y1  \n\t"
+             : "=Z"(*(uint32_t*)p), "=Z"(*((uint32_t*)p+1))
+             : "r"(vv.hl[1]), "r"(vv.hl[0]));
+}
+
+#endif /* HAVE_LDBRX */
+
+#endif /* HAVE_XFORM_ASM */
+
+/*
+ * GCC fails miserably on the packed struct version which is used by
+ * default, so we override it here.
+ */
+
+#define AV_RB64(p) (*(const uint64_t *)(p))
+#define AV_WB64(p, v) (*(uint64_t *)(p) = (v))
+
+#endif /* AVUTIL_PPC_INTREADWRITE_H */

Added: haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/ppc/timer.h
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/ppc/timer.h          
                (rev 0)
+++ haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil/ppc/timer.h  
2010-09-09 19:55:09 UTC (rev 38593)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2005 Luca Barbato <lu_zero@xxxxxxxxxx>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVUTIL_PPC_TIMER_H
+#define AVUTIL_PPC_TIMER_H
+
+#include <stdint.h>
+
+#define AV_READ_TIME read_time
+
+static inline uint64_t read_time(void)
+{
+    uint32_t tbu, tbl, temp;
+
+     /* from section 2.2.1 of the 32-bit PowerPC PEM */
+     __asm__ volatile(
+         "1:\n"
+         "mftbu  %2\n"
+         "mftb   %0\n"
+         "mftbu  %1\n"
+         "cmpw   %2,%1\n"
+         "bne    1b\n"
+     : "=r"(tbl), "=r"(tbu), "=r"(temp)
+     :
+     : "cc");
+
+     return (((uint64_t)tbu)<<32) | (uint64_t)tbl;
+}
+
+#endif /* AVUTIL_PPC_TIMER_H */


Other related posts:

  • » [haiku-commits] r38593 - in haiku/trunk/src/add-ons/media/plugins/ffmpeg/libavutil: . arm ppc - korli