Go to the documentation of this file.
7 #define USE_FOR_DSCALER
9 #define MyMemCopy xine_fast_memcpy
22 #define V_PAVGB_MMX(mmr1, mmr2, mmrw, smask) \
23 "movq "mmr2", "mmrw"\n\t" \
24 "pand "smask", "mmrw"\n\t" \
25 "psrlw $1, "mmrw"\n\t" \
26 "pand "smask", "mmr1"\n\t" \
27 "psrlw $1, "mmr1"\n\t" \
28 "paddusb "mmrw", "mmr1"\n\t"
29 #define V_PAVGB_SSE(mmr1, mmr2, mmrw, smask) "pavgb "mmr2", "mmr1"\n\t"
30 #define V_PAVGB_3DNOW(mmr1, mmr2, mmrw, smask) "pavgusb "mmr2", "mmr1"\n\t"
31 #define V_PAVGB(mmr1, mmr2, mmrw, smask) V_PAVGB2(mmr1, mmr2, mmrw, smask, SSE_TYPE)
32 #define V_PAVGB2(mmr1, mmr2, mmrw, smask, ssetyp) V_PAVGB3(mmr1, mmr2, mmrw, smask, ssetyp)
33 #define V_PAVGB3(mmr1, mmr2, mmrw, smask, ssetyp) V_PAVGB_##ssetyp(mmr1, mmr2, mmrw, smask)
36 #define V_PMAXUB_MMX(mmr1, mmr2) \
37 "psubusb "mmr2", "mmr1"\n\t" \
38 "paddusb "mmr2", "mmr1"\n\t"
39 #define V_PMAXUB_SSE(mmr1, mmr2) "pmaxub "mmr2", "mmr1"\n\t"
40 #define V_PMAXUB_3DNOW(mmr1, mmr2) V_PMAXUB_MMX(mmr1, mmr2) // use MMX version
41 #define V_PMAXUB(mmr1, mmr2) V_PMAXUB2(mmr1, mmr2, SSE_TYPE)
42 #define V_PMAXUB2(mmr1, mmr2, ssetyp) V_PMAXUB3(mmr1, mmr2, ssetyp)
43 #define V_PMAXUB3(mmr1, mmr2, ssetyp) V_PMAXUB_##ssetyp(mmr1, mmr2)
47 #define V_PMINUB_MMX(mmr1, mmr2, mmrw) \
48 "pcmpeqb "mmrw", "mmrw"\n\t" \
49 "psubusb "mmr2", "mmrw"\n\t" \
50 "paddusb "mmrw", "mmr1"\n\t" \
51 "psubusb "mmrw", "mmr1"\n\t"
52 #define V_PMINUB_SSE(mmr1, mmr2, mmrw) "pminub "mmr2", "mmr1"\n\t"
53 #define V_PMINUB_3DNOW(mmr1, mmr2, mmrw) V_PMINUB_MMX(mmr1, mmr2, mmrw) // use MMX version
54 #define V_PMINUB(mmr1, mmr2, mmrw) V_PMINUB2(mmr1, mmr2, mmrw, SSE_TYPE)
55 #define V_PMINUB2(mmr1, mmr2, mmrw, ssetyp) V_PMINUB3(mmr1, mmr2, mmrw, ssetyp)
56 #define V_PMINUB3(mmr1, mmr2, mmrw, ssetyp) V_PMINUB_##ssetyp(mmr1, mmr2, mmrw)
60 #define V_MOVNTQ_MMX(mmr1, mmr2) "movq "mmr2", "mmr1"\n\t"
61 #define V_MOVNTQ_3DNOW(mmr1, mmr2) "movq "mmr2", "mmr1"\n\t"
62 #define V_MOVNTQ_SSE(mmr1, mmr2) "movntq "mmr2", "mmr1"\n\t"
63 #define V_MOVNTQ(mmr1, mmr2) V_MOVNTQ2(mmr1, mmr2, SSE_TYPE)
64 #define V_MOVNTQ2(mmr1, mmr2, ssetyp) V_MOVNTQ3(mmr1, mmr2, ssetyp)
65 #define V_MOVNTQ3(mmr1, mmr2, ssetyp) V_MOVNTQ_##ssetyp(mmr1, mmr2)
71 #define MERGE4PIXavg(PADDR1, PADDR2) \
72 "movdqu "PADDR1", %%xmm0\n\t" \
73 "movdqu "PADDR2", %%xmm1\n\t" \
74 "movdqa %%xmm0, %%xmm2\n\t" \
75 "movdqa %%xmm1, %%xmm3\n\t" \
76 "psubusb %%xmm1, %%xmm2\n\t" \
77 "psubusb %%xmm0, %%xmm3\n\t" \
78 "por %%xmm3, %%xmm2\n\t" \
79 "pavgb %%xmm1, %%xmm0\n\t" \
80 "movdqa %%xmm2, %%xmm3\n\t" \
81 "pxor %%xmm1, %%xmm1\n\t" \
82 "psubusb %%xmm7, %%xmm3\n\t" \
83 "pcmpeqb %%xmm1, %%xmm3\n\t" \
84 "pcmpeqb %%xmm3, %%xmm1\n\t" \
85 "pand %%xmm3, %%xmm0\n\t" \
86 "pand %%xmm3, %%xmm2\n\t" \
87 "pand %%xmm1, %%xmm5\n\t" \
88 "pand %%xmm1, %%xmm7\n\t" \
89 "por %%xmm0, %%xmm5\n\t" \
90 "por %%xmm2, %%xmm7\n\t"
92 #define MERGE4PIXavgH(PADDR1A, PADDR1B, PADDR2A, PADDR2B) \
93 "movdqu "PADDR1A", %%xmm0\n\t" \
94 "movdqu "PADDR2A", %%xmm1\n\t" \
95 "movdqu "PADDR1B", %%xmm2\n\t" \
96 "movdqu "PADDR2B", %%xmm3\n\t" \
97 "pavgb %%xmm2, %%xmm0\n\t" \
98 "pavgb %%xmm3, %%xmm1\n\t" \
99 "movdqa %%xmm0, %%xmm2\n\t" \
100 "movdqa %%xmm1, %%xmm3\n\t" \
101 "psubusb %%xmm1, %%xmm2\n\t" \
102 "psubusb %%xmm0, %%xmm3\n\t" \
103 "por %%xmm3, %%xmm2\n\t" \
104 "pavgb %%xmm1, %%xmm0\n\t" \
105 "movdqa %%xmm2, %%xmm3\n\t" \
106 "pxor %%xmm1, %%xmm1\n\t" \
107 "psubusb %%xmm7, %%xmm3\n\t" \
108 "pcmpeqb %%xmm1, %%xmm3\n\t" \
109 "pcmpeqb %%xmm3, %%xmm1\n\t" \
110 "pand %%xmm3, %%xmm0\n\t" \
111 "pand %%xmm3, %%xmm2\n\t" \
112 "pand %%xmm1, %%xmm5\n\t" \
113 "pand %%xmm1, %%xmm7\n\t" \
114 "por %%xmm0, %%xmm5\n\t" \
115 "por %%xmm2, %%xmm7\n\t"
117 #define RESET_CHROMA "por "_UVMask", %%xmm7\n\t"
119 #else // ifdef IS_SSE2
121 #define MERGE4PIXavg(PADDR1, PADDR2) \
122 "movq "PADDR1", %%mm0\n\t" \
123 "movq "PADDR2", %%mm1\n\t" \
124 "movq %%mm0, %%mm2\n\t" \
125 "movq %%mm1, %%mm3\n\t" \
126 "psubusb %%mm1, %%mm2\n\t" \
127 "psubusb %%mm0, %%mm3\n\t" \
128 "por %%mm3, %%mm2\n\t" \
129 V_PAVGB ("%%mm0", "%%mm1", "%%mm3", _ShiftMask) \
130 "movq %%mm2, %%mm3\n\t" \
131 "pxor %%mm1, %%mm1\n\t" \
132 "psubusb %%mm7, %%mm3\n\t" \
133 "pcmpeqb %%mm1, %%mm3\n\t" \
134 "pcmpeqb %%mm3, %%mm1\n\t" \
135 "pand %%mm3, %%mm0\n\t" \
136 "pand %%mm3, %%mm2\n\t" \
137 "pand %%mm1, %%mm5\n\t" \
138 "pand %%mm1, %%mm7\n\t" \
139 "por %%mm0, %%mm5\n\t" \
140 "por %%mm2, %%mm7\n\t"
142 #define MERGE4PIXavgH(PADDR1A, PADDR1B, PADDR2A, PADDR2B) \
143 "movq "PADDR1A", %%mm0\n\t" \
144 "movq "PADDR2A", %%mm1\n\t" \
145 "movq "PADDR1B", %%mm2\n\t" \
146 "movq "PADDR2B", %%mm3\n\t" \
147 V_PAVGB("%%mm0", "%%mm2", "%%mm2", _ShiftMask) \
148 V_PAVGB("%%mm1", "%%mm3", "%%mm3", _ShiftMask) \
149 "movq %%mm0, %%mm2\n\t" \
150 "movq %%mm1, %%mm3\n\t" \
151 "psubusb %%mm1, %%mm2\n\t" \
152 "psubusb %%mm0, %%mm3\n\t" \
153 "por %%mm3, %%mm2\n\t" \
154 V_PAVGB("%%mm0", "%%mm1", "%%mm3", _ShiftMask) \
155 "movq %%mm2, %%mm3\n\t" \
156 "pxor %%mm1, %%mm1\n\t" \
157 "psubusb %%mm7, %%mm3\n\t" \
158 "pcmpeqb %%mm1, %%mm3\n\t" \
159 "pcmpeqb %%mm3, %%mm1\n\t" \
160 "pand %%mm3, %%mm0\n\t" \
161 "pand %%mm3, %%mm2\n\t" \
162 "pand %%mm1, %%mm5\n\t" \
163 "pand %%mm1, %%mm7\n\t" \
164 "por %%mm0, %%mm5\n\t" \
165 "por %%mm2, %%mm7\n\t"
167 #define RESET_CHROMA "por "_UVMask", %%mm7\n\t"
#define MERGE4PIXavg(PADDR1, PADDR2)
Definition: tomsmocompmacros.h:121
static const deinterlace_method_t scalerbobmethod
Definition: scalerbob.c:39
#define MERGE4PIXavgH(PADDR1A, PADDR1B, PADDR2A, PADDR2B)
Definition: tomsmocompmacros.h:142
#define movq(vars, vard)
Definition: mmx.h:414
#define paddusb(vars, vard)
Definition: mmx.h:470
char **__environ __attribute__((weak, alias("fake__environ")))
#define V_MOVNTQ(mmr1, mmr2)
Definition: greedyhmacros.h:70
unsigned int width
Definition: gfontrle.c:4
Definition: deinterlace.h:123
#define V_PMAXUB(mmr1, mmr2)
Definition: greedyhmacros.h:48
uint8_t * f0
Definition: deinterlace.h:105
unsigned int height
Definition: gfontrle.c:5
#define V_PMINUB(mmr1, mmr2, mmrw)
Definition: greedyhmacros.h:61
Definition: deinterlace.h:103
uint8_t * f2
Definition: deinterlace.h:107
uint8_t * f1
Definition: deinterlace.h:106
const deinterlace_method_t * scalerbob_get_method(void)
Definition: scalerbob.c:63
#define V_PAVGB(mmr1, mmr2, mmrw, smask)
Definition: greedyhmacros.h:38
#define RESET_CHROMA
Definition: tomsmocompmacros.h:167
#define psubusb(vars, vard)
Definition: mmx.h:507
MANGLE definition from FFmpeg project, until the code is ported not to require this (considered an ha...