Lines 1-6
Link Here
|
1 |
// -*- c++ -*- |
1 |
// -*- c++ -*- |
2 |
|
2 |
|
3 |
unsigned char* pDest; |
3 |
unsigned char* pDest; |
|
|
4 |
long olddx; |
4 |
const unsigned char* pSrcP; |
5 |
const unsigned char* pSrcP; |
5 |
const unsigned char* pSrc; |
6 |
const unsigned char* pSrc; |
6 |
const unsigned char* pBob; |
7 |
const unsigned char* pBob; |
Lines 84-89
Link Here
|
84 |
#define _UVMask "%15" |
85 |
#define _UVMask "%15" |
85 |
#define _Max_Mov "%16" |
86 |
#define _Max_Mov "%16" |
86 |
#define _YMask "%17" |
87 |
#define _YMask "%17" |
|
|
88 |
#define _olddx "%18" |
87 |
|
89 |
|
88 |
for (y=1; y < FldHeight-1; y++) |
90 |
for (y=1; y < FldHeight-1; y++) |
89 |
{ |
91 |
{ |
Lines 99-119
Link Here
|
99 |
// edi - prev weave pixels, 1 line up |
101 |
// edi - prev weave pixels, 1 line up |
100 |
// esi - next weave pixels, 1 line up |
102 |
// esi - next weave pixels, 1 line up |
101 |
|
103 |
|
102 |
// Save ebx (-fPIC) |
|
|
103 |
"pushl %%ebx\n\t" |
104 |
|
105 |
#ifdef IS_SSE2 |
104 |
#ifdef IS_SSE2 |
106 |
|
105 |
|
107 |
// sse2 code deleted for now |
106 |
// sse2 code deleted for now |
108 |
|
107 |
|
109 |
#else |
108 |
#else |
110 |
// simple bob first 8 bytes |
109 |
// simple bob first 8 bytes |
111 |
"movl "_pBob", %%ebx\n\t" |
110 |
"movl "_pBob", %%edx\n\t" |
112 |
"movl "_src_pitch2", %%ecx\n\t" |
111 |
"movl "_src_pitch2", %%ecx\n\t" |
113 |
|
112 |
|
114 |
#ifdef USE_VERTICAL_FILTER |
113 |
#ifdef USE_VERTICAL_FILTER |
115 |
"movq (%%ebx), %%mm0\n\t" |
114 |
"movq (%%edx), %%mm0\n\t" |
116 |
"movq (%%ebx, %%ecx), %%mm1\n\t" //, qword ptr[ebx+ecx] |
115 |
"movq (%%edx, %%ecx), %%mm1\n\t" //, qword ptr[edx+ecx] |
117 |
"movq %%mm0, %%mm2\n\t" |
116 |
"movq %%mm0, %%mm2\n\t" |
118 |
V_PAVGB ("%%mm2", "%%mm1", "%%mm3", _ShiftMask) // halfway between |
117 |
V_PAVGB ("%%mm2", "%%mm1", "%%mm3", _ShiftMask) // halfway between |
119 |
V_PAVGB ("%%mm0", "%%mm2", "%%mm3", _ShiftMask) // 1/4 way |
118 |
V_PAVGB ("%%mm0", "%%mm2", "%%mm3", _ShiftMask) // 1/4 way |
Lines 124-167
Link Here
|
124 |
V_MOVNTQ ("(%%edi, %%eax)", "%%mm1") // qword ptr[edi+eax], mm1 |
123 |
V_MOVNTQ ("(%%edi, %%eax)", "%%mm1") // qword ptr[edi+eax], mm1 |
125 |
|
124 |
|
126 |
// simple bob last 8 bytes |
125 |
// simple bob last 8 bytes |
127 |
"movl "_Last8", %%edx\n\t" |
126 |
"movl "_Last8", %%esi\n\t" |
128 |
"leal (%%ebx, %%edx), %%esi\n\t" // [ebx+edx] |
127 |
"movl %%esi, "_olddx"\n\t" |
|
|
128 |
"addl %%edx, %%esi\n\t" // [edx+_olddx] |
129 |
"movq (%%esi), %%mm0\n\t" |
129 |
"movq (%%esi), %%mm0\n\t" |
130 |
"movq (%%esi, %%ecx), %%mm1\n\t" // qword ptr[esi+ecx] |
130 |
"movq (%%esi, %%ecx), %%mm1\n\t" // qword ptr[esi+ecx] |
131 |
"movq %%mm0, %%mm2\n\t" |
131 |
"movq %%mm0, %%mm2\n\t" |
132 |
V_PAVGB ("%%mm2", "%%mm1", "%%mm3", _ShiftMask) // halfway between |
132 |
V_PAVGB ("%%mm2", "%%mm1", "%%mm3", _ShiftMask) // halfway between |
133 |
V_PAVGB ("%%mm0", "%%mm2", "%%mm3", _ShiftMask) // 1/4 way |
133 |
V_PAVGB ("%%mm0", "%%mm2", "%%mm3", _ShiftMask) // 1/4 way |
134 |
V_PAVGB ("%%mm1", "%%mm2", "%%mm3", _ShiftMask) // 3/4 way |
134 |
V_PAVGB ("%%mm1", "%%mm2", "%%mm3", _ShiftMask) // 3/4 way |
135 |
"addl %%edx, %%edi\n\t" // last 8 bytes of dest |
135 |
"addl "_olddx", %%edi\n\t" // last 8 bytes of dest |
136 |
V_MOVNTQ ("%%edi", "%%mm0") |
136 |
V_MOVNTQ ("%%edi", "%%mm0") |
137 |
V_MOVNTQ ("(%%edi, %%eax)", "%%mm1") // qword ptr[edi+eax], mm1) |
137 |
V_MOVNTQ ("(%%edi, %%eax)", "%%mm1") // qword ptr[edi+eax], mm1) |
138 |
|
138 |
|
139 |
#else |
139 |
#else |
140 |
"movq (%%ebx), %%mm0\n\t" |
140 |
"movq (%%edx), %%mm0\n\t" |
141 |
// pavgb mm0, qword ptr[ebx+ecx] |
141 |
// pavgb mm0, qword ptr[edx+ecx] |
142 |
V_PAVGB ("%%mm0", "(%%ebx, %%ecx)", "%%mm2", _ShiftMask) // qword ptr[ebx+ecx], mm2, ShiftMask) |
142 |
V_PAVGB ("%%mm0", "(%%edx, %%ecx)", "%%mm2", _ShiftMask) // qword ptr[edx+ecx], mm2, ShiftMask) |
143 |
"movl "_pDest", %%edi\n\t" |
143 |
"movl "_pDest", %%edi\n\t" |
144 |
V_MOVNTQ ("(%%edi)", "%%mm0") |
144 |
V_MOVNTQ ("(%%edi)", "%%mm0") |
145 |
|
145 |
|
146 |
// simple bob last 8 bytes |
146 |
// simple bob last 8 bytes |
147 |
"movl "_Last8", %%edx\n\t" |
147 |
"movl "_Last8", %%esi\n\t" |
148 |
"leal (%%ebx, %%edx), %%esi\n\t" //esi, [ebx+edx] |
148 |
"movl %%esi, "_olddx"\n\t" |
|
|
149 |
"addl %%edx, %%esi\n\t" //esi, [edx+_olddx] |
149 |
"movq (%%esi), %%mm0\n\t" |
150 |
"movq (%%esi), %%mm0\n\t" |
150 |
// pavgb mm0, qword ptr[esi+ecx] |
151 |
// pavgb mm0, qword ptr[esi+ecx] |
151 |
V_PAVGB ("%%mm0", "(%%esi, %%ecx)", "%%mm2", _ShiftMask) // qword ptr[esi+ecx], mm2, ShiftMask) |
152 |
V_PAVGB ("%%mm0", "(%%esi, %%ecx)", "%%mm2", _ShiftMask) // qword ptr[esi+ecx], mm2, ShiftMask) |
152 |
V_MOVNTQ ("(%%edi, %%edx)", "%%mm0") // qword ptr[edi+edx], mm0) |
153 |
"addl "_olddx", %%edi\n\t" |
|
|
154 |
V_MOVNTQ ("(%%edi)", "%%mm0") // qword ptr[edi+_olddx], mm0) |
153 |
#endif |
155 |
#endif |
154 |
// now loop and get the middle qwords |
156 |
// now loop and get the middle qwords |
155 |
"movl "_pSrc", %%esi\n\t" |
157 |
"movl "_pSrc", %%esi\n\t" |
156 |
"movl "_pSrcP", %%edi\n\t" |
158 |
"movl "_pSrcP", %%edi\n\t" |
157 |
"movl $8, %%edx\n\t" // curr offset into all lines |
159 |
"movl $8, "_olddx"\n\t" // curr offset into all lines |
158 |
|
160 |
|
159 |
"1:\n\t" |
161 |
"1:\n\t" |
160 |
"movl "_pBobP", %%eax\n\t" |
162 |
"movl "_pBobP", %%eax\n\t" |
161 |
"addl $8, %%edi\n\t" |
163 |
"addl $8, %%edi\n\t" |
162 |
"addl $8, %%esi\n\t" |
164 |
"addl $8, %%esi\n\t" |
163 |
"addl $8, %%ebx\n\t" |
165 |
"addl $8, %%edx\n\t" |
164 |
"addl %%edx, %%eax\n\t" |
166 |
"addl "_olddx", %%eax\n\t" |
165 |
|
167 |
|
166 |
#ifdef USE_STRANGE_BOB |
168 |
#ifdef USE_STRANGE_BOB |
167 |
#include "StrangeBob.inc" |
169 |
#include "StrangeBob.inc" |