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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 242 - (view) (download)

1 : ia64p 242
2 :     .file "interpolate8x8_ia64.s"
3 :     .pred.safe_across_calls p1-p5,p16-p63
4 :     .text
5 :     .align 16
6 :     .global interpolate8x8_halfpel_h_ia64#
7 :     .proc interpolate8x8_halfpel_h_ia64#
8 :     interpolate8x8_halfpel_h_ia64:
9 :     LL=3
10 :     SL=1
11 :     SL2=1
12 :     OL=1
13 :     OL2=1
14 :     AVL=1
15 :     AL=1
16 :     STL=3
17 :    
18 :     alloc r9=ar.pfs,4, 60,0,64
19 :    
20 :     mov r20 = ar.lc
21 :     mov r21 = pr
22 :    
23 :     dep.z r22 = r33,3,3 // rshift of src
24 :    
25 :     and r14 = -8,r33 // align src
26 :     mov r15 = r32 // get dest
27 :     mov r16 = r34 // stride
28 :     sub r17 = 1,r35 // 1-rounding
29 :     ;;
30 :    
31 :     add r18 = 8,r14
32 :     mux1 r17 = r17, @brcst // broadcast 1-rounding
33 :    
34 :     sub r24 = 64,r22 // lshift of src
35 :     add r26 = 8,r22 // rshift of src+1
36 :     sub r27 = 56,r22 // lshift of src+1
37 :    
38 :     mov ar.lc = 7 // loopcounter
39 :     mov ar.ec = LL + SL +OL + AVL + AL + STL // sum of latencies
40 :     mov pr.rot = 1 << 16 // init pr regs for sw-pipeling
41 :    
42 :     ;;
43 :     .rotr ald1[LL+1],ald2[LL+1],shru1[SL+1],shl1[SL+1],shru2[SL+1],shl2[SL+1],or1[OL+1],or2[OL+1+AL],add1[AL+1],avg[AVL+1]
44 :     .rotp aldp[LL], sh1p[SL], or1p[OL], addp[AL], pavg1p[AVL],stp[STL]
45 :    
46 :    
47 :     loop_interpolate:
48 :     (aldp[0]) ld8 ald1[0] = [r14],r16 // load aligned src
49 :     (aldp[0]) ld8 ald2[0] = [r18],r16 // and aligned src+8
50 :    
51 :     (sh1p[0]) shr.u shru1[0] = ald1[LL],r22 // get src
52 :     (sh1p[0]) shl shl1[0] = ald2[LL],r27
53 :     (sh1p[0]) shr.u shru2[0] = ald1[LL],r26 // get src+1
54 :     (sh1p[0]) shl shl2[0] = ald2[LL],r24
55 :    
56 :     (or1p[0]) or or1[0] = shru1[SL],shl2[SL] // merge things
57 :     (or1p[0]) or or2[0] = shru2[SL],shl1[SL]
58 :    
59 :     (addp[0]) padd1.uus add1[0] = or1[OL],r17 // add 1-rounding
60 :    
61 :     (pavg1p[0]) pavg1 avg[0] = add1[AL],or2[OL+AL] // parallel average
62 :    
63 :     (stp[0]) st8 [r15] = avg[AVL] // store results
64 :     (stp[0]) add r15 = r15,r16
65 :    
66 :    
67 :    
68 :    
69 :     br.ctop.sptk.few loop_interpolate
70 :     ;;
71 :     mov ar.lc = r20
72 :     mov pr = r21,-1
73 :     br.ret.sptk.many b0
74 :     .endp interpolate8x8_halfpel_h_ia64#
75 :    
76 :     .align 16
77 :     .global interpolate8x8_halfpel_v_ia64#
78 :     .proc interpolate8x8_halfpel_v_ia64#
79 :     interpolate8x8_halfpel_v_ia64:
80 :     LL=3
81 :     SL=1
82 :     SL2=1
83 :     OL=1
84 :     OL2=1
85 :     AVL=1
86 :     AL=1
87 :     STL=3
88 :    
89 :     alloc r9=ar.pfs,4, 60,0,64
90 :    
91 :     mov r20 = ar.lc
92 :     mov r21 = pr
93 :    
94 :     dep.z r22 = r33,3,3
95 :    
96 :     and r14 = -8,r33
97 :     mov r15 = r32
98 :     mov r16 = r34
99 :     sub r17 = 1,r35
100 :     ;;
101 :    
102 :     add r18 = 8,r14
103 :     add r19 = r14,r16 // src + stride
104 :     mux1 r17 = r17, @brcst
105 :    
106 :     sub r24 = 64,r22
107 :     ;;
108 :     add r26 = 8,r19 // src + stride + 8
109 :    
110 :     mov ar.lc = 7
111 :     mov ar.ec = LL + SL +OL + AVL + AL + STL
112 :     mov pr.rot = 1 << 16
113 :    
114 :     ;;
115 :     .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],or2[OL+1+AL],add1[AL+1],avg[AVL+1]
116 :     .rotp aldp[LL], sh1p[SL], or1p[OL], addp[AL], pavg1p[AVL],stp[STL]
117 :    
118 :    
119 :     loop_interpolate2:
120 :     (aldp[0]) ld8 ald1[0] = [r14],r16
121 :     (aldp[0]) ld8 ald2[0] = [r18],r16
122 :     (aldp[0]) ld8 ald3[0] = [r19],r16
123 :     (aldp[0]) ld8 ald4[0] = [r26],r16
124 :    
125 :     (sh1p[0]) shr.u shru1[0] = ald1[LL],r22
126 :     (sh1p[0]) shl shl1[0] = ald2[LL],r24
127 :     (sh1p[0]) shr.u shru2[0] = ald3[LL],r22
128 :     (sh1p[0]) shl shl2[0] = ald4[LL],r24
129 :    
130 :     (or1p[0]) or or1[0] = shru1[SL],shl1[SL]
131 :     (or1p[0]) or or2[0] = shru2[SL],shl2[SL]
132 :    
133 :     (addp[0]) padd1.uus add1[0] = or1[OL],r17
134 :    
135 :     (pavg1p[0]) pavg1 avg[0] = add1[AL],or2[OL+AL]
136 :    
137 :     (stp[0]) st8 [r15] = avg[AVL]
138 :     (stp[0]) add r15 = r15,r16
139 :    
140 :    
141 :    
142 :    
143 :     br.ctop.sptk.few loop_interpolate2
144 :     ;;
145 :     mov ar.lc = r20
146 :     mov pr = r21,-1
147 :     br.ret.sptk.many b0
148 :     .endp interpolate8x8_halfpel_v_ia64#
149 :    
150 :     .align 16
151 :     .global interpolate8x8_halfpel_hv_ia64#
152 :     .proc interpolate8x8_halfpel_hv_ia64#
153 :     interpolate8x8_halfpel_hv_ia64:
154 :     LL=3
155 :     SL=1
156 :     SL2=1
157 :     OL=1
158 :     OL2=1
159 :     AVL=1
160 :     AL=1
161 :     STL=3
162 :    
163 :     alloc r9=ar.pfs,4, 60,0,64
164 :    
165 :     mov r20 = ar.lc
166 :     mov r21 = pr
167 :    
168 :     dep.z r22 = r33,3,3
169 :    
170 :     and r14 = -8,r33
171 :     mov r15 = r32
172 :     mov r16 = r34
173 :     sub r17 = 1,r35
174 :     ;;
175 :    
176 :     add r18 = 8,r14
177 :     add r19 = r14,r16
178 :     mux1 r17 = r17, @brcst
179 :    
180 :     add r27 = 8,r22
181 :     sub r28 = 56,r22
182 :     sub r24 = 64,r22
183 :     ;;
184 :     add r26 = 8,r19
185 :    
186 :     mov ar.lc = 7
187 :     mov ar.ec = LL + SL +OL + 2*AVL + AL + STL
188 :     mov pr.rot = 1 << 16
189 :    
190 :     ;;
191 :     .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],or2[OL+1+AL],or3[OL+AL+1],or4[OL+AL+1],add1[AL+1],avg[AVL+1],avg1[AVL+1],avg2[AVL+1]
192 :     .rotp aldp[LL], sh1p[SL], or1p[OL], addp[AL],pavg1p[AVL],pavg2p[AVL],stp[STL]
193 :    
194 :    
195 :     loop_interpolate3:
196 :     (aldp[0]) ld8 ald1[0] = [r14],r16
197 :     (aldp[0]) ld8 ald2[0] = [r18],r16
198 :     (aldp[0]) ld8 ald3[0] = [r19],r16
199 :     (aldp[0]) ld8 ald4[0] = [r26],r16
200 :    
201 :     (sh1p[0]) shr.u shru1[0] = ald1[LL],r22
202 :     (sh1p[0]) shl shl1[0] = ald2[LL],r24
203 :     (sh1p[0]) shr.u shru2[0] = ald3[LL],r22
204 :     (sh1p[0]) shl shl2[0] = ald4[LL],r24
205 :     (sh1p[0]) shr.u shru3[0] = ald1[LL],r27
206 :     (sh1p[0]) shl shl3[0] = ald2[LL],r28
207 :     (sh1p[0]) shr.u shru4[0] = ald3[LL],r27
208 :     (sh1p[0]) shl shl4[0] = ald4[LL],r28
209 :    
210 :    
211 :     (or1p[0]) or or1[0] = shru1[SL],shl1[SL]
212 :     (or1p[0]) or or2[0] = shru2[SL],shl2[SL]
213 :     (or1p[0]) or or3[0] = shru3[SL],shl3[SL]
214 :     (or1p[0]) or or4[0] = shru4[SL],shl4[SL]
215 :    
216 :     (addp[0]) padd1.uus add1[0] = or1[OL],r17
217 :    
218 :     (pavg1p[0]) pavg1 avg[0] = add1[AL],or2[OL+AL]
219 :     (pavg1p[0]) pavg1 avg1[0] = or3[OL+AL],or4[OL+AL]
220 :    
221 :     (pavg2p[0]) pavg1 avg2[0] = avg[AVL],avg1[AVL]
222 :    
223 :     (stp[0]) st8 [r15] = avg2[AVL]
224 :     (stp[0]) add r15 = r15,r16
225 :    
226 :    
227 :    
228 :    
229 :     br.ctop.sptk.few loop_interpolate3
230 :     ;;
231 :     mov ar.lc = r20
232 :     mov pr = r21,-1
233 :     br.ret.sptk.many b0
234 :     .endp interpolate8x8_halfpel_hv_ia64#
235 :    
236 :    

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