Initialize Tizen 2.3
[external/libtheora.git] / lib / x86_vc / mmxfrag.h
1 #if !defined(_x86_vc_mmxfrag_H)
2 # define _x86_vc_mmxfrag_H (1)
3 # include <stddef.h>
4 # include "x86int.h"
5
6 #if defined(OC_X86_ASM)
7
8 /*Copies an 8x8 block of pixels from _src to _dst, assuming _ystride bytes
9    between rows.*/
10 #define OC_FRAG_COPY_MMX(_dst,_src,_ystride) \
11   do{ \
12     const unsigned char *src; \
13     unsigned char       *dst; \
14     src=(_src); \
15     dst=(_dst); \
16     __asm  mov SRC,src \
17     __asm  mov DST,dst \
18     __asm  mov YSTRIDE,_ystride \
19     /*src+0*ystride*/ \
20     __asm  movq mm0,[SRC] \
21     /*src+1*ystride*/ \
22     __asm  movq mm1,[SRC+YSTRIDE] \
23     /*ystride3=ystride*3*/ \
24     __asm  lea YSTRIDE3,[YSTRIDE+YSTRIDE*2] \
25     /*src+2*ystride*/ \
26     __asm  movq mm2,[SRC+YSTRIDE*2] \
27     /*src+3*ystride*/ \
28     __asm  movq mm3,[SRC+YSTRIDE3] \
29     /*dst+0*ystride*/ \
30     __asm  movq [DST],mm0 \
31     /*dst+1*ystride*/ \
32     __asm  movq [DST+YSTRIDE],mm1 \
33     /*Pointer to next 4.*/ \
34     __asm  lea SRC,[SRC+YSTRIDE*4] \
35     /*dst+2*ystride*/ \
36     __asm  movq [DST+YSTRIDE*2],mm2 \
37     /*dst+3*ystride*/ \
38     __asm  movq [DST+YSTRIDE3],mm3 \
39     /*Pointer to next 4.*/ \
40     __asm  lea DST,[DST+YSTRIDE*4] \
41     /*src+0*ystride*/ \
42     __asm  movq mm0,[SRC] \
43     /*src+1*ystride*/ \
44     __asm  movq mm1,[SRC+YSTRIDE] \
45     /*src+2*ystride*/ \
46     __asm  movq mm2,[SRC+YSTRIDE*2] \
47     /*src+3*ystride*/ \
48     __asm  movq mm3,[SRC+YSTRIDE3] \
49     /*dst+0*ystride*/ \
50     __asm  movq [DST],mm0 \
51     /*dst+1*ystride*/ \
52     __asm  movq [DST+YSTRIDE],mm1 \
53     /*dst+2*ystride*/ \
54     __asm  movq [DST+YSTRIDE*2],mm2 \
55     /*dst+3*ystride*/ \
56     __asm  movq [DST+YSTRIDE3],mm3 \
57   } \
58   while(0)
59
60 # endif
61 #endif