DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (5216dd412535)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
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