|
yading@10
|
1 /*
|
|
yading@10
|
2 * Blackfin Pixel Operations
|
|
yading@10
|
3 * Copyright (C) 2007 Marc Hoffman <marc.hoffman@analog.com>
|
|
yading@10
|
4 *
|
|
yading@10
|
5 * This file is part of FFmpeg.
|
|
yading@10
|
6 *
|
|
yading@10
|
7 * FFmpeg is free software; you can redistribute it and/or
|
|
yading@10
|
8 * modify it under the terms of the GNU Lesser General Public
|
|
yading@10
|
9 * License as published by the Free Software Foundation; either
|
|
yading@10
|
10 * version 2.1 of the License, or (at your option) any later version.
|
|
yading@10
|
11 *
|
|
yading@10
|
12 * FFmpeg is distributed in the hope that it will be useful,
|
|
yading@10
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
yading@10
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
yading@10
|
15 * Lesser General Public License for more details.
|
|
yading@10
|
16 *
|
|
yading@10
|
17 * You should have received a copy of the GNU Lesser General Public
|
|
yading@10
|
18 * License along with FFmpeg; if not, write to the Free Software
|
|
yading@10
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
yading@10
|
20 */
|
|
yading@10
|
21 #include "config_bfin.h"
|
|
yading@10
|
22
|
|
yading@10
|
23 /*
|
|
yading@10
|
24 motion compensation
|
|
yading@10
|
25 primitives
|
|
yading@10
|
26
|
|
yading@10
|
27 * Halfpel motion compensation with rounding (a+b+1)>>1.
|
|
yading@10
|
28 * This is an array[4][4] of motion compensation funcions for 4
|
|
yading@10
|
29 * horizontal blocksizes (8,16) and the 4 halfpel positions<br>
|
|
yading@10
|
30 * *pixels_tab[ 0->16xH 1->8xH ][ xhalfpel + 2*yhalfpel ]
|
|
yading@10
|
31 * @param block destination where the result is stored
|
|
yading@10
|
32 * @param pixels source
|
|
yading@10
|
33 * @param line_size number of bytes in a horizontal line of block
|
|
yading@10
|
34 * @param h height
|
|
yading@10
|
35
|
|
yading@10
|
36 */
|
|
yading@10
|
37
|
|
yading@10
|
38 DEFUN(put_pixels8uc,mL1,
|
|
yading@10
|
39 (uint8_t *block, const uint8_t *s0, const uint8_t *s1,
|
|
yading@10
|
40 int dest_size, int line_size, int h)):
|
|
yading@10
|
41 i3=r0; // dest
|
|
yading@10
|
42 i0=r1; // src0
|
|
yading@10
|
43 i1=r2; // src1
|
|
yading@10
|
44 r0=[sp+12]; // dest_size
|
|
yading@10
|
45 r2=[sp+16]; // line_size
|
|
yading@10
|
46 p0=[sp+20]; // h
|
|
yading@10
|
47 [--sp] = (r7:6);
|
|
yading@10
|
48 r0+=-4;
|
|
yading@10
|
49 m3=r0;
|
|
yading@10
|
50 r2+=-8;
|
|
yading@10
|
51 m0=r2;
|
|
yading@10
|
52 LSETUP(pp8$0,pp8$1) LC0=P0;
|
|
yading@10
|
53 DISALGNEXCPT || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
54
|
|
yading@10
|
55 pp8$0: DISALGNEXCPT || R1 = [I0++] || R3 =[I1++];
|
|
yading@10
|
56 R6 = BYTEOP1P(R1:0,R3:2) || R0 = [I0++M0]|| R2 =[I1++M0];
|
|
yading@10
|
57 R7 = BYTEOP1P(R1:0,R3:2)(R) || R0 = [I0++] || [I3++] = R6 ;
|
|
yading@10
|
58 pp8$1: DISALGNEXCPT || R2 = [I1++] || [I3++M3] = R7;
|
|
yading@10
|
59
|
|
yading@10
|
60 (r7:6) = [sp++];
|
|
yading@10
|
61 RTS;
|
|
yading@10
|
62 DEFUN_END(put_pixels8uc)
|
|
yading@10
|
63
|
|
yading@10
|
64 DEFUN(put_pixels16uc,mL1,
|
|
yading@10
|
65 (uint8_t *block, const uint8_t *s0, const uint8_t *s1,
|
|
yading@10
|
66 int dest_size, int line_size, int h)):
|
|
yading@10
|
67 link 0;
|
|
yading@10
|
68 [--sp] = (r7:6);
|
|
yading@10
|
69 i3=r0; // dest
|
|
yading@10
|
70 i0=r1; // src0
|
|
yading@10
|
71 i1=r2; // src1
|
|
yading@10
|
72 r0=[fp+20]; // dest_size
|
|
yading@10
|
73 r2=[fp+24]; // line_size
|
|
yading@10
|
74 p0=[fp+28]; // h
|
|
yading@10
|
75
|
|
yading@10
|
76
|
|
yading@10
|
77 r0+=-12;
|
|
yading@10
|
78 m3=r0; // line_size
|
|
yading@10
|
79 r2+=-16;
|
|
yading@10
|
80 m0=r2;
|
|
yading@10
|
81
|
|
yading@10
|
82 LSETUP(pp16$0,pp16$1) LC0=P0;
|
|
yading@10
|
83 DISALGNEXCPT || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
84
|
|
yading@10
|
85 pp16$0: DISALGNEXCPT || R1 = [I0++] || R3 =[I1++];
|
|
yading@10
|
86 R6 = BYTEOP1P(R1:0,R3:2) || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
87 R7 = BYTEOP1P(R1:0,R3:2)(R) || R1 = [I0++] || R3 =[I1++];
|
|
yading@10
|
88 [I3++] = R6;
|
|
yading@10
|
89 R6 = BYTEOP1P(R1:0,R3:2) || R0 = [I0++M0] || R2 =[I1++M0];
|
|
yading@10
|
90 R7 = BYTEOP1P(R1:0,R3:2)(R) || R0 = [I0++] || [I3++] = R7 ;
|
|
yading@10
|
91 [I3++] = R6;
|
|
yading@10
|
92 pp16$1: DISALGNEXCPT || R2 = [I1++] || [I3++M3] = R7;
|
|
yading@10
|
93
|
|
yading@10
|
94 (r7:6) = [sp++];
|
|
yading@10
|
95 unlink;
|
|
yading@10
|
96 RTS;
|
|
yading@10
|
97 DEFUN_END(put_pixels16uc)
|
|
yading@10
|
98
|
|
yading@10
|
99
|
|
yading@10
|
100
|
|
yading@10
|
101
|
|
yading@10
|
102
|
|
yading@10
|
103
|
|
yading@10
|
104 DEFUN(put_pixels8uc_nornd,mL1,
|
|
yading@10
|
105 (uint8_t *block, const uint8_t *s0, const uint8_t *s1,
|
|
yading@10
|
106 int line_size, int h)):
|
|
yading@10
|
107 i3=r0; // dest
|
|
yading@10
|
108 i0=r1; // src0
|
|
yading@10
|
109 i1=r2; // src1
|
|
yading@10
|
110 r2=[sp+12]; // line_size
|
|
yading@10
|
111 p0=[sp+16]; // h
|
|
yading@10
|
112 [--sp] = (r7:6);
|
|
yading@10
|
113 r2+=-4;
|
|
yading@10
|
114 m3=r2;
|
|
yading@10
|
115 r2+=-4;
|
|
yading@10
|
116 m0=r2;
|
|
yading@10
|
117 LSETUP(pp8$2,pp8$3) LC0=P0;
|
|
yading@10
|
118 DISALGNEXCPT || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
119
|
|
yading@10
|
120 pp8$2: DISALGNEXCPT || R1 = [I0++] || R3 =[I1++];
|
|
yading@10
|
121 R6 = BYTEOP1P(R1:0,R3:2)(T) || R0 = [I0++M0]|| R2 =[I1++M0];
|
|
yading@10
|
122 R7 = BYTEOP1P(R1:0,R3:2)(T,R) || R0 = [I0++] || [I3++] = R6 ;
|
|
yading@10
|
123 pp8$3: DISALGNEXCPT || R2 = [I1++] || [I3++M3] = R7;
|
|
yading@10
|
124
|
|
yading@10
|
125 (r7:6) = [sp++];
|
|
yading@10
|
126 RTS;
|
|
yading@10
|
127 DEFUN_END(put_pixels8uc_nornd)
|
|
yading@10
|
128
|
|
yading@10
|
129 DEFUN(put_pixels16uc_nornd,mL1,
|
|
yading@10
|
130 (uint8_t *block, const uint8_t *s0, const uint8_t *s1,
|
|
yading@10
|
131 int line_size, int h)):
|
|
yading@10
|
132 i3=r0; // dest
|
|
yading@10
|
133 i0=r1; // src0
|
|
yading@10
|
134 i1=r2; // src1
|
|
yading@10
|
135 r2=[sp+12]; // line_size
|
|
yading@10
|
136 p0=[sp+16]; // h
|
|
yading@10
|
137
|
|
yading@10
|
138 [--sp] = (r7:6);
|
|
yading@10
|
139 r2+=-12;
|
|
yading@10
|
140 m3=r2; // line_size
|
|
yading@10
|
141 r2+=-4;
|
|
yading@10
|
142 m0=r2;
|
|
yading@10
|
143
|
|
yading@10
|
144 LSETUP(pp16$2,pp16$3) LC0=P0;
|
|
yading@10
|
145 DISALGNEXCPT || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
146
|
|
yading@10
|
147 pp16$2:
|
|
yading@10
|
148 DISALGNEXCPT || R1 = [I0++] || R3 =[I1++];
|
|
yading@10
|
149 R6 = BYTEOP1P(R1:0,R3:2)(T) || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
150 R7 = BYTEOP1P(R1:0,R3:2)(T,R) || R1 = [I0++] || R3 =[I1++];
|
|
yading@10
|
151 [I3++] = R6;
|
|
yading@10
|
152
|
|
yading@10
|
153 R6 = BYTEOP1P(R1:0,R3:2)(T) || R0 = [I0++M0] || R2 =[I1++M0];
|
|
yading@10
|
154 R7 = BYTEOP1P(R1:0,R3:2)(T,R) || R0 = [I0++] || [I3++] = R7 ;
|
|
yading@10
|
155 [I3++] = R6;
|
|
yading@10
|
156 pp16$3: DISALGNEXCPT || R2 = [I1++] || [I3++M3] = R7;
|
|
yading@10
|
157
|
|
yading@10
|
158 (r7:6) = [sp++];
|
|
yading@10
|
159
|
|
yading@10
|
160 RTS;
|
|
yading@10
|
161 DEFUN_END(put_pixels16uc_nornd)
|
|
yading@10
|
162
|
|
yading@10
|
163 DEFUN(z_put_pixels16_xy2,mL1,
|
|
yading@10
|
164 (uint8_t *block, const uint8_t *s0,
|
|
yading@10
|
165 int dest_size, int line_size, int h)):
|
|
yading@10
|
166 link 0;
|
|
yading@10
|
167 [--sp] = (r7:4);
|
|
yading@10
|
168 i3=r0; // dest
|
|
yading@10
|
169 i0=r1; // src0--> pixels
|
|
yading@10
|
170 i1=r1; // src1--> pixels + line_size
|
|
yading@10
|
171 r2+=-12;
|
|
yading@10
|
172 m2=r2; // m2=dest_width-4
|
|
yading@10
|
173 r2=[fp+20];
|
|
yading@10
|
174 m3=r2; // line_size
|
|
yading@10
|
175 p0=[fp+24]; // h
|
|
yading@10
|
176 r2+=-16;
|
|
yading@10
|
177 i1+=m3; /* src1 + line_size */
|
|
yading@10
|
178 m0=r2; /* line-size - 20 */
|
|
yading@10
|
179
|
|
yading@10
|
180 B0 = I0;
|
|
yading@10
|
181 B1 = I1;
|
|
yading@10
|
182 B3 = I3;
|
|
yading@10
|
183
|
|
yading@10
|
184 DISALGNEXCPT || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
185
|
|
yading@10
|
186 LSETUP(LS$16E,LE$16E) LC0=P0;
|
|
yading@10
|
187 LS$16E: DISALGNEXCPT || R1 = [I0++] || R3 =[I1++];
|
|
yading@10
|
188 R4 = BYTEOP2P (R3:2,R1:0) (RNDL) || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
189 R5 = BYTEOP2P (R3:2,R1:0) (RNDL,R) || R1 = [I0++] || [I3++] = R4 ;
|
|
yading@10
|
190 DISALGNEXCPT || R3 = [I1++] || [I3++] = R5;
|
|
yading@10
|
191 R4 = BYTEOP2P (R3:2,R1:0) (RNDL) || R0 = [I0++M0]|| R2 = [I1++M0];
|
|
yading@10
|
192 R5 = BYTEOP2P (R3:2,R1:0) (RNDL,R) || R0 = [I0++] || [I3++] = R4 ;
|
|
yading@10
|
193 LE$16E: DISALGNEXCPT || R2 = [I1++] || [I3++M2] = R5;
|
|
yading@10
|
194
|
|
yading@10
|
195 M1 = 1;
|
|
yading@10
|
196 I3 = B3;
|
|
yading@10
|
197 I1 = B1;
|
|
yading@10
|
198 I0 = B0;
|
|
yading@10
|
199
|
|
yading@10
|
200 I0 += M1;
|
|
yading@10
|
201 I1 += M1;
|
|
yading@10
|
202
|
|
yading@10
|
203 DISALGNEXCPT || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
204 LSETUP(LS$16O,LE$16O) LC0=P0;
|
|
yading@10
|
205 LS$16O: DISALGNEXCPT || R1 = [I0++] || R3 =[I1++];
|
|
yading@10
|
206 R4 = BYTEOP2P (R3:2,R1:0) (RNDH) || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
207 R5 = BYTEOP2P (R3:2,R1:0) (RNDH,R) || R1 = [I0++] || R6 =[I3++];
|
|
yading@10
|
208 R4 = R4 +|+ R6 || R7 = [I3--];
|
|
yading@10
|
209 R5 = R5 +|+ R7 || [I3++] = R4;
|
|
yading@10
|
210 DISALGNEXCPT || R3 =[I1++] || [I3++] = R5;
|
|
yading@10
|
211 R4 = BYTEOP2P (R3:2,R1:0) (RNDH) || R0 = [I0++M0]|| R2 = [I1++M0];
|
|
yading@10
|
212 R5 = BYTEOP2P (R3:2,R1:0) (RNDH,R) || R0 = [I0++] || R6 = [I3++];
|
|
yading@10
|
213 R4 = R4 +|+ R6 || R7 = [I3--];
|
|
yading@10
|
214 R5 = R5 +|+ R7 || [I3++] = R4;
|
|
yading@10
|
215 LE$16O: DISALGNEXCPT || R2 = [I1++] || [I3++M2] = R5;
|
|
yading@10
|
216
|
|
yading@10
|
217 (r7:4) = [sp++];
|
|
yading@10
|
218 unlink;
|
|
yading@10
|
219 rts;
|
|
yading@10
|
220 DEFUN_END(z_put_pixels16_xy2)
|
|
yading@10
|
221
|
|
yading@10
|
222 DEFUN(put_pixels16_xy2_nornd,mL1,
|
|
yading@10
|
223 (uint8_t *block, const uint8_t *s0,
|
|
yading@10
|
224 int line_size, int h)):
|
|
yading@10
|
225 link 0;
|
|
yading@10
|
226 [--sp] = (r7:4);
|
|
yading@10
|
227 i3=r0; // dest
|
|
yading@10
|
228 i0=r1; // src0--> pixels
|
|
yading@10
|
229 i1=r1; // src1--> pixels + line_size
|
|
yading@10
|
230 m3=r2;
|
|
yading@10
|
231 r2+=-12;
|
|
yading@10
|
232 m2=r2;
|
|
yading@10
|
233 r2+=-4;
|
|
yading@10
|
234 i1+=m3; /* src1 + line_size */
|
|
yading@10
|
235 m0=r2; /* line-size - 20 */
|
|
yading@10
|
236 p0=[fp+20]; // h
|
|
yading@10
|
237
|
|
yading@10
|
238 B0=I0;
|
|
yading@10
|
239 B1=I1;
|
|
yading@10
|
240 B3=I3;
|
|
yading@10
|
241
|
|
yading@10
|
242 DISALGNEXCPT || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
243
|
|
yading@10
|
244 LSETUP(LS$16ET,LE$16ET) LC0=P0;
|
|
yading@10
|
245 LS$16ET:DISALGNEXCPT || R1 = [I0++] || R3 =[I1++];
|
|
yading@10
|
246 R4 = BYTEOP2P (R3:2,R1:0) (TL) || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
247 R5 = BYTEOP2P (R3:2,R1:0) (TL,R) || R1 = [I0++] || [I3++] = R4 ;
|
|
yading@10
|
248 DISALGNEXCPT || R3 = [I1++] || [I3++] = R5;
|
|
yading@10
|
249 R4 = BYTEOP2P (R3:2,R1:0) (TL) || R0 = [I0++M0]|| R2 = [I1++M0];
|
|
yading@10
|
250 R5 = BYTEOP2P (R3:2,R1:0) (TL,R) || R0 = [I0++] || [I3++] = R4 ;
|
|
yading@10
|
251 LE$16ET:DISALGNEXCPT || R2 = [I1++] || [I3++M2] = R5;
|
|
yading@10
|
252
|
|
yading@10
|
253 M1 = 1;
|
|
yading@10
|
254 I3=B3;
|
|
yading@10
|
255 I1=B1;
|
|
yading@10
|
256 I0=B0;
|
|
yading@10
|
257
|
|
yading@10
|
258 I0 += M1;
|
|
yading@10
|
259 I1 += M1;
|
|
yading@10
|
260
|
|
yading@10
|
261 DISALGNEXCPT || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
262 LSETUP(LS$16OT,LE$16OT) LC0=P0;
|
|
yading@10
|
263 LS$16OT:DISALGNEXCPT || R1 = [I0++] || R3 =[I1++];
|
|
yading@10
|
264 R4 = BYTEOP2P (R3:2,R1:0) (TH) || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
265 R5 = BYTEOP2P (R3:2,R1:0) (TH,R) || R1 = [I0++] || R6 =[I3++];
|
|
yading@10
|
266 R4 = R4 +|+ R6 || R7 = [I3--];
|
|
yading@10
|
267 R5 = R5 +|+ R7 || [I3++] = R4;
|
|
yading@10
|
268 DISALGNEXCPT || R3 =[I1++] || [I3++] = R5;
|
|
yading@10
|
269 R4 = BYTEOP2P (R3:2,R1:0) (TH) || R0 = [I0++M0]|| R2 = [I1++M0];
|
|
yading@10
|
270 R5 = BYTEOP2P (R3:2,R1:0) (TH,R) || R0 = [I0++] || R6 = [I3++];
|
|
yading@10
|
271 R4 = R4 +|+ R6 || R7 = [I3--];
|
|
yading@10
|
272 R5 = R5 +|+ R7 || [I3++] = R4;
|
|
yading@10
|
273 LE$16OT:DISALGNEXCPT || R2 = [I1++] || [I3++M2] = R5;
|
|
yading@10
|
274
|
|
yading@10
|
275 (r7:4) = [sp++];
|
|
yading@10
|
276 unlink;
|
|
yading@10
|
277 rts;
|
|
yading@10
|
278 DEFUN_END(put_pixels16_xy2_nornd)
|
|
yading@10
|
279
|
|
yading@10
|
280 DEFUN(z_put_pixels8_xy2,mL1,
|
|
yading@10
|
281 (uint8_t *block, const uint8_t *s0,
|
|
yading@10
|
282 int dest_size, int line_size, int h)):
|
|
yading@10
|
283 link 0;
|
|
yading@10
|
284 [--sp] = (r7:4);
|
|
yading@10
|
285 i3=r0; // dest
|
|
yading@10
|
286 i0=r1; // src0--> pixels
|
|
yading@10
|
287 i1=r1; // src1--> pixels + line_size
|
|
yading@10
|
288 r2+=-4;
|
|
yading@10
|
289 m2=r2; // m2=dest_width-4
|
|
yading@10
|
290 r2=[fp+20];
|
|
yading@10
|
291 m3=r2; // line_size
|
|
yading@10
|
292 p0=[fp+24]; // h
|
|
yading@10
|
293 r2+=-8;
|
|
yading@10
|
294 i1+=m3; /* src1 + line_size */
|
|
yading@10
|
295 m0=r2; /* line-size - 20 */
|
|
yading@10
|
296
|
|
yading@10
|
297 b0 = I0;
|
|
yading@10
|
298 b1 = I1;
|
|
yading@10
|
299 b3 = I3;
|
|
yading@10
|
300
|
|
yading@10
|
301 LSETUP(LS$8E,LE$8E) LC0=P0;
|
|
yading@10
|
302 DISALGNEXCPT || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
303 LS$8E: DISALGNEXCPT || R1 = [I0++] || R3 =[I1++];
|
|
yading@10
|
304 R4 = BYTEOP2P (R3:2,R1:0) (RNDL) || R0 = [I0++M0] || R2 =[I1++M0];
|
|
yading@10
|
305 R5 = BYTEOP2P (R3:2,R1:0) (RNDL,R) || R0 = [I0++] || [I3++] = R4 ;
|
|
yading@10
|
306 LE$8E: DISALGNEXCPT || R2 = [I1++] || [I3++M2] = R5;
|
|
yading@10
|
307
|
|
yading@10
|
308 M1 = 1;
|
|
yading@10
|
309 I3 = b3;
|
|
yading@10
|
310 I1 = b1;
|
|
yading@10
|
311 I0 = b0;
|
|
yading@10
|
312
|
|
yading@10
|
313 I0 += M1;
|
|
yading@10
|
314 I1 += M1;
|
|
yading@10
|
315
|
|
yading@10
|
316 LSETUP(LS$8O,LE$8O) LC0=P0;
|
|
yading@10
|
317 DISALGNEXCPT || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
318 LS$8O: DISALGNEXCPT || R1 = [I0++] || R3 =[I1++];
|
|
yading@10
|
319 R4 = BYTEOP2P (R3:2,R1:0) (RNDH) || R0 = [I0++M0] || R2 =[I1++M0];
|
|
yading@10
|
320 R5 = BYTEOP2P (R3:2,R1:0) (RNDH,R) || R0 = [I0++] || R6 =[I3++];
|
|
yading@10
|
321 R4 = R4 +|+ R6 || R7 = [I3--];
|
|
yading@10
|
322 R5 = R5 +|+ R7 || [I3++] = R4;
|
|
yading@10
|
323 LE$8O: DISALGNEXCPT || R2 =[I1++] || [I3++M2] = R5;
|
|
yading@10
|
324
|
|
yading@10
|
325 (r7:4) = [sp++];
|
|
yading@10
|
326 unlink;
|
|
yading@10
|
327 rts;
|
|
yading@10
|
328 DEFUN_END(z_put_pixels8_xy2)
|
|
yading@10
|
329
|
|
yading@10
|
330 DEFUN(put_pixels8_xy2_nornd,mL1,
|
|
yading@10
|
331 (uint8_t *block, const uint8_t *s0, int line_size, int h)):
|
|
yading@10
|
332 link 0;
|
|
yading@10
|
333 [--sp] = (r7:4);
|
|
yading@10
|
334 i3=r0; // dest
|
|
yading@10
|
335 i0=r1; // src0--> pixels
|
|
yading@10
|
336 i1=r1; // src1--> pixels + line_size
|
|
yading@10
|
337 m3=r2;
|
|
yading@10
|
338 r2+=-4;
|
|
yading@10
|
339 m2=r2;
|
|
yading@10
|
340 r2+=-4;
|
|
yading@10
|
341 i1+=m3; /* src1 + line_size */
|
|
yading@10
|
342 m0=r2; /* line-size - 20 */
|
|
yading@10
|
343 p0=[fp+20]; // h
|
|
yading@10
|
344
|
|
yading@10
|
345
|
|
yading@10
|
346 b0 = I0;
|
|
yading@10
|
347 b1 = I1;
|
|
yading@10
|
348 b3 = I3;
|
|
yading@10
|
349
|
|
yading@10
|
350 LSETUP(LS$8ET,LE$8ET) LC0=P0;
|
|
yading@10
|
351 DISALGNEXCPT || R0 = [I0++] || R2 =[I1++];
|
|
yading@10
|
352
|
|
yading@10
|
353 LS$8ET: DISALGNEXCPT || R1 = [I0++] || R3 = [I1++];
|
|
yading@10
|
354 R4 = BYTEOP2P (R3:2,R1:0) (TL) || R0 = [I0++M0] || R2 = [I1++M0];
|
|
yading@10
|
355 R5 = BYTEOP2P (R3:2,R1:0) (TL,R) || R0 = [I0++] || [I3++] = R4 ;
|
|
yading@10
|
356 LE$8ET: DISALGNEXCPT || R2 = [I1++] || [I3++M2] = R5;
|
|
yading@10
|
357
|
|
yading@10
|
358 M1 = 1;
|
|
yading@10
|
359 I3 = b3;
|
|
yading@10
|
360 I1 = b1;
|
|
yading@10
|
361 I0 = b0;
|
|
yading@10
|
362
|
|
yading@10
|
363 I0 += M1;
|
|
yading@10
|
364 I1 += M1;
|
|
yading@10
|
365
|
|
yading@10
|
366 LSETUP(LS$8OT,LE$8OT) LC0=P0;
|
|
yading@10
|
367 DISALGNEXCPT || R0 = [I0++] || R2 = [I1++];
|
|
yading@10
|
368
|
|
yading@10
|
369 LS$8OT: DISALGNEXCPT || R1 = [I0++] || R3 = [I1++];
|
|
yading@10
|
370 R4 = BYTEOP2P (R3:2,R1:0) (TH) || R0 = [I0++M0] || R2 = [I1++M0];
|
|
yading@10
|
371 R5 = BYTEOP2P (R3:2,R1:0) (TH,R) || R0 = [I0++] || R6 = [I3++];
|
|
yading@10
|
372 R4 = R4 +|+ R6 || R7 = [I3--];
|
|
yading@10
|
373 R5 = R5 +|+ R7 || [I3++] = R4;
|
|
yading@10
|
374 LE$8OT: DISALGNEXCPT || R2 =[I1++] || [I3++M2] = R5;
|
|
yading@10
|
375
|
|
yading@10
|
376 (r7:4) = [sp++];
|
|
yading@10
|
377 unlink;
|
|
yading@10
|
378 rts;
|
|
yading@10
|
379 DEFUN_END(put_pixels8_xy2_nornd)
|