зеркало из https://github.com/mozilla/pjs.git
Bug 583199 Compile WebM on Solaris r=tterribe a=dbaron
This commit is contained in:
Родитель
ec289ff6e8
Коммит
a78af5148d
|
@ -202,3 +202,13 @@ endif
|
|||
endif
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
# Workaround a bug of Sun Studio (CR 6963410)
|
||||
ifdef SOLARIS_SUNPRO_CC
|
||||
ifeq (86,$(findstring 86,$(OS_TEST)))
|
||||
filter_c.o: filter_c.c Makefile.in
|
||||
$(REPORT_BUILD)
|
||||
@$(MAKE_DEPS_AUTO_CC)
|
||||
$(CC) -o $@ -c $(patsubst -xO[45],-xO3,$(COMPILE_CFLAGS)) $<
|
||||
endif
|
||||
endif
|
||||
|
|
|
@ -0,0 +1,215 @@
|
|||
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
|
||||
@@ -8,16 +8,19 @@
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "loopfilter.h"
|
||||
#include "onyxc_int.h"
|
||||
|
||||
+#ifdef __SUNPRO_C
|
||||
+#define __inline static inline
|
||||
+#endif
|
||||
|
||||
#define NEW_LOOPFILTER_MASK
|
||||
|
||||
typedef unsigned char uc;
|
||||
|
||||
__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
|
||||
@@ -26,16 +26,36 @@
|
||||
__asm__ __volatile__ (\
|
||||
"pushl %%ebx \n\t" \
|
||||
"cpuid \n\t" \
|
||||
"movl %%ebx, %1 \n\t" \
|
||||
"popl %%ebx \n\t" \
|
||||
: "=a" (ax), "=r" (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
|
|
@ -208,12 +208,12 @@ cp $1/objdir/x86-win32-vs8/vpx_config.h vpx_config_x86-win32-vs8.h
|
|||
# Should be same for all platforms...
|
||||
cp $1/objdir/x86-win32-vs8/vpx_version.h vpx_version.h
|
||||
|
||||
# Config files for x86-linux-gcc
|
||||
# Config files for x86-linux-gcc and Solaris x86
|
||||
cp $1/objdir/x86-linux-gcc/vpx_config.c vpx_config_x86-linux-gcc.c
|
||||
cp $1/objdir/x86-linux-gcc/vpx_config.asm vpx_config_x86-linux-gcc.asm
|
||||
cp $1/objdir/x86-linux-gcc/vpx_config.h vpx_config_x86-linux-gcc.h
|
||||
|
||||
# Config files for x86_64-linux-gcc
|
||||
# Config files for x86_64-linux-gcc and Solaris x86_64
|
||||
cp $1/objdir/x86_64-linux-gcc/vpx_config.c vpx_config_x86-linux-gcc.c
|
||||
cp $1/objdir/x86_64-linux-gcc/vpx_config.asm vpx_config_x86-linux-gcc.asm
|
||||
cp $1/objdir/x86_64-linux-gcc/vpx_config.h vpx_config_x86-linux-gcc.h
|
||||
|
@ -246,3 +246,5 @@ patch -p3 < subpixel-qword.patch
|
|||
# Patch to make asm globals symbol hidden so linking succeeds on x86-64.
|
||||
patch -p3 < subpixel-hidden.patch
|
||||
patch -p3 < emptyif_warning.patch
|
||||
# Patch to compile with Sun Studio on Solaris
|
||||
patch -p3 < solaris.patch
|
||||
|
|
|
@ -13,6 +13,9 @@
|
|||
#include "loopfilter.h"
|
||||
#include "onyxc_int.h"
|
||||
|
||||
#ifdef __SUNPRO_C
|
||||
#define __inline static inline
|
||||
#endif
|
||||
|
||||
#define NEW_LOOPFILTER_MASK
|
||||
|
||||
|
|
|
@ -321,7 +321,7 @@ typedef struct vpx_codec_priv_cb_pair
|
|||
{
|
||||
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;
|
||||
|
||||
|
|
|
@ -170,7 +170,7 @@ vpx_codec_err_t vpx_codec_register_put_frame_cb(vpx_codec_ctx_t *ctx
|
|||
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;
|
||||
}
|
||||
|
@ -192,7 +192,7 @@ vpx_codec_err_t vpx_codec_register_put_slice_cb(vpx_codec_ctx_t *ctx
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -20,6 +20,14 @@
|
|||
/* 64 bit Linux. */
|
||||
#include "vpx_config_x86_64-linux-gcc.h"
|
||||
|
||||
#elif defined(__sun) && defined(__i386)
|
||||
/* 32 bit Solaris. */
|
||||
#include "vpx_config_x86-linux-gcc.h"
|
||||
|
||||
#elif defined(__sun) && defined(__x86_64)
|
||||
/* 64 bit Solaris. */
|
||||
#include "vpx_config_x86_64-linux-gcc.h"
|
||||
|
||||
#elif defined(_MSC_VER) && defined(_M_X64)
|
||||
/* 64 bit Windows */
|
||||
#include "vpx_config_x86_64-win64-vs8.h"
|
||||
|
|
|
@ -20,6 +20,14 @@
|
|||
/* 64 bit Linux. */
|
||||
#include "vpx_config_x86_64-linux-gcc.c"
|
||||
|
||||
#elif defined(__sun) && defined(__i386)
|
||||
/* 32 bit Solaris. */
|
||||
#include "vpx_config_x86-linux-gcc.h"
|
||||
|
||||
#elif defined(__sun) && defined(__x86_64)
|
||||
/* 64 bit Solaris. */
|
||||
#include "vpx_config_x86_64-linux-gcc.h"
|
||||
|
||||
#elif defined(_MSC_VER) && defined(_M_X64)
|
||||
#include "vpx_config_x86_64-win64-vs8.c"
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#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
|
||||
|
|
|
@ -31,6 +31,26 @@
|
|||
: "=a" (ax), "=r" (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);
|
||||
|
@ -113,6 +133,10 @@ x86_readtsc(void)
|
|||
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();
|
||||
|
@ -126,6 +150,9 @@ x86_readtsc(void)
|
|||
#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 */
|
||||
|
@ -149,6 +176,19 @@ x87_get_control_word(void)
|
|||
__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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче