Mercurial > libavcodec.hg
comparison i386/dsputil_mmx.c @ 342:8635a7036395 libavcodec
* fixes problem with -funroll-loops and buggy gcc compiler
author | kabi |
---|---|
date | Wed, 24 Apr 2002 12:18:59 +0000 |
parents | 9c6f056f0e41 |
children | f49629bab18d |
comparison
equal
deleted
inserted
replaced
341:bf26081c373c | 342:8635a7036395 |
---|---|
227 /* read the pixels */ | 227 /* read the pixels */ |
228 p = block; | 228 p = block; |
229 pix = pixels; | 229 pix = pixels; |
230 MOVQ_ZERO(mm7); | 230 MOVQ_ZERO(mm7); |
231 i = 4; | 231 i = 4; |
232 while (i) { | 232 do { |
233 __asm __volatile( | 233 __asm __volatile( |
234 "movq %2, %%mm0\n\t" | 234 "movq (%2), %%mm0\n\t" |
235 "movq 8%2, %%mm1\n\t" | 235 "movq 8(%2), %%mm1\n\t" |
236 "movq 16%2, %%mm2\n\t" | 236 "movq 16(%2), %%mm2\n\t" |
237 "movq 24%2, %%mm3\n\t" | 237 "movq 24(%2), %%mm3\n\t" |
238 "movq %0, %%mm4\n\t" | 238 "movq %0, %%mm4\n\t" |
239 "movq %1, %%mm6\n\t" | 239 "movq %1, %%mm6\n\t" |
240 "movq %%mm4, %%mm5\n\t" | 240 "movq %%mm4, %%mm5\n\t" |
241 "punpcklbw %%mm7, %%mm4\n\t" | 241 "punpcklbw %%mm7, %%mm4\n\t" |
242 "punpckhbw %%mm7, %%mm5\n\t" | 242 "punpckhbw %%mm7, %%mm5\n\t" |
250 "packuswb %%mm1, %%mm0\n\t" | 250 "packuswb %%mm1, %%mm0\n\t" |
251 "packuswb %%mm3, %%mm2\n\t" | 251 "packuswb %%mm3, %%mm2\n\t" |
252 "movq %%mm0, %0\n\t" | 252 "movq %%mm0, %0\n\t" |
253 "movq %%mm2, %1\n\t" | 253 "movq %%mm2, %1\n\t" |
254 :"+m"(*pix), "+m"(*(pix+line_size)) | 254 :"+m"(*pix), "+m"(*(pix+line_size)) |
255 :"m"(*p) | 255 :"r"(p) |
256 :"memory"); | 256 :"memory"); |
257 pix += line_size*2; | 257 pix += line_size*2; |
258 p += 16; | 258 p += 16; |
259 i--; | 259 } while (--i); |
260 }; | |
261 } | 260 } |
262 | 261 |
263 static void put_pixels_mmx(UINT8 *block, const UINT8 *pixels, int line_size, int h) | 262 static void put_pixels_mmx(UINT8 *block, const UINT8 *pixels, int line_size, int h) |
264 { | 263 { |
265 int hh; | 264 int hh; |