SSE2 idct compatible with xvidmmx. More...
#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 "%%xmm8" |
| #define | REG0 ROW0 |
| #define | ROW2 "%%xmm9" |
| #define | REG2 ROW2 |
| #define | ROW4 "%%xmm10" |
| #define | REG4 ROW4 |
| #define | ROW6 "%%xmm11" |
| #define | REG6 ROW6 |
| #define | CLEAR_EVEN(r) CLEAR_ODD(r) |
| #define | PUT_EVEN(dst) PUT_ODD(dst) |
| #define | XMMS "%%xmm12" |
| #define | MOV_32_ONLY "#" |
| #define | SREG2 REG2 |
| #define | TAN3 "%%xmm13" |
| #define | TAN1 "%%xmm14" |
| #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) |
SSE2 idct compatible with xvidmmx.
Definition in file idct_sse2_xvid.c.
| #define CLEAR_EVEN | ( | r | ) | CLEAR_ODD(r) |
Definition at line 118 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define CLEAR_ODD | ( | r | ) | "pxor "r","r" \n\t" |
Definition at line 105 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define COL_SHIFT 6 |
Definition at line 54 of file idct_sse2_xvid.c.
| #define iLLM_HEAD |
Definition at line 201 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #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().
| #define iMTX_MULT | ( | src, | ||
| table, | ||||
| rounder, | ||||
| put | ||||
| ) |
"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"
IDCT pass on rows.
Definition at line 178 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define JNZ | ( | reg, | ||
| to | ||||
| ) |
"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 | ||||
| ) |
"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 "#" |
Definition at line 121 of file idct_sse2_xvid.c.
| #define PUT_EVEN | ( | dst | ) | PUT_ODD(dst) |
Definition at line 119 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define PUT_ODD | ( | dst | ) | "pshufhw $0x1B, %%xmm2, "dst" \n\t" |
Definition at line 106 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define REG0 ROW0 |
Definition at line 111 of file idct_sse2_xvid.c.
| #define REG2 ROW2 |
Definition at line 113 of file idct_sse2_xvid.c.
| #define REG4 ROW4 |
Definition at line 115 of file idct_sse2_xvid.c.
| #define REG6 ROW6 |
Definition at line 117 of file idct_sse2_xvid.c.
| #define ROUND | ( | x | ) | "paddd "MANGLE(x) |
Definition at line 148 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define ROW0 "%%xmm8" |
Definition at line 110 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define ROW1 "%%xmm6" |
Definition at line 100 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define ROW2 "%%xmm9" |
Definition at line 112 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define ROW3 "%%xmm4" |
Definition at line 101 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define ROW4 "%%xmm10" |
Definition at line 114 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define ROW5 "%%xmm5" |
Definition at line 102 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define ROW6 "%%xmm11" |
Definition at line 116 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define ROW7 "%%xmm7" |
Definition at line 103 of file idct_sse2_xvid.c.
Referenced by ff_idct_xvid_sse2().
| #define ROW_SHIFT 11 |
Definition at line 53 of file idct_sse2_xvid.c.
| #define SREG2 REG2 |
Definition at line 122 of file idct_sse2_xvid.c.
| #define TAN1 "%%xmm14" |
Definition at line 124 of file idct_sse2_xvid.c.
| #define TAN3 "%%xmm13" |
Definition at line 123 of file idct_sse2_xvid.c.
| #define TEST_ONE_ROW | ( | src, | ||
| reg, | ||||
| clear | ||||
| ) |
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 | ||||
| ) |
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 "%%xmm12" |
Definition at line 120 of file idct_sse2_xvid.c.
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| tan1 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| tan2 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| sqrt2 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| iTab3 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int32_t | , | |||
| walkenIdctRounders | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| iTab4 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 8 | , | |
| uint8_t | , | |||
| m127 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| iTab2 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| iTab1 | ||||
| ) |
| DECLARE_ASM_CONST | ( | 16 | , | |
| int16_t | , | |||
| tan3 | ||||
| ) |
| void ff_idct_xvid_sse2 | ( | short * | block | ) | [inline] |
Definition at line 344 of file idct_sse2_xvid.c.
Referenced by 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 | |||
| ) |
Definition at line 399 of file idct_sse2_xvid.c.
| void ff_idct_xvid_sse2_put | ( | uint8_t * | dest, | |
| int | line_size, | |||
| short * | block | |||
| ) |
Definition at line 393 of file idct_sse2_xvid.c.