Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5361 | serge | 1 | /* |
2 | * Copyright © <2010>, Intel Corporation. |
||
3 | * |
||
4 | * This program is licensed under the terms and conditions of the |
||
5 | * Eclipse Public License (EPL), version 1.0. The full text of the EPL is at |
||
6 | * http://www.opensource.org/licenses/eclipse-1.0.php. |
||
7 | * Authors: Zhao Yakui |
||
8 | * |
||
9 | */ |
||
10 | // Modual name: InterFrame_ivy.asm |
||
11 | // |
||
12 | // Make intra predition estimation for Inter-B frame |
||
13 | // |
||
14 | |||
15 | // |
||
16 | // Now, begin source code.... |
||
17 | // |
||
18 | |||
19 | #define SAVE_RET add (1) RETURN_REG<1>:ud ip:ud 32:ud |
||
20 | #define RETURN mov (1) ip:ud RETURN_REG<0,1,0>:ud |
||
21 | |||
22 | /* |
||
23 | * __START |
||
24 | */ |
||
25 | __INTER_START: |
||
26 | mov (16) tmp_reg0.0<1>:UD 0x0:UD {align1}; |
||
27 | mov (16) tmp_reg2.0<1>:UD 0x0:UD {align1}; |
||
28 | mov (16) tmp_reg4.0<1>:UD 0x0:UD {align1} ; |
||
29 | mov (16) tmp_reg6.0<1>:UD 0x0:UD {align1} ; |
||
30 | |||
31 | shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ |
||
32 | add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */ |
||
33 | add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */ |
||
34 | mov (1) read0_header.8<1>:UD BLOCK_32X1 {align1}; |
||
35 | mov (1) read0_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ |
||
36 | |||
37 | shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ |
||
38 | add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */ |
||
39 | mov (1) read1_header.8<1>:UD BLOCK_4X16 {align1}; |
||
40 | mov (1) read1_header.20<1>:UB thread_id_ub {align1}; /* dispatch id */ |
||
41 | |||
42 | shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */ |
||
43 | mov (1) vme_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ |
||
44 | |||
45 | mul (1) obw_m0.8<1>:UD w_in_mb_uw<0,1,0>:UW orig_y_ub<0,1,0>:UB {align1}; |
||
46 | add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD orig_x_ub<0,1,0>:UB {align1}; |
||
47 | mul (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; |
||
48 | mov (1) obw_m0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ |
||
49 | |||
50 | /* |
||
51 | * Media Read Message -- fetch Luma neighbor edge pixels |
||
52 | */ |
||
53 | /* ROW */ |
||
54 | mov (8) msg_reg0.0<1>:UD read0_header.0<8,8,1>:UD {align1}; |
||
55 | send (8) msg_ind INEP_ROW<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 1 {align1}; |
||
56 | |||
57 | /* COL */ |
||
58 | mov (8) msg_reg0.0<1>:UD read1_header.0<8,8,1>:UD {align1}; |
||
59 | send (8) msg_ind INEP_COL0<1>:UB null read(BIND_IDX_INEP, 0, 0, 4) mlen 1 rlen 2 {align1}; |
||
60 | |||
61 | mov (8) mb_mvp_ref.0<1>:ud 0:ud {align1}; |
||
62 | mov (8) mb_ref_win.0<1>:ud 0:ud {align1}; |
||
63 | and.z.f0.0 (1) null:uw mb_hwdep<0,1,0>:uw 0x04:uw {align1}; |
||
64 | (f0.0) jmpi (1) __mb_hwdep_end; |
||
65 | /* read back the data for MB A */ |
||
66 | /* the layout of MB result is: rx.0(Available). rx.4(MVa), rX.8(MVb), rX.16(Pred_L0 flag), |
||
67 | * rX.18 (Pred_L1 flag), rX.20(Forward reference ID), rX.22(Backwared reference ID) |
||
68 | */ |
||
69 | mov (8) mba_result.0<1>:ud 0x0:ud {align1}; |
||
70 | mov (8) mbb_result.0<1>:ud 0x0:ud {align1}; |
||
71 | mov (8) mbc_result.0<1>:ud 0x0:ud {align1}; |
||
72 | mba_start: |
||
73 | mov (8) mb_msg0.0<1>:ud 0:ud {align1}; |
||
74 | and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; |
||
75 | /* MB A doesn't exist. Zero MV. mba_flag is zero and ref ID = -1 */ |
||
76 | (f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; |
||
77 | (f0.0) jmpi (1) mbb_start; |
||
78 | mov (1) mba_result.0<1>:d MB_AVAIL {align1}; |
||
79 | mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; |
||
80 | add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w -1:w {align1}; |
||
81 | mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; |
||
82 | add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; |
||
83 | mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; |
||
84 | mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ |
||
85 | mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; |
||
86 | |||
87 | add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; |
||
88 | /* bind index 3, read 1 oword (16bytes), msg type: 0(OWord Block Read) */ |
||
89 | send (16) |
||
90 | mb_ind |
||
91 | mb_wb.0<1>:ud |
||
92 | NULL |
||
93 | data_port( |
||
94 | OBR_CACHE_TYPE, |
||
95 | OBR_MESSAGE_TYPE, |
||
96 | OBR_CONTROL_0, |
||
97 | OBR_BIND_IDX, |
||
98 | OBR_WRITE_COMMIT_CATEGORY, |
||
99 | OBR_HEADER_PRESENT |
||
100 | ) |
||
101 | mlen 1 |
||
102 | rlen 1 |
||
103 | {align1}; |
||
104 | |||
105 | /* TODO: RefID is required after multi-references are added */ |
||
106 | and.z.f0.0 (1) null<1>:ud mb_mode_wb.0 <0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; |
||
107 | (-f0.0) mov (2) mba_result.20<1>:w -1:w {align1}; |
||
108 | (-f0.0) jmpi (1) mbb_start; |
||
109 | |||
110 | mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; |
||
111 | /* Read MV for MB A */ |
||
112 | /* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ |
||
113 | send (16) |
||
114 | mb_ind |
||
115 | mb_mv0.0<1>:ud |
||
116 | NULL |
||
117 | data_port( |
||
118 | OBR_CACHE_TYPE, |
||
119 | OBR_MESSAGE_TYPE, |
||
120 | OBR_CONTROL_8, |
||
121 | OBR_BIND_IDX, |
||
122 | OBR_WRITE_COMMIT_CATEGORY, |
||
123 | OBR_HEADER_PRESENT |
||
124 | ) |
||
125 | mlen 1 |
||
126 | rlen 4 |
||
127 | {align1}; |
||
128 | /* TODO: RefID is required after multi-references are added */ |
||
129 | /* MV */ |
||
130 | mov (2) mba_result.4<1>:ud mb_mv1.8<2,2,1>:ud {align1}; |
||
131 | mov (2) mba_result.20<1>:w -1:w {align1}; |
||
132 | mov (1) INPUT_ARG0.0<1>:ud mb_mode_wb.4<0,1,0>:ud {align1}; |
||
133 | mov (1) INPUT_ARG0.4<1>:ud mb_mode_wb.0<0,1,0>:ud {align1}; |
||
134 | mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK1:ud {align1}; |
||
135 | SAVE_RET {align1}; |
||
136 | jmpi (1) mb_pred_func; |
||
137 | mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; |
||
138 | cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; |
||
139 | (f0.0) mov (1) mba_result.16<1>:uw MB_PRED_FLAG {align1}; |
||
140 | (f0.0) mov (1) mba_result.20<1>:w 0:w {align1}; |
||
141 | (f0.0) jmpi (1) mbb_start; |
||
142 | cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; |
||
143 | (f0.0) mov (1) mba_result.18<1>:uw MB_PRED_FLAG {align1}; |
||
144 | (f0.0) mov (1) mba_result.22<1>:w 0:w {align1}; |
||
145 | (f0.0) jmpi (1) mbb_start; |
||
146 | mov (2) mba_result.16<1>:uw MB_PRED_FLAG {align1}; |
||
147 | mov (2) mba_result.20<1>:w 0:w {align1}; |
||
148 | |||
149 | mbb_start: |
||
150 | mov (8) mb_msg0.0<1>:ud 0:ud {align1}; |
||
151 | and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; |
||
152 | /* MB B doesn't exist. Zero MV. mba_flag is zero */ |
||
153 | /* If MB B doesn't exist, neither MB C nor D exists */ |
||
154 | (f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; |
||
155 | (f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; |
||
156 | (f0.0) jmpi (1) mb_mvp_start; |
||
157 | mov (1) mbb_result.0<1>:d MB_AVAIL {align1}; |
||
158 | mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; |
||
159 | add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; |
||
160 | mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; |
||
161 | add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; |
||
162 | mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; |
||
163 | mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ |
||
164 | mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; |
||
165 | |||
166 | add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; |
||
167 | |||
168 | /* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ |
||
169 | send (16) |
||
170 | mb_ind |
||
171 | mb_wb.0<1>:ud |
||
172 | NULL |
||
173 | data_port( |
||
174 | OBR_CACHE_TYPE, |
||
175 | OBR_MESSAGE_TYPE, |
||
176 | OBR_CONTROL_0, |
||
177 | OBR_BIND_IDX, |
||
178 | OBR_WRITE_COMMIT_CATEGORY, |
||
179 | OBR_HEADER_PRESENT |
||
180 | ) |
||
181 | mlen 1 |
||
182 | rlen 1 |
||
183 | {align1}; |
||
184 | |||
185 | /* TODO: RefID is required after multi-references are added */ |
||
186 | and.z.f0.0 (1) null<1>:ud mb_mode_wb.0 <0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; |
||
187 | (-f0.0) mov (2) mbb_result.20<1>:w -1:w {align1}; |
||
188 | (-f0.0) jmpi (1) mbc_start; |
||
189 | |||
190 | mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; |
||
191 | /* Read MV for MB B */ |
||
192 | /* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ |
||
193 | send (16) |
||
194 | mb_ind |
||
195 | mb_mv0.0<1>:ud |
||
196 | NULL |
||
197 | data_port( |
||
198 | OBR_CACHE_TYPE, |
||
199 | OBR_MESSAGE_TYPE, |
||
200 | OBR_CONTROL_8, |
||
201 | OBR_BIND_IDX, |
||
202 | OBR_WRITE_COMMIT_CATEGORY, |
||
203 | OBR_HEADER_PRESENT |
||
204 | ) |
||
205 | mlen 1 |
||
206 | rlen 4 |
||
207 | {align1}; |
||
208 | /* TODO: RefID is required after multi-references are added */ |
||
209 | |||
210 | mov (2) mbb_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; |
||
211 | mov (2) mbb_result.20<1>:w -1:w {align1}; |
||
212 | mov (1) INPUT_ARG0.0<1>:ud mb_mode_wb.4<0,1,0>:ud {align1}; |
||
213 | mov (1) INPUT_ARG0.4<1>:ud mb_mode_wb.0<0,1,0>:ud {align1}; |
||
214 | mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK2:ud {align1}; |
||
215 | SAVE_RET {align1}; |
||
216 | jmpi (1) mb_pred_func; |
||
217 | mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; |
||
218 | cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; |
||
219 | (f0.0) mov (1) mbb_result.16<1>:uw MB_PRED_FLAG {align1}; |
||
220 | (f0.0) mov (1) mbb_result.20<1>:w 0:w {align1}; |
||
221 | (f0.0) jmpi (1) mbc_start; |
||
222 | cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; |
||
223 | (f0.0) mov (1) mbb_result.18<1>:uw MB_PRED_FLAG {align1}; |
||
224 | (f0.0) mov (1) mbb_result.22<1>:w 0:w {align1}; |
||
225 | (f0.0) jmpi (1) mbc_start; |
||
226 | mov (2) mbb_result.16<1>:uw MB_PRED_FLAG {align1}; |
||
227 | |||
228 | mbc_start: |
||
229 | mov (8) mb_msg0.0<1>:ud 0:ud {align1}; |
||
230 | and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_C:uw {align1}; |
||
231 | /* MB C doesn't exist. Zero MV. mba_flag is zero */ |
||
232 | /* Based on h264 spec the MB D will be replaced if MB C doesn't exist */ |
||
233 | (f0.0) jmpi (1) mbd_start; |
||
234 | mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; |
||
235 | mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; |
||
236 | add (1) tmp_reg0.2<1>:w tmp_reg0.2<0,1,0>:w -1:w {align1}; |
||
237 | add (1) tmp_reg0.0<1>:w tmp_reg0.0<0,1,0>:w 1:w {align1}; |
||
238 | mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; |
||
239 | add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; |
||
240 | mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; |
||
241 | mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ |
||
242 | |||
243 | mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; |
||
244 | |||
245 | add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; |
||
246 | /* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ |
||
247 | send (16) |
||
248 | mb_ind |
||
249 | mb_wb.0<1>:ud |
||
250 | NULL |
||
251 | data_port( |
||
252 | OBR_CACHE_TYPE, |
||
253 | OBR_MESSAGE_TYPE, |
||
254 | OBR_CONTROL_0, |
||
255 | OBR_BIND_IDX, |
||
256 | OBR_WRITE_COMMIT_CATEGORY, |
||
257 | OBR_HEADER_PRESENT |
||
258 | ) |
||
259 | mlen 1 |
||
260 | rlen 1 |
||
261 | {align1}; |
||
262 | |||
263 | /* TODO: RefID is required after multi-references are added */ |
||
264 | and.z.f0.0 (1) null<1>:ud mb_mode_wb.0 <0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; |
||
265 | (-f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; |
||
266 | (-f0.0) jmpi (1) mb_mvp_start; |
||
267 | mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; |
||
268 | /* Read MV for MB C */ |
||
269 | /* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ |
||
270 | send (16) |
||
271 | mb_ind |
||
272 | mb_mv0.0<1>:ud |
||
273 | NULL |
||
274 | data_port( |
||
275 | OBR_CACHE_TYPE, |
||
276 | OBR_MESSAGE_TYPE, |
||
277 | OBR_CONTROL_8, |
||
278 | OBR_BIND_IDX, |
||
279 | OBR_WRITE_COMMIT_CATEGORY, |
||
280 | OBR_HEADER_PRESENT |
||
281 | ) |
||
282 | mlen 1 |
||
283 | rlen 4 |
||
284 | {align1}; |
||
285 | /* TODO: RefID is required after multi-references are added */ |
||
286 | /* Forward MV */ |
||
287 | mov (2) mbc_result.4<1>:ud mb_mv2.16<2,2,1>:ud {align1}; |
||
288 | mov (2) mbc_result.20<1>:w -1:w {align1}; |
||
289 | mov (1) INPUT_ARG0.0<1>:ud mb_mode_wb.4<0,1,0>:ud {align1}; |
||
290 | mov (1) INPUT_ARG0.4<1>:ud mb_mode_wb.0<0,1,0>:ud {align1}; |
||
291 | mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK2:ud {align1}; |
||
292 | SAVE_RET {align1}; |
||
293 | jmpi (1) mb_pred_func; |
||
294 | mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; |
||
295 | cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; |
||
296 | (f0.0) mov (1) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; |
||
297 | (f0.0) mov (1) mbc_result.20<1>:w 0:w {align1}; |
||
298 | (f0.0) jmpi (1) mb_mvp_start; |
||
299 | cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; |
||
300 | (f0.0) mov (1) mbc_result.18<1>:uw MB_PRED_FLAG {align1}; |
||
301 | (f0.0) mov (1) mbc_result.22<1>:w 0:w {align1}; |
||
302 | (f0.0) jmpi (1) mb_mvp_start; |
||
303 | mov (2) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; |
||
304 | mov (2) mbc_result.20<1>:w 0:w {align1}; |
||
305 | |||
306 | jmpi (1) mb_mvp_start; |
||
307 | mbd_start: |
||
308 | mov (8) mb_msg0.0<1>:ud 0:ud {align1}; |
||
309 | and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_D:uw {align1}; |
||
310 | (f0.0) jmpi (1) mb_mvp_start; |
||
311 | mov (1) mbc_result.0<1>:d MB_AVAIL {align1}; |
||
312 | mov (2) tmp_reg0.0<1>:UW orig_xy_ub<2,2,1>:UB {align1}; |
||
313 | add (2) tmp_reg0.0<1>:w tmp_reg0.0<2,2,1>:w -1:w {align1}; |
||
314 | mul (1) mb_msg0.8<1>:UD w_in_mb_uw<0,1,0>:UW tmp_reg0.2<0,1,0>:UW {align1}; |
||
315 | add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD tmp_reg0.0<0,1,0>:uw {align1}; |
||
316 | |||
317 | mul (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UD {align1}; |
||
318 | mov (1) mb_msg0.20<1>:UB thread_id_ub {align1}; /* dispatch id */ |
||
319 | mov (1) mb_msg_tmp.8<1>:ud mb_msg0.8<0,1,0>:ud {align1}; |
||
320 | |||
321 | add (1) mb_msg0.8<1>:UD mb_msg0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; |
||
322 | /* bind index 3, read 4 oword (64bytes), msg type: 0(OWord Block Read) */ |
||
323 | send (16) |
||
324 | mb_ind |
||
325 | mb_wb.0<1>:ud |
||
326 | NULL |
||
327 | data_port( |
||
328 | OBR_CACHE_TYPE, |
||
329 | OBR_MESSAGE_TYPE, |
||
330 | OBR_CONTROL_0, |
||
331 | OBR_BIND_IDX, |
||
332 | OBR_WRITE_COMMIT_CATEGORY, |
||
333 | OBR_HEADER_PRESENT |
||
334 | ) |
||
335 | mlen 1 |
||
336 | rlen 1 |
||
337 | {align1}; |
||
338 | |||
339 | and.z.f0.0 (1) null<1>:ud mb_mode_wb.0 <0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; |
||
340 | (-f0.0) mov (2) mbc_result.20<1>:w -1:w {align1}; |
||
341 | (-f0.0) jmpi (1) mb_mvp_start; |
||
342 | |||
343 | mov (1) mb_msg0.8<1>:UD mb_msg_tmp.8<0,1,0>:ud {align1}; |
||
344 | /* Read MV for MB D */ |
||
345 | /* bind index 3, read 8 oword (128bytes), msg type: 0(OWord Block Read) */ |
||
346 | send (16) |
||
347 | mb_ind |
||
348 | mb_mv0.0<1>:ub |
||
349 | NULL |
||
350 | data_port( |
||
351 | OBR_CACHE_TYPE, |
||
352 | OBR_MESSAGE_TYPE, |
||
353 | OBR_CONTROL_8, |
||
354 | OBR_BIND_IDX, |
||
355 | OBR_WRITE_COMMIT_CATEGORY, |
||
356 | OBR_HEADER_PRESENT |
||
357 | ) |
||
358 | mlen 1 |
||
359 | rlen 4 |
||
360 | {align1}; |
||
361 | |||
362 | /* TODO: RefID is required after multi-references are added */ |
||
363 | |||
364 | /* Forward MV */ |
||
365 | mov (2) mbc_result.4<1>:ud mb_mv3.24<2,2,1>:ud {align1}; |
||
366 | mov (2) mbc_result.20<1>:w -1:w {align1}; |
||
367 | mov (1) INPUT_ARG0.0<1>:ud mb_mode_wb.4<0,1,0>:ud {align1}; |
||
368 | mov (1) INPUT_ARG0.4<1>:ud mb_mode_wb.0<0,1,0>:ud {align1}; |
||
369 | mov (1) INPUT_ARG0.8<1>:ud INTER_BLOCK3:ud {align1}; |
||
370 | SAVE_RET {align1}; |
||
371 | jmpi (1) mb_pred_func; |
||
372 | mov (1) mb_pred_mode.0<1>:uw RET_ARG<0,1,0>:uw {align1}; |
||
373 | mov (1) mbc_result.18<1>:w MB_PRED_FLAG {align1}; |
||
374 | cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L0 {align1}; |
||
375 | (f0.0) mov (1) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; |
||
376 | (f0.0) mov (1) mbc_result.20<1>:w 0:w {align1}; |
||
377 | (f0.0) jmpi (1) mb_mvp_start; |
||
378 | cmp.e.f0.0 (1) null:uw mb_pred_mode.0<0,1,0>:uw PRED_L1 {align1}; |
||
379 | (f0.0) mov (1) mbc_result.18<1>:uw MB_PRED_FLAG {align1}; |
||
380 | (f0.0) mov (1) mbc_result.22<1>:w 0:w {align1}; |
||
381 | (f0.0) jmpi (1) mb_mvp_start; |
||
382 | mov (2) mbc_result.16<1>:uw MB_PRED_FLAG {align1}; |
||
383 | mov (2) mbc_result.20<1>:w 0:w {align1}; |
||
384 | |||
385 | mb_mvp_start: |
||
386 | /*TODO: Add the skip prediction */ |
||
387 | /* Check whether both MB B and C are invailable */ |
||
388 | add (1) tmp_reg0.0<1>:d mbb_result.0<0,1,0>:d mbc_result.0<0,1,0>:d {align1}; |
||
389 | cmp.z.f0.0 (1) null:d tmp_reg0.0<0,1,0>:d 0:d {align1}; |
||
390 | (-f0.0) jmpi (1) mb_median_start; |
||
391 | cmp.nz.f0.0 (1) null:d mba_result.0<0,1,0>:d 0:d {align1}; |
||
392 | (f0.0) mov (2) mbb_result.4<1>:ud mba_result.4<2,2,1>:ud {align1}; |
||
393 | (f0.0) mov (2) mbc_result.4<1>:ud mba_result.4<2,2,1>:ud {align1}; |
||
394 | (f0.0) mov (2) mbb_result.20<1>:uw mba_result.20<2,2,1>:uw {align1}; |
||
395 | (f0.0) mov (2) mbc_result.20<1>:uw mba_result.20<2,2,1>:uw {align1}; |
||
396 | (f0.0) mov (2) mb_mvp_ref.0<1>:ud mba_result.4<2,2,1>:ud {align1}; |
||
397 | (-f0.0) mov (2) mb_mvp_ref.0<1>:ud 0:ud {align1}; |
||
398 | jmpi (1) __mb_hwdep_end; |
||
399 | |||
400 | mb_median_start: |
||
401 | /* forward_MVP */ |
||
402 | /* check whether only one neighbour MB has the same ref ID with the current MB */ |
||
403 | mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; |
||
404 | cmp.z.f0.0 (1) null:d mba_result.20<1>:w 0:w {align1}; |
||
405 | (f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; |
||
406 | (f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.4<0,1,0>:ud {align1}; |
||
407 | cmp.z.f0.0 (1) null:d mbb_result.20<1>:w 0:w {align1}; |
||
408 | (f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; |
||
409 | (f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.4<0,1,0>:ud {align1}; |
||
410 | cmp.z.f0.0 (1) null:d mbc_result.20<1>:w 0:w {align1}; |
||
411 | (f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; |
||
412 | (f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.4<0,1,0>:ud {align1}; |
||
413 | cmp.e.f0.0 (1) null:d tmp_reg0.0<1>:w 1:w {align1}; |
||
414 | (f0.0) mov (1) mb_mvp_ref.0<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; |
||
415 | (f0.0) jmpi (1) mvp_backward; |
||
416 | |||
417 | mov (1) INPUT_ARG0.0<1>:w mba_result.4<0,1,0>:w {align1}; |
||
418 | mov (1) INPUT_ARG0.4<1>:w mbb_result.4<0,1,0>:w {align1}; |
||
419 | mov (1) INPUT_ARG0.8<1>:w mbc_result.4<0,1,0>:w {align1}; |
||
420 | SAVE_RET {align1}; |
||
421 | jmpi (1) word_imedian; |
||
422 | mov (1) mb_mvp_ref.0<1>:w RET_ARG<0,1,0>:w {align1}; |
||
423 | mov (1) INPUT_ARG0.0<1>:w mba_result.6<0,1,0>:w {align1}; |
||
424 | mov (1) INPUT_ARG0.4<1>:w mbb_result.6<0,1,0>:w {align1}; |
||
425 | mov (1) INPUT_ARG0.8<1>:w mbc_result.6<0,1,0>:w {align1}; |
||
426 | SAVE_RET {align1}; |
||
427 | jmpi (1) word_imedian; |
||
428 | mov (1) mb_mvp_ref.2<1>:w RET_ARG<0,1,0>:w {align1}; |
||
429 | |||
430 | |||
431 | mvp_backward: |
||
432 | /* check whether only one neighbour MB has the same ref ID with the current MB */ |
||
433 | mov (8) tmp_reg0.0<1>:ud 0:ud {align1}; |
||
434 | cmp.z.f0.0 (1) null:d mba_result.22<1>:w 0:w {align1}; |
||
435 | (f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; |
||
436 | (f0.0) mov (1) tmp_reg0.4<1>:ud mba_result.8<0,1,0>:ud {align1}; |
||
437 | cmp.z.f0.0 (1) null:d mbb_result.22<1>:w 0:w {align1}; |
||
438 | (f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; |
||
439 | (f0.0) mov (1) tmp_reg0.4<1>:ud mbb_result.8<0,1,0>:ud {align1}; |
||
440 | cmp.z.f0.0 (1) null:d mbc_result.22<1>:w 0:w {align1}; |
||
441 | (f0.0) add (1) tmp_reg0.0<1>:w tmp_reg0.0<1>:w 1:w {align1}; |
||
442 | (f0.0) mov (1) tmp_reg0.4<1>:ud mbc_result.8<0,1,0>:ud {align1}; |
||
443 | cmp.e.f0.0 (1) null:d tmp_reg0.0<1>:w 1:w {align1}; |
||
444 | (f0.0) mov (1) mb_mvp_ref.4<1>:ud tmp_reg0.4<0,1,0>:ud {align1}; |
||
445 | (f0.0) jmpi (1) __mb_hwdep_end; |
||
446 | |||
447 | mov (1) INPUT_ARG0.0<1>:w mba_result.8<0,1,0>:w {align1}; |
||
448 | mov (1) INPUT_ARG0.4<1>:w mbb_result.8<0,1,0>:w {align1}; |
||
449 | mov (1) INPUT_ARG0.8<1>:w mbc_result.8<0,1,0>:w {align1}; |
||
450 | SAVE_RET {align1}; |
||
451 | jmpi (1) word_imedian; |
||
452 | mov (1) mb_mvp_ref.4<1>:w RET_ARG<0,1,0>:w {align1}; |
||
453 | mov (1) INPUT_ARG0.0<1>:w mba_result.10<0,1,0>:w {align1}; |
||
454 | mov (1) INPUT_ARG0.4<1>:w mbb_result.10<0,1,0>:w {align1}; |
||
455 | mov (1) INPUT_ARG0.8<1>:w mbc_result.10<0,1,0>:w {align1}; |
||
456 | SAVE_RET {align1}; |
||
457 | jmpi (1) word_imedian; |
||
458 | mov (1) mb_mvp_ref.6<1>:w RET_ARG<0,1,0>:w {align1}; |
||
459 | |||
460 | __mb_hwdep_end: |
||
461 | asr (4) mb_ref_win.0<1>:w mb_mvp_ref.0<4,4,1>:w 2:w {align1}; |
||
462 | add (4) mb_ref_win.8<1>:w mb_ref_win.0<4,4,1>:w 3:w {align1}; |
||
463 | and (4) mb_ref_win.16<1>:uw mb_ref_win.8<4,4,1>:uw 0xFFFC:uw {align1}; |
||
464 | |||
465 | /* m2 */ |
||
466 | mov (8) vme_msg_2<1>:UD 0x0:UD {align1}; |
||
467 | |||
468 | /* m3 */ |
||
469 | mov (1) INEP_ROW.0<1>:UD 0x0:UD {align1}; |
||
470 | and (1) INEP_ROW.4<1>:UD INEP_ROW.4<0,1,0>:UD 0xFF000000:UD {align1}; |
||
471 | mov (8) vme_msg_3<1>:UD INEP_ROW.0<8,8,1>:UD {align1}; |
||
472 | |||
473 | /* m4 */ |
||
474 | mov (8) vme_msg_4<1>:UD 0x0 {align1}; |
||
475 | mov (16) vme_msg_4.0<1>:UB INEP_COL0.3<32,8,4>:UB {align1}; |
||
476 | mov (1) vme_msg_4.16<1>:UD INTRA_PREDICTORE_MODE {align1}; |
||
477 | |||
478 | |||
479 | /* m1 */ |
||
480 | mov (8) vme_m1.0<1>:ud 0x0:ud {align1}; |
||
481 | and.z.f0.0 (1) null<1>:UW transform_8x8_ub<0,1,0>:UB 1:UW {align1}; |
||
482 | (f0.0) mov (1) intra_part_mask_ub<1>:UB LUMA_INTRA_8x8_DISABLE:uw {align1}; |
||
483 | |||
484 | /* assign MB intra struct from the thread payload*/ |
||
485 | mov (1) mb_intra_struct_ub<1>:UB input_mb_intra_ub<0,1,0>:UB {align1}; |
||
486 | |||
487 | |||
488 | /* M0 */ |
||
489 | /* IME search */ |
||
490 | mov (1) vme_m0.12<1>:UD SEARCH_CTRL_DUAL_REFERENCE + INTER_PART_MASK + INTER_SAD_HAAR + SUB_PEL_MODE_QUARTER:UD {align1}; |
||
491 | /* 16x16 Source, 1/4 pixel, harr */ |
||
492 | mov (1) vme_m0.22<1>:UW DREF_REGION_SIZE {align1}; /* Reference Width&Height, 48x40 */ |
||
493 | |||
494 | mov (1) vme_m0.0<1>:UD vme_m0.8<0,1,0>:UD {align1}; |
||
495 | |||
496 | mov (1) vme_m0.0<1>:W -8:W {align1}; |
||
497 | mov (1) vme_m0.2<1>:W -8:W {align1}; |
||
498 | |||
499 | mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; |
||
500 | and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_AE:uw {align1}; |
||
501 | (f0.0) add (1) vme_m0.0<1>:w vme_m0.0<0,1,0>:w 4:w {align1}; |
||
502 | (f0.0) add (1) vme_m0.4<1>:w vme_m0.4<0,1,0>:w 4:w {align1}; |
||
503 | and.z.f0.0 (1) null:uw input_mb_intra_ub<0,1,0>:ub INTRA_PRED_AVAIL_FLAG_B:uw {align1}; |
||
504 | (f0.0) add (1) vme_m0.2<1>:w vme_m0.2<0,1,0>:w 4:w {align1}; |
||
505 | (f0.0) add (1) vme_m0.6<1>:w vme_m0.6<0,1,0>:w 4:w {align1}; |
||
506 | |||
507 | mov (1) vme_m0.4<1>:UD vme_m0.0<0,1,0>:UD {align1}; |
||
508 | |||
509 | add (2) vme_m0.0<1>:w vme_m0.0<2,2,1>:w mb_ref_win.16<2,2,1>:w {align1}; |
||
510 | add (2) vme_m0.4<1>:w vme_m0.4<2,2,1>:w mb_ref_win.20<2,2,1>:w {align1}; |
||
511 | mov (8) vme_msg_0.0<1>:UD vme_m0.0<8,8,1>:UD {align1}; |
||
512 | |||
513 | /* m1 */ |
||
514 | |||
515 | mov (1) vme_m1.0<1>:UD ADAPTIVE_SEARCH_ENABLE:ud {align1} ; |
||
516 | /* MV num is passed by constant buffer. R4.28 */ |
||
517 | mov (1) vme_m1.4<1>:UB r4.28<0,1,0>:UB {align1}; |
||
518 | add (1) vme_m1.4<1>:UD vme_m1.4<0,1,0>:UD FB_PRUNING_ENABLE:UD {align1}; |
||
519 | add (1) vme_m1.6<1>:uw vme_m1.6<0,1,0>:uw BI_WEIGHT {align1}; |
||
520 | |||
521 | |||
522 | mov (1) vme_m1.8<1>:UD DSTART_CENTER + DSEARCH_PATH_LEN:UD {align1}; |
||
523 | |||
524 | /* Set the MV cost center */ |
||
525 | mov (1) vme_m1.16<1>:ud mb_mvp_ref.0<0,1,0>:ud {align1}; |
||
526 | mov (1) vme_m1.20<1>:ud mb_mvp_ref.4<0,1,0>:ud {align1}; |
||
527 | mov (8) vme_msg_1.0<1>:UD vme_m1.0<8,8,1>:UD {align1}; |
||
528 | |||
529 | |||
530 | send (8) |
||
531 | vme_msg_ind |
||
532 | vme_wb |
||
533 | null |
||
534 | vme( |
||
535 | BIND_IDX_VME, |
||
536 | 0, |
||
537 | 0, |
||
538 | VME_MESSAGE_TYPE_MIXED |
||
539 | ) |
||
540 | mlen vme_msg_length |
||
541 | rlen vme_inter_wb_length |
||
542 | {align1}; |
||
543 | |||
544 | and.z.f0.0 (1) null<1>:ud vme_wb0.0<0,1,0>:ud INTRAMBFLAG_MASK:ud {align1} ; |
||
545 | |||
546 | (-f0.0)jmpi (1) __INTRA_INFO ; |
||
547 | |||
548 | __INTER_INFO: |
||
549 | /* Write MV pairs */ |
||
550 | mov (8) msg_reg0.0<1>:UD obw_m0.0<8,8,1>:UD {align1}; |
||
551 | |||
552 | mov (8) msg_reg1.0<1>:UD vme_wb1.0<8,8,1>:UD {align1}; |
||
553 | |||
554 | mov (8) msg_reg2.0<1>:UD vme_wb2.0<8,8,1>:UD {align1}; |
||
555 | |||
556 | mov (8) msg_reg3.0<1>:UD vme_wb3.0<8,8,1>:UD {align1}; |
||
557 | |||
558 | mov (8) msg_reg4.0<1>:UD vme_wb4.0<8,8,1>:UD {align1}; |
||
559 | /* bind index 3, write 8 oword (128 bytes), msg type: 8(OWord Block Write) */ |
||
560 | send (16) |
||
561 | msg_ind |
||
562 | obw_wb |
||
563 | null |
||
564 | data_port( |
||
565 | OBW_CACHE_TYPE, |
||
566 | OBW_MESSAGE_TYPE, |
||
567 | OBW_CONTROL_8, |
||
568 | OBW_BIND_IDX, |
||
569 | OBW_WRITE_COMMIT_CATEGORY, |
||
570 | OBW_HEADER_PRESENT |
||
571 | ) |
||
572 | mlen 5 |
||
573 | rlen obw_wb_length |
||
574 | {align1}; |
||
575 | |||
576 | mov (1) tmp_uw1<1>:uw 0:uw {align1} ; |
||
577 | mov (1) tmp_ud1<1>:ud 0:ud {align1} ; |
||
578 | and (1) tmp_uw1<1>:uw vme_wb0.2<0,1,0>:uw MV32_BIT_MASK:uw {align1} ; |
||
579 | shr (1) tmp_uw1<1>:uw tmp_uw1<1>:uw MV32_BIT_SHIFT:uw {align1} ; |
||
580 | mul (1) tmp_ud1<1>:ud tmp_uw1<0,1,0>:uw 96:uw {align1} ; |
||
581 | add (1) tmp_ud1<1>:ud tmp_ud1<0,1,0>:ud 32:uw {align1} ; |
||
582 | shl (1) tmp_uw1<1>:uw tmp_uw1<0,1,0>:uw MFC_MV32_BIT_SHIFT:uw {align1} ; |
||
583 | add (1) tmp_uw1<1>:uw tmp_uw1<0,1,0>:uw MVSIZE_UW_BASE:uw {align1} ; |
||
584 | add (1) tmp_uw1<1>:uw tmp_uw1<0,1,0>:uw CBP_DC_YUV_UW:uw {align1} ; |
||
585 | |||
586 | mov (1) msg_reg1.0<1>:uw vme_wb0.0<0,1,0>:uw {align1} ; |
||
587 | mov (1) msg_reg1.2<1>:uw tmp_uw1<0,1,0>:uw {align1} ; |
||
588 | mov (1) msg_reg1.4<1>:UD vme_wb0.28<0,1,0>:UD {align1}; |
||
589 | mov (1) msg_reg1.8<1>:ud tmp_ud1<0,1,0>:ud {align1} ; |
||
590 | mov (1) msg_reg1.12<1>:ud vme_wb0.0<0,1,0>:ud {align1} ; |
||
591 | mov (1) msg_reg1.16<1>:ud 0x25:ud {align1} ; |
||
592 | jmpi (1) __OUTPUT_INFO; |
||
593 | |||
594 | __INTRA_INFO: |
||
595 | mov (1) msg_reg1.0<1>:UD vme_wb.0<0,1,0>:UD {align1}; |
||
596 | mov (1) msg_reg1.4<1>:UD vme_wb.16<0,1,0>:UD {align1}; |
||
597 | mov (1) msg_reg1.8<1>:UD vme_wb.20<0,1,0>:UD {align1}; |
||
598 | mov (1) msg_reg1.12<1>:UD vme_wb.24<0,1,0>:UD {align1}; |
||
599 | mov (1) msg_reg1.16<1>:ud 0x35:ud {align1} ; |
||
600 | |||
601 | __OUTPUT_INFO: |
||
602 | |||
603 | mov (1) msg_reg1.20<1>:ud obw_m0.8<0,1,0>:ud {align1}; |
||
604 | add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD INTER_VME_OUTPUT_MV_IN_OWS:UD {align1}; |
||
605 | mov (8) msg_reg0.0<1>:ud obw_m0.0<8,8,1>:ud {align1}; |
||
606 | |||
607 | |||
608 | /* bind index 3, write 1 oword, msg type: 8(OWord Block Write) */ |
||
609 | send (16) |
||
610 | msg_ind |
||
611 | obw_wb |
||
612 | null |
||
613 | data_port( |
||
614 | OBW_CACHE_TYPE, |
||
615 | OBW_MESSAGE_TYPE, |
||
616 | OBW_CONTROL_2, |
||
617 | OBW_BIND_IDX, |
||
618 | OBW_WRITE_COMMIT_CATEGORY, |
||
619 | OBW_HEADER_PRESENT |
||
620 | ) |
||
621 | mlen 2 |
||
622 | rlen obw_wb_length |
||
623 | {align1}; |
||
624 | |||
625 | NOP; |
||
626 | |||
627 | /* Issue message fence so that the previous write message is committed */ |
||
628 | send (16) |
||
629 | mb_ind |
||
630 | mb_wb.0<1>:ud |
||
631 | NULL |
||
632 | data_port( |
||
633 | OBR_CACHE_TYPE, |
||
634 | OBR_MESSAGE_FENCE, |
||
635 | OBR_MF_COMMIT, |
||
636 | OBR_BIND_IDX, |
||
637 | OBR_WRITE_COMMIT_CATEGORY, |
||
638 | OBR_HEADER_PRESENT |
||
639 | ) |
||
640 | mlen 1 |
||
641 | rlen 1 |
||
642 | {align1}; |
||
643 | |||
644 | __EXIT: |
||
645 | /* |
||
646 | * kill thread |
||
647 | */ |
||
648 | mov (8) ts_msg_reg0<1>:UD r0<8,8,1>:UD {align1}; |
||
649 | send (16) ts_msg_ind acc0<1>UW null thread_spawner(0, 0, 1) mlen 1 rlen 0 {align1 EOT}; |
||
650 | |||
651 | |||
652 | nop ; |
||
653 | nop ; |
||
654 | /* Compare three word data to get the min value */ |
||
655 | word_imin: |
||
656 | cmp.le.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; |
||
657 | (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; |
||
658 | (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; |
||
659 | cmp.le.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; |
||
660 | (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; |
||
661 | (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; |
||
662 | RETURN {align1}; |
||
663 | |||
664 | /* Compare three word data to get the max value */ |
||
665 | word_imax: |
||
666 | cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; |
||
667 | (f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; |
||
668 | (-f0.0) mov (1) TEMP_VAR0.0<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; |
||
669 | cmp.ge.f0.0 (1) null:w TEMP_VAR0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; |
||
670 | (f0.0) mov (1) RET_ARG<1>:w TEMP_VAR0.0<0,1,0>:w {align1}; |
||
671 | (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; |
||
672 | RETURN {align1}; |
||
673 | |||
674 | word_imedian: |
||
675 | cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.4<0,1,0>:w {align1}; |
||
676 | (f0.0) jmpi (1) cmp_a_ge_b; |
||
677 | cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; |
||
678 | (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; |
||
679 | (f0.0) jmpi (1) cmp_end; |
||
680 | cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; |
||
681 | (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; |
||
682 | (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; |
||
683 | jmpi (1) cmp_end; |
||
684 | cmp_a_ge_b: |
||
685 | cmp.ge.f0.0 (1) null:w INPUT_ARG0.4<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; |
||
686 | (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.4<0,1,0>:w {align1}; |
||
687 | (f0.0) jmpi (1) cmp_end; |
||
688 | cmp.ge.f0.0 (1) null:w INPUT_ARG0.0<0,1,0>:w INPUT_ARG0.8<0,1,0>:w {align1}; |
||
689 | (f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.8<0,1,0>:w {align1}; |
||
690 | (-f0.0) mov (1) RET_ARG<1>:w INPUT_ARG0.0<0,1,0>:w {align1}; |
||
691 | cmp_end: |
||
692 | RETURN {align1}; |
||
693 | |||
694 | /* This is to get the prediction mode for the correspongding partions/sub-mb |
||
695 | * Parameter description: |
||
696 | ARG0.0: INTER_SHAPE/PRED_MODE |
||
697 | ARG0.4: INTER_MODE(16x16, 16x8, 8x16 or 8X8) |
||
698 | ARG0.8: sub-mb block number(block 0/1/2/3) |
||
699 | */ |
||
700 | |||
701 | mb_pred_func: |
||
702 | mov (8) TEMP_VAR0.0<1>:ud 0:ud {align1}; |
||
703 | mov (1) TEMP_VAR0.0<1>:ub INPUT_ARG0.1<0,1,0>:ub {align1}; |
||
704 | and (1) TEMP_VAR0.4<1>:uw INPUT_ARG0.4<0,1,0>:uw INTER_MASK:uw {align1}; |
||
705 | /* INTER16x16 mode. The bit1-0 is the prediction mode */ |
||
706 | cmp.e.f0.0 (1) null:uw TEMP_VAR0.4<1>:uw INTER_16X16MODE:uw {align1}; |
||
707 | (f0.0) and (1) RET_ARG<1>:uw TEMP_VAR0.0<0,1,0>:uw PRED_MASK {align1}; |
||
708 | (f0.0) jmpi (1) end_mb_pred; |
||
709 | /* Check whether it is INTER8x8 mode. */ |
||
710 | cmp.e.f0.0 (1) null:uw TEMP_VAR0.4<1>:uw INTER_8X8MODE:uw {align1}; |
||
711 | (f0.0) jmpi (1) mb_pred_func_8; |
||
712 | |||
713 | /* Check whether it is INTER16x8 mode. */ |
||
714 | cmp.e.f0.0 (1) null:uw TEMP_VAR0.4<1>:uw INTER_16X8MODE:uw {align1}; |
||
715 | (f0.0) jmpi (1) mb_pred_func_168; |
||
716 | mb_pred_func_816: |
||
717 | /* Block 0/2 uses the bit1-0. Block 1/3 uses the bit3-2 */ |
||
718 | mov (1) TEMP_VAR0.8<1>:uw INPUT_ARG0.8<0,1,0>:uw {align1}; |
||
719 | and.z.f0.0 (1) null:uw TEMP_VAR0.8<1>:uw INTER_BLOCK1:uw {align1}; |
||
720 | (f0.0) and (1) RET_ARG<1>:uw TEMP_VAR0.0<0,1,0>:uw PRED_MASK {align1}; |
||
721 | (f0.0) jmpi (1) end_mb_pred; |
||
722 | shr (1) TEMP_VAR0.16<1>:uw TEMP_VAR0.0<0,1,0>:uw 2:uw {align1}; |
||
723 | and (1) RET_ARG<1>:uw TEMP_VAR0.16<1>:uw PRED_MASK {align1}; |
||
724 | jmpi (1) end_mb_pred; |
||
725 | |||
726 | mb_pred_func_168: |
||
727 | /* Block 0/1 uses the bit1-0. Block 2/3 uses the bit3-2 */ |
||
728 | mov (1) TEMP_VAR0.8<1>:uw INPUT_ARG0.8<0,1,0>:uw {align1}; |
||
729 | cmp.l.f0.0 (1) null:uw TEMP_VAR0.8<1>:uw INTER_BLOCK2:uw {align1}; |
||
730 | (f0.0) and (1) RET_ARG<1>:uw TEMP_VAR0.0<0,1,0>:uw PRED_MASK {align1}; |
||
731 | (f0.0) jmpi (1) end_mb_pred; |
||
732 | shr (1) TEMP_VAR0.16<1>:uw TEMP_VAR0.0<0,1,0>:uw 2:uw {align1}; |
||
733 | and (1) RET_ARG<1>:uw TEMP_VAR0.16<1>:uw PRED_MASK {align1}; |
||
734 | jmpi (1) end_mb_pred; |
||
735 | |||
736 | mb_pred_func_8: |
||
737 | /* 8X8 mode. Every block uses two bits as the prediction mode. */ |
||
738 | mul (1) TEMP_VAR0.8<1>:uw INPUT_ARG0.8<0,1,0>:uw 2:uw {align1}; |
||
739 | shr (1) TEMP_VAR0.16<1>:uw TEMP_VAR0.0<0,1,0>:uw TEMP_VAR0.8<0,1,0>:uw {align1}; |
||
740 | and (1) RET_ARG<1>:uw TEMP_VAR0.16<1>:uw PRED_MASK {align1}; |
||
741 | end_mb_pred: |
||
742 | RETURN {align1};1>1>0,1,0>0,1,0>1>0,1,0>1>1>1>0,1,0>1>0,1,0>1>1>0,1,0>1>1>1>0,1,0>1>0,1,0>1>1>0,1,0>1>1>1>0,1,0>1>1>0,1,0>1>0,1,0>1>1>0,1,0>1>0,1,0>1>0,1,0>0,1,0>0,1,0>1>0,1,0>0,1,0>0,1,0>1>0,1,0>1>0,1,0>0,1,0>0,1,0>1>0,1,0>0,1,0>0,1,0>0,1,0>0,1,0>1>0,1,0>1>0,1,0>0,1,0>0,1,0>1>0,1,0>1>0,1,0>0,1,0>0,1,0>1>0,1,0>1>0,1,0>0,1,0>0,1,0>1>0,1,0>1>0,1,0>0,1,0>1>8,8,1>1>1>8,8,1>1>0,1,0>1>0,1,0>1>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>1>1>0,1,0>1>1>1>8,8,1>1>8,8,1>1>8,8,1>1>8,8,1>1>8,8,1>1>0,1,0>1>8,8,1>1>0,1,0>1>0,1,0>1>1>0,1,0>1>0,1,0>1>0,1,0>1>1>8,8,1>1>2,2,1>2,2,1>1>2,2,1>2,2,1>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>0,1,0>1>0,1,0>1>0,1,0>0,1,0>1>1>1>0,1,0>1>1>1>0,1,0>1>1>0,1,0>1>1>1>32,8,4>1>1>8,8,1>1>0,1,0>1>1>1>4,4,1>1>4,4,1>1>4,4,1>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>1>0,1,0>1>1>1>1>0,1,0>1>1>1>1>0,1,0>1>1>1>1>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>0,1,0>1>1>0,1,0>1>1>1>1>0,1,0>1>1>1>1>0,1,0>1>1>1>1>1>1>2,2,1>1>2,2,1>1>2,2,1>1>2,2,1>1>2,2,1>1>0,1,0>0,1,0>0,1,0>0,1,0>1>1>1>1>1>0,1,0>1>1>0,1,0>1>0,1,0>1>1>0,1,0>1>0,1,0>1>1>2,2,1>1>1>0,1,0>1>1>0,1,0>1>1>0,1,0>1>0,1,0>1>1>0,1,0>1>0,1,0>0,1,0>1>0,1,0>0,1,0>1>2,2,1>1>2,2,1>1>1>0,1,0>1>1>1>1>1>0,1,0>1>1>0,1,0>0,1,0>1>1>0,1,0>1>0,1,0>1>1>2,2,1>1>1>0,1,0>1>1>0,1,0>1>1>0,1,0>1>0,1,0>1>1>0,1,0>1>0,1,0>0,1,0>1>0,1,0>0,1,0>1>0,1,0>1>0,1,0>1>2,2,1>1>1>0,1,0>1>1>1>1>0,1,0>1>1>0,1,0>0,1,0>1>1>0,1,0>1>0,1,0>1>1>2,2,1>1>1>0,1,0>1>1>0,1,0>1>1>0,1,0>1>0,1,0>1>1>0,1,0>1>0,1,0>0,1,0>1>0,1,0>0,1,0>1>0,1,0>1>2,2,1>1>1>1>1>0,1,0>1>1>1>1>1>0,1,0>1>1>0,1,0>0,1,0>1>1>0,1,0>1>0,1,0>1>1>2,2,1>1>1>0,1,0>1>1>0,1,0>1>1>0,1,0>1>0,1,0>1>1>0,1,0>1>0,1,0>0,1,0>1>0,1,0>0,1,0>1>0,1,0>1>2,2,1>1>1>1>0,1,0>1>1>1>1>0,1,0>1>1>1>8,8,1>1>1>8,8,1>1>1>0,1,0>1>0,1,0>0,1,0>1>0,1,0>0,1,0>1>1>2,2,1>1>1>1>0,1,0>1>2,2,1>1>1>1>0,1,0>1>0,1,0>1>2,2,1>1>1>1>1>1>0,1,0>1>2010> |
||
743 |