media/libvpx/solaris.patch
author Michael Yoshitaka Erlewine <mitcho@mitcho.com>
Wed, 09 Feb 2011 15:33:43 -0500
changeset 62319 722013f84d1f80353fb8e8fc0ad1725f000f16dc
parent 57090 2ef1a570e14eedbb0b6e9595ace7a78d77ac2298
permissions -rw-r--r--
Bug 618854 - Make Panorama group highlighting more visible [rs=gavin, ui-review=faaborg, a=gavin]

diff --git a/media/libvpx/vp8/common/loopfilter_filters.c b/media/libvpx/vp8/common/loopfilter_filters.c
--- a/media/libvpx/vp8/common/loopfilter_filters.c
+++ b/media/libvpx/vp8/common/loopfilter_filters.c
@@ -11,10 +11,14 @@
 
 #include <stdlib.h>
 #include "loopfilter.h"
 #include "onyxc_int.h"
 
+#ifdef __SUNPRO_C
+#define __inline inline
+#endif
+
 typedef unsigned char uc;
 
 static __inline signed char vp8_signed_char_clamp(int t)
 {
     t = (t < -128 ? -128 : t);
diff --git a/media/libvpx/vpx/internal/vpx_codec_internal.h b/media/libvpx/vpx/internal/vpx_codec_internal.h
--- a/media/libvpx/vpx/internal/vpx_codec_internal.h
+++ b/media/libvpx/vpx/internal/vpx_codec_internal.h
@@ -316,17 +316,17 @@ struct vpx_codec_iface
 
 /*!\brief Callback function pointer / user data pair storage */
 typedef struct vpx_codec_priv_cb_pair
 {
     union
     {
         vpx_codec_put_frame_cb_fn_t    put_frame;
         vpx_codec_put_slice_cb_fn_t    put_slice;
-    };
+    } fn;
     void                            *user_priv;
 } vpx_codec_priv_cb_pair_t;
 
 
 /*!\brief Instance private storage
  *
  * This structure is allocated by the algorithm's init function. It can be
  * extended in one of two ways. First, a second, algorithm specific structure
diff --git a/media/libvpx/vpx/src/vpx_decoder.c b/media/libvpx/vpx/src/vpx_decoder.c
--- a/media/libvpx/vpx/src/vpx_decoder.c
+++ b/media/libvpx/vpx/src/vpx_decoder.c
@@ -165,17 +165,17 @@ vpx_codec_err_t vpx_codec_register_put_f
 
     if (!ctx || !cb)
         res = VPX_CODEC_INVALID_PARAM;
     else if (!ctx->iface || !ctx->priv
              || !(ctx->iface->caps & VPX_CODEC_CAP_PUT_FRAME))
         res = VPX_CODEC_ERROR;
     else
     {
-        ctx->priv->dec.put_frame_cb.put_frame = cb;
+        ctx->priv->dec.put_frame_cb.fn.put_frame = cb;
         ctx->priv->dec.put_frame_cb.user_priv = user_priv;
         res = VPX_CODEC_OK;
     }
 
     return SAVE_STATUS(ctx, res);
 }
 
 
@@ -187,17 +187,17 @@ vpx_codec_err_t vpx_codec_register_put_s
 
     if (!ctx || !cb)
         res = VPX_CODEC_INVALID_PARAM;
     else if (!ctx->iface || !ctx->priv
              || !(ctx->iface->caps & VPX_CODEC_CAP_PUT_FRAME))
         res = VPX_CODEC_ERROR;
     else
     {
-        ctx->priv->dec.put_slice_cb.put_slice = cb;
+        ctx->priv->dec.put_slice_cb.fn.put_slice = cb;
         ctx->priv->dec.put_slice_cb.user_priv = user_priv;
         res = VPX_CODEC_OK;
     }
 
     return SAVE_STATUS(ctx, res);
 }
 
 
diff --git a/media/libvpx/vpx_ports/mem.h b/media/libvpx/vpx_ports/mem.h
--- a/media/libvpx/vpx_ports/mem.h
+++ b/media/libvpx/vpx_ports/mem.h
@@ -9,17 +9,17 @@
  */
 
 
 #ifndef VPX_PORTS_MEM_H
 #define VPX_PORTS_MEM_H
 #include "vpx_config.h"
 #include "vpx/vpx_integer.h"
 
-#if defined(__GNUC__) && __GNUC__
+#if (defined(__GNUC__) && __GNUC__) || defined(__SUNPRO_C)
 #define DECLARE_ALIGNED(n,typ,val)  typ val __attribute__ ((aligned (n)))
 #elif defined(_MSC_VER)
 #define DECLARE_ALIGNED(n,typ,val)  __declspec(align(n)) typ val
 #else
 #warning No alignment directives known for this compiler.
 #define DECLARE_ALIGNED(n,typ,val)  typ val
 #endif
 #endif
diff --git a/media/libvpx/vpx_ports/x86.h b/media/libvpx/vpx_ports/x86.h
--- a/media/libvpx/vpx_ports/x86.h
+++ b/media/libvpx/vpx_ports/x86.h
@@ -45,16 +45,36 @@
 #define cpuid(func,ax,bx,cx,dx)\
     __asm__ __volatile__ (\
                           "mov %%ebx, %%edi   \n\t" \
                           "cpuid              \n\t" \
                           "xchg %%edi, %%ebx  \n\t" \
                           : "=a" (ax), "=D" (bx), "=c" (cx), "=d" (dx) \
                           : "a" (func));
 #endif
+#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+#if ARCH_X86_64
+#define cpuid(func,ax,bx,cx,dx)\
+    asm volatile (\
+                  "xchg %rsi, %rbx \n\t" \
+                  "cpuid           \n\t" \
+                  "movl %ebx, %edi \n\t" \
+                  "xchg %rsi, %rbx \n\t" \
+                  : "=a" (ax), "=D" (bx), "=c" (cx), "=d" (dx) \
+                  : "a"  (func));
+#else
+#define cpuid(func,ax,bx,cx,dx)\
+    asm volatile (\
+                  "pushl %ebx       \n\t" \
+                  "cpuid            \n\t" \
+                  "movl %ebx, %edi  \n\t" \
+                  "popl %ebx        \n\t" \
+                  : "=a" (ax), "=D" (bx), "=c" (cx), "=d" (dx) \
+                  : "a" (func));
+#endif
 #else
 #if ARCH_X86_64
 void __cpuid(int CPUInfo[4], int info_type);
 #pragma intrinsic(__cpuid)
 #define cpuid(func,a,b,c,d) do{\
         int regs[4];\
         __cpuid(regs,func); a=regs[0];  b=regs[1];  c=regs[2];  d=regs[3];\
     } while(0)
@@ -108,29 +128,36 @@ unsigned __int64 __rdtsc(void);
 #endif
 static unsigned int
 x86_readtsc(void)
 {
 #if defined(__GNUC__) && __GNUC__
     unsigned int tsc;
     __asm__ __volatile__("rdtsc\n\t":"=a"(tsc):);
     return tsc;
+#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+    unsigned int tsc;
+    asm volatile("rdtsc\n\t":"=a"(tsc):);
+    return tsc;
 #else
 #if ARCH_X86_64
     return __rdtsc();
 #else
     __asm  rdtsc;
 #endif
 #endif
 }
 
 
 #if defined(__GNUC__) && __GNUC__
 #define x86_pause_hint()\
     __asm__ __volatile__ ("pause \n\t")
+#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+#define x86_pause_hint()\
+    asm volatile ("pause \n\t")
 #else
 #if ARCH_X86_64
 /* No pause intrinsic for windows x64 */
 #define x86_pause_hint()
 #else
 #define x86_pause_hint()\
     __asm pause
 #endif
@@ -144,16 +171,29 @@ x87_set_control_word(unsigned short mode
 }
 static unsigned short
 x87_get_control_word(void)
 {
     unsigned short mode;
     __asm__ __volatile__("fstcw %0\n\t":"=m"(*&mode):);
     return mode;
 }
+#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+static void
+x87_set_control_word(unsigned short mode)
+{
+    asm volatile("fldcw %0" : : "m"(*&mode));
+}
+static unsigned short
+x87_get_control_word(void)
+{
+    unsigned short mode;
+    asm volatile("fstcw %0\n\t":"=m"(*&mode):);
+    return mode;
+}
 #elif ARCH_X86_64
 /* No fldcw intrinsics on Windows x64, punt to external asm */
 extern void           vpx_winx64_fldcw(unsigned short mode);
 extern unsigned short vpx_winx64_fstcw(void);
 #define x87_set_control_word vpx_winx64_fldcw
 #define x87_get_control_word vpx_winx64_fstcw
 #else
 static void