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
|