Commit a7bd8797 authored by Michael Niedermayer's avatar Michael Niedermayer

shared lib support (req by kabi) ...

Originally committed as revision 510 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 96c7b535
...@@ -50,9 +50,9 @@ void ff_mmx_idct(DCTELEM *block); ...@@ -50,9 +50,9 @@ void ff_mmx_idct(DCTELEM *block);
void ff_mmxext_idct(DCTELEM *block); void ff_mmxext_idct(DCTELEM *block);
/* pixel operations */ /* pixel operations */
static const unsigned long long int mm_bone __attribute__ ((aligned(8))) = 0x0101010101010101LL; static const uint64_t mm_bone __attribute__ ((aligned(8))) = 0x0101010101010101ULL;
static const unsigned long long int mm_wone __attribute__ ((aligned(8))) = 0x0001000100010001LL; static const uint64_t mm_wone __attribute__ ((aligned(8))) = 0x0001000100010001ULL;
static const unsigned long long int mm_wtwo __attribute__ ((aligned(8))) = 0x0002000200020002LL; static const uint64_t mm_wtwo __attribute__ ((aligned(8))) = 0x0002000200020002ULL;
//static const unsigned short mm_wone[4] __attribute__ ((aligned(8))) = { 0x1, 0x1, 0x1, 0x1 }; //static const unsigned short mm_wone[4] __attribute__ ((aligned(8))) = { 0x1, 0x1, 0x1, 0x1 };
//static const unsigned short mm_wtwo[4] __attribute__ ((aligned(8))) = { 0x2, 0x2, 0x2, 0x2 }; //static const unsigned short mm_wtwo[4] __attribute__ ((aligned(8))) = { 0x2, 0x2, 0x2, 0x2 };
...@@ -62,6 +62,7 @@ static const unsigned long long int mm_wtwo __attribute__ ((aligned(8))) = 0x000 ...@@ -62,6 +62,7 @@ static const unsigned long long int mm_wtwo __attribute__ ((aligned(8))) = 0x000
#ifndef PIC #ifndef PIC
#define MOVQ_WONE(regd) __asm __volatile ("movq %0, %%" #regd " \n\t" ::"m"(mm_wone)) #define MOVQ_WONE(regd) __asm __volatile ("movq %0, %%" #regd " \n\t" ::"m"(mm_wone))
#define MOVQ_WTWO(regd) __asm __volatile ("movq %0, %%" #regd " \n\t" ::"m"(mm_wtwo)) #define MOVQ_WTWO(regd) __asm __volatile ("movq %0, %%" #regd " \n\t" ::"m"(mm_wtwo))
#define MOVQ_BONE(regd) "movq "MANGLE(mm_bone)", "#regd" \n\t"
#else #else
// for shared library it's better to use this way for accessing constants // for shared library it's better to use this way for accessing constants
// pcmpeqd -> -1 // pcmpeqd -> -1
...@@ -75,8 +76,14 @@ static const unsigned long long int mm_wtwo __attribute__ ((aligned(8))) = 0x000 ...@@ -75,8 +76,14 @@ static const unsigned long long int mm_wtwo __attribute__ ((aligned(8))) = 0x000
"pcmpeqd %%" #regd ", %%" #regd " \n\t" \ "pcmpeqd %%" #regd ", %%" #regd " \n\t" \
"psrlw $15, %%" #regd " \n\t" \ "psrlw $15, %%" #regd " \n\t" \
"psllw $1, %%" #regd ::) "psllw $1, %%" #regd ::)
#define MOVQ_BONE(regd) \
"pcmpeqd " #regd ", " #regd " \n\t" \
"psrlw $15, " #regd " \n\t"\
"packuswb " #regd ", " #regd " \n\t"
#endif #endif
/***********************************/ /***********************************/
/* 3Dnow specific */ /* 3Dnow specific */
......
...@@ -57,7 +57,7 @@ static void DEF(put_no_rnd_pixels_x2)(UINT8 *block, const UINT8 *pixels, int lin ...@@ -57,7 +57,7 @@ static void DEF(put_no_rnd_pixels_x2)(UINT8 *block, const UINT8 *pixels, int lin
{ {
__asm __volatile( __asm __volatile(
"xorl %%eax, %%eax \n\t" "xorl %%eax, %%eax \n\t"
"movq "MANGLE(mm_bone)", %%mm7 \n\t" MOVQ_BONE(%%mm7)
".balign 16 \n\t" ".balign 16 \n\t"
"1: \n\t" "1: \n\t"
"movq (%1, %%eax), %%mm0 \n\t" "movq (%1, %%eax), %%mm0 \n\t"
...@@ -122,7 +122,7 @@ static void DEF(put_pixels_y2)(UINT8 *block, const UINT8 *pixels, int line_size, ...@@ -122,7 +122,7 @@ static void DEF(put_pixels_y2)(UINT8 *block, const UINT8 *pixels, int line_size,
static void DEF(put_no_rnd_pixels_y2)(UINT8 *block, const UINT8 *pixels, int line_size, int h) static void DEF(put_no_rnd_pixels_y2)(UINT8 *block, const UINT8 *pixels, int line_size, int h)
{ {
__asm __volatile( __asm __volatile(
"movq "MANGLE(mm_bone)", %%mm7 \n\t" MOVQ_BONE(%%mm7)
"xorl %%eax, %%eax \n\t" "xorl %%eax, %%eax \n\t"
"movq (%1), %%mm0 \n\t" "movq (%1), %%mm0 \n\t"
".balign 16 \n\t" ".balign 16 \n\t"
...@@ -264,7 +264,7 @@ static void DEF(avg_pixels_y2)(UINT8 *block, const UINT8 *pixels, int line_size, ...@@ -264,7 +264,7 @@ static void DEF(avg_pixels_y2)(UINT8 *block, const UINT8 *pixels, int line_size,
static void DEF(avg_pixels_xy2)(UINT8 *block, const UINT8 *pixels, int line_size, int h) static void DEF(avg_pixels_xy2)(UINT8 *block, const UINT8 *pixels, int line_size, int h)
{ {
__asm __volatile( __asm __volatile(
"movq "MANGLE(mm_bone)", %%mm7 \n\t" MOVQ_BONE(%%mm7)
"xorl %%eax, %%eax \n\t" "xorl %%eax, %%eax \n\t"
"movq (%1), %%mm0 \n\t" "movq (%1), %%mm0 \n\t"
"movq 1(%1), %%mm1 \n\t" "movq 1(%1), %%mm1 \n\t"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment