summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/on2/h264dec/omxdl/arm11/vc/comm/src/omxVCCOMM_Copy16x16_s.s
blob: 2663a70a4b51c5ee4603757bf8fb2239db102522 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
 ;/**
 ; * Function: omxVCCOMM_Copy16x16
 ; *
 ; * Description:
 ; * Copies the reference 16x16 block to the current block.
 ; * Parameters:
 ; * [in] pSrc         - pointer to the reference block in the source frame; must be aligned on an 16-byte boundary.
 ; * [in] step         - distance between the starts of consecutive lines in the reference frame, in bytes;
 ; *                     must be a multiple of 16 and must be larger than or equal to 16.
 ; * [out] pDst        - pointer to the destination block; must be aligned on an 8-byte boundary.
 ; * Return Value:
 ; * OMX_Sts_NoErr     - no error
 ; * OMX_Sts_BadArgErr - bad arguments; returned under any of the following conditions:
 ; *                   - one or more of the following pointers is NULL:  pSrc, pDst
 ; *                   - one or more of the following pointers is not aligned on an 16-byte boundary:  pSrc, pDst
 ; *                   - step <16 or step is not a multiple of 16.  
 ; */

   INCLUDE omxtypes_s.h
   
     
     M_VARIANTS ARM1136JS
     



     IF ARM1136JS

;//Input Arguments
pSrc    RN 0        
pDst    RN 1        
step    RN 2

;//Local Variables
Count   RN 14
X0      RN 2
X1      RN 4

Return  RN 0
     
     M_START omxVCCOMM_Copy16x16,r5
        
        
        
        SUB   Count,step,#8                 ;//Count=step-8
        LDRD  X0,[pSrc],#8                  ;//pSrc after loading pSrc=pSrc+8
        LDRD  X1,[pSrc],Count               ;//pSrc after loading pSrc=pSrc+step
        
        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8 
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count
        
        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count
        
        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count
        
        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count
        
        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count
       
        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count

        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count
        
        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8              
        LDRD  X0,[pSrc],#8 
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count
        
        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8 
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count

        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8 
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count

        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8 
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count

        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8 
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count

        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8 
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count

        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8 
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count
       
        ;// loading 16 bytes and storing
        STRD  X0,[pDst],#8               
        LDRD  X0,[pSrc],#8 
        STRD  X1,[pDst],#8               
        LDRD  X1,[pSrc],Count

        STRD  X0,[pDst],#8               
        MOV   Return,#OMX_Sts_NoErr
        STRD  X1,[pDst],#8               

       
        M_END
        ENDIF
        
        END