[svn] / trunk / xvidcore / src / image / ia64_asm / interpolate8x8_ia64_exact.s Repository:
ViewVC logotype

Annotation of /trunk/xvidcore/src/image/ia64_asm/interpolate8x8_ia64_exact.s

Parent Directory Parent Directory | Revision Log Revision Log


Revision 320 - (view) (download)

1 : ia64p 320 // ***********************************
2 :     // interpolate8x8_ia64.s
3 :     // optimized for IA-64
4 :     // Authors : Kai Kühn
5 :     // Alexander Viehl
6 :     // last update : 13.7.2002
7 :     // ***********************************
8 :     .file "interpolate8x8_ia64.s"
9 :     .pred.safe_across_calls p1-p5,p16-p63
10 :     .text
11 :     .align 16
12 :     .global interpolate8x8_halfpel_h_ia64#
13 :     .proc interpolate8x8_halfpel_h_ia64#
14 :     interpolate8x8_halfpel_h_ia64:
15 :     LL=3
16 :     SL=1
17 :     SL2=1
18 :     OL=1
19 :     OL2=1
20 :     AVL=1
21 :     AL=1
22 :     PSH=1
23 :     ML=1
24 :     STL=3
25 :    
26 :     alloc r9=ar.pfs,4, 60,0,64
27 :    
28 :     mov r20 = ar.lc
29 :     mov r21 = pr
30 :    
31 :     dep.z r22 = r33,3,3 // rshift of src
32 :    
33 :     and r14 = -8,r33 // align src
34 :     mov r15 = r32 // get dest
35 :     mov r16 = r34 // stride
36 :     sub r17 = 1,r35 // 1-rounding
37 :    
38 :     ;;
39 :    
40 :     add r18 = 8,r14
41 :     mux2 r17 = r17, 0x00 // broadcast 1-rounding
42 :    
43 :     sub r24 = 64,r22 // lshift of src
44 :     add r26 = 8,r22 // rshift of src+1
45 :     sub r27 = 56,r22 // lshift of src+1
46 :    
47 :     mov ar.lc = 7 // loopcounter
48 :     mov ar.ec = LL + SL +OL + AVL + STL + 2*PSH + 2*AL + ML // sum of latencies
49 :     mov pr.rot = 1 << 16 // init pr regs for sw-pipeling
50 :    
51 :     ;;
52 :     .rotr ald1[LL+1],ald2[LL+1],shru1[SL+1],shl1[SL+1],shru2[SL+1],shl2[SL+1],or1[OL+1+PSH],or2[OL+1+PSH],pshb1[PSH+1],pshb2[PSH+1],pshe1[PSH+1],pshe2[PSH+1+AL],pshe3[PSH+1],pshe4[PSH+1+AL],add1[AL+1],add2[AL+1],add3[AL+1],add4[AL+1],avg1[AVL+1],avg2[AVL+1],pmix1[ML+1]
53 :     .rotp aldp[LL], sh1p[SL], or1p[OL], pshb[PSH], pshe[PSH],addp[AL],add2p[AL],pavg1p[AVL],mixp[ML],stp[STL]
54 :    
55 :     .Lloop_interpolate:
56 :     (aldp[0]) ld8 ald1[0] = [r14],r16 // load aligned src
57 :     (aldp[0]) ld8 ald2[0] = [r18],r16 // and aligned src+8
58 :    
59 :     (sh1p[0]) shr.u shru1[0] = ald1[LL],r22 // get src
60 :     (sh1p[0]) shl shl1[0] = ald2[LL],r27
61 :     (sh1p[0]) shr.u shru2[0] = ald1[LL],r26 // get src+1
62 :     (sh1p[0]) shl shl2[0] = ald2[LL],r24
63 :    
64 :     (or1p[0]) or or1[0] = shru1[SL],shl2[SL] // merge things
65 :     (or1p[0]) or or2[0] = shru2[SL],shl1[SL]
66 :    
67 :     (pshb[0]) pshl2 pshb1[0] = or1[OL],8
68 :     (pshb[0]) pshl2 pshb2[0] = or2[OL],8
69 :    
70 :     (pshe[0]) pshr2.u pshe1[0] = pshb1[PSH],8
71 :     (pshe[0]) pshr2.u pshe2[0] = pshb2[PSH],8
72 :     (pshe[0]) pshr2.u pshe3[0] = or1[PSH+OL],8
73 :     (pshe[0]) pshr2.u pshe4[0] = or2[PSH+OL],8
74 :    
75 :     (addp[0]) padd2.sss add1[0] = pshe1[PSH],r17 // add 1-rounding
76 :     (addp[0]) padd2.sss add2[0] = pshe3[PSH],r17 // add 1-rounding
77 :    
78 :     (add2p[0]) padd2.uus add3[0] = pshe2[AL+PSH],add1[AL]
79 :     (add2p[0]) padd2.uus add4[0] = pshe4[AL+PSH],add2[AL]
80 :    
81 :     (pavg1p[0]) pshr2.u avg1[0] = add3[AL],1 // parallel average
82 :     (pavg1p[0]) pshr2.u avg2[0] = add4[AL],1 // parallel average
83 :    
84 :     (mixp[0]) mix1.r pmix1[0] = avg2[AVL],avg1[AVL]
85 :    
86 :     (stp[0]) st8 [r15] = pmix1[ML] // store results
87 :     (stp[0]) add r15 = r15,r16
88 :    
89 :    
90 :    
91 :    
92 :     br.ctop.sptk.few .Lloop_interpolate
93 :     ;;
94 :     mov ar.lc = r20
95 :     mov pr = r21,-1
96 :     br.ret.sptk.many b0
97 :     .endp interpolate8x8_halfpel_h_ia64#
98 :    
99 :     .align 16
100 :     .global interpolate8x8_halfpel_v_ia64#
101 :     .proc interpolate8x8_halfpel_v_ia64#
102 :     interpolate8x8_halfpel_v_ia64:
103 :     LL=3
104 :     SL=1
105 :     SL2=1
106 :     OL=1
107 :     OL2=1
108 :     AVL=1
109 :     AL=1
110 :     PSH=1
111 :     ML=1
112 :     STL=3
113 :    
114 :     alloc r9=ar.pfs,4, 60,0,64
115 :    
116 :     mov r20 = ar.lc
117 :     mov r21 = pr
118 :    
119 :     dep.z r22 = r33,3,3
120 :    
121 :     and r14 = -8,r33
122 :     mov r15 = r32
123 :     mov r16 = r34
124 :     sub r17 = 1,r35
125 :     ;;
126 :    
127 :     add r18 = 8,r14
128 :     add r19 = r14,r16 // src + stride
129 :     mux2 r17 = r17, 0x00
130 :    
131 :     sub r24 = 64,r22
132 :     ;;
133 :     add r26 = 8,r19 // src + stride + 8
134 :    
135 :     mov ar.lc = 7
136 :     mov ar.ec = LL + SL +OL + AVL + STL + 2*PSH + 2*AL + ML // sum of latencies
137 :     mov pr.rot = 1 << 16
138 :    
139 :     ;;
140 :     .rotr ald1[LL+1],ald2[LL+1],ald3[LL+1],ald4[LL+1],shru1[SL+1],shl1[SL+1],shru2[SL+1],shl2[SL+1],or1[OL+1+PSH],or2[OL+1+PSH],pshb1[PSH+1],pshb2[PSH+1],pshe1[PSH+1],pshe2[PSH+1+AL],pshe3[PSH+1],pshe4[PSH+1+AL],add1[AL+1],add2[AL+1],add3[AL+1],add4[AL+1],avg1[AVL+1],avg2[AVL+1],pmix1[ML+1]
141 :     .rotp aldp[LL], sh1p[SL], or1p[OL], pshb[PSH], pshe[PSH],addp[AL],add2p[AL],pavg1p[AVL],mixp[ML],stp[STL]
142 :    
143 :    
144 :    
145 :     .Lloop_interpolate2:
146 :     (aldp[0]) ld8 ald1[0] = [r14],r16
147 :     (aldp[0]) ld8 ald2[0] = [r18],r16
148 :     (aldp[0]) ld8 ald3[0] = [r19],r16
149 :     (aldp[0]) ld8 ald4[0] = [r26],r16
150 :    
151 :     (sh1p[0]) shr.u shru1[0] = ald1[LL],r22
152 :     (sh1p[0]) shl shl1[0] = ald2[LL],r24
153 :     (sh1p[0]) shr.u shru2[0] = ald3[LL],r22
154 :     (sh1p[0]) shl shl2[0] = ald4[LL],r24
155 :    
156 :     (or1p[0]) or or1[0] = shru1[SL],shl1[SL]
157 :     (or1p[0]) or or2[0] = shru2[SL],shl2[SL]
158 :    
159 :     (pshb[0]) pshl2 pshb1[0] = or1[OL],8
160 :     (pshb[0]) pshl2 pshb2[0] = or2[OL],8
161 :    
162 :     (pshe[0]) pshr2.u pshe1[0] = pshb1[PSH],8
163 :     (pshe[0]) pshr2.u pshe2[0] = pshb2[PSH],8
164 :     (pshe[0]) pshr2.u pshe3[0] = or1[PSH+OL],8
165 :     (pshe[0]) pshr2.u pshe4[0] = or2[PSH+OL],8
166 :    
167 :     (addp[0]) padd2.sss add1[0] = pshe1[PSH],r17 // add 1-rounding
168 :     (addp[0]) padd2.sss add2[0] = pshe3[PSH],r17 // add 1-rounding
169 :    
170 :     (add2p[0]) padd2.uus add3[0] = pshe2[AL+PSH],add1[AL]
171 :     (add2p[0]) padd2.uus add4[0] = pshe4[AL+PSH],add2[AL]
172 :    
173 :     (pavg1p[0]) pshr2.u avg1[0] = add3[AL],1 // parallel average
174 :     (pavg1p[0]) pshr2.u avg2[0] = add4[AL],1 // parallel average
175 :    
176 :     (mixp[0]) mix1.r pmix1[0] = avg2[AVL],avg1[AVL]
177 :    
178 :     (stp[0]) st8 [r15] = pmix1[ML]
179 :     (stp[0]) add r15 = r15,r16
180 :    
181 :    
182 :    
183 :    
184 :     br.ctop.sptk.few .Lloop_interpolate2
185 :     ;;
186 :     mov ar.lc = r20
187 :     mov pr = r21,-1
188 :     br.ret.sptk.many b0
189 :     .endp interpolate8x8_halfpel_v_ia64#
190 :    
191 :     .align 16
192 :     .global interpolate8x8_halfpel_hv_ia64#
193 :     .proc interpolate8x8_halfpel_hv_ia64#
194 :     interpolate8x8_halfpel_hv_ia64:
195 :     LL=3
196 :     SL=1
197 :     SL2=1
198 :     OL=1
199 :     OL2=1
200 :     AVL=1
201 :     AL=1
202 :     PSH=1
203 :     ML=1
204 :     STL=3
205 :    
206 :     alloc r9=ar.pfs,4, 92,0,96
207 :    
208 :     mov r20 = ar.lc
209 :     mov r21 = pr
210 :    
211 :     dep.z r22 = r33,3,3
212 :    
213 :     and r14 = -8,r33
214 :     mov r15 = r32
215 :     mov r16 = r34
216 :     sub r17 = 2,r35
217 :     ;;
218 :    
219 :     add r18 = 8,r14
220 :     add r19 = r14,r16
221 :     mux2 r17 = r17, 0x00
222 :    
223 :     add r27 = 8,r22
224 :     sub r28 = 56,r22
225 :     sub r24 = 64,r22
226 :     ;;
227 :     add r26 = 8,r19
228 :    
229 :     mov ar.lc = 7
230 :     mov ar.ec = LL + SL +OL + AVL + STL + 2*PSH + 2*AL + ML // sum of latencies
231 :    
232 :     mov pr.rot = 1 << 16
233 :    
234 :     ;;
235 :     .rotr ald1[LL+1],ald2[LL+1],ald3[LL+1],ald4[LL+1],shru1[SL+1],shl1[SL+1],shru2[SL+1],shl2[SL+1],shl3[SL+1],shru3[SL+1],shl4[SL+1],shru4[SL+1],or1[OL+1+PSH],or2[OL+1+PSH],or3[OL+1+PSH],or4[OL+1+PSH],pshb1[PSH+1],pshb2[PSH+1],pshb3[PSH+1],pshb4[PSH+1],pshe1[PSH+1],pshe2[PSH+1+AL],pshe3[PSH+1],pshe4[PSH+1+AL],pshe5[PSH+1],pshe6[PSH+1+AL],pshe7[PSH+1],pshe8[PSH+1+AL],add1[AL+1],add2[AL+1],add3[AL+1],add4[AL+1],add5[AL+1],add6[AL+1],add7[AL+1],add8[AL+1],avg1[AVL+1],avg2[AVL+1],pmix1[ML+1]
236 :     .rotp aldp[LL], sh1p[SL],or1p[OL],pshb[PSH],pshe[PSH],addp[AL],add2p[AL],add3p[AL],pavg1p[AVL],mixp[ML],stp[STL]
237 :    
238 :    
239 :    
240 :     .Lloop_interpolate3:
241 :     (aldp[0]) ld8 ald1[0] = [r14],r16
242 :     (aldp[0]) ld8 ald2[0] = [r18],r16
243 :     (aldp[0]) ld8 ald3[0] = [r19],r16
244 :     (aldp[0]) ld8 ald4[0] = [r26],r16
245 :    
246 :     (sh1p[0]) shr.u shru1[0] = ald1[LL],r22
247 :     (sh1p[0]) shl shl1[0] = ald2[LL],r24
248 :     (sh1p[0]) shr.u shru2[0] = ald3[LL],r22
249 :     (sh1p[0]) shl shl2[0] = ald4[LL],r24
250 :     (sh1p[0]) shr.u shru3[0] = ald1[LL],r27
251 :     (sh1p[0]) shl shl3[0] = ald2[LL],r28
252 :     (sh1p[0]) shr.u shru4[0] = ald3[LL],r27
253 :     (sh1p[0]) shl shl4[0] = ald4[LL],r28
254 :    
255 :    
256 :     (or1p[0]) or or1[0] = shru1[SL],shl1[SL]
257 :     (or1p[0]) or or2[0] = shru2[SL],shl2[SL]
258 :     (or1p[0]) or or3[0] = shru3[SL],shl3[SL]
259 :     (or1p[0]) or or4[0] = shru4[SL],shl4[SL]
260 :    
261 :     (pshb[0]) pshl2 pshb1[0] = or1[OL],8
262 :     (pshb[0]) pshl2 pshb2[0] = or2[OL],8
263 :     (pshb[0]) pshl2 pshb3[0] = or3[OL],8
264 :     (pshb[0]) pshl2 pshb4[0] = or4[OL],8
265 :    
266 :    
267 :     (pshe[0]) pshr2.u pshe1[0] = pshb1[PSH],8
268 :     (pshe[0]) pshr2.u pshe2[0] = pshb2[PSH],8
269 :     (pshe[0]) pshr2.u pshe3[0] = or1[PSH+OL],8
270 :     (pshe[0]) pshr2.u pshe4[0] = or2[PSH+OL],8
271 :     (pshe[0]) pshr2.u pshe5[0] = pshb3[PSH],8
272 :     (pshe[0]) pshr2.u pshe6[0] = pshb4[PSH],8
273 :     (pshe[0]) pshr2.u pshe7[0] = or3[PSH+OL],8
274 :     (pshe[0]) pshr2.u pshe8[0] = or4[PSH+OL],8
275 :    
276 :    
277 :    
278 :     (addp[0]) padd2.sss add1[0] = pshe1[PSH],pshe2[PSH] // add 1-rounding
279 :     (addp[0]) padd2.sss add2[0] = pshe3[PSH],pshe4[PSH] // add 1-rounding
280 :     (addp[0]) padd2.sss add5[0] = pshe5[PSH],pshe6[PSH] // add 1-rounding
281 :     (addp[0]) padd2.sss add6[0] = pshe7[PSH],pshe8[PSH] // add 1-rounding
282 :    
283 :    
284 :     (add2p[0]) padd2.uus add3[0] = add1[AL],add5[AL]
285 :     (add2p[0]) padd2.uus add4[0] = add2[AL],add6[AL]
286 :    
287 :     (add3p[0]) padd2.uus add7[0] = add3[AL],r17
288 :     (add3p[0]) padd2.uus add8[0] = add4[AL],r17
289 :    
290 :    
291 :     (pavg1p[0]) pshr2.u avg1[0] = add7[AL],2 // parallel average
292 :     (pavg1p[0]) pshr2.u avg2[0] = add8[AL],2 // parallel average
293 :    
294 :     (mixp[0]) mix1.r pmix1[0] = avg2[AVL],avg1[AVL]
295 :    
296 :    
297 :     (stp[0]) st8 [r15] = pmix1[ML]
298 :     (stp[0]) add r15 = r15,r16
299 :    
300 :    
301 :    
302 :    
303 :     br.ctop.sptk.few .Lloop_interpolate3
304 :     ;;
305 :     mov ar.lc = r20
306 :     mov pr = r21,-1
307 :     br.ret.sptk.many b0
308 :     .endp interpolate8x8_halfpel_hv_ia64#
309 :    
310 :    

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4