#include "libavcodec/dsputil.h"
#include "libavutil/x86_cpu.h"
#include "idct_xvid.h"
#include "dsputil_mmx.h"
Go to the source code of this file.
Defines | |
| #define | X8(x) x,x,x,x,x,x,x,x |
| #define | ROW_SHIFT 11 |
| #define | COL_SHIFT 6 |
| #define | ROW1 "%%xmm6" |
| #define | ROW3 "%%xmm4" |
| #define | ROW5 "%%xmm5" |
| #define | ROW7 "%%xmm7" |
| #define | CLEAR_ODD(r) "pxor "r","r" \n\t" |
| #define | PUT_ODD(dst) "pshufhw $0x1B, %%xmm2, "dst" \n\t" |
| #define | ROW0 "(%0)" |
| #define | REG0 "%%xmm4" |
| #define | ROW2 "2*16(%0)" |
| #define | REG2 "%%xmm4" |
| #define | ROW4 "4*16(%0)" |
| #define | REG4 "%%xmm6" |
| #define | ROW6 "6*16(%0)" |
| #define | REG6 "%%xmm6" |
| #define | CLEAR_EVEN(r) |
| #define | PUT_EVEN(dst) |
| #define | XMMS "%%xmm2" |
| #define | MOV_32_ONLY "movdqa " |
| #define | SREG2 "%%xmm7" |
| #define | TAN3 "%%xmm0" |
| #define | TAN1 "%%xmm2" |
| #define | ROUND(x) "paddd "MANGLE(x) |
| #define | JZ(reg, to) |
| #define | JNZ(reg, to) |
| #define | TEST_ONE_ROW(src, reg, clear) |
| #define | TEST_TWO_ROWS(row1, row2, reg1, reg2, clear1, clear2) |
| #define | iMTX_MULT(src, table, rounder, put) |
| IDCT pass on rows. | |
| #define | iLLM_HEAD |
| #define | iLLM_PASS(dct) |
| IDCT pass on columns. | |
| #define | iLLM_PASS_SPARSE(dct) |
| IDCT pass on columns, assuming rows 4-7 are zero. | |
Functions | |
| DECLARE_ASM_CONST (16, int16_t, tan1)[] | |
| DECLARE_ASM_CONST (16, int16_t, tan2)[] | |
| DECLARE_ASM_CONST (16, int16_t, tan3)[] | |
| DECLARE_ASM_CONST (16, int16_t, sqrt2)[] | |
| DECLARE_ASM_CONST (8, uint8_t, m127)[] | |
| DECLARE_ASM_CONST (16, int16_t, iTab1)[] | |
| DECLARE_ASM_CONST (16, int16_t, iTab2)[] | |
| DECLARE_ASM_CONST (16, int16_t, iTab3)[] | |
| DECLARE_ASM_CONST (16, int16_t, iTab4)[] | |
| DECLARE_ASM_CONST (16, int32_t, walkenIdctRounders)[] | |
| void | ff_idct_xvid_sse2 (short *block) |
| void | ff_idct_xvid_sse2_put (uint8_t *dest, int line_size, short *block) |
| void | ff_idct_xvid_sse2_add (uint8_t *dest, int line_size, short *block) |
Definition in file idct_sse2_xvid.c.
| #define CLEAR_EVEN | ( | r | ) |
| #define CLEAR_ODD | ( | r | ) | "pxor "r","r" \n\t" |
| #define COL_SHIFT 6 |
Definition at line 54 of file idct_sse2_xvid.c.
| #define iLLM_HEAD |
| #define iLLM_PASS | ( | dct | ) |
IDCT pass on columns.
Definition at line 206 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define iLLM_PASS_SPARSE | ( | dct | ) |
IDCT pass on columns, assuming rows 4-7 are zero.
Definition at line 284 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
Value:
"movdqa "src", %%xmm3 \n\t" \ "movdqa %%xmm3, %%xmm0 \n\t" \ "pshufd $0x11, %%xmm3, %%xmm1 \n\t" /* 4602 */ \ "punpcklqdq %%xmm0, %%xmm0 \n\t" /* 0246 */ \ "pmaddwd "table", %%xmm0 \n\t" \ "pmaddwd 16+"table", %%xmm1 \n\t" \ "pshufd $0xBB, %%xmm3, %%xmm2 \n\t" /* 5713 */ \ "punpckhqdq %%xmm3, %%xmm3 \n\t" /* 1357 */ \ "pmaddwd 32+"table", %%xmm2 \n\t" \ "pmaddwd 48+"table", %%xmm3 \n\t" \ "paddd %%xmm1, %%xmm0 \n\t" \ "paddd %%xmm3, %%xmm2 \n\t" \ rounder", %%xmm0 \n\t" \ "movdqa %%xmm2, %%xmm3 \n\t" \ "paddd %%xmm0, %%xmm2 \n\t" \ "psubd %%xmm3, %%xmm0 \n\t" \ "psrad $11, %%xmm2 \n\t" \ "psrad $11, %%xmm0 \n\t" \ "packssdw %%xmm0, %%xmm2 \n\t" \ put \ "1: \n\t"
Definition at line 178 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define JNZ | ( | reg, | |||
| to | ) |
Value:
"testl "reg","reg" \n\t" \ "jnz "to" \n\t"
Definition at line 154 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define JZ | ( | reg, | |||
| to | ) |
Value:
"testl "reg","reg" \n\t" \ "jz "to" \n\t"
Definition at line 150 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define MOV_32_ONLY "movdqa " |
Definition at line 141 of file idct_sse2_xvid.c.
| #define PUT_EVEN | ( | dst | ) |
Value:
"pshufhw $0x1B, %%xmm2, %%xmm2 \n\t" \ "movdqa %%xmm2, "dst" \n\t"
Definition at line 137 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define PUT_ODD | ( | dst | ) | "pshufhw $0x1B, %%xmm2, "dst" \n\t" |
| #define REG0 "%%xmm4" |
Definition at line 129 of file idct_sse2_xvid.c.
| #define REG2 "%%xmm4" |
Definition at line 131 of file idct_sse2_xvid.c.
| #define REG4 "%%xmm6" |
Definition at line 133 of file idct_sse2_xvid.c.
| #define REG6 "%%xmm6" |
Definition at line 135 of file idct_sse2_xvid.c.
| #define ROUND | ( | x | ) | "paddd "MANGLE(x) |
| #define ROW0 "(%0)" |
| #define ROW1 "%%xmm6" |
| #define ROW2 "2*16(%0)" |
| #define ROW3 "%%xmm4" |
| #define ROW4 "4*16(%0)" |
| #define ROW5 "%%xmm5" |
| #define ROW6 "6*16(%0)" |
| #define ROW7 "%%xmm7" |
| #define ROW_SHIFT 11 |
Definition at line 53 of file idct_sse2_xvid.c.
| #define SREG2 "%%xmm7" |
Definition at line 142 of file idct_sse2_xvid.c.
| #define TAN1 "%%xmm2" |
Definition at line 144 of file idct_sse2_xvid.c.
| #define TAN3 "%%xmm0" |
Definition at line 143 of file idct_sse2_xvid.c.
| #define TEST_ONE_ROW | ( | src, | |||
| reg, | |||||
| clear | ) |
Value:
clear \
"movq "src", %%mm1 \n\t" \
"por 8+"src", %%mm1 \n\t" \
"paddusb %%mm0, %%mm1 \n\t" \
"pmovmskb %%mm1, "reg" \n\t"
Definition at line 158 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define TEST_TWO_ROWS | ( | row1, | |||
| row2, | |||||
| reg1, | |||||
| reg2, | |||||
| clear1, | |||||
| clear2 | ) |
Value:
clear1 \
clear2 \
"movq "row1", %%mm1 \n\t" \
"por 8+"row1", %%mm1 \n\t" \
"movq "row2", %%mm2 \n\t" \
"por 8+"row2", %%mm2 \n\t" \
"paddusb %%mm0, %%mm1 \n\t" \
"paddusb %%mm0, %%mm2 \n\t" \
"pmovmskb %%mm1, "reg1" \n\t" \
"pmovmskb %%mm2, "reg2" \n\t"
Definition at line 165 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define X8 | ( | x | ) | x,x,x,x,x,x,x,x |
Definition at line 51 of file idct_sse2_xvid.c.
| #define XMMS "%%xmm2" |
Definition at line 140 of file idct_sse2_xvid.c.
| DECLARE_ASM_CONST | ( | 16 | , | |
| int32_t | , | |||
| walkenIdctRounders | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| iTab4 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| iTab3 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| iTab2 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| iTab1 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 8 | , | |
| uint8_t | , | |||
| m127 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| sqrt2 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| tan3 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| tan2 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| tan1 | ||||
| ) |
| void ff_idct_xvid_sse2 | ( | short * | block | ) | [inline] |
Definition at line 344 of file idct_sse2_xvid.c.
Referenced by dsputil_init_mmx(), ff_idct_xvid_sse2_add(), and ff_idct_xvid_sse2_put().
| void ff_idct_xvid_sse2_add | ( | uint8_t * | dest, | |
| int | line_size, | |||
| short * | block | |||
| ) |
| void ff_idct_xvid_sse2_put | ( | uint8_t * | dest, | |
| int | line_size, | |||
| short * | block | |||
| ) |
1.5.8