Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5361 serge 1
/*
2
 *  Copyright 2000-2011 Intel Corporation All Rights Reserved
3
 *
4
 *  Licensed under the Apache License, Version 2.0 (the "License");
5
 *  you may not use this file except in compliance with the License.
6
 *  You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 *  Unless required by applicable law or agreed to in writing, software
11
 *  distributed under the License is distributed on an "AS IS" BASIS,
12
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 *  See the License for the specific language governing permissions and
14
 *  limitations under the License.
15
 */
16
// 1319    // Total instruction count
17
//    1    // Total kernel count
18
 
19
 
20
.kernel YUY2_DNUV_YUY2
21
.code
22
 
23
 
24
 
25
//Module		: DN_UV_Setup
26
//Author		: Tatiya, Rupesh
27
//Description	: Initial Set-up for DN_UV
28
 
29
 
30
 
31
 
32
// Module name	: ChromaDenoise.inc
33
// Author		: Tatiya, Rupesh
34
 
35
 
36
 
37
 
38
// Module name: common.inc
39
//
40
// Common header file for all Video-Processing kernels
41
//
42
 
43
.default_execution_size (16)
44
.default_register_type  :ub
45
 
46
.reg_count_total        128
47
.reg_count_payload      7
48
 
49
//========== Common constants ==========
50
 
51
 
52
//========== Macros ==========
53
 
54
 
55
//Fast Jump, For more details see "Set_Layer_N.asm"
56
 
57
 
58
//========== Defines ====================
59
 
60
//========== Static Parameters (Common To All) ==========
61
//r1
62
 
63
 
64
//r2
65
 
66
                                    //  e.g.            byte0   byte1  byte2
67
                                    // YUYV               0       1      3
68
                                    // YVYU               0       3      1
69
 
70
//Color Pipe (IECP) parameters
71
 
72
 
73
//ByteCopy
74
 
75
 
76
//r4
77
 
78
                                    //  e.g.              byte0           byte1           byte2
79
                                    // YUYV                 0               1               3
80
                                    // YVYU                 0               3               1
81
 
82
 
83
//========== Inline parameters (Common To All) ===========
84
 
85
 
86
//============== Binding Index Table===========
87
//Common between DNDI and DNUV
88
 
89
 
90
//================= Common Message Descriptor =====
91
// Message descriptor for thread spawning
92
// Message Descriptors
93
//                = 000 0001 (min message len 1 ) 0,0000 (resp len 0   -add later)
94
//                  0000,0000,0000
95
//                  0001(Spawn a root thread),0001 (Root thread spawn thread)
96
//                = 0x02000011
97
// Thread Spawner Message Descriptor
98
 
99
 
100
// Message descriptor for atomic operation add
101
// Message Descriptors
102
//                = 000 0110 (min message len 6 ) 0,0000 (resp len 0   -add later)
103
//                  1(header present)001,10(typed atomic operation)0(return enabled)0(slot group, low 8 bits),0111 (AOP_Add)
104
//                  0000,0000 (Binding table index, added later)
105
//                = 0x02000011
106
 
107
// Atomic Operation Add Message Descriptor
108
 
109
 
110
// Message descriptor for dataport media write
111
        // Message Descriptors
112
                //                = 000 0001 (min message len 1 - add later) 00000 (resp len 0)
113
                //                  1 (header present 1) 0 1010 (media block write) 000000
114
                //                  00000000 (binding table index - set later)
115
                //                = 0x020A8000
116
 
117
 
118
// Message Length defines
119
 
120
 
121
// Response Length defines
122
 
123
 
124
// Block Width and Height Size defines
125
 
126
 
127
// Extended Message Descriptors
128
 
129
 
130
// Common message descriptors:
131
 
132
 
133
//===================== Math Function Control ===================================
134
 
135
 
136
//============ Message Registers ===============
137
                             // buf4 starts from r28
138
 
139
 
140
//#define mMSGHDR_EOT  r43    // Dummy Message Register for EOT
141
 
142
 
143
.declare    mubMSGPAYLOAD  Base=r30 ElementSize=1 SrcRegion=<16;16,1> Type=ub
144
.declare    muwMSGPAYLOAD  Base=r30 ElementSize=2 SrcRegion=<16;16,1> Type=uw
145
.declare    mudMSGPAYLOAD  Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=ud
146
.declare    mfMSGPAYLOAD   Base=r30 ElementSize=4 SrcRegion=<8;8,1> Type=f
147
 
148
//=================== End of thread instruction ===========================
149
 
150
 
151
//=====================Pointers Used=====================================
152
 
153
 
154
//=======================================================================
155
 
156
 
157
//r9-r17
158
// Define temp space for any usages
159
 
160
 
161
// Common Buffers
162
 
163
 
164
// temp space for rotation
165
 
166
.declare fROBUF		  Base=r9.0		ElementSize=4		SrcRegion=<8;8,1>		  DstRegion=<1>		Type=f
167
 
168
.declare udROBUF		Base=r9.0		ElementSize=4		SrcRegion=<8;8,1>		  DstRegion=<1>		Type=ud
169
 
170
.declare uwROBUF		Base=r9.0		ElementSize=2		SrcRegion=<16;16,1>		DstRegion=<1>		Type=uw
171
 
172
.declare ubROBUF		Base=r9.0		ElementSize=1		SrcRegion=<16;16,1>		DstRegion=<1>		Type=ub
173
 
174
.declare ub4ROBUF 	Base=r9.0		ElementSize=1		SrcRegion=<32;8,4>		DstRegion=<4>		Type=ub
175
 
176
 
177
// End of common.inc
178
 
179
 
180
//Interface:
181
//Static Parameters:
182
//r1
183
 
184
 
185
//======================================================
186
//Interface for serpent mode Chroma Denoise, added by Le
187
//======================================================
188
//r1
189
 
190
 
191
//noise history thresholds (low and high)
192
 
193
 
194
//temporal difference thresholds (high and low)
195
 
196
 
197
//noise history thresholds (low and high)
198
//#define ubNoiseHistMaxHigh  r1.22
199
//#define ubNoiseHistMaxLow  r1.23
200
//#define ubNoiseHistDeltaHigh  r1.24
201
//#define ubNoiseHistDeltaLow  r1.25
202
 
203
//Gaussian thresholds
204
 
205
 
206
//temporal difference thresholds (default)
207
 
208
 
209
//r2
210
//history thresholds (default)
211
 
212
 
213
//denoise factor  (0-63)
214
 
215
 
216
//====================== Binding table (Explicit To DNUV)=========================================
217
//Used by DN_UV kernels
218
 
219
 
220
	//Pointer to Current Frame UV
221
 
222
 
223
//r1-r6
224
	//CURBE GRFs used as TEMP : Used for max computation and storing max temporarily. : r1-r6
225
 
226
 
227
	.declare	ubCURBE_TEMP	Base=r1.0	ElementSize=1	Type=ub
228
	.declare	uwCURBE_TEMP	Base=r1.0	ElementSize=2	Type=uw
229
	.declare	wCURBE_TEMP		Base=r1.0	ElementSize=2	Type=w
230
	.declare	fCURBE_TEMP		Base=r1.0	ElementSize=4	Type=f
231
	.declare	udCURBE_TEMP		Base=r1.0	ElementSize=4	Type=ud
232
	.declare	uwMAX_ABS_DIFF	Base=r5.0	ElementSize=2	Type=uw
233
 
234
	//r1
235
 
236
 
237
	//r3
238
 
239
 
240
    //r4
241
 
242
//r7
243
	//All of the following has to defined in Same GRF for optimal performance.
244
 
245
 
246
//r8-24
247
    //Previous Frame UV
248
 
249
	.declare	udPREV_UV		Base=r8.0	ElementSize=4	Type=ud
250
	.declare	ubPREV_UV		Base=r8.0	ElementSize=1	Type=ub
251
 
252
 
253
//r25-48
254
	//TEMP Space for any Usage.
255
 
256
 
257
//=========================================================================
258
//Definations and declarations for serpent mode Chroma Denoise, added by Le
259
//=========================================================================
260
 
261
 
262
	.declare	udGNE_UV		Base=r24.0	ElementSize=4	Type=ud
263
  .declare	fGNE_UV		Base=r24.0	ElementSize=4	Type=f
264
  .declare	ubGNE_UV		Base=r24.0	ElementSize=1	Type=ub
265
 
266
  .declare	udMSGHDR_BNE_SERP	Base=r25.0	ElementSize=4	Type=ud
267
  .declare	udMSGSRC_BNE_SERP	Base=r26.0	ElementSize=4	Type=ud
268
 
269
 
270
  .declare	ubDN_UV_Thresholds Base=r26.0	ElementSize=1	Type=ub
271
  .declare	ubDN_UV_Thresholds_Temp  Base=r27.0	ElementSize=1	Type=ub
272
  .declare	udDN_UV_Thresholds Base=r26.0	ElementSize=4	Type=ud
273
  .declare	udDN_UV_Thresholds_Temp Base=r27.0	ElementSize=4	Type=ud
274
  .declare	fDN_UV_Thresholds Base=r26.0	ElementSize=4	Type=f
275
  .declare	fDN_UV_Thresholds_Temp Base=r27.0	ElementSize=4	Type=f
276
 
277
 
278
//====================================================================================
279
 
280
 
281
	//TEMP23: To hold V data for PL3 surfaces
282
	.declare	udCURR_V_TEMP	Base=r25.0	ElementSize=4	Type=ud
283
	.declare	ubCURR_V_TEMP	Base=r25.0	ElementSize=1	Type=ub
284
 
285
	//GRFs to calculate Median: r25-r42
286
	.declare	ubMEDIAN_TEMP	Base=r25.0	ElementSize=1	Type=ub
287
 
288
	//18 GRFs to hold difference : r25-r42
289
	.declare	wDIFF			Base=r25.0	ElementSize=2	Type=w
290
	.declare	uwDIFF			Base=r25.0	ElementSize=2	Type=uw
291
 
292
	//Temporal Diff
293
	.declare	wDIFF_TEMPORAL			Base=r25.0	ElementSize=2	Type=w
294
	.declare	ubDIFF_TEMPORAL			Base=r25.0	ElementSize=1	Type=ub
295
 
296
	//4 GRFs to hold Sobel Value : r43-46
297
	.declare	wSOBEL_X	Base=r43.0	ElementSize=2	Type=w
298
	.declare	uwSOBEL		Base=r43.0	ElementSize=2	Type=uw
299
 
300
 
301
	//2 GRFs to hold SOAD temporarily: r47-48
302
	.declare	uwSOAD			Base=r47.0	ElementSize=2	Type=uw
303
 
304
	//Temp GRFs to hold extra YUYV pixels: r43-r48
305
	.declare	ubTEMP5			Base=r43.0	ElementSize=1	Type=ub
306
 
307
	//Temp GRFs in Median Calculation: r47-r48
308
	.declare	ubTEMP1			Base=r47.0	ElementSize=1	Type=ub
309
 
310
	.declare	uwTEMP0			Base=r48.0	ElementSize=2	Type=uw
311
	.declare	ubTEMP0			Base=r48.0	ElementSize=1	Type=ub
312
 
313
	//Temp Space to store Median : r49-50
314
 
315
	.declare	ubMEDIAN	Base=r49.0	ElementSize=1	Type=ub
316
 
317
//r49
318
 
319
 
320
//r50
321
    //Message Source
322
 
323
 
324
//r51
325
	//DN_UV History Surface
326
 
327
	.declare	udHIST_UV		Base=r51.0	ElementSize=4	Type=ud
328
	.declare	ubHIST_UV		Base=r51.0	ElementSize=1	Type=ub
329
 
330
//r52 - r91
331
	//r52
332
	//Current Frame UV
333
 
334
 
335
	.declare	udCURR_UV		Base=r52.0	ElementSize=4	Type=ud
336
	.declare	ubCURR_UV		Base=r52.0	ElementSize=1	Type=ub
337
 
338
	//r54
339
	//CURBE COPY
340
 
341
 
342
	//r55
343
 
344
 
345
	.declare 	uwSOAD_MIN_8x4		Base=r56.0	ElementSize=2	Type=uw
346
 
347
	//r61
348
 
349
 
350
	//r62
351
 
352
 
353
	//History Surface Temp Origin
354
 
355
 
356
    //r63
357
    //Current Frame Y Temp Origin
358
 
359
 
360
	//BNE Surface Origin
361
 
362
 
363
    //r70
364
 
365
	.declare	uwDIFF_TEMPORAL_SUM4x4	Base=r70.0	ElementSize=2	Type=uw  //4 GRFs
366
 
367
	//r74-91 : For Saving Dest UV (PL2/PL3)
368
 
369
 
370
	.declare	ubMSGPAYLOAD_UV0	Base=r75.0	ElementSize=1	Type=ub
371
 
372
 
373
	.declare	ubMSGPAYLOAD_U		Base=r75.0	ElementSize=1	Type=ub
374
 
375
 
376
	.declare	ubMSGPAYLOAD_UV1	Base=r84.0	ElementSize=1	Type=ub
377
 
378
 
379
	.declare	ubMSGPAYLOAD_V		Base=r84.0	ElementSize=1	Type=ub
380
 
381
	//r90
382
 
383
	.declare	uwDIFF_TEMPORAL_SUM4x4_FINAL	Base=r90.0	ElementSize=2	Type=uw  //2 GRFs
384
 
385
//r92-127
386
	//Current Frame Y
387
 
388
 
389
	//r92
390
    .declare	uwDIFF_TEMPORAL_SUM4x4_TEMP_0		Base=r92	ElementSize=2	Type=uw
391
	//r101
392
    .declare	uwDIFF_TEMPORAL_SUM4x4_TEMP_1		Base=r101	ElementSize=2	Type=uw
393
	//r110
394
    .declare	uwDIFF_TEMPORAL_SUM4x4_TEMP_2		Base=r110	ElementSize=2	Type=uw
395
	//r119
396
    .declare	uwDIFF_TEMPORAL_SUM4x4_TEMP_3		Base=r119	ElementSize=2	Type=uw
397
 
398
	.declare	udCURR_Y0		Base=r93.0	ElementSize=4	Type=ud
399
    .declare	ubCURR_Y0		Base=r93.0	ElementSize=1	Type=ub
400
    .declare	udCURR_Y1		Base=r102.0	ElementSize=4	Type=ud
401
	.declare	ubCURR_Y1		Base=r102.0	ElementSize=1	Type=ub
402
	.declare	udCURR_Y2		Base=r111.0	ElementSize=4	Type=ud
403
	.declare	ubCURR_Y2		Base=r111.0	ElementSize=1	Type=ub
404
	.declare	udCURR_Y3		Base=r120.0	ElementSize=4	Type=ud
405
	.declare	ubCURR_Y3		Base=r120.0	ElementSize=1	Type=ub
406
 
407
	//r92: To hold U data for PL3 surfaces
408
	.declare	udCURR_U_TEMP		Base=r92.0	ElementSize=4	Type=ud
409
    .declare	ubCURR_U_TEMP		Base=r92.0	ElementSize=1	Type=ub
410
 
411
    //r112: To hold U data for PL3 surfaces
412
	.declare	udPREV_U_TEMP		Base=r112.0	ElementSize=4	Type=ud
413
	.declare	ubPREV_U_TEMP		Base=r112.0	ElementSize=1	Type=ub
414
 
415
	//r120: To hold U data for PL3 surfaces
416
	.declare	udPREV_V_TEMP		Base=r120.0	ElementSize=4	Type=ud
417
	.declare	ubPREV_V_TEMP		Base=r120.0	ElementSize=1	Type=ub
418
 
419
 
420
	// Initialize message source with r0.
421
	mov (8)   r50.0<1>:ud		r0.0<8;8,1>:ud
422
	mov (8)   r92.0<1>:ud		r0.0<8;8,1>:ud
423
	mov (8)   r101.0<1>:ud		r0.0<8;8,1>:ud
424
	mov (8)   r110.0<1>:ud		r0.0<8;8,1>:ud
425
	mov (8)   r119.0<1>:ud		r0.0<8;8,1>:ud
426
 
427
 
428
 
429
//Module Name 	: 	DN_UV_YUY2_Load_Curr_Frame_YUV
430
//Author		:	Tatiya, Rupesh
431
//Description	:	Loads Current Frame YUV data for YUY2 input.
432
 
433
 
434
 
435
//Module name 	:  DN_UV_Load_Curr_Frame_UV
436
//Author		:  Tatiya, Rupesh
437
//Description	:  Loads Current Frame (UV only).
438
//				   We need 4 extra rows (2 per field) and 2 extra pixel (1 each side) for both U and V each.
439
//				   The processing size is 16x16 U and V each. So we need : U size - 18x20, V size - 18x20, UV size - 36x20, YUYV size - 72x20.
440
 
441
 
442
 
443
 
444
//72x20 interleaved YUYV block is partitioned as follows:
445
//				<------ 36 --------> <--------36 ------->
446
//				------------------------------------------
447
//				|   |	32x2 B1		|		32x2 B2	 |	 |
448
//				| 4 |--------------------------------| 4 |
449
//				| x |				|				 | x |
450
//				|20 |     32x8 A1   |		32x8 A3  | 20|
451
//				|   |---------------|----------------|	 |
452
//				| C1|	  32x8 A2  	|	   32x8  A4	 | C2|
453
//				|   |				|		 		 |	 |
454
//				|   |--------------------------------|   |
455
//				|   |	32x2 B3		|		32x2 B4	 |	 |
456
//				------------------------------------------
457
//
458
// Cordinates: (x, y), (x, y+8), (x+32, y), (x+32, y+8), (x-4, y-2), (x+64, y-2),(x, y-2), (x+32, y-2), (x, y+16), (x+32, y+16)
459
 
460
	//UV surface origin: (2xORIX, ORIY)
461
	add  (2)	r7.4<1>:w		r7.0<2;2,1>:w	 	r4.4<2;2,1>:w	 { AccWrEn } // Source Block origin
462
	shl  (1)	r7.4<1>:w		acc0.4<0;1,0>:w		1:w
463
 
464
	//A1
465
	mov  (2)	r92.0<1>:d		r7.4<2;2,1>:w	 	{ AccWrEn }		// Source Block origin
466
 	mov  (1)   	r92.2<1>:ud		0x7001F:ud
467
 	send (8)	udCURR_Y0(0)<1>			r92			0x4	0x2890003:ud
468
 
469
	//A2
470
	mov  (1)    r101.0<1>:d	acc0.0<0;1,0>:d
471
 	add  (1)    r101.1<1>:d	acc0.1<0;1,0>:d		8:d
472
 	mov  (1)   	r101.2<1>:ud	0x7001F:ud
473
 	send (8)	udCURR_Y1(0)<1>		r101		0x4	0x2890003:ud
474
 
475
 	//B1
476
	mov  (1)    r50.0<1>:d	acc0.0<0;1,0>:d
477
	add  (1)    r50.1<1>:d	acc0.1<0;1,0>:d			-2:d
478
	mov  (1)   	r50.2<1>:ud	0x1001F:ud
479
	send (8)	udCURR_UV(0)<1>			r50		0x4	0x2290003:ud
480
 
481
	//B3
482
	mov  (1)    r50.0<1>:d	acc0.0<0;1,0>:d
483
	add  (1)    r50.1<1>:d	acc0.1<0;1,0>:d			16:d
484
	send (8)	udCURR_UV(18)<1>		r50		0x4	0x2290003:ud
485
 
486
	//C1
487
	add  (1)    r50.0<1>:d	acc0.0<0;1,0>:d			-4:d
488
	add  (1)    r50.1<1>:d	acc0.1<0;1,0>:d			-2:d
489
	mov  (1)   	r50.2<1>:ud	0x130003:ud
490
 	send (8)	ubTEMP5(0)<1>			r50		0x4	0x2390003:ud
491
 
492
 	//A3
493
	add  (1)    r110.0<1>:d	acc0.0<0;1,0>:d		32:d
494
 	mov  (1)    r110.1<1>:d	acc0.1<0;1,0>:d
495
 	mov  (1)   	r110.2<1>:ud	0x7001F:ud
496
 	send (8)	udCURR_Y2(0)<1>		r110		0x4	0x2890003:ud
497
 
498
 	//A4
499
	add  (1)    r119.0<1>:d	acc0.0<0;1,0>:d		32:d
500
 	add  (1)    r119.1<1>:d	acc0.1<0;1,0>:d		 8:d
501
 	mov  (1)   	r119.2<1>:ud	0x7001F:ud
502
 	send (8)	udCURR_Y3(0)<1>		r119		0x4	0x2890003:ud
503
 
504
	//B2
505
	add  (1)    r50.0<1>:d	acc0.0<0;1,0>:d			32:d
506
	add  (1)    r50.1<1>:d	acc0.1<0;1,0>:d			-2:d
507
	mov  (1)   	r50.2<1>:ud	0x1001F:ud
508
	send (8)	udCURR_UV(20)<1>		r50		0x4	0x2290003:ud
509
 
510
	//B4
511
	add  (1)    r50.0<1>:d	acc0.0<0;1,0>:d			32:d
512
	add  (1)    r50.1<1>:d	acc0.1<0;1,0>:d			16:d
513
	send (8)	udCURR_UV(38)<1>		r50		0x4	0x2290003:ud
514
 
515
	//C2
516
 	add  (1)    r50.0<1>:d	acc0.0<0;1,0>:d			64:d
517
	add  (1)    r50.1<1>:d	acc0.1<0;1,0>:d			-2:d
518
	mov  (1)   	r50.2<1>:ud	0x130003:ud
519
 	send (8)	ubTEMP5(3)<1>			r50		0x4	0x2390003:ud
520
 
521
	//History Origin, Current Y origin and BNE surface origin - all are in inline GRF. Use , . -rT.
522
 
523
 	//Calculate Origin For History Surface: (ORIX/4, ORIY/4)
524
	shr  (2)	r7.2<1>:w		r7.0<2;2,1>:w		2:w
525
 
526
	//Calculate Origin For BNE Surface: (ORIX/8, ORIY/8)
527
	shr  (2)	r7.6<1>:w		r7.0<2;2,1>:w		3:w
528
 
529
 
530
 
531
//Module Name 	: 	DN_UV_YUY2_Load_Prev_Frame_YUV.asm
532
//Author		:	Tatiya, Rupesh
533
//Description	:	Loads Pevious Frame YUV data for YUY2 input.
534
 
535
 
536
 
537
//Module Name 	: 	DN_UV_Load_Prev_Frame_UV
538
//Author		:	Tatiya, Rupesh
539
//Description	:   Loads Prev Frame (UV only). U size - 16x16, V size - 16x16, UV size - 32x16, YUYV size - 64x16.
540
 
541
 
542
 
543
 
544
	mov  (2)	r50.0<1>:d	r7.4<2;2,1>:w	 	{ AccWrEn } 	// Source lock origin
545
	mov  (1)	r50.2<1>:ud	0x7001F:ud  					// U/V block width and height (16x16)
546
	send (8)	udPREV_UV(0)<1>			r50		0x4	0x2890000:ud
547
 
548
	add  (1)	r50.1<1>:ud 	acc0.1<0;1,0>:d		8:w										// Add 16 to X origin
549
	send (8)	udPREV_UV(8)<1>			r50		0x4	0x2890000:ud
550
 
551
	add  (1)	r50.0<1>:ud 	acc0.0<0;1,0>:d		32:w
552
	mov  (1)	r50.1<1>:ud 	acc0.1<0;1,0>:d
553
	send (8)	udPREV_UV(16)<1>		r50		0x4	0x2890000:ud
554
 
555
	add  (1)	r50.1<1>:ud 	acc0.0<0;1,0>:d		 8:w
556
	send (8)	udPREV_UV(24)<1>		r50		0x4	0x2890000:ud
557
 
558
 
559
	//TODO - See if History loading can be combined with Prev Frame Load. - rT
560
 
561
 
562
//Module name 	:  DN_UV_Load_Hist_UV
563
//Author		:  Tatiya, Rupesh
564
//Description	:  Load DN History for UV denoise. 4x4 for each U & V.
565
 
566
 
567
 
568
 
569
	mov  (2)	r50.0<1>:d	r7.2<2;2,1>:w
570
	mov  (1)	r50.2<1>:ud	0x30007:ud
571
	send (8)	udHIST_UV(0)<1>			r50		0x4	0x2190022:ud
572
 
573
 
574
 
575
//Module Name: DN_UV_YUY2_Extract_Curr_Frame_UV
576
//Author	 : Tatiya, Rupesh
577
//Description: Extract UV data from current YUY2 frame.
578
 
579
//72x20 interleaved YUYV block is partitioned as follows:
580
//				<------ 36 --------> <--------36 ------->
581
//				------------------------------------------
582
//				|   |	32x2 B1		|		32x2 B2	 |	 |
583
//				| 4 |--------------------------------| 4 |
584
//				| x |				|				 | x |
585
//				|20 |     32x8 A1   |		32x8 A3  | 20|
586
//				|   |---------------|----------------|	 |
587
//				| C1|	  32x8 A2  	|	   32x8  A4	 | C2|
588
//				|   |				|		 		 |	 |
589
//				|   |--------------------------------|   |
590
//				|   |	32x2 B3		|		32x2 B4	 |	 |
591
//				------------------------------------------
592
 
593
	// Set SRC pointers according to Input packing i.e. YUYV, YVYU, UYVY, VYUY
594
	add  (1) a0.0<1>:uw    	r4.1<0;1,0>:ub    2976:w					//A1
595
	add  (1) a0.1<1>:uw    	r4.1<0;1,0>:ub    3264:w				//A2
596
	add  (1) a0.2<1>:uw    	r4.1<0;1,0>:ub    3552:w				//A3
597
	add  (1) a0.3<1>:uw    	r4.1<0;1,0>:ub    3840:w				//A4
598
	add  (1) a0.4<1>:uw    	r4.1<0;1,0>:ub    1664:w				//B1
599
	add  (1) a0.5<1>:uw    	r4.1<0;1,0>:ub    2240:w				//B3B2
600
	add  (1) a0.6<1>:uw    	r4.1<0;1,0>:ub    2880:w				//B4
601
	add  (1) a0.7<1>:uw    	r4.1<0;1,0>:ub    1376:w				//C1C2
602
 
603
	//Left 20x20 UV : 16x16 UV (Original)+4 extra rows(2 per field on top/bottom)+4 extra pixels(2 on left/right)
604
 
605
	//A1
606
		mov (16)  ubCURR_UV(2,2)<1>		r[a0.0, 0]<32;16,2>
607
		mov (16)  ubCURR_UV(3,2)<1>		r[a0.0, 32]<32;16,2>
608
		mov (16)  ubCURR_UV(4,2)<1>		r[a0.0, 64]<32;16,2>
609
		mov (16)  ubCURR_UV(5,2)<1>		r[a0.0, 96]<32;16,2>
610
		mov (16)  ubCURR_UV(6,2)<1>		r[a0.0, 128]<32;16,2>
611
		mov (16)  ubCURR_UV(7,2)<1>		r[a0.0, 160]<32;16,2>
612
		mov (16)  ubCURR_UV(8,2)<1>		r[a0.0, 192]<32;16,2>
613
		mov (16)  ubCURR_UV(9,2)<1>		r[a0.0, 224]<32;16,2>
614
 
615
	//A2
616
		mov (16)  ubCURR_UV(10,2)<1>		r[a0.1, 0]<32;16,2>
617
		mov (16)  ubCURR_UV(11,2)<1>		r[a0.1, 32]<32;16,2>
618
		mov (16)  ubCURR_UV(12,2)<1>		r[a0.1, 64]<32;16,2>
619
		mov (16)  ubCURR_UV(13,2)<1>		r[a0.1, 96]<32;16,2>
620
		mov (16)  ubCURR_UV(14,2)<1>		r[a0.1, 128]<32;16,2>
621
		mov (16)  ubCURR_UV(15,2)<1>		r[a0.1, 160]<32;16,2>
622
		mov (16)  ubCURR_UV(16,2)<1>		r[a0.1, 192]<32;16,2>
623
		mov (16)  ubCURR_UV(17,2)<1>		r[a0.1, 224]<32;16,2>
624
 
625
	//B1
626
		mov (16)  ubCURR_UV(0,2)<1>		r[a0.4, 0]<32;16,2>
627
		mov (16)  ubCURR_UV(1,2)<1>		r[a0.4, 32]<32;16,2>
628
 
629
	//B3
630
		mov (16)  ubCURR_UV(18,2)<1>		r[a0.5, 0]<32;16,2>
631
		mov (16)  ubCURR_UV(19,2)<1>		r[a0.5, 32]<32;16,2>
632
 
633
	//TODO - Find a way to reduce this 40 SIMD2 instructions - rT
634
	//C1
635
		mov (2)  ubCURR_UV(0,0)<1>			r[a0.7, 0]<4;2,2>
636
		mov (2)  ubCURR_UV(1,0)<1>			r[a0.7, 4]<4;2,2>
637
		mov (2)  ubCURR_UV(2,0)<1>			r[a0.7, 8]<4;2,2>
638
		mov (2)  ubCURR_UV(3,0)<1>			r[a0.7, 12]<4;2,2>
639
		mov (2)  ubCURR_UV(4,0)<1>			r[a0.7, 16]<4;2,2>
640
		mov (2)  ubCURR_UV(5,0)<1>			r[a0.7, 20]<4;2,2>
641
		mov (2)  ubCURR_UV(6,0)<1>			r[a0.7, 24]<4;2,2>
642
		mov (2)  ubCURR_UV(7,0)<1>			r[a0.7, 28]<4;2,2>
643
		mov (2)  ubCURR_UV(8,0)<1>			r[a0.7, 32]<4;2,2>
644
		mov (2)  ubCURR_UV(9,0)<1>			r[a0.7, 36]<4;2,2>
645
		mov (2)  ubCURR_UV(10,0)<1>			r[a0.7, 40]<4;2,2>
646
		mov (2)  ubCURR_UV(11,0)<1>			r[a0.7, 44]<4;2,2>
647
		mov (2)  ubCURR_UV(12,0)<1>			r[a0.7, 48]<4;2,2>
648
		mov (2)  ubCURR_UV(13,0)<1>			r[a0.7, 52]<4;2,2>
649
		mov (2)  ubCURR_UV(14,0)<1>			r[a0.7, 56]<4;2,2>
650
		mov (2)  ubCURR_UV(15,0)<1>			r[a0.7, 60]<4;2,2>
651
		mov (2)  ubCURR_UV(16,0)<1>			r[a0.7, 64]<4;2,2>
652
		mov (2)  ubCURR_UV(17,0)<1>			r[a0.7, 68]<4;2,2>
653
		mov (2)  ubCURR_UV(18,0)<1>			r[a0.7, 72]<4;2,2>
654
		mov (2)  ubCURR_UV(19,0)<1>			r[a0.7, 76]<4;2,2>
655
 
656
	//2 right bytes from B2 - 2 rows
657
		mov (2)  ubCURR_UV(0,18)<1>		r[a0.5, 64]<4;2,2>
658
		mov (2)  ubCURR_UV(1,18)<1>		r[a0.5, 96]<4;2,2>
659
 
660
	//2 right bytes from A3 - 8 rows
661
		mov (2)  ubCURR_UV(2,18)<1>		r[a0.2, 0]<4;2,2>
662
		mov (2)  ubCURR_UV(3,18)<1>		r[a0.2, 32]<4;2,2>
663
		mov (2)  ubCURR_UV(4,18)<1>		r[a0.2, 64]<4;2,2>
664
		mov (2)  ubCURR_UV(5,18)<1>		r[a0.2, 96]<4;2,2>
665
		mov (2)  ubCURR_UV(6,18)<1>		r[a0.2, 128]<4;2,2>
666
		mov (2)  ubCURR_UV(7,18)<1>		r[a0.2, 160]<4;2,2>
667
		mov (2)  ubCURR_UV(8,18)<1>		r[a0.2, 192]<4;2,2>
668
		mov (2)  ubCURR_UV(9,18)<1>		r[a0.2, 224]<4;2,2>
669
 
670
	//2 right bytes from A4 - 8 rows
671
		mov (2)  ubCURR_UV(10,18)<1>		r[a0.3, 0]<4;2,2>
672
		mov (2)  ubCURR_UV(11,18)<1>		r[a0.3, 32]<4;2,2>
673
		mov (2)  ubCURR_UV(12,18)<1>		r[a0.3, 64]<4;2,2>
674
		mov (2)  ubCURR_UV(13,18)<1>		r[a0.3, 96]<4;2,2>
675
		mov (2)  ubCURR_UV(14,18)<1>		r[a0.3, 128]<4;2,2>
676
		mov (2)  ubCURR_UV(15,18)<1>		r[a0.3, 160]<4;2,2>
677
		mov (2)  ubCURR_UV(16,18)<1>		r[a0.3, 192]<4;2,2>
678
		mov (2)  ubCURR_UV(17,18)<1>		r[a0.3, 224]<4;2,2>
679
 
680
	//2 right bytes from B4 - 2 rows
681
		mov (2)  ubCURR_UV(18,18)<1>		r[a0.6, 0]<4;2,2>
682
		mov (2)  ubCURR_UV(19,18)<1>		r[a0.6, 32]<4;2,2>
683
 
684
	//Right 20x20 UV : 16x16 UV (Original)+4 extra rows(2 per field on top/bottom)+4 extra pixels(2 on left/right)
685
 
686
	//A3
687
		mov (16)  ubCURR_UV(22,2)<1>		r[a0.2, 0]<32;16,2>
688
		mov (16)  ubCURR_UV(23,2)<1>		r[a0.2, 32]<32;16,2>
689
		mov (16)  ubCURR_UV(24,2)<1>		r[a0.2, 64]<32;16,2>
690
		mov (16)  ubCURR_UV(25,2)<1>		r[a0.2, 96]<32;16,2>
691
		mov (16)  ubCURR_UV(26,2)<1>		r[a0.2, 128]<32;16,2>
692
		mov (16)  ubCURR_UV(27,2)<1>		r[a0.2, 160]<32;16,2>
693
		mov (16)  ubCURR_UV(28,2)<1>		r[a0.2, 192]<32;16,2>
694
		mov (16)  ubCURR_UV(29,2)<1>		r[a0.2, 224]<32;16,2>
695
 
696
	//A4
697
		mov (16)  ubCURR_UV(30,2)<1>		r[a0.3, 0]<32;16,2>
698
		mov (16)  ubCURR_UV(31,2)<1>		r[a0.3, 32]<32;16,2>
699
		mov (16)  ubCURR_UV(32,2)<1>		r[a0.3, 64]<32;16,2>
700
		mov (16)  ubCURR_UV(33,2)<1>		r[a0.3, 96]<32;16,2>
701
		mov (16)  ubCURR_UV(34,2)<1>		r[a0.3, 128]<32;16,2>
702
		mov (16)  ubCURR_UV(35,2)<1>		r[a0.3, 160]<32;16,2>
703
		mov (16)  ubCURR_UV(36,2)<1>		r[a0.3, 192]<32;16,2>
704
		mov (16)  ubCURR_UV(37,2)<1>		r[a0.3, 224]<32;16,2>
705
 
706
	//B2
707
		mov (16)  ubCURR_UV(20,2)<1>		r[a0.5, 64]<32;16,2>
708
		mov (16)  ubCURR_UV(21,2)<1>		r[a0.5, 96]<32;16,2>
709
 
710
	//B4
711
		mov (16)  ubCURR_UV(38,2)<1>		r[a0.6, 0]<32;16,2>
712
		mov (16)  ubCURR_UV(39,2)<1>		r[a0.6, 32]<32;16,2>
713
 
714
	//TODO - Find a way to reduce this 40 SIMD2 instructions - rT
715
	//C2
716
		mov (2)  ubCURR_UV(20,18)<1>		r[a0.7, 96]<4;2,2>
717
		mov (2)  ubCURR_UV(21,18)<1>		r[a0.7, 100]<4;2,2>
718
		mov (2)  ubCURR_UV(22,18)<1>		r[a0.7, 104]<4;2,2>
719
		mov (2)  ubCURR_UV(23,18)<1>		r[a0.7, 108]<4;2,2>
720
		mov (2)  ubCURR_UV(24,18)<1>		r[a0.7, 112]<4;2,2>
721
		mov (2)  ubCURR_UV(25,18)<1>		r[a0.7, 116]<4;2,2>
722
		mov (2)  ubCURR_UV(26,18)<1>		r[a0.7, 120]<4;2,2>
723
		mov (2)  ubCURR_UV(27,18)<1>		r[a0.7, 124]<4;2,2>
724
		mov (2)  ubCURR_UV(28,18)<1>		r[a0.7, 128]<4;2,2>
725
		mov (2)  ubCURR_UV(29,18)<1>		r[a0.7, 132]<4;2,2>
726
		mov (2)  ubCURR_UV(30,18)<1>		r[a0.7, 136]<4;2,2>
727
		mov (2)  ubCURR_UV(31,18)<1>		r[a0.7, 140]<4;2,2>
728
		mov (2)  ubCURR_UV(32,18)<1>		r[a0.7, 144]<4;2,2>
729
		mov (2)  ubCURR_UV(33,18)<1>		r[a0.7, 148]<4;2,2>
730
		mov (2)  ubCURR_UV(34,18)<1>		r[a0.7, 152]<4;2,2>
731
		mov (2)  ubCURR_UV(35,18)<1>		r[a0.7, 156]<4;2,2>
732
		mov (2)  ubCURR_UV(36,18)<1>		r[a0.7, 160]<4;2,2>
733
		mov (2)  ubCURR_UV(37,18)<1>		r[a0.7, 164]<4;2,2>
734
		mov (2)  ubCURR_UV(38,18)<1>		r[a0.7, 168]<4;2,2>
735
		mov (2)  ubCURR_UV(39,18)<1>		r[a0.7, 172]<4;2,2>
736
 
737
	//2 left bytes from B1 - 2 rows
738
		mov (2)  ubCURR_UV(20,0)<1>		r[a0.4, 28]<4;2,2>
739
		mov (2)  ubCURR_UV(21,0)<1>		r[a0.4, 60]<4;2,2>
740
 
741
	//2 left bytes from A1 - 8 rows
742
		mov (2)  ubCURR_UV(22,0)<1>		r[a0.0, 28]<4;2,2>
743
		mov (2)  ubCURR_UV(23,0)<1>		r[a0.0, 60]<4;2,2>
744
		mov (2)  ubCURR_UV(24,0)<1>		r[a0.0, 92]<4;2,2>
745
		mov (2)  ubCURR_UV(25,0)<1>		r[a0.0, 124]<4;2,2>
746
		mov (2)  ubCURR_UV(26,0)<1>		r[a0.0, 156]<4;2,2>
747
		mov (2)  ubCURR_UV(27,0)<1>		r[a0.0, 188]<4;2,2>
748
		mov (2)  ubCURR_UV(28,0)<1>		r[a0.0, 220]<4;2,2>
749
		mov (2)  ubCURR_UV(29,0)<1>		r[a0.0, 252]<4;2,2>
750
 
751
	//2 left bytes from A2 - 8 rows
752
		mov (2)  ubCURR_UV(30,0)<1>		r[a0.1, 28]<4;2,2>
753
		mov (2)  ubCURR_UV(31,0)<1>		r[a0.1, 60]<4;2,2>
754
		mov (2)  ubCURR_UV(32,0)<1>		r[a0.1, 92]<4;2,2>
755
		mov (2)  ubCURR_UV(33,0)<1>		r[a0.1, 124]<4;2,2>
756
		mov (2)  ubCURR_UV(34,0)<1>		r[a0.1, 156]<4;2,2>
757
		mov (2)  ubCURR_UV(35,0)<1>		r[a0.1, 188]<4;2,2>
758
		mov (2)  ubCURR_UV(36,0)<1>		r[a0.1, 220]<4;2,2>
759
		mov (2)  ubCURR_UV(37,0)<1>		r[a0.1, 252]<4;2,2>
760
 
761
	//2 left bytes from B3 - 2 rows
762
		mov (2)  ubCURR_UV(38,0)<1>		r[a0.5, 28]<4;2,2>
763
		mov (2)  ubCURR_UV(39,0)<1>		r[a0.5, 60]<4;2,2>
764
 
765
 
766
 
767
// Module Name 	:	DN_UV_YUY2_Extract_Prev_Frame_UV
768
// Author		:	Tatiya, Rupesh
769
// Description	:	Extract UV from previous frame YUY2.
770
 
771
	// Set SRC pointers according to Input packing i.e. YUYV, YVYU, UYVY, VYUY
772
	add  (1) a0.0<1>:uw    	r4.1<0;1,0>:ub    256:w
773
	add  (1) a0.1<1>:uw    	r4.1<0;1,0>:ub    768:w
774
 
775
		mov (16)  ubPREV_UV(0,0)<1>		r[a0.0, 0]<32;16,2>:ub
776
		mov (16)  ubPREV_UV(0,16)<1>		r[a0.0, 32]<32;16,2>:ub
777
		mov (16)  ubPREV_UV(1,0)<1>		r[a0.0, 64]<32;16,2>:ub
778
		mov (16)  ubPREV_UV(1,16)<1>		r[a0.0, 96]<32;16,2>:ub
779
		mov (16)  ubPREV_UV(2,0)<1>		r[a0.0, 128]<32;16,2>:ub
780
		mov (16)  ubPREV_UV(2,16)<1>		r[a0.0, 160]<32;16,2>:ub
781
		mov (16)  ubPREV_UV(3,0)<1>		r[a0.0, 192]<32;16,2>:ub
782
		mov (16)  ubPREV_UV(3,16)<1>		r[a0.0, 224]<32;16,2>:ub
783
		mov (16)  ubPREV_UV(4,0)<1>		r[a0.0, 256]<32;16,2>:ub
784
		mov (16)  ubPREV_UV(4,16)<1>		r[a0.0, 288]<32;16,2>:ub
785
		mov (16)  ubPREV_UV(5,0)<1>		r[a0.0, 320]<32;16,2>:ub
786
		mov (16)  ubPREV_UV(5,16)<1>		r[a0.0, 352]<32;16,2>:ub
787
		mov (16)  ubPREV_UV(6,0)<1>		r[a0.0, 384]<32;16,2>:ub
788
		mov (16)  ubPREV_UV(6,16)<1>		r[a0.0, 416]<32;16,2>:ub
789
		mov (16)  ubPREV_UV(7,0)<1>		r[a0.0, 448]<32;16,2>:ub
790
		mov (16)  ubPREV_UV(7,16)<1>		r[a0.0, 480]<32;16,2>:ub
791
 
792
		mov (16)  ubPREV_UV(8,0)<1>		r[a0.1, 0]<32;16,2>:ub
793
		mov (16)  ubPREV_UV(8,16)<1>		r[a0.1, 32]<32;16,2>:ub
794
		mov (16)  ubPREV_UV(9,0)<1>		r[a0.1, 64]<32;16,2>:ub
795
		mov (16)  ubPREV_UV(9,16)<1>		r[a0.1, 96]<32;16,2>:ub
796
		mov (16)  ubPREV_UV(10,0)<1>		r[a0.1, 128]<32;16,2>:ub
797
		mov (16)  ubPREV_UV(10,16)<1>		r[a0.1, 160]<32;16,2>:ub
798
		mov (16)  ubPREV_UV(11,0)<1>		r[a0.1, 192]<32;16,2>:ub
799
		mov (16)  ubPREV_UV(11,16)<1>		r[a0.1, 224]<32;16,2>:ub
800
		mov (16)  ubPREV_UV(12,0)<1>		r[a0.1, 256]<32;16,2>:ub
801
		mov (16)  ubPREV_UV(12,16)<1>		r[a0.1, 288]<32;16,2>:ub
802
		mov (16)  ubPREV_UV(13,0)<1>		r[a0.1, 320]<32;16,2>:ub
803
		mov (16)  ubPREV_UV(13,16)<1>		r[a0.1, 352]<32;16,2>:ub
804
		mov (16)  ubPREV_UV(14,0)<1>		r[a0.1, 384]<32;16,2>:ub
805
		mov (16)  ubPREV_UV(14,16)<1>		r[a0.1, 416]<32;16,2>:ub
806
		mov (16)  ubPREV_UV(15,0)<1>		r[a0.1, 448]<32;16,2>:ub
807
		mov (16)  ubPREV_UV(15,16)<1>		r[a0.1, 480]<32;16,2>:ub
808
 
809
 
810
 
811
//Module Name : DN_UV_Noise_Detection_UV
812
//Author	  : Tatiya, Rupesh
813
//Description : Performs noise detection on 16x16 U and 16x16 V each.
814
 
815
 
816
 
817
//Module Name 	: DN_UV_Move_CURBE_Inline_UV.asm
818
//Author		: Tatiya, Rupesh
819
 
820
 
821
 
822
 
823
	//Mov CURBE data to another space - so that it can be used as Temp Space --> r1 - r6
824
	mov (4)	r54.28<1>:ub		r2.28<4;4,1>:ub		//Dest. YUY2 offset
825
	mov (2) r54.5<1>:ud		r4.0<4;2,2>:ud		//Src YUY2 offset and Origin offset
826
	mov (4)	r55.28<1>:ub		r1.0<4;4,1>:ub
827
 
828
	mov (8) r61.20<1>:ub		r1.4<8;8,1>:ub
829
	mov (4) r61.28<1>:ub		r1.12<4;4,1>:ub
830
 
831
	//Move Inline Data to another space - so that it can be used as Temp Space --> r7
832
	mov (4) r62.10<1>:w				r7.0<4;4,1>:w
833
	mov (4) r63.10<1>:w		r7.4<4;4,1>:w
834
 
835
 
836
 
837
 
838
 
839
//Module Name	: DN_UV_Noise_Detection_Set_Top_Region_N
840
//Author		: Tatiya, Rupesh
841
//Description	: Sets sub-region region N from Top region.
842
 
843
 
844
	mov (1) a0.0:uw				1664:uw
845
	mov (1)	a0.1:uw	1816:uw
846
 
847
 
848
 
849
 
850
add (1) r7.7<1>:d ip:ud 32:d { NoCompact }
851
 jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact }
852
 
853
 
854
 
855
 
856
 
857
//Module Name	: DN_UV_Noise_Detection_Set_Top_Region_N
858
//Author		: Tatiya, Rupesh
859
//Description	: Sets sub-region region N from Top region.
860
 
861
 
862
	//TODO - remove one instruction here using arithmatic. -rT
863
	mov (1) a0.0:uw				1792:uw
864
	mov (1)	a0.1:uw	1820:uw
865
 
866
 
867
 
868
 
869
add (1) r7.7<1>:d ip:ud 32:d { NoCompact }
870
 jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact }
871
 
872
 
873
 
874
 
875
 
876
//Module Name	: DN_UV_Noise_Detection_Set_Top_Region_N
877
//Author		: Tatiya, Rupesh
878
//Description	: Sets sub-region region N from Top region.
879
 
880
 
881
	//TODO - remove one instruction here using arithmatic. -rT
882
	mov (1) a0.0:uw				1920:uw
883
	mov (1)	a0.1:uw	1848:uw
884
 
885
 
886
 
887
 
888
add (1) r7.7<1>:d ip:ud 32:d { NoCompact }
889
 jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact }
890
 
891
 
892
 
893
 
894
 
895
//Module Name	: DN_UV_Noise_Detection_Set_Top_Region_N
896
//Author		: Tatiya, Rupesh
897
//Description	: Sets sub-region region N from Top region.
898
 
899
 
900
	//TODO - remove one instruction here using arithmatic. -rT
901
	mov (1) a0.0:uw				2048:uw
902
	mov (1)	a0.1:uw	1852:uw
903
 
904
 
905
 
906
 
907
add (1) r7.7<1>:d ip:ud 32:d { NoCompact }
908
 jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact }
909
 
910
 
911
 
912
 
913
 
914
//Module Name	: DN_UV_Noise_Detection_Set_Top_Region_N
915
//Author		: Tatiya, Rupesh
916
//Description	: Sets sub-region region N from Top region.
917
 
918
 
919
	mov (1) a0.0:uw				2304:uw
920
	mov (1)	a0.1:uw	1880:uw
921
 
922
 
923
 
924
 
925
add (1) r7.7<1>:d ip:ud 32:d { NoCompact }
926
 jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact }
927
 
928
 
929
 
930
 
931
 
932
//Module Name	: DN_UV_Noise_Detection_Set_Top_Region_N
933
//Author		: Tatiya, Rupesh
934
//Description	: Sets sub-region region N from Top region.
935
 
936
 
937
	//TODO - remove one instruction here using arithmatic. -rT
938
	mov (1) a0.0:uw				2432:uw
939
	mov (1)	a0.1:uw	1884:uw
940
 
941
 
942
 
943
 
944
add (1) r7.7<1>:d ip:ud 32:d { NoCompact }
945
 jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact }
946
 
947
 
948
 
949
 
950
 
951
//Module Name	: DN_UV_Noise_Detection_Set_Top_Region_N
952
//Author		: Tatiya, Rupesh
953
//Description	: Sets sub-region region N from Top region.
954
 
955
 
956
	//TODO - remove one instruction here using arithmatic. -rT
957
	mov (1) a0.0:uw				2560:uw
958
	mov (1)	a0.1:uw	1912:uw
959
 
960
 
961
 
962
 
963
add (1) r7.7<1>:d ip:ud 32:d { NoCompact }
964
 jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact }
965
 
966
 
967
 
968
 
969
 
970
//Module Name	: DN_UV_Noise_Detection_Set_Top_Region_N
971
//Author		: Tatiya, Rupesh
972
//Description	: Sets sub-region region N from Top region.
973
 
974
 
975
	//TODO - remove one instruction here using arithmatic. -rT
976
	mov (1) a0.0:uw				2688:uw
977
	mov (1)	a0.1:uw	1916:uw
978
 
979
 
980
 
981
 
982
add (1) r7.7<1>:d ip:ud 32:d { NoCompact }
983
 jmpi (1) DN_UV_NOISE_DETECTION_UV { NoCompact }
984
 
985
 
986
 
987
//Module 		: DN_UV_Noise_Reduction_UV
988
//Author		: Tatiya, Rupesh
989
//Description	: Performs Noise Reduction on 16x16 U and 16x16 V.
990
//Tasks			: 1. Update weight history
991
//				  2. Find if it block is motion block
992
//				  3. Compute Denoised Pixel.
993
 
994
 
995
 
996
 
997
//History is 1+1 byte every 4x4 U and 4x4 V.
998
 
999
	cmp.l.f0.0 (16) null<1>:w		ubHIST_UV(0,0)<16;16,1>		r61.20<0;2,1>:ub
1000
	cmp.l.f1.0 (16) null<1>:w		ubHIST_UV(0,0)<16;16,1>		r61.22<0;2,1>:ub
1001
 
1002
	mov (16)	uwCURBE_TEMP(0)<1>	0:w
1003
	mov (16)	uwCURBE_TEMP(1)<1>	0:w
1004
 
1005
	//Compute diff betn curr and prev. - First 16 lines
1006
	// 8 lines here
1007
    add (16)	wDIFF_TEMPORAL(0)<1>			ubCURR_UV(2,2)<16;16,1>		-ubPREV_UV(0,0)<16;16,1>		//Diff UV interleaved
1008
    add (16)	wDIFF_TEMPORAL(1)<1>			ubCURR_UV(3,2)<16;16,1>		-ubPREV_UV(0,16)<16;16,1>		//Diff UV interleaved
1009
    add (16)	wDIFF_TEMPORAL(2)<1>			ubCURR_UV(4,2)<16;16,1>		-ubPREV_UV(0,32)<16;16,1>		//Diff UV interleaved
1010
    add (16)	wDIFF_TEMPORAL(3)<1>			ubCURR_UV(5,2)<16;16,1>		-ubPREV_UV(0,48)<16;16,1>		//Diff UV interleaved
1011
    add (16)	wDIFF_TEMPORAL(4)<1>			ubCURR_UV(6,2)<16;16,1>		-ubPREV_UV(0,64)<16;16,1>		//Diff UV interleaved
1012
    add (16)	wDIFF_TEMPORAL(5)<1>			ubCURR_UV(7,2)<16;16,1>		-ubPREV_UV(0,80)<16;16,1>		//Diff UV interleaved
1013
    add (16)	wDIFF_TEMPORAL(6)<1>			ubCURR_UV(8,2)<16;16,1>		-ubPREV_UV(0,96)<16;16,1>		//Diff UV interleaved
1014
    add (16)	wDIFF_TEMPORAL(7)<1>			ubCURR_UV(9,2)<16;16,1>		-ubPREV_UV(0,112)<16;16,1>		//Diff UV interleaved
1015
 
1016
	//Update WT HIST
1017
	(-f0.0) shr 	(16) uwCURBE_TEMP(0)<1>		ubHIST_UV(0,0)<16;16,1>		1:w
1018
	(f1.0)  add 	(16) uwCURBE_TEMP(2)<1>		ubHIST_UV(0,0)<16;16,1>		r61.24<0;2,1>:ub
1019
	(f0.0)  mov 	(16) uwCURBE_TEMP(2)<1>		r61.20<0;2,1>:ub
1020
	(-f0.0.anyv) mov 	(16) uwCURBE_TEMP(2)<1>		ubHIST_UV(0,0)<16;16,1>
1021
 
1022
	cmp.l.f0.0 (16) null<1>:w		ubHIST_UV(0,16)<16;16,1>	r61.20<0;2,1>:ub
1023
	cmp.l.f1.0 (16) null<1>:w		ubHIST_UV(0,16)<16;16,1>	r61.22<0;2,1>:ub
1024
 
1025
	//Compute diff betn curr and prev. - First 16 lines
1026
	// 8 more lines here
1027
    add (16)	wDIFF_TEMPORAL(8)<1>			ubCURR_UV(10,2)<16;16,1>		-ubPREV_UV(0,128)<16;16,1>		//Diff UV interleaved
1028
    add (16)	wDIFF_TEMPORAL(9)<1>			ubCURR_UV(11,2)<16;16,1>		-ubPREV_UV(0,144)<16;16,1>		//Diff UV interleaved
1029
    add (16)	wDIFF_TEMPORAL(10)<1>			ubCURR_UV(12,2)<16;16,1>		-ubPREV_UV(0,160)<16;16,1>		//Diff UV interleaved
1030
    add (16)	wDIFF_TEMPORAL(11)<1>			ubCURR_UV(13,2)<16;16,1>		-ubPREV_UV(0,176)<16;16,1>		//Diff UV interleaved
1031
    add (16)	wDIFF_TEMPORAL(12)<1>			ubCURR_UV(14,2)<16;16,1>		-ubPREV_UV(0,192)<16;16,1>		//Diff UV interleaved
1032
    add (16)	wDIFF_TEMPORAL(13)<1>			ubCURR_UV(15,2)<16;16,1>		-ubPREV_UV(0,208)<16;16,1>		//Diff UV interleaved
1033
    add (16)	wDIFF_TEMPORAL(14)<1>			ubCURR_UV(16,2)<16;16,1>		-ubPREV_UV(0,224)<16;16,1>		//Diff UV interleaved
1034
    add (16)	wDIFF_TEMPORAL(15)<1>			ubCURR_UV(17,2)<16;16,1>		-ubPREV_UV(0,240)<16;16,1>		//Diff UV interleaved
1035
 
1036
	(-f0.0) shr 	(16) uwCURBE_TEMP(1)<1>		ubHIST_UV(0,16)<16;16,1>	1:w
1037
	(f1.0)  add 	(16) uwCURBE_TEMP(3)<1>		ubHIST_UV(0,16)<16;16,1>	r61.24<0;2,1>:ub
1038
	(f0.0)  mov 	(16) uwCURBE_TEMP(3)<1>		r61.20<0;2,1>:ub
1039
	(-f0.0.anyv) mov(16) uwCURBE_TEMP(3)<1>		ubHIST_UV(0,16)<16;16,1>
1040
 
1041
	//16x16 to 16x4 - First 16 lines
1042
	add (16)	acc0.0<1>:uw					(abs)wDIFF_TEMPORAL(0)<16;16,1>	(abs)wDIFF_TEMPORAL(1)<16;16,1>
1043
	add (16)	acc0.0<1>:uw					acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(2)<16;16,1>
1044
	add (16)	uwDIFF_TEMPORAL_SUM4x4(0)<1>	acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(3)<16;16,1>
1045
	//16x16 to 16x4 - First 16 lines
1046
	add (16)	acc0.0<1>:uw					(abs)wDIFF_TEMPORAL(4)<16;16,1>	(abs)wDIFF_TEMPORAL(5)<16;16,1>
1047
	add (16)	acc0.0<1>:uw					acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(6)<16;16,1>
1048
	add (16)	uwDIFF_TEMPORAL_SUM4x4(1)<1>	acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(7)<16;16,1>
1049
	//16x16 to 16x4 - First 16 lines
1050
	add (16)	acc0.0<1>:uw					(abs)wDIFF_TEMPORAL(8)<16;16,1>	(abs)wDIFF_TEMPORAL(9)<16;16,1>
1051
	add (16)	acc0.0<1>:uw					acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(10)<16;16,1>
1052
	add (16)	uwDIFF_TEMPORAL_SUM4x4(2)<1>	acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(11)<16;16,1>
1053
	//16x16 to 16x4 - First 16 lines
1054
	add (16)	acc0.0<1>:uw					(abs)wDIFF_TEMPORAL(12)<16;16,1>	(abs)wDIFF_TEMPORAL(13)<16;16,1>
1055
	add (16)	acc0.0<1>:uw					acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(14)<16;16,1>
1056
	add (16)	uwDIFF_TEMPORAL_SUM4x4(3)<1>	acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(15)<16;16,1>
1057
 
1058
//Compute diff betn curr and prev. - Second 16 lines
1059
//13 lines.
1060
    add (16)	wDIFF_TEMPORAL(16)<1>		ubCURR_UV(22,2)<16;16,1>		-ubPREV_UV(8,0)<16;16,1>		//Diff UV interleaved
1061
    add (16)	wDIFF_TEMPORAL(17)<1>		ubCURR_UV(23,2)<16;16,1>		-ubPREV_UV(8,16)<16;16,1>		//Diff UV interleaved
1062
    add (16)	wDIFF_TEMPORAL(18)<1>		ubCURR_UV(24,2)<16;16,1>		-ubPREV_UV(8,32)<16;16,1>		//Diff UV interleaved
1063
    add (16)	wDIFF_TEMPORAL(19)<1>		ubCURR_UV(25,2)<16;16,1>		-ubPREV_UV(8,48)<16;16,1>		//Diff UV interleaved
1064
    add (16)	wDIFF_TEMPORAL(20)<1>		ubCURR_UV(26,2)<16;16,1>		-ubPREV_UV(8,64)<16;16,1>		//Diff UV interleaved
1065
    add (16)	wDIFF_TEMPORAL(21)<1>		ubCURR_UV(27,2)<16;16,1>		-ubPREV_UV(8,80)<16;16,1>		//Diff UV interleaved
1066
    add (16)	wDIFF_TEMPORAL(22)<1>		ubCURR_UV(28,2)<16;16,1>		-ubPREV_UV(8,96)<16;16,1>		//Diff UV interleaved
1067
    add (16)	wDIFF_TEMPORAL(23)<1>		ubCURR_UV(29,2)<16;16,1>		-ubPREV_UV(8,112)<16;16,1>		//Diff UV interleaved
1068
    add (16)	wDIFF_TEMPORAL(24)<1>		ubCURR_UV(30,2)<16;16,1>		-ubPREV_UV(8,128)<16;16,1>		//Diff UV interleaved
1069
    add (16)	wDIFF_TEMPORAL(25)<1>		ubCURR_UV(31,2)<16;16,1>		-ubPREV_UV(8,144)<16;16,1>		//Diff UV interleaved
1070
    add (16)	wDIFF_TEMPORAL(26)<1>		ubCURR_UV(32,2)<16;16,1>		-ubPREV_UV(8,160)<16;16,1>		//Diff UV interleaved
1071
    add (16)	wDIFF_TEMPORAL(27)<1>		ubCURR_UV(33,2)<16;16,1>		-ubPREV_UV(8,176)<16;16,1>		//Diff UV interleaved
1072
    add (16)	wDIFF_TEMPORAL(28)<1>		ubCURR_UV(34,2)<16;16,1>		-ubPREV_UV(8,192)<16;16,1>		//Diff UV interleaved
1073
 
1074
//3 more lines
1075
    add (16)	wCURBE_TEMP(4)<1>		ubCURR_UV(35,2)<16;16,1>		-ubPREV_UV(8,208)<16;16,1>		//Diff UV interleaved
1076
    add (16)	wCURBE_TEMP(5)<1>		ubCURR_UV(36,2)<16;16,1>		-ubPREV_UV(8,224)<16;16,1>		//Diff UV interleaved
1077
    add (16)	wCURBE_TEMP(6)<1>		ubCURR_UV(37,2)<16;16,1>		-ubPREV_UV(8,240)<16;16,1>		//Diff UV interleaved
1078
 
1079
	//16x4 to 8x4 - First 16 lines
1080
	add (16)	uwDIFF_TEMPORAL_SUM4x4(0)<1>		uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1>		uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1>
1081
	add (16)	uwDIFF_TEMPORAL_SUM4x4(1)<1>		uwDIFF_TEMPORAL_SUM4x4(2,0)<4;2,1>		uwDIFF_TEMPORAL_SUM4x4(2,2)<4;2,1>
1082
 
1083
	//8x4 to 4x4 - First 16 lines
1084
	add (16)	uwDIFF_TEMPORAL_SUM4x4_FINAL(0)<1>	uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1>		uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1>		{ AccWrEn }
1085
 
1086
	//16x16 to 16x4 - Second 16 lines
1087
	add (16)	acc0.0<1>:uw					(abs)wDIFF_TEMPORAL(16)<16;16,1>	(abs)wDIFF_TEMPORAL(17)<16;16,1>
1088
	add (16)	acc0.0<1>:uw					acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(18)<16;16,1>
1089
	add (16)	uwDIFF_TEMPORAL_SUM4x4(0)<1>	acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(19)<16;16,1>
1090
	//16x16 to 16x4 - Second 16 lines
1091
	add (16)	acc0.0<1>:uw					(abs)wDIFF_TEMPORAL(20)<16;16,1>	(abs)wDIFF_TEMPORAL(21)<16;16,1>
1092
	add (16)	acc0.0<1>:uw					acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(22)<16;16,1>
1093
	add (16)	uwDIFF_TEMPORAL_SUM4x4(1)<1>	acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(23)<16;16,1>
1094
	//16x16 to 16x4 - Second 16 lines
1095
	add (16)	acc0.0<1>:uw					(abs)wDIFF_TEMPORAL(24)<16;16,1>	(abs)wDIFF_TEMPORAL(25)<16;16,1>
1096
	add (16)	acc0.0<1>:uw					acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(26)<16;16,1>
1097
	add (16)	uwDIFF_TEMPORAL_SUM4x4(2)<1>	acc0.0<16;16,1>:uw					(abs)wDIFF_TEMPORAL(27)<16;16,1>
1098
 
1099
	//16x16 to 16x4 - Second 16 lines
1100
	add (16)	acc0.0<1>:uw					(abs)wDIFF_TEMPORAL(28)<16;16,1>	(abs)wCURBE_TEMP(4)<16;16,1>
1101
	add (16)	acc0.0<1>:uw					acc0.0<16;16,1>:uw					(abs)wCURBE_TEMP(5)<16;16,1>
1102
	add (16)	uwDIFF_TEMPORAL_SUM4x4(3)<1>	acc0.0<16;16,1>:uw					(abs)wCURBE_TEMP(6)<16;16,1>
1103
 
1104
	//Find if block is motion block - First 16 lines
1105
	cmp.g.f0.0  (16) null<1>:w				uwDIFF_TEMPORAL_SUM4x4_FINAL(0)<16;16,1> 		r61.26<0;2,1>:ub
1106
 
1107
	//Move TEMPORAL_SUM4x4 for SIMD16 use later.
1108
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,0)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(0,0)<0;2,1>
1109
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,8)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(0,2)<0;2,1>
1110
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,0)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(0,4)<0;2,1>
1111
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,8)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(0,6)<0;2,1>
1112
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,0)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(0,8)<0;2,1>
1113
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,8)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(0,10)<0;2,1>
1114
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,0)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(0,12)<0;2,1>
1115
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,8)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(0,14)<0;2,1>
1116
 
1117
	//Pick Appropriate Weight History Based on motion. - First 16 lines
1118
	(-f0.0) mov (16) uwCURBE_TEMP(0)<1>		uwCURBE_TEMP(2)<16;16,1>
1119
 
1120
	//Actual DN - First 16 lines
1121
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(0)<16;16,1>			r61.28<0;2,1>:ub
1122
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(0)<16;16,1>			r61.30<0;2,1>:ub
1123
	mul (8)	acc0.0<1>:w								ubCURR_UV(2,2)<8;8,1>					-uwCURBE_TEMP(0,0)<0;2,1>
1124
	mul (8)	acc0.8<1>:w								ubCURR_UV(2,10)<8;8,1>					-uwCURBE_TEMP(0,2)<0;2,1>
1125
	mac (16)	acc0<1>:w							ubCURR_UV(2,2)<16;16,1>					256:w
1126
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,0)<8;8,1>					uwCURBE_TEMP(0,0)<0;2,1>
1127
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,8)<8;8,1>					uwCURBE_TEMP(0,2)<0;2,1>
1128
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1129
 	(f0.0) shr (16) wDIFF_TEMPORAL(0)<1> 			acc0<16;16,1>:w								8:w
1130
	(-f0.0) mov (16) wDIFF_TEMPORAL(0)<1> 			ubCURR_UV(2,2)<16;16,1>
1131
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> 	r61.26<0;2,1>:ub
1132
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(0)<1>	wDIFF_TEMPORAL(0)<16;16,1>					ubCURR_UV(2,2)<16;16,1>
1133
 
1134
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(1)<16;16,1>			r61.28<0;2,1>:ub
1135
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(1)<16;16,1>			r61.30<0;2,1>:ub
1136
	mul (8)	acc0.0<1>:w								ubCURR_UV(3,2)<8;8,1>					-uwCURBE_TEMP(0,0)<0;2,1>
1137
	mul (8)	acc0.8<1>:w								ubCURR_UV(3,10)<8;8,1>					-uwCURBE_TEMP(0,2)<0;2,1>
1138
	mac (16)	acc0<1>:w							ubCURR_UV(3,2)<16;16,1>					256:w
1139
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,16)<8;8,1>				uwCURBE_TEMP(0,0)<0;2,1>
1140
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,24)<8;8,1>				uwCURBE_TEMP(0,2)<0;2,1>
1141
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1142
 	(f0.0) shr  (16) wDIFF_TEMPORAL(1)<1>		acc0<16;16,1>:w								8:w
1143
	(-f0.0) mov (16) wDIFF_TEMPORAL(1)<1>		ubCURR_UV(3,2)<16;16,1>
1144
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> 	r61.26<0;2,1>:ub
1145
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(1)<1>	wDIFF_TEMPORAL(1)<16;16,1>				ubCURR_UV(3,2)<16;16,1>
1146
 
1147
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(2)<16;16,1>			r61.28<0;2,1>:ub
1148
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(2)<16;16,1>			r61.30<0;2,1>:ub
1149
	mul (8)	acc0.0<1>:w								ubCURR_UV(4,2)<8;8,1>					-uwCURBE_TEMP(0,0)<0;2,1>
1150
	mul (8)	acc0.8<1>:w								ubCURR_UV(4,10)<8;8,1>					-uwCURBE_TEMP(0,2)<0;2,1>
1151
	mac (16)	acc0<1>:w							ubCURR_UV(4,2)<16;16,1>					256:w
1152
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,32)<8;8,1>				uwCURBE_TEMP(0,0)<0;2,1>
1153
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,40)<8;8,1>				uwCURBE_TEMP(0,2)<0;2,1>
1154
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1155
 	(f0.0) shr  (16) wDIFF_TEMPORAL(2)<1> 		acc0<16;16,1>:w								8:w
1156
	(-f0.0) mov (16) wDIFF_TEMPORAL(2)<1>		ubCURR_UV(4,2)<16;16,1>
1157
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> 	r61.26<0;2,1>:ub
1158
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(2)<1>	wDIFF_TEMPORAL(2)<16;16,1>				ubCURR_UV(4,2)<16;16,1>
1159
 
1160
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(3)<16;16,1>			r61.28<0;2,1>:ub
1161
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(3)<16;16,1>			r61.30<0;2,1>:ub
1162
	mul (8)	acc0.0<1>:w								ubCURR_UV(5,2)<8;8,1>					-uwCURBE_TEMP(0,0)<0;2,1>
1163
	mul (8)	acc0.8<1>:w								ubCURR_UV(5,10)<8;8,1>					-uwCURBE_TEMP(0,2)<0;2,1>
1164
	mac (16)	acc0<1>:w							ubCURR_UV(5,2)<16;16,1>					256:w
1165
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,48)<8;8,1>				uwCURBE_TEMP(0,0)<0;2,1>
1166
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,56)<8;8,1>				uwCURBE_TEMP(0,2)<0;2,1>
1167
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1168
 	(f0.0) shr  (16) wDIFF_TEMPORAL(3)<1>		acc0<16;16,1>:w								8:w
1169
	(-f0.0) mov (16) wDIFF_TEMPORAL(3)<1>		ubCURR_UV(5,2)<16;16,1>
1170
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> 	r61.26<0;2,1>:ub
1171
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(3)<1>	wDIFF_TEMPORAL(3)<16;16,1>				ubCURR_UV(5,2)<16;16,1>
1172
 
1173
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(4)<16;16,1>			r61.28<0;2,1>:ub
1174
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(4)<16;16,1>			r61.30<0;2,1>:ub
1175
	mul (8)	acc0.0<1>:w								ubCURR_UV(6,2)<8;8,1>					-uwCURBE_TEMP(0,4)<0;2,1>
1176
	mul (8)	acc0.8<1>:w								ubCURR_UV(6,10)<8;8,1>					-uwCURBE_TEMP(0,6)<0;2,1>
1177
	mac (16)	acc0<1>:w							ubCURR_UV(6,2)<16;16,1>					256:w
1178
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,64)<8;8,1>					uwCURBE_TEMP(0,4)<0;2,1>
1179
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,72)<8;8,1>					uwCURBE_TEMP(0,6)<0;2,1>
1180
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1181
 	(f0.0) shr (16) wDIFF_TEMPORAL(4)<1> 			acc0<16;16,1>:w								8:w
1182
	(-f0.0) mov (16) wDIFF_TEMPORAL(4)<1> 			ubCURR_UV(6,2)<16;16,1>
1183
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> 	r61.26<0;2,1>:ub
1184
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(4)<1>	wDIFF_TEMPORAL(4)<16;16,1>					ubCURR_UV(6,2)<16;16,1>
1185
 
1186
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(5)<16;16,1>			r61.28<0;2,1>:ub
1187
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(5)<16;16,1>			r61.30<0;2,1>:ub
1188
	mul (8)	acc0.0<1>:w								ubCURR_UV(7,2)<8;8,1>					-uwCURBE_TEMP(0,4)<0;2,1>
1189
	mul (8)	acc0.8<1>:w								ubCURR_UV(7,10)<8;8,1>					-uwCURBE_TEMP(0,6)<0;2,1>
1190
	mac (16)	acc0<1>:w							ubCURR_UV(7,2)<16;16,1>					256:w
1191
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,80)<8;8,1>				uwCURBE_TEMP(0,4)<0;2,1>
1192
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,88)<8;8,1>				uwCURBE_TEMP(0,6)<0;2,1>
1193
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1194
 	(f0.0) shr  (16) wDIFF_TEMPORAL(5)<1>		acc0<16;16,1>:w								8:w
1195
	(-f0.0) mov (16) wDIFF_TEMPORAL(5)<1>		ubCURR_UV(7,2)<16;16,1>
1196
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> 	r61.26<0;2,1>:ub
1197
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(5)<1>	wDIFF_TEMPORAL(5)<16;16,1>				ubCURR_UV(7,2)<16;16,1>
1198
 
1199
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(6)<16;16,1>			r61.28<0;2,1>:ub
1200
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(6)<16;16,1>			r61.30<0;2,1>:ub
1201
	mul (8)	acc0.0<1>:w								ubCURR_UV(8,2)<8;8,1>					-uwCURBE_TEMP(0,4)<0;2,1>
1202
	mul (8)	acc0.8<1>:w								ubCURR_UV(8,10)<8;8,1>					-uwCURBE_TEMP(0,6)<0;2,1>
1203
	mac (16)	acc0<1>:w							ubCURR_UV(8,2)<16;16,1>					256:w
1204
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,96)<8;8,1>				uwCURBE_TEMP(0,4)<0;2,1>
1205
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,104)<8;8,1>				uwCURBE_TEMP(0,6)<0;2,1>
1206
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1207
 	(f0.0) shr  (16) wDIFF_TEMPORAL(6)<1> 		acc0<16;16,1>:w								8:w
1208
	(-f0.0) mov (16) wDIFF_TEMPORAL(6)<1>		ubCURR_UV(8,2)<16;16,1>
1209
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> 	r61.26<0;2,1>:ub
1210
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(6)<1>	wDIFF_TEMPORAL(6)<16;16,1>				ubCURR_UV(8,2)<16;16,1>
1211
 
1212
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(7)<16;16,1>			r61.28<0;2,1>:ub
1213
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(7)<16;16,1>			r61.30<0;2,1>:ub
1214
	mul (8)	acc0.0<1>:w								ubCURR_UV(9,2)<8;8,1>					-uwCURBE_TEMP(0,4)<0;2,1>
1215
	mul (8)	acc0.8<1>:w								ubCURR_UV(9,10)<8;8,1>					-uwCURBE_TEMP(0,6)<0;2,1>
1216
	mac (16)	acc0<1>:w							ubCURR_UV(9,2)<16;16,1>					256:w
1217
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,112)<8;8,1>				uwCURBE_TEMP(0,4)<0;2,1>
1218
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,120)<8;8,1>				uwCURBE_TEMP(0,6)<0;2,1>
1219
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1220
 	(f0.0) shr  (16) wDIFF_TEMPORAL(7)<1>		acc0<16;16,1>:w								8:w
1221
	(-f0.0) mov (16) wDIFF_TEMPORAL(7)<1>		ubCURR_UV(9,2)<16;16,1>
1222
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> 	r61.26<0;2,1>:ub
1223
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(7)<1>	wDIFF_TEMPORAL(7)<16;16,1>				ubCURR_UV(9,2)<16;16,1>
1224
 
1225
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(8)<16;16,1>			r61.28<0;2,1>:ub
1226
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(8)<16;16,1>			r61.30<0;2,1>:ub
1227
	mul (8)	acc0.0<1>:w								ubCURR_UV(10,2)<8;8,1>					-uwCURBE_TEMP(0,8)<0;2,1>
1228
	mul (8)	acc0.8<1>:w								ubCURR_UV(10,10)<8;8,1>					-uwCURBE_TEMP(0,10)<0;2,1>
1229
	mac (16)	acc0<1>:w							ubCURR_UV(10,2)<16;16,1>					256:w
1230
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,128)<8;8,1>					uwCURBE_TEMP(0,8)<0;2,1>
1231
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,136)<8;8,1>					uwCURBE_TEMP(0,10)<0;2,1>
1232
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1233
 	(f0.0) shr (16) wDIFF_TEMPORAL(8)<1> 			acc0<16;16,1>:w								8:w
1234
	(-f0.0) mov (16) wDIFF_TEMPORAL(8)<1> 			ubCURR_UV(10,2)<16;16,1>
1235
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> 	r61.26<0;2,1>:ub
1236
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(8)<1>	wDIFF_TEMPORAL(8)<16;16,1>					ubCURR_UV(10,2)<16;16,1>
1237
 
1238
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(9)<16;16,1>			r61.28<0;2,1>:ub
1239
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(9)<16;16,1>			r61.30<0;2,1>:ub
1240
	mul (8)	acc0.0<1>:w								ubCURR_UV(11,2)<8;8,1>					-uwCURBE_TEMP(0,8)<0;2,1>
1241
	mul (8)	acc0.8<1>:w								ubCURR_UV(11,10)<8;8,1>					-uwCURBE_TEMP(0,10)<0;2,1>
1242
	mac (16)	acc0<1>:w							ubCURR_UV(11,2)<16;16,1>					256:w
1243
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,144)<8;8,1>				uwCURBE_TEMP(0,8)<0;2,1>
1244
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,152)<8;8,1>				uwCURBE_TEMP(0,10)<0;2,1>
1245
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1246
 	(f0.0) shr  (16) wDIFF_TEMPORAL(9)<1>		acc0<16;16,1>:w								8:w
1247
	(-f0.0) mov (16) wDIFF_TEMPORAL(9)<1>		ubCURR_UV(11,2)<16;16,1>
1248
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> 	r61.26<0;2,1>:ub
1249
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(9)<1>	wDIFF_TEMPORAL(9)<16;16,1>				ubCURR_UV(11,2)<16;16,1>
1250
 
1251
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(10)<16;16,1>			r61.28<0;2,1>:ub
1252
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(10)<16;16,1>			r61.30<0;2,1>:ub
1253
	mul (8)	acc0.0<1>:w								ubCURR_UV(12,2)<8;8,1>					-uwCURBE_TEMP(0,8)<0;2,1>
1254
	mul (8)	acc0.8<1>:w								ubCURR_UV(12,10)<8;8,1>					-uwCURBE_TEMP(0,10)<0;2,1>
1255
	mac (16)	acc0<1>:w							ubCURR_UV(12,2)<16;16,1>					256:w
1256
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,160)<8;8,1>				uwCURBE_TEMP(0,8)<0;2,1>
1257
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,168)<8;8,1>				uwCURBE_TEMP(0,10)<0;2,1>
1258
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1259
 	(f0.0) shr  (16) wDIFF_TEMPORAL(10)<1> 		acc0<16;16,1>:w								8:w
1260
	(-f0.0) mov (16) wDIFF_TEMPORAL(10)<1>		ubCURR_UV(12,2)<16;16,1>
1261
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> 	r61.26<0;2,1>:ub
1262
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(10)<1>	wDIFF_TEMPORAL(10)<16;16,1>				ubCURR_UV(12,2)<16;16,1>
1263
 
1264
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(11)<16;16,1>			r61.28<0;2,1>:ub
1265
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(11)<16;16,1>			r61.30<0;2,1>:ub
1266
	mul (8)	acc0.0<1>:w								ubCURR_UV(13,2)<8;8,1>					-uwCURBE_TEMP(0,8)<0;2,1>
1267
	mul (8)	acc0.8<1>:w								ubCURR_UV(13,10)<8;8,1>					-uwCURBE_TEMP(0,10)<0;2,1>
1268
	mac (16)	acc0<1>:w							ubCURR_UV(13,2)<16;16,1>					256:w
1269
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,176)<8;8,1>				uwCURBE_TEMP(0,8)<0;2,1>
1270
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,184)<8;8,1>				uwCURBE_TEMP(0,10)<0;2,1>
1271
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1272
 	(f0.0) shr  (16) wDIFF_TEMPORAL(11)<1>		acc0<16;16,1>:w								8:w
1273
	(-f0.0) mov (16) wDIFF_TEMPORAL(11)<1>		ubCURR_UV(13,2)<16;16,1>
1274
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> 	r61.26<0;2,1>:ub
1275
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(11)<1>	wDIFF_TEMPORAL(11)<16;16,1>				ubCURR_UV(13,2)<16;16,1>
1276
 
1277
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(12)<16;16,1>			r61.28<0;2,1>:ub
1278
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(12)<16;16,1>			r61.30<0;2,1>:ub
1279
	mul (8)	acc0.0<1>:w								ubCURR_UV(14,2)<8;8,1>					-uwCURBE_TEMP(0,12)<0;2,1>
1280
	mul (8)	acc0.8<1>:w								ubCURR_UV(14,10)<8;8,1>					-uwCURBE_TEMP(0,14)<0;2,1>
1281
	mac (16)	acc0<1>:w							ubCURR_UV(14,2)<16;16,1>					256:w
1282
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,192)<8;8,1>					uwCURBE_TEMP(0,12)<0;2,1>
1283
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,200)<8;8,1>					uwCURBE_TEMP(0,14)<0;2,1>
1284
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1285
 	(f0.0) shr (16) wDIFF_TEMPORAL(12)<1> 			acc0<16;16,1>:w								8:w
1286
	(-f0.0) mov (16) wDIFF_TEMPORAL(12)<1> 			ubCURR_UV(14,2)<16;16,1>
1287
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> 	r61.26<0;2,1>:ub
1288
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(12)<1>	wDIFF_TEMPORAL(12)<16;16,1>					ubCURR_UV(14,2)<16;16,1>
1289
 
1290
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(13)<16;16,1>			r61.28<0;2,1>:ub
1291
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(13)<16;16,1>			r61.30<0;2,1>:ub
1292
	mul (8)	acc0.0<1>:w								ubCURR_UV(15,2)<8;8,1>					-uwCURBE_TEMP(0,12)<0;2,1>
1293
	mul (8)	acc0.8<1>:w								ubCURR_UV(15,10)<8;8,1>					-uwCURBE_TEMP(0,14)<0;2,1>
1294
	mac (16)	acc0<1>:w							ubCURR_UV(15,2)<16;16,1>					256:w
1295
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,208)<8;8,1>				uwCURBE_TEMP(0,12)<0;2,1>
1296
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,216)<8;8,1>				uwCURBE_TEMP(0,14)<0;2,1>
1297
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1298
 	(f0.0) shr  (16) wDIFF_TEMPORAL(13)<1>		acc0<16;16,1>:w								8:w
1299
	(-f0.0) mov (16) wDIFF_TEMPORAL(13)<1>		ubCURR_UV(15,2)<16;16,1>
1300
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> 	r61.26<0;2,1>:ub
1301
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(13)<1>	wDIFF_TEMPORAL(13)<16;16,1>				ubCURR_UV(15,2)<16;16,1>
1302
 
1303
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(14)<16;16,1>			r61.28<0;2,1>:ub
1304
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(14)<16;16,1>			r61.30<0;2,1>:ub
1305
	mul (8)	acc0.0<1>:w								ubCURR_UV(16,2)<8;8,1>					-uwCURBE_TEMP(0,12)<0;2,1>
1306
	mul (8)	acc0.8<1>:w								ubCURR_UV(16,10)<8;8,1>					-uwCURBE_TEMP(0,14)<0;2,1>
1307
	mac (16)	acc0<1>:w							ubCURR_UV(16,2)<16;16,1>					256:w
1308
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,224)<8;8,1>				uwCURBE_TEMP(0,12)<0;2,1>
1309
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,232)<8;8,1>				uwCURBE_TEMP(0,14)<0;2,1>
1310
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1311
 	(f0.0) shr  (16) wDIFF_TEMPORAL(14)<1> 		acc0<16;16,1>:w								8:w
1312
	(-f0.0) mov (16) wDIFF_TEMPORAL(14)<1>		ubCURR_UV(16,2)<16;16,1>
1313
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> 	r61.26<0;2,1>:ub
1314
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(14)<1>	wDIFF_TEMPORAL(14)<16;16,1>				ubCURR_UV(16,2)<16;16,1>
1315
 
1316
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(15)<16;16,1>			r61.28<0;2,1>:ub
1317
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(15)<16;16,1>			r61.30<0;2,1>:ub
1318
	mul (8)	acc0.0<1>:w								ubCURR_UV(17,2)<8;8,1>					-uwCURBE_TEMP(0,12)<0;2,1>
1319
	mul (8)	acc0.8<1>:w								ubCURR_UV(17,10)<8;8,1>					-uwCURBE_TEMP(0,14)<0;2,1>
1320
	mac (16)	acc0<1>:w							ubCURR_UV(17,2)<16;16,1>					256:w
1321
	mac (8)	acc0.0<1>:w								ubPREV_UV(0,240)<8;8,1>				uwCURBE_TEMP(0,12)<0;2,1>
1322
	mac (8)	acc0.8<1>:w								ubPREV_UV(0,248)<8;8,1>				uwCURBE_TEMP(0,14)<0;2,1>
1323
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1324
 	(f0.0) shr  (16) wDIFF_TEMPORAL(15)<1>		acc0<16;16,1>:w								8:w
1325
	(-f0.0) mov (16) wDIFF_TEMPORAL(15)<1>		ubCURR_UV(17,2)<16;16,1>
1326
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> 	r61.26<0;2,1>:ub
1327
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(15)<1>	wDIFF_TEMPORAL(15)<16;16,1>				ubCURR_UV(17,2)<16;16,1>
1328
 
1329
 
1330
	//16x4 to 8x4 - Second 16 lines
1331
	add (16)	uwDIFF_TEMPORAL_SUM4x4(0)<1>	uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1>		uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1>
1332
	add (16)	uwDIFF_TEMPORAL_SUM4x4(1)<1>	uwDIFF_TEMPORAL_SUM4x4(2,0)<4;2,1>		uwDIFF_TEMPORAL_SUM4x4(2,2)<4;2,1>
1333
 
1334
	//8x4 to 4x4 - Second 16 lines
1335
	add (16)	uwDIFF_TEMPORAL_SUM4x4_FINAL(1)<1>	uwDIFF_TEMPORAL_SUM4x4(0,0)<4;2,1>		uwDIFF_TEMPORAL_SUM4x4(0,2)<4;2,1>     { AccWrEn }
1336
 
1337
	//Find if block is motion block - Second 16 lines
1338
	cmp.g.f1.0  (16) null<1>:w				uwDIFF_TEMPORAL_SUM4x4_FINAL(1)<16;16,1> 		r61.26<0;2,1>:ub
1339
 
1340
	//Move TEMPORAL_SUM4x4 for SIMD16 use later.
1341
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,0)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(1,0)<0;2,1>
1342
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0,8)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(1,2)<0;2,1>
1343
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,0)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(1,4)<0;2,1>
1344
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0,8)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(1,6)<0;2,1>
1345
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,0)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(1,8)<0;2,1>
1346
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0,8)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(1,10)<0;2,1>
1347
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,0)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(1,12)<0;2,1>
1348
	mov (8)     uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0,8)<1>                 uwDIFF_TEMPORAL_SUM4x4_FINAL(1,14)<0;2,1>
1349
 
1350
	//Pick Appropriate Weight History Based on motion. - Second 16 lines
1351
	(-f1.0) mov (16) uwCURBE_TEMP(1)<1>		uwCURBE_TEMP(3)<16;16,1>
1352
 
1353
	//Actual DN - Second 16 lines
1354
	cmp.l.f0.0 (16)	null<1>:w							(abs)wDIFF_TEMPORAL(16)<16;16,1>			r61.28<0;2,1>:ub
1355
	cmp.l.f1.0 (16) null<1>:w							(abs)wDIFF_TEMPORAL(16)<16;16,1>			r61.30<0;2,1>:ub
1356
	mul (8)	acc0.0<1>:w									ubCURR_UV(22,2)<8;8,1>					-uwCURBE_TEMP(1,0)<0;2,1>
1357
	mul (8)	acc0.8<1>:w									ubCURR_UV(22,10)<8;8,1>					-uwCURBE_TEMP(1,2)<0;2,1>
1358
	mac (16)	acc0<1>:w								ubCURR_UV(22,2)<16;16,1>					256:w
1359
	mac (8)	acc0.0<1>:w									ubPREV_UV(8,0)<8;8,1>					uwCURBE_TEMP(1,0)<0;2,1>
1360
	mac (8)	acc0.8<1>:w									ubPREV_UV(8,8)<8;8,1>					uwCURBE_TEMP(1,2)<0;2,1>
1361
	add (16)	acc0<1>:w								acc0<16;16,1>:w								128:w
1362
 	(f0.0) shr  (16) wDIFF_TEMPORAL(16)<1> 			acc0<16;16,1>:w								8:w
1363
	(-f0.0) mov (16) wDIFF_TEMPORAL(16)<1>			ubCURR_UV(22,2)<16;16,1>
1364
	cmp.le.f0.0 (16) null<1>:w							uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> 	r61.26<0;2,1>:ub
1365
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(16)<1>	wDIFF_TEMPORAL(16)<16;16,1>			ubCURR_UV(22,2)<16;16,1>
1366
 
1367
	cmp.l.f0.0 (16)	null<1>:w							(abs)wDIFF_TEMPORAL(17)<16;16,1>			r61.28<0;2,1>:ub
1368
	cmp.l.f1.0 (16) null<1>:w							(abs)wDIFF_TEMPORAL(17)<16;16,1>			r61.30<0;2,1>:ub
1369
	mul (8)	acc0.0<1>:w									ubCURR_UV(23,2)<8;8,1>					-uwCURBE_TEMP(1,0)<0;2,1>
1370
	mul (8)	acc0.8<1>:w									ubCURR_UV(23,10)<8;8,1>					-uwCURBE_TEMP(1,2)<0;2,1>
1371
	mac (16)	acc0<1>:w								ubCURR_UV(23,2)<16;16,1>					256:w
1372
	mac (8)	acc0.0<1>:w									ubPREV_UV(8,16)<8;8,1>				uwCURBE_TEMP(1,0)<0;2,1>
1373
	mac (8)	acc0.8<1>:w									ubPREV_UV(8,24)<8;8,1>				uwCURBE_TEMP(1,2)<0;2,1>
1374
	add (16)	acc0<1>:w								acc0<16;16,1>:w								128:w
1375
 	(f0.0) shr  (16) wDIFF_TEMPORAL(17)<1>			acc0<16;16,1>:w								8:w
1376
	(-f0.0) mov (16) wDIFF_TEMPORAL(17)<1>			ubCURR_UV(23,2)<16;16,1>
1377
	cmp.le.f0.0 (16) null<1>:w							uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> 	r61.26<0;2,1>:ub
1378
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(17)<1>	wDIFF_TEMPORAL(17)<16;16,1>			ubCURR_UV(23,2)<16;16,1>
1379
 
1380
	cmp.l.f0.0 (16)	null<1>:w							(abs)wDIFF_TEMPORAL(18)<16;16,1>			r61.28<0;2,1>:ub
1381
	cmp.l.f1.0 (16) null<1>:w							(abs)wDIFF_TEMPORAL(18)<16;16,1>			r61.30<0;2,1>:ub
1382
	mul (8)	acc0.0<1>:w									ubCURR_UV(24,2)<8;8,1>					-uwCURBE_TEMP(1,0)<0;2,1>
1383
	mul (8)	acc0.8<1>:w									ubCURR_UV(24,10)<8;8,1>					-uwCURBE_TEMP(1,2)<0;2,1>
1384
	mac (16)	acc0<1>:w								ubCURR_UV(24,2)<16;16,1>					256:w
1385
	mac (8)	acc0.0<1>:w									ubPREV_UV(8,32)<8;8,1>				uwCURBE_TEMP(1,0)<0;2,1>
1386
	mac (8)	acc0.8<1>:w									ubPREV_UV(8,40)<8;8,1>				uwCURBE_TEMP(1,2)<0;2,1>
1387
	add (16)	acc0<1>:w								acc0<16;16,1>:w								128:w
1388
 	(f0.0) shr  (16) wDIFF_TEMPORAL(18)<1> 			acc0<16;16,1>:w								8:w
1389
	(-f0.0) mov (16) wDIFF_TEMPORAL(18)<1>			ubCURR_UV(24,2)<16;16,1>
1390
	cmp.le.f0.0 (16) null<1>:w							uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> 	r61.26<0;2,1>:ub
1391
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(18)<1>	wDIFF_TEMPORAL(18)<16;16,1>			ubCURR_UV(24,2)<16;16,1>
1392
 
1393
	cmp.l.f0.0 (16)	null<1>:w							(abs)wDIFF_TEMPORAL(19)<16;16,1>			r61.28<0;2,1>:ub
1394
	cmp.l.f1.0 (16) null<1>:w							(abs)wDIFF_TEMPORAL(19)<16;16,1>			r61.30<0;2,1>:ub
1395
	mul (8)	acc0.0<1>:w									ubCURR_UV(25,2)<8;8,1>					-uwCURBE_TEMP(1,0)<0;2,1>
1396
	mul (8)	acc0.8<1>:w									ubCURR_UV(25,10)<8;8,1>					-uwCURBE_TEMP(1,2)<0;2,1>
1397
	mac (16)	acc0<1>:w								ubCURR_UV(25,2)<16;16,1>					256:w
1398
	mac (8)	acc0.0<1>:w									ubPREV_UV(8,48)<8;8,1>				uwCURBE_TEMP(1,0)<0;2,1>
1399
	mac (8)	acc0.8<1>:w									ubPREV_UV(8,56)<8;8,1>				uwCURBE_TEMP(1,2)<0;2,1>
1400
	add (16)	acc0<1>:w								acc0<16;16,1>:w								128:w
1401
 	(f0.0) shr  (16) wDIFF_TEMPORAL(19)<1>			acc0<16;16,1>:w								8:w
1402
	(-f0.0) mov (16) wDIFF_TEMPORAL(19)<1>			ubCURR_UV(25,2)<16;16,1>
1403
	cmp.le.f0.0 (16) null<1>:w							uwDIFF_TEMPORAL_SUM4x4_TEMP_0(0)<16;16,1> 	r61.26<0;2,1>:ub
1404
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(19)<1>	wDIFF_TEMPORAL(19)<16;16,1>			ubCURR_UV(25,2)<16;16,1>
1405
	cmp.l.f0.0 (16)	null<1>:w							(abs)wDIFF_TEMPORAL(20)<16;16,1>			r61.28<0;2,1>:ub
1406
	cmp.l.f1.0 (16) null<1>:w							(abs)wDIFF_TEMPORAL(20)<16;16,1>			r61.30<0;2,1>:ub
1407
	mul (8)	acc0.0<1>:w									ubCURR_UV(26,2)<8;8,1>					-uwCURBE_TEMP(1,4)<0;2,1>
1408
	mul (8)	acc0.8<1>:w									ubCURR_UV(26,10)<8;8,1>					-uwCURBE_TEMP(1,6)<0;2,1>
1409
	mac (16)	acc0<1>:w								ubCURR_UV(26,2)<16;16,1>					256:w
1410
	mac (8)	acc0.0<1>:w									ubPREV_UV(8,64)<8;8,1>					uwCURBE_TEMP(1,4)<0;2,1>
1411
	mac (8)	acc0.8<1>:w									ubPREV_UV(8,72)<8;8,1>					uwCURBE_TEMP(1,6)<0;2,1>
1412
	add (16)	acc0<1>:w								acc0<16;16,1>:w								128:w
1413
 	(f0.0) shr  (16) wDIFF_TEMPORAL(20)<1> 			acc0<16;16,1>:w								8:w
1414
	(-f0.0) mov (16) wDIFF_TEMPORAL(20)<1>			ubCURR_UV(26,2)<16;16,1>
1415
	cmp.le.f0.0 (16) null<1>:w							uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> 	r61.26<0;2,1>:ub
1416
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(20)<1>	wDIFF_TEMPORAL(20)<16;16,1>			ubCURR_UV(26,2)<16;16,1>
1417
 
1418
	cmp.l.f0.0 (16)	null<1>:w							(abs)wDIFF_TEMPORAL(21)<16;16,1>			r61.28<0;2,1>:ub
1419
	cmp.l.f1.0 (16) null<1>:w							(abs)wDIFF_TEMPORAL(21)<16;16,1>			r61.30<0;2,1>:ub
1420
	mul (8)	acc0.0<1>:w									ubCURR_UV(27,2)<8;8,1>					-uwCURBE_TEMP(1,4)<0;2,1>
1421
	mul (8)	acc0.8<1>:w									ubCURR_UV(27,10)<8;8,1>					-uwCURBE_TEMP(1,6)<0;2,1>
1422
	mac (16)	acc0<1>:w								ubCURR_UV(27,2)<16;16,1>					256:w
1423
	mac (8)	acc0.0<1>:w									ubPREV_UV(8,80)<8;8,1>				uwCURBE_TEMP(1,4)<0;2,1>
1424
	mac (8)	acc0.8<1>:w									ubPREV_UV(8,88)<8;8,1>				uwCURBE_TEMP(1,6)<0;2,1>
1425
	add (16)	acc0<1>:w								acc0<16;16,1>:w								128:w
1426
 	(f0.0) shr  (16) wDIFF_TEMPORAL(21)<1>			acc0<16;16,1>:w								8:w
1427
	(-f0.0) mov (16) wDIFF_TEMPORAL(21)<1>			ubCURR_UV(27,2)<16;16,1>
1428
	cmp.le.f0.0 (16) null<1>:w							uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> 	r61.26<0;2,1>:ub
1429
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(21)<1>	wDIFF_TEMPORAL(21)<16;16,1>			ubCURR_UV(27,2)<16;16,1>
1430
 
1431
	cmp.l.f0.0 (16)	null<1>:w							(abs)wDIFF_TEMPORAL(22)<16;16,1>			r61.28<0;2,1>:ub
1432
	cmp.l.f1.0 (16) null<1>:w							(abs)wDIFF_TEMPORAL(22)<16;16,1>			r61.30<0;2,1>:ub
1433
	mul (8)	acc0.0<1>:w									ubCURR_UV(28,2)<8;8,1>					-uwCURBE_TEMP(1,4)<0;2,1>
1434
	mul (8)	acc0.8<1>:w									ubCURR_UV(28,10)<8;8,1>					-uwCURBE_TEMP(1,6)<0;2,1>
1435
	mac (16)	acc0<1>:w								ubCURR_UV(28,2)<16;16,1>					256:w
1436
	mac (8)	acc0.0<1>:w									ubPREV_UV(8,96)<8;8,1>				uwCURBE_TEMP(1,4)<0;2,1>
1437
	mac (8)	acc0.8<1>:w									ubPREV_UV(8,104)<8;8,1>				uwCURBE_TEMP(1,6)<0;2,1>
1438
	add (16)	acc0<1>:w								acc0<16;16,1>:w								128:w
1439
 	(f0.0) shr  (16) wDIFF_TEMPORAL(22)<1> 			acc0<16;16,1>:w								8:w
1440
	(-f0.0) mov (16) wDIFF_TEMPORAL(22)<1>			ubCURR_UV(28,2)<16;16,1>
1441
	cmp.le.f0.0 (16) null<1>:w							uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> 	r61.26<0;2,1>:ub
1442
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(22)<1>	wDIFF_TEMPORAL(22)<16;16,1>			ubCURR_UV(28,2)<16;16,1>
1443
 
1444
	cmp.l.f0.0 (16)	null<1>:w							(abs)wDIFF_TEMPORAL(23)<16;16,1>			r61.28<0;2,1>:ub
1445
	cmp.l.f1.0 (16) null<1>:w							(abs)wDIFF_TEMPORAL(23)<16;16,1>			r61.30<0;2,1>:ub
1446
	mul (8)	acc0.0<1>:w									ubCURR_UV(29,2)<8;8,1>					-uwCURBE_TEMP(1,4)<0;2,1>
1447
	mul (8)	acc0.8<1>:w									ubCURR_UV(29,10)<8;8,1>					-uwCURBE_TEMP(1,6)<0;2,1>
1448
	mac (16)	acc0<1>:w								ubCURR_UV(29,2)<16;16,1>					256:w
1449
	mac (8)	acc0.0<1>:w									ubPREV_UV(8,112)<8;8,1>				uwCURBE_TEMP(1,4)<0;2,1>
1450
	mac (8)	acc0.8<1>:w									ubPREV_UV(8,120)<8;8,1>				uwCURBE_TEMP(1,6)<0;2,1>
1451
	add (16)	acc0<1>:w								acc0<16;16,1>:w								128:w
1452
 	(f0.0) shr  (16) wDIFF_TEMPORAL(23)<1>			acc0<16;16,1>:w								8:w
1453
	(-f0.0) mov (16) wDIFF_TEMPORAL(23)<1>			ubCURR_UV(29,2)<16;16,1>
1454
	cmp.le.f0.0 (16) null<1>:w							uwDIFF_TEMPORAL_SUM4x4_TEMP_1(0)<16;16,1> 	r61.26<0;2,1>:ub
1455
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(23)<1>	wDIFF_TEMPORAL(23)<16;16,1>			ubCURR_UV(29,2)<16;16,1>
1456
	cmp.l.f0.0 (16)	null<1>:w							(abs)wDIFF_TEMPORAL(24)<16;16,1>			r61.28<0;2,1>:ub
1457
	cmp.l.f1.0 (16) null<1>:w							(abs)wDIFF_TEMPORAL(24)<16;16,1>			r61.30<0;2,1>:ub
1458
	mul (8)	acc0.0<1>:w									ubCURR_UV(30,2)<8;8,1>					-uwCURBE_TEMP(1,8)<0;2,1>
1459
	mul (8)	acc0.8<1>:w									ubCURR_UV(30,10)<8;8,1>					-uwCURBE_TEMP(1,10)<0;2,1>
1460
	mac (16)	acc0<1>:w								ubCURR_UV(30,2)<16;16,1>					256:w
1461
	mac (8)	acc0.0<1>:w									ubPREV_UV(8,128)<8;8,1>					uwCURBE_TEMP(1,8)<0;2,1>
1462
	mac (8)	acc0.8<1>:w									ubPREV_UV(8,136)<8;8,1>					uwCURBE_TEMP(1,10)<0;2,1>
1463
	add (16)	acc0<1>:w								acc0<16;16,1>:w								128:w
1464
 	(f0.0) shr  (16) wDIFF_TEMPORAL(24)<1> 			acc0<16;16,1>:w								8:w
1465
	(-f0.0) mov (16) wDIFF_TEMPORAL(24)<1>			ubCURR_UV(30,2)<16;16,1>
1466
	cmp.le.f0.0 (16) null<1>:w							uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> 	r61.26<0;2,1>:ub
1467
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(24)<1>	wDIFF_TEMPORAL(24)<16;16,1>			ubCURR_UV(30,2)<16;16,1>
1468
 
1469
	cmp.l.f0.0 (16)	null<1>:w							(abs)wDIFF_TEMPORAL(25)<16;16,1>			r61.28<0;2,1>:ub
1470
	cmp.l.f1.0 (16) null<1>:w							(abs)wDIFF_TEMPORAL(25)<16;16,1>			r61.30<0;2,1>:ub
1471
	mul (8)	acc0.0<1>:w									ubCURR_UV(31,2)<8;8,1>					-uwCURBE_TEMP(1,8)<0;2,1>
1472
	mul (8)	acc0.8<1>:w									ubCURR_UV(31,10)<8;8,1>					-uwCURBE_TEMP(1,10)<0;2,1>
1473
	mac (16)	acc0<1>:w								ubCURR_UV(31,2)<16;16,1>					256:w
1474
	mac (8)	acc0.0<1>:w									ubPREV_UV(8,144)<8;8,1>				uwCURBE_TEMP(1,8)<0;2,1>
1475
	mac (8)	acc0.8<1>:w									ubPREV_UV(8,152)<8;8,1>				uwCURBE_TEMP(1,10)<0;2,1>
1476
	add (16)	acc0<1>:w								acc0<16;16,1>:w								128:w
1477
 	(f0.0) shr  (16) wDIFF_TEMPORAL(25)<1>			acc0<16;16,1>:w								8:w
1478
	(-f0.0) mov (16) wDIFF_TEMPORAL(25)<1>			ubCURR_UV(31,2)<16;16,1>
1479
	cmp.le.f0.0 (16) null<1>:w							uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> 	r61.26<0;2,1>:ub
1480
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(25)<1>	wDIFF_TEMPORAL(25)<16;16,1>			ubCURR_UV(31,2)<16;16,1>
1481
 
1482
	cmp.l.f0.0 (16)	null<1>:w							(abs)wDIFF_TEMPORAL(26)<16;16,1>			r61.28<0;2,1>:ub
1483
	cmp.l.f1.0 (16) null<1>:w							(abs)wDIFF_TEMPORAL(26)<16;16,1>			r61.30<0;2,1>:ub
1484
	mul (8)	acc0.0<1>:w									ubCURR_UV(32,2)<8;8,1>					-uwCURBE_TEMP(1,8)<0;2,1>
1485
	mul (8)	acc0.8<1>:w									ubCURR_UV(32,10)<8;8,1>					-uwCURBE_TEMP(1,10)<0;2,1>
1486
	mac (16)	acc0<1>:w								ubCURR_UV(32,2)<16;16,1>					256:w
1487
	mac (8)	acc0.0<1>:w									ubPREV_UV(8,160)<8;8,1>				uwCURBE_TEMP(1,8)<0;2,1>
1488
	mac (8)	acc0.8<1>:w									ubPREV_UV(8,168)<8;8,1>				uwCURBE_TEMP(1,10)<0;2,1>
1489
	add (16)	acc0<1>:w								acc0<16;16,1>:w								128:w
1490
 	(f0.0) shr  (16) wDIFF_TEMPORAL(26)<1> 			acc0<16;16,1>:w								8:w
1491
	(-f0.0) mov (16) wDIFF_TEMPORAL(26)<1>			ubCURR_UV(32,2)<16;16,1>
1492
	cmp.le.f0.0 (16) null<1>:w							uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> 	r61.26<0;2,1>:ub
1493
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(26)<1>	wDIFF_TEMPORAL(26)<16;16,1>			ubCURR_UV(32,2)<16;16,1>
1494
 
1495
	cmp.l.f0.0 (16)	null<1>:w							(abs)wDIFF_TEMPORAL(27)<16;16,1>			r61.28<0;2,1>:ub
1496
	cmp.l.f1.0 (16) null<1>:w							(abs)wDIFF_TEMPORAL(27)<16;16,1>			r61.30<0;2,1>:ub
1497
	mul (8)	acc0.0<1>:w									ubCURR_UV(33,2)<8;8,1>					-uwCURBE_TEMP(1,8)<0;2,1>
1498
	mul (8)	acc0.8<1>:w									ubCURR_UV(33,10)<8;8,1>					-uwCURBE_TEMP(1,10)<0;2,1>
1499
	mac (16)	acc0<1>:w								ubCURR_UV(33,2)<16;16,1>					256:w
1500
	mac (8)	acc0.0<1>:w									ubPREV_UV(8,176)<8;8,1>				uwCURBE_TEMP(1,8)<0;2,1>
1501
	mac (8)	acc0.8<1>:w									ubPREV_UV(8,184)<8;8,1>				uwCURBE_TEMP(1,10)<0;2,1>
1502
	add (16)	acc0<1>:w								acc0<16;16,1>:w								128:w
1503
 	(f0.0) shr  (16) wDIFF_TEMPORAL(27)<1>			acc0<16;16,1>:w								8:w
1504
	(-f0.0) mov (16) wDIFF_TEMPORAL(27)<1>			ubCURR_UV(33,2)<16;16,1>
1505
	cmp.le.f0.0 (16) null<1>:w							uwDIFF_TEMPORAL_SUM4x4_TEMP_2(0)<16;16,1> 	r61.26<0;2,1>:ub
1506
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(27)<1>	wDIFF_TEMPORAL(27)<16;16,1>			ubCURR_UV(33,2)<16;16,1>
1507
 
1508
	cmp.l.f0.0 (16)	null<1>:w						(abs)wDIFF_TEMPORAL(28)<16;16,1>			r61.28<0;2,1>:ub
1509
	cmp.l.f1.0 (16) null<1>:w						(abs)wDIFF_TEMPORAL(28)<16;16,1>			r61.30<0;2,1>:ub
1510
	mul (8)	acc0.0<1>:w								ubCURR_UV(34,2)<8;8,1>					-uwCURBE_TEMP(1,12)<0;2,1>
1511
	mul (8)	acc0.8<1>:w								ubCURR_UV(34,10)<8;8,1>					-uwCURBE_TEMP(1,14)<0;2,1>
1512
	mac (16)	acc0<1>:w							ubCURR_UV(34,2)<16;16,1>					256:w
1513
	mac (8)	acc0.0<1>:w								ubPREV_UV(8,192)<8;8,1>					uwCURBE_TEMP(1,12)<0;2,1>
1514
	mac (8)	acc0.8<1>:w								ubPREV_UV(8,200)<8;8,1>					uwCURBE_TEMP(1,14)<0;2,1>
1515
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1516
 	(f0.0) shr  (16) wDIFF_TEMPORAL(28)<1> 			acc0<16;16,1>:w								8:w
1517
	(-f0.0) mov (16) wDIFF_TEMPORAL(28)<1>			ubCURR_UV(34,2)<16;16,1>
1518
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> 	r61.26<0;2,1>:ub
1519
	(-f0.0.allv) avg (16)	wDIFF_TEMPORAL(28)<1>	wDIFF_TEMPORAL(28)<16;16,1>				ubCURR_UV(34,2)<16;16,1>
1520
 
1521
	cmp.l.f0.0 (16)	null<1>:w						(abs)wCURBE_TEMP(4)<16;16,1>				r61.28<0;2,1>:ub
1522
	cmp.l.f1.0 (16) null<1>:w						(abs)wCURBE_TEMP(4)<16;16,1>				r61.30<0;2,1>:ub
1523
	mul (8)	acc0.0<1>:w								ubCURR_UV(35,2)<8;8,1>					-uwCURBE_TEMP(1,12)<0;2,1>
1524
	mul (8)	acc0.8<1>:w								ubCURR_UV(35,10)<8;8,1>					-uwCURBE_TEMP(1,14)<0;2,1>
1525
	mac (16)	acc0<1>:w							ubCURR_UV(35,2)<16;16,1>					256:w
1526
	mac (8)	acc0.0<1>:w								ubPREV_UV(8,208)<8;8,1>				uwCURBE_TEMP(1,12)<0;2,1>
1527
	mac (8)	acc0.8<1>:w								ubPREV_UV(8,216)<8;8,1>				uwCURBE_TEMP(1,14)<0;2,1>
1528
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1529
 	(f0.0) shr  (16) wCURBE_TEMP(4)<1>				acc0<16;16,1>:w								8:w
1530
	(-f0.0) mov (16) wCURBE_TEMP(4)<1>				ubCURR_UV(35,2)<16;16,1>
1531
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> 	r61.26<0;2,1>:ub
1532
	(-f0.0.allv) avg (16)	wCURBE_TEMP(4)<1>		wCURBE_TEMP(4)<16;16,1>				ubCURR_UV(35,2)<16;16,1>
1533
 
1534
	cmp.l.f0.0 (16)	null<1>:w						(abs)wCURBE_TEMP(5)<16;16,1>				r61.28<0;2,1>:ub
1535
	cmp.l.f1.0 (16) null<1>:w						(abs)wCURBE_TEMP(5)<16;16,1>				r61.30<0;2,1>:ub
1536
	mul (8)	acc0.0<1>:w								ubCURR_UV(36,2)<8;8,1>					-uwCURBE_TEMP(1,12)<0;2,1>
1537
	mul (8)	acc0.8<1>:w								ubCURR_UV(36,10)<8;8,1>					-uwCURBE_TEMP(1,14)<0;2,1>
1538
	mac (16)	acc0<1>:w							ubCURR_UV(36,2)<16;16,1>					256:w
1539
	mac (8)	acc0.0<1>:w								ubPREV_UV(8,224)<8;8,1>				uwCURBE_TEMP(1,12)<0;2,1>
1540
	mac (8)	acc0.8<1>:w								ubPREV_UV(8,232)<8;8,1>				uwCURBE_TEMP(1,14)<0;2,1>
1541
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1542
 	(f0.0) shr  (16) wCURBE_TEMP(5)<1> 				acc0<16;16,1>:w								8:w
1543
	(-f0.0) mov (16) wCURBE_TEMP(5)<1>				ubCURR_UV(36,2)<16;16,1>
1544
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> 	r61.26<0;2,1>:ub
1545
	(-f0.0.allv) avg (16)	wCURBE_TEMP(5)<1>		wCURBE_TEMP(5)<16;16,1>				ubCURR_UV(36,2)<16;16,1>
1546
 
1547
	cmp.l.f0.0 (16)	null<1>:w						(abs)wCURBE_TEMP(6)<16;16,1>				r61.28<0;2,1>:ub
1548
	cmp.l.f1.0 (16) null<1>:w						(abs)wCURBE_TEMP(6)<16;16,1>				r61.30<0;2,1>:ub
1549
	mul (8)	acc0.0<1>:w								ubCURR_UV(37,2)<8;8,1>					-uwCURBE_TEMP(1,12)<0;2,1>
1550
	mul (8)	acc0.8<1>:w								ubCURR_UV(37,10)<8;8,1>					-uwCURBE_TEMP(1,14)<0;2,1>
1551
	mac (16)	acc0<1>:w							ubCURR_UV(37,2)<16;16,1>					256:w
1552
	mac (8)	acc0.0<1>:w								ubPREV_UV(8,240)<8;8,1>				uwCURBE_TEMP(1,12)<0;2,1>
1553
	mac (8)	acc0.8<1>:w								ubPREV_UV(8,248)<8;8,1>				uwCURBE_TEMP(1,14)<0;2,1>
1554
	add (16)	acc0<1>:w							acc0<16;16,1>:w								128:w
1555
 	(f0.0) shr  (16) wCURBE_TEMP(6)<1>				acc0<16;16,1>:w								8:w
1556
	(-f0.0) mov (16) wCURBE_TEMP(6)<1>				ubCURR_UV(37,2)<16;16,1>
1557
	cmp.le.f0.0 (16) null<1>:w						uwDIFF_TEMPORAL_SUM4x4_TEMP_3(0)<16;16,1> 	r61.26<0;2,1>:ub
1558
	(-f0.0.allv) avg (16)	wCURBE_TEMP(6)<1>		wCURBE_TEMP(6)<16;16,1>				ubCURR_UV(37,2)<16;16,1>
1559
 
1560
	//Pack Weight History WORD -> BYTE
1561
	mov (16) ubCURBE_TEMP(3,0)<1>		ubCURBE_TEMP(0)<32;16,2>
1562
	mov (16) ubCURBE_TEMP(3,16)<1>		ubCURBE_TEMP(1)<32;16,2>
1563
 
1564
 
1565
 
1566
//Module Name 	: DN_UV_Compute_BNE_UV
1567
//Author		: Tatiya, Rupesh
1568
//Description	: Computes minimum SOAD for each 16x4 block.
1569
 
1570
	cmp.l.f0.0  (8) null:w     				uwSOAD_MIN_8x4(0,12)<16;4,1> 	uwSOAD_MIN_8x4(2,12)<16;4,1>
1571
	(f0.0)sel	(8) uwCURBE_TEMP(1,0)<1>	uwSOAD_MIN_8x4(0,12)<16;4,1> 	uwSOAD_MIN_8x4(2,12)<16;4,1>
1572
 
1573
    mov  (8)	ubCURBE_TEMP(1)<1>			ubCURBE_TEMP(1)<16;8,2>
1574
 
1575
 
1576
 
1577
//Module Name 	: DN_UV_YUY2_Pack_Denoised_UV
1578
//Name			: Tatiya, Rupesh
1579
//Description	: Pack UV denoised data based on YUY2 input.
1580
 
1581
 
1582
 
1583
//Module Name 	: DN_UV_Pack_Denoised_UV
1584
//Name			: Tatiya, Rupesh
1585
//Description	: Pack UV denoised data based on PL2/PL3/PA.
1586
 
1587
 
1588
	add  (1) a0.0<1>:uw    	r54.21<0;1,0>:ub    2976:w
1589
	add  (1) a0.1<1>:uw    	r54.21<0;1,0>:ub    3264:w
1590
	add  (1) a0.2<1>:uw    	r54.21<0;1,0>:ub    3552:w
1591
	add  (1) a0.3<1>:uw    	r54.21<0;1,0>:ub    3840:w
1592
 
1593
//First 8 lines.
1594
	mov  (16)	r[a0.0, 0]<2>:ub		ubDIFF_TEMPORAL(0)<32;16,2>
1595
	mov  (16)	r[a0.0, 32]<2>:ub		ubDIFF_TEMPORAL(1)<32;16,2>
1596
	mov  (16)	r[a0.0, 64]<2>:ub		ubDIFF_TEMPORAL(2)<32;16,2>
1597
	mov  (16)	r[a0.0, 96]<2>:ub		ubDIFF_TEMPORAL(3)<32;16,2>
1598
	mov  (16)	r[a0.0, 128]<2>:ub		ubDIFF_TEMPORAL(4)<32;16,2>
1599
	mov  (16)	r[a0.0, 160]<2>:ub		ubDIFF_TEMPORAL(5)<32;16,2>
1600
	mov  (16)	r[a0.0, 192]<2>:ub		ubDIFF_TEMPORAL(6)<32;16,2>
1601
	mov  (16)	r[a0.0, 224]<2>:ub		ubDIFF_TEMPORAL(7)<32;16,2>
1602
 
1603
//Second 8 lines
1604
	mov  (16)	r[a0.1, 0]<2>:ub		ubDIFF_TEMPORAL(8)<32;16,2>
1605
	mov  (16)	r[a0.1, 32]<2>:ub		ubDIFF_TEMPORAL(9)<32;16,2>
1606
	mov  (16)	r[a0.1, 64]<2>:ub		ubDIFF_TEMPORAL(10)<32;16,2>
1607
	mov  (16)	r[a0.1, 96]<2>:ub		ubDIFF_TEMPORAL(11)<32;16,2>
1608
	mov  (16)	r[a0.1, 128]<2>:ub		ubDIFF_TEMPORAL(12)<32;16,2>
1609
	mov  (16)	r[a0.1, 160]<2>:ub		ubDIFF_TEMPORAL(13)<32;16,2>
1610
	mov  (16)	r[a0.1, 192]<2>:ub		ubDIFF_TEMPORAL(14)<32;16,2>
1611
	mov  (16)	r[a0.1, 224]<2>:ub		ubDIFF_TEMPORAL(15)<32;16,2>
1612
 
1613
//Third 8 lines
1614
	mov  (16)	r[a0.2, 0]<2>:ub		ubDIFF_TEMPORAL(16)<32;16,2>
1615
	mov  (16)	r[a0.2, 32]<2>:ub		ubDIFF_TEMPORAL(17)<32;16,2>
1616
	mov  (16)	r[a0.2, 64]<2>:ub		ubDIFF_TEMPORAL(18)<32;16,2>
1617
	mov  (16)	r[a0.2, 96]<2>:ub		ubDIFF_TEMPORAL(19)<32;16,2>
1618
	mov  (16)	r[a0.2, 128]<2>:ub		ubDIFF_TEMPORAL(20)<32;16,2>
1619
	mov  (16)	r[a0.2, 160]<2>:ub		ubDIFF_TEMPORAL(21)<32;16,2>
1620
	mov  (16)	r[a0.2, 192]<2>:ub		ubDIFF_TEMPORAL(22)<32;16,2>
1621
	mov  (16)	r[a0.2, 224]<2>:ub		ubDIFF_TEMPORAL(23)<32;16,2>
1622
 
1623
//Fourth 8 lines
1624
//5 lines first
1625
	mov  (16)	r[a0.3, 0]<2>:ub		ubDIFF_TEMPORAL(24)<32;16,2>
1626
	mov  (16)	r[a0.3, 32]<2>:ub		ubDIFF_TEMPORAL(25)<32;16,2>
1627
	mov  (16)	r[a0.3, 64]<2>:ub		ubDIFF_TEMPORAL(26)<32;16,2>
1628
	mov  (16)	r[a0.3, 96]<2>:ub		ubDIFF_TEMPORAL(27)<32;16,2>
1629
	mov  (16)	r[a0.3, 128]<2>:ub		ubDIFF_TEMPORAL(28)<32;16,2>
1630
 
1631
//3 more lines
1632
	mov  (16)	r[a0.3, 160]<2>:ub		ubCURBE_TEMP(4)<32;16,2>
1633
	mov  (16)	r[a0.3, 192]<2>:ub		ubCURBE_TEMP(5)<32;16,2>
1634
	mov  (16)	r[a0.3, 224]<2>:ub		ubCURBE_TEMP(6)<32;16,2>
1635
 
1636
 
1637
	//TODO - See if History saving can be combined with Curr Frame Save. - rT
1638
 
1639
 
1640
//Module Name 	: DN_UV_Save_Hist_UV
1641
//Author		: Tatiya, Rupesh
1642
//Description	: Saves DN history for UV data.
1643
 
1644
	mov (8)  r3.0<1>:ud	r0.0<8;8,1>:ud
1645
	mov (2)	 r3.0<1>:d	r62.12<2;2,1>:w
1646
	mov (1)	 r3.2<1>:d	0x30007:ud
1647
 
1648
	send (8) null<1>:d	r3		0x5		0x40A8021:ud
1649
 
1650
 
1651
 
1652
//Module Name	: DN_UV_Save_BNE_UV
1653
//Author		: Tatiya, Rupesh
1654
//Description	: Saves BNE values for 16x16 U and 16x16 V.
1655
 
1656
	mov (8)  r1.0<1>:ud	r0.0<8;8,1>:ud
1657
	mov (2)	 r1.0<1>:d		r63.12<2;2,1>:w
1658
	mov (1)	 r1.2<1>:d		0x10003:ud
1659
 
1660
	send (8) null<1>:d	r1		0x5		0x40A8023:ud
1661
 
1662
 
1663
 
1664
//Module Name 	: DN_UV_YUY2_Save_Curr_Frame_YUV
1665
//Author		: Tatiya, Rupesh
1666
 
1667
 
1668
 
1669
//Module Name 	: DN_UV_Load_Curr_Frame_Y
1670
//Author		: Tatiya, Rupesh
1671
//Description	: Saves Y or YUY2 of Current frame.
1672
 
1673
 
1674
 
1675
 
1676
	mov (8)		acc0.0<1>:ud		r0.0<8;8,1>:ud
1677
	shl (1)		r62.10<1>:w		r62.10<0;1,0>:w		1:w
1678
	mov (1)		acc0.0<1>:d			r62.10<0;1,0>:w
1679
	mov (1)		acc0.1<1>:d			r62.11<0;1,0>:w
1680
 
1681
	mov (1)		acc0.2<1>:d			0x7001F:ud
1682
 
1683
	mov (8)     r92.0<1>:ud	acc0.0<8;8,1>:ud
1684
 
1685
	mov (8)     r101.0<1>:ud	acc0.0<8;8,1>:ud
1686
	mov (8)     r110.0<1>:ud	acc0.0<8;8,1>:ud
1687
	mov (8)     r119.0<1>:ud	acc0.0<8;8,1>:ud
1688
 
1689
	add (1)		r101.1<1>:d 	acc0.1<0;1,0>:d   		8:d
1690
 
1691
	add (1)		r110.0<1>:d 	acc0.0<0;1,0>:d   		32:d
1692
 
1693
	add (1)		r119.0<1>:d 	acc0.0<0;1,0>:d   		32:d
1694
	add (1)		r119.1<1>:d 	acc0.1<0;1,0>:d   		 8:d
1695
 
1696
	send (8)	null<1>:d	r92		0x5		0x120A8018:ud
1697
	send (8)	null<1>:d	r101		0x5		0x120A8018:ud
1698
	send (8)	null<1>:d	r110		0x5		0x120A8018:ud
1699
	send (8)	null<1>:d	r119		0x5		0x120A8018:ud
1700
 
1701
 
1702
 
1703
//End of Thread message
1704
 
1705
mov (8) r127<1>:ud r0.0<8;8,1>:ud
1706
 send (1) null<1>:d r127 0x27 0x02000010
1707
 
1708
 
1709
	//All sub-routines here
1710
 
1711
 
1712
// Module Name  : Noise_Detection
1713
// Author		: Tatiya, Rupesh
1714
// Description	: Performs noise detection on 32 pixels of U (8x4) and 32 pixels of V (8x4).
1715
 
1716
DN_UV_NOISE_DETECTION_UV:
1717
 
1718
// Find Field Block Median
1719
//
1720
// Purpose   : Find the median value of the nine pixels in the same field
1721
//             which are centered at current pixel.
1722
//
1723
//             Works on 9 pixels centered at the current pixel
1724
//                NOTE: pixels are within same field.
1725
//                      v4 - current pixel
1726
//
1727
//                  v2 v1 v0
1728
//                   *  *  *     <--- Different field - not used
1729
//                  v5 v4 v3
1730
//                   *  *  *     <--- Different field - not used
1731
//                  v8 v7 v6
1732
 
1733
// Algorithm to find median modifies the data.
1734
// Copy the data needed to calculate median so the original source data stays intact.
1735
//
1736
 
1737
//TODO - Change Interleaved implementation to separated one if - ,  does not work on predication. - rT
1738
 
1739
//Delete Later - rT
1740
//mov (1) pCUR_UV:uw		52*32:uw
1741
 
1742
// v0
1743
mov (16) ubMEDIAN_TEMP(0,0)<1>    	r[a0.0,0]<16;16,1>
1744
// v0
1745
mov (16) ubMEDIAN_TEMP(0,16)<1>   	r[a0.0,32]<16;16,1>
1746
// v1
1747
mov (16) ubMEDIAN_TEMP(1,0)<1>    	r[a0.0,2]<16;16,1>
1748
// v1
1749
mov (16) ubMEDIAN_TEMP(1,16)<1>   	r[a0.0,34]<16;16,1>
1750
// v2
1751
mov (16) ubMEDIAN_TEMP(2,0)<1>    	r[a0.0,4]<16;16,1>
1752
// v2
1753
mov (16) ubMEDIAN_TEMP(2,16)<1>   	r[a0.0,36]<16;16,1>
1754
// v3
1755
mov (16) ubMEDIAN_TEMP(3,0)<1>    	r[a0.0,64]<16;16,1>
1756
// v3
1757
mov (16) ubMEDIAN_TEMP(3,16)<1>   	r[a0.0,96]<16;16,1>
1758
// v4
1759
mov (16) ubMEDIAN_TEMP(4,0)<1>		r[a0.0,66]<16;16,1>
1760
// v4
1761
mov (16) ubMEDIAN_TEMP(4,16)<1>   	r[a0.0,98]<16;16,1>
1762
// v5
1763
mov (16) ubMEDIAN_TEMP(5,0)<1>		r[a0.0,68]<16;16,1>
1764
// v5
1765
mov (16) ubMEDIAN_TEMP(5,16)<1>   	r[a0.0,100]<16;16,1>
1766
// v6
1767
mov (16) ubMEDIAN_TEMP(6,0)<1>    	r[a0.0,128]<16;16,1>
1768
// v6
1769
mov (16) ubMEDIAN_TEMP(6,16)<1>   	r[a0.0,160]<16;16,1>
1770
// v7
1771
mov (16) ubMEDIAN_TEMP(7,0)<1>		r[a0.0,130]<16;16,1>
1772
// v7
1773
mov (16) ubMEDIAN_TEMP(7,16)<1>   	r[a0.0,162]<16;16,1>
1774
// v8
1775
mov (16) ubMEDIAN_TEMP(8,0)<1>		r[a0.0,132]<16;16,1>
1776
// v8
1777
mov (16) ubMEDIAN_TEMP(8,16)<1>   	r[a0.0,164]<16;16,1>
1778
 
1779
//TODO - Optimize one instruction here.
1780
add (1)  a0.0:uw		a0.0<0;1,0>:uw 64:uw
1781
// v0
1782
mov (16) ubMEDIAN_TEMP(9,0)<1>    	r[a0.0,0]<16;16,1>
1783
// v0
1784
mov (16) ubMEDIAN_TEMP(9,16)<1>   	r[a0.0,32]<16;16,1>
1785
// v1
1786
mov (16) ubMEDIAN_TEMP(10,0)<1>    	r[a0.0,2]<16;16,1>
1787
// v1
1788
mov (16) ubMEDIAN_TEMP(10,16)<1>   	r[a0.0,34]<16;16,1>
1789
// v2
1790
mov (16) ubMEDIAN_TEMP(11,0)<1>    	r[a0.0,4]<16;16,1>
1791
// v2
1792
mov (16) ubMEDIAN_TEMP(11,16)<1>   	r[a0.0,36]<16;16,1>
1793
// v3
1794
mov (16) ubMEDIAN_TEMP(12,0)<1>    	r[a0.0,64]<16;16,1>
1795
// v3
1796
mov (16) ubMEDIAN_TEMP(12,16)<1>   	r[a0.0,96]<16;16,1>
1797
// v4
1798
mov (16) ubMEDIAN_TEMP(13,0)<1>		r[a0.0,66]<16;16,1>
1799
// v4
1800
mov (16) ubMEDIAN_TEMP(13,16)<1>   	r[a0.0,98]<16;16,1>
1801
// v5
1802
mov (16) ubMEDIAN_TEMP(14,0)<1>		r[a0.0,68]<16;16,1>
1803
// v5
1804
mov (16) ubMEDIAN_TEMP(14,16)<1>   	r[a0.0,100]<16;16,1>
1805
// v6
1806
mov (16) ubMEDIAN_TEMP(15,0)<1>    	r[a0.0,128]<16;16,1>
1807
// v6
1808
mov (16) ubMEDIAN_TEMP(15,16)<1>   	r[a0.0,160]<16;16,1>
1809
// v7
1810
mov (16) ubMEDIAN_TEMP(16,0)<1>		r[a0.0,130]<16;16,1>
1811
// v7
1812
mov (16) ubMEDIAN_TEMP(16,16)<1>   	r[a0.0,162]<16;16,1>
1813
// v8
1814
mov (16) ubMEDIAN_TEMP(17,0)<1>		r[a0.0,132]<16;16,1>
1815
// v8
1816
mov (16) ubMEDIAN_TEMP(17,16)<1>   	r[a0.0,164]<16;16,1>
1817
 
1818
//TODO - Optimize one instruction here.
1819
add (1)  a0.0:uw		a0.0<0;1,0>:uw 64:uw
1820
 
1821
// MedianSwap
1822
//
1823
//  MedianSwap(inOutLeft, inOutRight)
1824
//  {
1825
//      if (inOutLeft > inOutRight)
1826
//      {
1827
//          temp = inOutLeft
1828
//          inOutLeft = inOutRight
1829
//          inOutRight = temp
1830
//      }
1831
//  }
1832
 
1833
// MedianSwap(v1, v2) - U
1834
// MedianSwap(v4, v5) - U
1835
// MedianSwap(v1, v2) - V
1836
// MedianSwap(v4, v5) - V
1837
 
1838
cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(1,0)<32;16,2>  ubMEDIAN_TEMP(2,0)<32;16,2>
1839
cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(4,0)<32;16,2>  ubMEDIAN_TEMP(5,0)<32;16,2>
1840
cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(1,1)<32;16,2> 	ubMEDIAN_TEMP(2,1)<32;16,2>
1841
cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(4,1)<32;16,2> 	ubMEDIAN_TEMP(5,1)<32;16,2>
1842
 
1843
       	mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(1,0)<32;16,2>
1844
       	mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(4,0)<32;16,2>
1845
       	mov (16) ubTEMP1(1,0)<1>      ubMEDIAN_TEMP(1,1)<32;16,2>
1846
		mov (16) ubTEMP1(1,16)<1>     ubMEDIAN_TEMP(4,1)<32;16,2>
1847
 
1848
(f0.0) mov (16) ubMEDIAN_TEMP(1,0)<2>     	ubMEDIAN_TEMP(2,0)<32;16,2>
1849
(f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2>		ubMEDIAN_TEMP(5,0)<32;16,2>
1850
(f1.0) mov (16) ubMEDIAN_TEMP(1,1)<2>  		ubMEDIAN_TEMP(2,1)<32;16,2>
1851
(f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2>		ubMEDIAN_TEMP(5,1)<32;16,2>
1852
 
1853
(f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2>     ubTEMP1(0,0)<16;16,1>
1854
(f0.1) mov (16) ubMEDIAN_TEMP(5,0)<2>     ubTEMP1(0,16)<16;16,1>
1855
(f1.0) mov (16) ubMEDIAN_TEMP(2,1)<2>     ubTEMP1(1,0)<16;16,1>
1856
(f1.1) mov (16) ubMEDIAN_TEMP(5,1)<2>     ubTEMP1(1,16)<16;16,1>
1857
 
1858
// MedianSwap(v7, v8) - U
1859
// MedianSwap(v0, v1) - U
1860
// MedianSwap(v7, v8) - V
1861
// MedianSwap(v0, v1) - V
1862
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(7,0)<32;16,2>   	ubMEDIAN_TEMP(8,0)<32;16,2>
1863
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(0,0)<32;16,2>  	ubMEDIAN_TEMP(1,0)<32;16,2>
1864
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(7,1)<32;16,2> 	ubMEDIAN_TEMP(8,1)<32;16,2>
1865
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(0,1)<32;16,2> 	ubMEDIAN_TEMP(1,1)<32;16,2>
1866
 
1867
        mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(7,0)<32;16,2>
1868
        mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(0,0)<32;16,2>
1869
        mov (16) ubTEMP1(1,0)<1>      ubMEDIAN_TEMP(7,1)<32;16,2>
1870
 		mov (16) ubTEMP1(1,16)<1>     ubMEDIAN_TEMP(0,1)<32;16,2>
1871
 
1872
 (f0.0) mov (16) ubMEDIAN_TEMP(7,0)<2>   ubMEDIAN_TEMP(8,0)<32;16,2>
1873
 (f0.1) mov (16) ubMEDIAN_TEMP(0,0)<2>	ubMEDIAN_TEMP(1,0)<32;16,2>
1874
 (f1.0) mov (16) ubMEDIAN_TEMP(7,1)<2>  	ubMEDIAN_TEMP(8,1)<32;16,2>
1875
 (f1.1) mov (16) ubMEDIAN_TEMP(0,1)<2>	ubMEDIAN_TEMP(1,1)<32;16,2>
1876
 
1877
 (f0.0) mov (16) ubMEDIAN_TEMP(8,0)<2>     ubTEMP1(0,0)<16;16,1>
1878
 (f0.1) mov (16) ubMEDIAN_TEMP(1,0)<2>     ubTEMP1(0,16)<16;16,1>
1879
 (f1.0) mov (16) ubMEDIAN_TEMP(8,1)<2>     ubTEMP1(1,0)<16;16,1>
1880
 (f1.1) mov (16) ubMEDIAN_TEMP(1,1)<2>     ubTEMP1(1,16)<16;16,1>
1881
 
1882
 // MedianSwap(v3, v4) - U
1883
 // MedianSwap(v6, v7) - U
1884
 // MedianSwap(v3, v4) - V
1885
 // MedianSwap(v6, v7) - V
1886
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(3,0)<32;16,2>   	ubMEDIAN_TEMP(4,0)<32;16,2>
1887
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(6,0)<32;16,2>  	ubMEDIAN_TEMP(7,0)<32;16,2>
1888
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(3,1)<32;16,2> 	ubMEDIAN_TEMP(4,1)<32;16,2>
1889
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(6,1)<32;16,2> 	ubMEDIAN_TEMP(7,1)<32;16,2>
1890
 
1891
        mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(3,0)<32;16,2>
1892
        mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(6,0)<32;16,2>
1893
        mov (16) ubTEMP1(1,0)<1>      ubMEDIAN_TEMP(3,1)<32;16,2>
1894
 		mov (16) ubTEMP1(1,16)<1>     ubMEDIAN_TEMP(6,1)<32;16,2>
1895
 
1896
 (f0.0) mov (16) ubMEDIAN_TEMP(3,0)<2>   ubMEDIAN_TEMP(4,0)<32;16,2>
1897
 (f0.1) mov (16) ubMEDIAN_TEMP(6,0)<2>	ubMEDIAN_TEMP(7,0)<32;16,2>
1898
 (f1.0) mov (16) ubMEDIAN_TEMP(3,1)<2>  	ubMEDIAN_TEMP(4,1)<32;16,2>
1899
 (f1.1) mov (16) ubMEDIAN_TEMP(6,1)<2>	ubMEDIAN_TEMP(7,1)<32;16,2>
1900
 
1901
 (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2>     ubTEMP1(0,0)<16;16,1>
1902
 (f0.1) mov (16) ubMEDIAN_TEMP(7,0)<2>     ubTEMP1(0,16)<16;16,1>
1903
 (f1.0) mov (16) ubMEDIAN_TEMP(4,1)<2>     ubTEMP1(1,0)<16;16,1>
1904
 (f1.1) mov (16) ubMEDIAN_TEMP(7,1)<2>     ubTEMP1(1,16)<16;16,1>
1905
 
1906
 // MedianSwap(v1, v2) - U
1907
 // MedianSwap(v4, v5) - U
1908
 // MedianSwap(v1, v2) - V
1909
 // MedianSwap(v4, v5) - V
1910
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(1,0)<32;16,2>   	ubMEDIAN_TEMP(2,0)<32;16,2>
1911
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(4,0)<32;16,2>  	ubMEDIAN_TEMP(5,0)<32;16,2>
1912
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(1,1)<32;16,2> 	ubMEDIAN_TEMP(2,1)<32;16,2>
1913
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(4,1)<32;16,2> 	ubMEDIAN_TEMP(5,1)<32;16,2>
1914
 
1915
        mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(1,0)<32;16,2>
1916
        mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(4,0)<32;16,2>
1917
        mov (16) ubTEMP1(1,0)<1>      ubMEDIAN_TEMP(1,1)<32;16,2>
1918
 		mov (16) ubTEMP1(1,16)<1>     ubMEDIAN_TEMP(4,1)<32;16,2>
1919
 
1920
 (f0.0) mov (16) ubMEDIAN_TEMP(1,0)<2>   ubMEDIAN_TEMP(2,0)<32;16,2>
1921
 (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2>	ubMEDIAN_TEMP(5,0)<32;16,2>
1922
 (f1.0) mov (16) ubMEDIAN_TEMP(1,1)<2>  	ubMEDIAN_TEMP(2,1)<32;16,2>
1923
 (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2>	ubMEDIAN_TEMP(5,1)<32;16,2>
1924
 
1925
 (f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2>     ubTEMP1(0,0)<16;16,1>
1926
 (f0.1) mov (16) ubMEDIAN_TEMP(5,0)<2>     ubTEMP1(0,16)<16;16,1>
1927
 (f1.0) mov (16) ubMEDIAN_TEMP(2,1)<2>     ubTEMP1(1,0)<16;16,1>
1928
 (f1.1) mov (16) ubMEDIAN_TEMP(5,1)<2>     ubTEMP1(1,16)<16;16,1>
1929
 
1930
 // MedianSwap(v7, v8) - U
1931
 // MedianSwap(v0, v3) - U
1932
 // MedianSwap(v7, v8) - V
1933
 // MedianSwap(v0, v3) - V
1934
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(7,0)<32;16,2>   	ubMEDIAN_TEMP(8,0)<32;16,2>
1935
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(0,0)<32;16,2>  	ubMEDIAN_TEMP(3,0)<32;16,2>
1936
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(7,1)<32;16,2> 	ubMEDIAN_TEMP(8,1)<32;16,2>
1937
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(0,1)<32;16,2> 	ubMEDIAN_TEMP(3,1)<32;16,2>
1938
 
1939
        mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(7,0)<32;16,2>
1940
        mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(0,0)<32;16,2>
1941
        mov (16) ubTEMP1(1,0)<1>      ubMEDIAN_TEMP(7,1)<32;16,2>
1942
 		mov (16) ubTEMP1(1,16)<1>     ubMEDIAN_TEMP(0,1)<32;16,2>
1943
 
1944
 (f0.0) mov (16) ubMEDIAN_TEMP(7,0)<2>   ubMEDIAN_TEMP(8,0)<32;16,2>
1945
 (f0.1) mov (16) ubMEDIAN_TEMP(0,0)<2>	ubMEDIAN_TEMP(3,0)<32;16,2>
1946
 (f1.0) mov (16) ubMEDIAN_TEMP(7,1)<2>  	ubMEDIAN_TEMP(8,1)<32;16,2>
1947
 (f1.1) mov (16) ubMEDIAN_TEMP(0,1)<2>	ubMEDIAN_TEMP(3,1)<32;16,2>
1948
 
1949
 (f0.0) mov (16) ubMEDIAN_TEMP(8,0)<2>     ubTEMP1(0,0)<16;16,1>
1950
 (f0.1) mov (16) ubMEDIAN_TEMP(3,0)<2>     ubTEMP1(0,16)<16;16,1>
1951
 (f1.0) mov (16) ubMEDIAN_TEMP(8,1)<2>     ubTEMP1(1,0)<16;16,1>
1952
 (f1.1) mov (16) ubMEDIAN_TEMP(3,1)<2>     ubTEMP1(1,16)<16;16,1>
1953
 
1954
 // NOTE:
1955
 // Compare v0 to v6 to find the minimum.
1956
 // Store the minimum for future use.
1957
 //TODO - Find if MIN is needed.
1958
 //cmp.l.f0.0  (16) null:w          			ubMEDIAN_TEMP(%1+0,0)<32;16,2> 	ubMEDIAN_TEMP(%1+6,0)<32;16,2>
1959
 //cmp.l.f1.0  (16) null:w          			ubMEDIAN_TEMP(%1+0,1)<32;16,2> 	ubMEDIAN_TEMP(%1+6,1)<32;16,2>
1960
 //(f0.0)  mov (16) ubCURR_MIN(0,%2*16+0)<1>   		ubMEDIAN_TEMP(%1+0,0)<32;16,2>
1961
 //(f1.0)  mov (16) ubCURR_MIN(1,%2*16+0)<1>   		ubMEDIAN_TEMP(%1+0,1)<32;16,2>
1962
 //(-f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1>   		ubMEDIAN_TEMP(%1+6,0)<32;16,2>
1963
 //(-f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1>   		ubMEDIAN_TEMP(%1+6,1)<32;16,2>
1964
 
1965
 // MedianSwap(v5, v8) - U
1966
 // MedianSwap(v4, v7) - U
1967
 // MedianSwap(v5, v8) - V
1968
 // MedianSwap(v4, v7) - V
1969
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(5,0)<32;16,2>   	ubMEDIAN_TEMP(8,0)<32;16,2>
1970
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(4,0)<32;16,2>  	ubMEDIAN_TEMP(7,0)<32;16,2>
1971
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(5,1)<32;16,2> 	ubMEDIAN_TEMP(8,1)<32;16,2>
1972
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(4,1)<32;16,2> 	ubMEDIAN_TEMP(7,1)<32;16,2>
1973
 
1974
        mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(5,0)<32;16,2>
1975
        mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(4,0)<32;16,2>
1976
        mov (16) ubTEMP1(1,0)<1>      ubMEDIAN_TEMP(5,1)<32;16,2>
1977
 		mov (16) ubTEMP1(1,16)<1>     ubMEDIAN_TEMP(4,1)<32;16,2>
1978
 
1979
 (f0.0) mov (16) ubMEDIAN_TEMP(5,0)<2>    	ubMEDIAN_TEMP(8,0)<32;16,2>
1980
 (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2>		ubMEDIAN_TEMP(7,0)<32;16,2>
1981
 (f1.0) mov (16) ubMEDIAN_TEMP(5,1)<2>  	ubMEDIAN_TEMP(8,1)<32;16,2>
1982
 (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2>		ubMEDIAN_TEMP(7,1)<32;16,2>
1983
 
1984
 (f0.0) mov (16) ubMEDIAN_TEMP(8,0)<2>     ubTEMP1(0,0)<16;16,1>
1985
 (f0.1) mov (16) ubMEDIAN_TEMP(7,0)<2>     ubTEMP1(0,16)<16;16,1>
1986
 (f1.0) mov (16) ubMEDIAN_TEMP(8,1)<2>     ubTEMP1(1,0)<16;16,1>
1987
 (f1.1) mov (16) ubMEDIAN_TEMP(7,1)<2>     ubTEMP1(1,16)<16;16,1>
1988
 
1989
// NOTE:
1990
// Compare v2 to v8 to find the maximum.
1991
// Store the maximum for future use.
1992
 //TODO - Find if MAX is needed.
1993
// cmp.g.f0.0  (16) null:w         ubMEDIAN_TEMP(%1+2,0)<32;16,2> ubMEDIAN_TEMP(%1+8,0)<32;16,2>
1994
// cmp.g.f1.0  (16) null:w         ubMEDIAN_TEMP(%1+2,1)<32;16,2> ubMEDIAN_TEMP(%1+8,1)<32;16,2>
1995
//(f0.0)  mov (16) ubCURR_MAX(0,%2*16+0)<1>   	ubMEDIAN_TEMP(%1+2,0)<32;16,2>
1996
//(f1.0)  mov (16) ubCURR_MAX(1,%2*16+0)<1>   	ubMEDIAN_TEMP(%1+2,1)<32;16,2>
1997
//(-f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1>   	ubMEDIAN_TEMP(%1+8,0)<32;16,2>
1998
//(-f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1>   	ubMEDIAN_TEMP(%1+8,1)<32;16,2>
1999
 
2000
// MedianSwap(v3, v6) - U
2001
// MedianSwap(v1, v4) - U
2002
// MedianSwap(v3, v6) - V
2003
// MedianSwap(v1, v4) - V
2004
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(3,0)<32;16,2>   	ubMEDIAN_TEMP(6,0)<32;16,2>
2005
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(1,0)<32;16,2>  	ubMEDIAN_TEMP(4,0)<32;16,2>
2006
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(3,1)<32;16,2> 	ubMEDIAN_TEMP(6,1)<32;16,2>
2007
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(1,1)<32;16,2> 	ubMEDIAN_TEMP(4,1)<32;16,2>
2008
 
2009
 (f0.0) mov (16) ubMEDIAN_TEMP(6,0)<2>     ubMEDIAN_TEMP(3,0)<32;16,2>
2010
 (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2>     ubMEDIAN_TEMP(1,0)<32;16,2>
2011
 (f1.0) mov (16) ubMEDIAN_TEMP(6,1)<2>     ubMEDIAN_TEMP(3,1)<32;16,2>
2012
 (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2>     ubMEDIAN_TEMP(1,1)<32;16,2>
2013
 
2014
 // MedianSwap(v2,v5) - U
2015
 // MedianSwap(v4,v7) - U
2016
 // MedianSwap(v2,v5) - V
2017
 // MedianSwap(v4,v7) - V
2018
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(2,0)<32;16,2>   	ubMEDIAN_TEMP(5,0)<32;16,2>
2019
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(4,0)<32;16,2>  	ubMEDIAN_TEMP(7,0)<32;16,2>
2020
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(2,1)<32;16,2> 	ubMEDIAN_TEMP(5,1)<32;16,2>
2021
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(4,1)<32;16,2> 	ubMEDIAN_TEMP(7,1)<32;16,2>
2022
 
2023
 (f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2>     ubMEDIAN_TEMP(5,0)<32;16,2>
2024
 (f0.1) mov (16) ubMEDIAN_TEMP(4,0)<2>     ubMEDIAN_TEMP(7,0)<32;16,2>
2025
 (f1.0) mov (16) ubMEDIAN_TEMP(2,1)<2>     ubMEDIAN_TEMP(5,1)<32;16,2>
2026
 (f1.1) mov (16) ubMEDIAN_TEMP(4,1)<2>     ubMEDIAN_TEMP(7,1)<32;16,2>
2027
 
2028
 // MedianSwap(v4,v2) - U
2029
 // MedianSwap(v4,v2) - V
2030
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(4,0)<32;16,2>   	ubMEDIAN_TEMP(2,0)<32;16,2>
2031
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(4,1)<32;16,2>  	ubMEDIAN_TEMP(2,1)<32;16,2>
2032
 
2033
        mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(4,0)<32;16,2>
2034
        mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(4,1)<32;16,2>
2035
 
2036
 (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2>    	ubMEDIAN_TEMP(2,0)<32;16,2>
2037
 (f0.1) mov (16) ubMEDIAN_TEMP(4,1)<2>		ubMEDIAN_TEMP(2,1)<32;16,2>
2038
 
2039
 (f0.0) mov (16) ubMEDIAN_TEMP(2,0)<2>     ubTEMP1(0,0)<16;16,1>
2040
 (f0.1) mov (16) ubMEDIAN_TEMP(2,1)<2>     ubTEMP1(0,16)<16;16,1>
2041
 
2042
 // MedianSwap(v6,v4) - U
2043
 // MedianSwap(v6,v4) - V
2044
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(6,0)<32;16,2>   ubMEDIAN_TEMP(4,0)<32;16,2>
2045
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(6,1)<32;16,2>   ubMEDIAN_TEMP(4,1)<32;16,2>
2046
 
2047
 (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2>    	ubMEDIAN_TEMP(6,0)<32;16,2>
2048
 (f0.1) mov (16) ubMEDIAN_TEMP(4,1)<2>		ubMEDIAN_TEMP(6,1)<32;16,2>
2049
 
2050
 // MedianSwap(v4,v2) - U
2051
 // MedianSwap(v4,v2) - V
2052
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(4,0)<32;16,2>   	ubMEDIAN_TEMP(2,0)<32;16,2>
2053
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(4,1)<32;16,2>  	ubMEDIAN_TEMP(2,1)<32;16,2>
2054
 
2055
 (f0.0) mov (16) ubMEDIAN_TEMP(4,0)<2>    	ubMEDIAN_TEMP(2,0)<32;16,2>
2056
 (f0.1) mov (16) ubMEDIAN_TEMP(4,1)<2>		ubMEDIAN_TEMP(2,1)<32;16,2>
2057
cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(10,0)<32;16,2>  ubMEDIAN_TEMP(11,0)<32;16,2>
2058
cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(13,0)<32;16,2>  ubMEDIAN_TEMP(14,0)<32;16,2>
2059
cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(10,1)<32;16,2> 	ubMEDIAN_TEMP(11,1)<32;16,2>
2060
cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(13,1)<32;16,2> 	ubMEDIAN_TEMP(14,1)<32;16,2>
2061
 
2062
       	mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(10,0)<32;16,2>
2063
       	mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(13,0)<32;16,2>
2064
       	mov (16) ubTEMP1(1,0)<1>      ubMEDIAN_TEMP(10,1)<32;16,2>
2065
		mov (16) ubTEMP1(1,16)<1>     ubMEDIAN_TEMP(13,1)<32;16,2>
2066
 
2067
(f0.0) mov (16) ubMEDIAN_TEMP(10,0)<2>     	ubMEDIAN_TEMP(11,0)<32;16,2>
2068
(f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2>		ubMEDIAN_TEMP(14,0)<32;16,2>
2069
(f1.0) mov (16) ubMEDIAN_TEMP(10,1)<2>  		ubMEDIAN_TEMP(11,1)<32;16,2>
2070
(f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2>		ubMEDIAN_TEMP(14,1)<32;16,2>
2071
 
2072
(f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2>     ubTEMP1(0,0)<16;16,1>
2073
(f0.1) mov (16) ubMEDIAN_TEMP(14,0)<2>     ubTEMP1(0,16)<16;16,1>
2074
(f1.0) mov (16) ubMEDIAN_TEMP(11,1)<2>     ubTEMP1(1,0)<16;16,1>
2075
(f1.1) mov (16) ubMEDIAN_TEMP(14,1)<2>     ubTEMP1(1,16)<16;16,1>
2076
 
2077
// MedianSwap(v7, v8) - U
2078
// MedianSwap(v0, v1) - U
2079
// MedianSwap(v7, v8) - V
2080
// MedianSwap(v0, v1) - V
2081
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(16,0)<32;16,2>   	ubMEDIAN_TEMP(17,0)<32;16,2>
2082
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(9,0)<32;16,2>  	ubMEDIAN_TEMP(10,0)<32;16,2>
2083
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(16,1)<32;16,2> 	ubMEDIAN_TEMP(17,1)<32;16,2>
2084
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(9,1)<32;16,2> 	ubMEDIAN_TEMP(10,1)<32;16,2>
2085
 
2086
        mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(16,0)<32;16,2>
2087
        mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(9,0)<32;16,2>
2088
        mov (16) ubTEMP1(1,0)<1>      ubMEDIAN_TEMP(16,1)<32;16,2>
2089
 		mov (16) ubTEMP1(1,16)<1>     ubMEDIAN_TEMP(9,1)<32;16,2>
2090
 
2091
 (f0.0) mov (16) ubMEDIAN_TEMP(16,0)<2>   ubMEDIAN_TEMP(17,0)<32;16,2>
2092
 (f0.1) mov (16) ubMEDIAN_TEMP(9,0)<2>	ubMEDIAN_TEMP(10,0)<32;16,2>
2093
 (f1.0) mov (16) ubMEDIAN_TEMP(16,1)<2>  	ubMEDIAN_TEMP(17,1)<32;16,2>
2094
 (f1.1) mov (16) ubMEDIAN_TEMP(9,1)<2>	ubMEDIAN_TEMP(10,1)<32;16,2>
2095
 
2096
 (f0.0) mov (16) ubMEDIAN_TEMP(17,0)<2>     ubTEMP1(0,0)<16;16,1>
2097
 (f0.1) mov (16) ubMEDIAN_TEMP(10,0)<2>     ubTEMP1(0,16)<16;16,1>
2098
 (f1.0) mov (16) ubMEDIAN_TEMP(17,1)<2>     ubTEMP1(1,0)<16;16,1>
2099
 (f1.1) mov (16) ubMEDIAN_TEMP(10,1)<2>     ubTEMP1(1,16)<16;16,1>
2100
 
2101
 // MedianSwap(v3, v4) - U
2102
 // MedianSwap(v6, v7) - U
2103
 // MedianSwap(v3, v4) - V
2104
 // MedianSwap(v6, v7) - V
2105
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(12,0)<32;16,2>   	ubMEDIAN_TEMP(13,0)<32;16,2>
2106
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(15,0)<32;16,2>  	ubMEDIAN_TEMP(16,0)<32;16,2>
2107
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(12,1)<32;16,2> 	ubMEDIAN_TEMP(13,1)<32;16,2>
2108
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(15,1)<32;16,2> 	ubMEDIAN_TEMP(16,1)<32;16,2>
2109
 
2110
        mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(12,0)<32;16,2>
2111
        mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(15,0)<32;16,2>
2112
        mov (16) ubTEMP1(1,0)<1>      ubMEDIAN_TEMP(12,1)<32;16,2>
2113
 		mov (16) ubTEMP1(1,16)<1>     ubMEDIAN_TEMP(15,1)<32;16,2>
2114
 
2115
 (f0.0) mov (16) ubMEDIAN_TEMP(12,0)<2>   ubMEDIAN_TEMP(13,0)<32;16,2>
2116
 (f0.1) mov (16) ubMEDIAN_TEMP(15,0)<2>	ubMEDIAN_TEMP(16,0)<32;16,2>
2117
 (f1.0) mov (16) ubMEDIAN_TEMP(12,1)<2>  	ubMEDIAN_TEMP(13,1)<32;16,2>
2118
 (f1.1) mov (16) ubMEDIAN_TEMP(15,1)<2>	ubMEDIAN_TEMP(16,1)<32;16,2>
2119
 
2120
 (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2>     ubTEMP1(0,0)<16;16,1>
2121
 (f0.1) mov (16) ubMEDIAN_TEMP(16,0)<2>     ubTEMP1(0,16)<16;16,1>
2122
 (f1.0) mov (16) ubMEDIAN_TEMP(13,1)<2>     ubTEMP1(1,0)<16;16,1>
2123
 (f1.1) mov (16) ubMEDIAN_TEMP(16,1)<2>     ubTEMP1(1,16)<16;16,1>
2124
 
2125
 // MedianSwap(v1, v2) - U
2126
 // MedianSwap(v4, v5) - U
2127
 // MedianSwap(v1, v2) - V
2128
 // MedianSwap(v4, v5) - V
2129
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(10,0)<32;16,2>   	ubMEDIAN_TEMP(11,0)<32;16,2>
2130
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(13,0)<32;16,2>  	ubMEDIAN_TEMP(14,0)<32;16,2>
2131
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(10,1)<32;16,2> 	ubMEDIAN_TEMP(11,1)<32;16,2>
2132
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(13,1)<32;16,2> 	ubMEDIAN_TEMP(14,1)<32;16,2>
2133
 
2134
        mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(10,0)<32;16,2>
2135
        mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(13,0)<32;16,2>
2136
        mov (16) ubTEMP1(1,0)<1>      ubMEDIAN_TEMP(10,1)<32;16,2>
2137
 		mov (16) ubTEMP1(1,16)<1>     ubMEDIAN_TEMP(13,1)<32;16,2>
2138
 
2139
 (f0.0) mov (16) ubMEDIAN_TEMP(10,0)<2>   ubMEDIAN_TEMP(11,0)<32;16,2>
2140
 (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2>	ubMEDIAN_TEMP(14,0)<32;16,2>
2141
 (f1.0) mov (16) ubMEDIAN_TEMP(10,1)<2>  	ubMEDIAN_TEMP(11,1)<32;16,2>
2142
 (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2>	ubMEDIAN_TEMP(14,1)<32;16,2>
2143
 
2144
 (f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2>     ubTEMP1(0,0)<16;16,1>
2145
 (f0.1) mov (16) ubMEDIAN_TEMP(14,0)<2>     ubTEMP1(0,16)<16;16,1>
2146
 (f1.0) mov (16) ubMEDIAN_TEMP(11,1)<2>     ubTEMP1(1,0)<16;16,1>
2147
 (f1.1) mov (16) ubMEDIAN_TEMP(14,1)<2>     ubTEMP1(1,16)<16;16,1>
2148
 
2149
 // MedianSwap(v7, v8) - U
2150
 // MedianSwap(v0, v3) - U
2151
 // MedianSwap(v7, v8) - V
2152
 // MedianSwap(v0, v3) - V
2153
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(16,0)<32;16,2>   	ubMEDIAN_TEMP(17,0)<32;16,2>
2154
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(9,0)<32;16,2>  	ubMEDIAN_TEMP(12,0)<32;16,2>
2155
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(16,1)<32;16,2> 	ubMEDIAN_TEMP(17,1)<32;16,2>
2156
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(9,1)<32;16,2> 	ubMEDIAN_TEMP(12,1)<32;16,2>
2157
 
2158
        mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(16,0)<32;16,2>
2159
        mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(9,0)<32;16,2>
2160
        mov (16) ubTEMP1(1,0)<1>      ubMEDIAN_TEMP(16,1)<32;16,2>
2161
 		mov (16) ubTEMP1(1,16)<1>     ubMEDIAN_TEMP(9,1)<32;16,2>
2162
 
2163
 (f0.0) mov (16) ubMEDIAN_TEMP(16,0)<2>   ubMEDIAN_TEMP(17,0)<32;16,2>
2164
 (f0.1) mov (16) ubMEDIAN_TEMP(9,0)<2>	ubMEDIAN_TEMP(12,0)<32;16,2>
2165
 (f1.0) mov (16) ubMEDIAN_TEMP(16,1)<2>  	ubMEDIAN_TEMP(17,1)<32;16,2>
2166
 (f1.1) mov (16) ubMEDIAN_TEMP(9,1)<2>	ubMEDIAN_TEMP(12,1)<32;16,2>
2167
 
2168
 (f0.0) mov (16) ubMEDIAN_TEMP(17,0)<2>     ubTEMP1(0,0)<16;16,1>
2169
 (f0.1) mov (16) ubMEDIAN_TEMP(12,0)<2>     ubTEMP1(0,16)<16;16,1>
2170
 (f1.0) mov (16) ubMEDIAN_TEMP(17,1)<2>     ubTEMP1(1,0)<16;16,1>
2171
 (f1.1) mov (16) ubMEDIAN_TEMP(12,1)<2>     ubTEMP1(1,16)<16;16,1>
2172
 
2173
 // NOTE:
2174
 // Compare v0 to v6 to find the minimum.
2175
 // Store the minimum for future use.
2176
 //TODO - Find if MIN is needed.
2177
 //cmp.l.f0.0  (16) null:w          			ubMEDIAN_TEMP(%1+0,0)<32;16,2> 	ubMEDIAN_TEMP(%1+6,0)<32;16,2>
2178
 //cmp.l.f1.0  (16) null:w          			ubMEDIAN_TEMP(%1+0,1)<32;16,2> 	ubMEDIAN_TEMP(%1+6,1)<32;16,2>
2179
 //(f0.0)  mov (16) ubCURR_MIN(0,%2*16+0)<1>   		ubMEDIAN_TEMP(%1+0,0)<32;16,2>
2180
 //(f1.0)  mov (16) ubCURR_MIN(1,%2*16+0)<1>   		ubMEDIAN_TEMP(%1+0,1)<32;16,2>
2181
 //(-f0.0) mov (16) ubCURR_MIN(0,%2*16+0)<1>   		ubMEDIAN_TEMP(%1+6,0)<32;16,2>
2182
 //(-f1.0) mov (16) ubCURR_MIN(1,%2*16+0)<1>   		ubMEDIAN_TEMP(%1+6,1)<32;16,2>
2183
 
2184
 // MedianSwap(v5, v8) - U
2185
 // MedianSwap(v4, v7) - U
2186
 // MedianSwap(v5, v8) - V
2187
 // MedianSwap(v4, v7) - V
2188
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(14,0)<32;16,2>   	ubMEDIAN_TEMP(17,0)<32;16,2>
2189
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(13,0)<32;16,2>  	ubMEDIAN_TEMP(16,0)<32;16,2>
2190
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(14,1)<32;16,2> 	ubMEDIAN_TEMP(17,1)<32;16,2>
2191
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(13,1)<32;16,2> 	ubMEDIAN_TEMP(16,1)<32;16,2>
2192
 
2193
        mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(14,0)<32;16,2>
2194
        mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(13,0)<32;16,2>
2195
        mov (16) ubTEMP1(1,0)<1>      ubMEDIAN_TEMP(14,1)<32;16,2>
2196
 		mov (16) ubTEMP1(1,16)<1>     ubMEDIAN_TEMP(13,1)<32;16,2>
2197
 
2198
 (f0.0) mov (16) ubMEDIAN_TEMP(14,0)<2>    	ubMEDIAN_TEMP(17,0)<32;16,2>
2199
 (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2>		ubMEDIAN_TEMP(16,0)<32;16,2>
2200
 (f1.0) mov (16) ubMEDIAN_TEMP(14,1)<2>  	ubMEDIAN_TEMP(17,1)<32;16,2>
2201
 (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2>		ubMEDIAN_TEMP(16,1)<32;16,2>
2202
 
2203
 (f0.0) mov (16) ubMEDIAN_TEMP(17,0)<2>     ubTEMP1(0,0)<16;16,1>
2204
 (f0.1) mov (16) ubMEDIAN_TEMP(16,0)<2>     ubTEMP1(0,16)<16;16,1>
2205
 (f1.0) mov (16) ubMEDIAN_TEMP(17,1)<2>     ubTEMP1(1,0)<16;16,1>
2206
 (f1.1) mov (16) ubMEDIAN_TEMP(16,1)<2>     ubTEMP1(1,16)<16;16,1>
2207
 
2208
// NOTE:
2209
// Compare v2 to v8 to find the maximum.
2210
// Store the maximum for future use.
2211
 //TODO - Find if MAX is needed.
2212
// cmp.g.f0.0  (16) null:w         ubMEDIAN_TEMP(%1+2,0)<32;16,2> ubMEDIAN_TEMP(%1+8,0)<32;16,2>
2213
// cmp.g.f1.0  (16) null:w         ubMEDIAN_TEMP(%1+2,1)<32;16,2> ubMEDIAN_TEMP(%1+8,1)<32;16,2>
2214
//(f0.0)  mov (16) ubCURR_MAX(0,%2*16+0)<1>   	ubMEDIAN_TEMP(%1+2,0)<32;16,2>
2215
//(f1.0)  mov (16) ubCURR_MAX(1,%2*16+0)<1>   	ubMEDIAN_TEMP(%1+2,1)<32;16,2>
2216
//(-f0.0) mov (16) ubCURR_MAX(0,%2*16+0)<1>   	ubMEDIAN_TEMP(%1+8,0)<32;16,2>
2217
//(-f1.0) mov (16) ubCURR_MAX(1,%2*16+0)<1>   	ubMEDIAN_TEMP(%1+8,1)<32;16,2>
2218
 
2219
// MedianSwap(v3, v6) - U
2220
// MedianSwap(v1, v4) - U
2221
// MedianSwap(v3, v6) - V
2222
// MedianSwap(v1, v4) - V
2223
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(12,0)<32;16,2>   	ubMEDIAN_TEMP(15,0)<32;16,2>
2224
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(10,0)<32;16,2>  	ubMEDIAN_TEMP(13,0)<32;16,2>
2225
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(12,1)<32;16,2> 	ubMEDIAN_TEMP(15,1)<32;16,2>
2226
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(10,1)<32;16,2> 	ubMEDIAN_TEMP(13,1)<32;16,2>
2227
 
2228
 (f0.0) mov (16) ubMEDIAN_TEMP(15,0)<2>     ubMEDIAN_TEMP(12,0)<32;16,2>
2229
 (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2>     ubMEDIAN_TEMP(10,0)<32;16,2>
2230
 (f1.0) mov (16) ubMEDIAN_TEMP(15,1)<2>     ubMEDIAN_TEMP(12,1)<32;16,2>
2231
 (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2>     ubMEDIAN_TEMP(10,1)<32;16,2>
2232
 
2233
 // MedianSwap(v2,v5) - U
2234
 // MedianSwap(v4,v7) - U
2235
 // MedianSwap(v2,v5) - V
2236
 // MedianSwap(v4,v7) - V
2237
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(11,0)<32;16,2>   	ubMEDIAN_TEMP(14,0)<32;16,2>
2238
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(13,0)<32;16,2>  	ubMEDIAN_TEMP(16,0)<32;16,2>
2239
 cmp.g.f1.0 (16) null:w          ubMEDIAN_TEMP(11,1)<32;16,2> 	ubMEDIAN_TEMP(14,1)<32;16,2>
2240
 cmp.g.f1.1 (16) null:w          ubMEDIAN_TEMP(13,1)<32;16,2> 	ubMEDIAN_TEMP(16,1)<32;16,2>
2241
 
2242
 (f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2>     ubMEDIAN_TEMP(14,0)<32;16,2>
2243
 (f0.1) mov (16) ubMEDIAN_TEMP(13,0)<2>     ubMEDIAN_TEMP(16,0)<32;16,2>
2244
 (f1.0) mov (16) ubMEDIAN_TEMP(11,1)<2>     ubMEDIAN_TEMP(14,1)<32;16,2>
2245
 (f1.1) mov (16) ubMEDIAN_TEMP(13,1)<2>     ubMEDIAN_TEMP(16,1)<32;16,2>
2246
 
2247
 // MedianSwap(v4,v2) - U
2248
 // MedianSwap(v4,v2) - V
2249
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(13,0)<32;16,2>   	ubMEDIAN_TEMP(11,0)<32;16,2>
2250
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(13,1)<32;16,2>  	ubMEDIAN_TEMP(11,1)<32;16,2>
2251
 
2252
        mov (16) ubTEMP1(0,0)<1>      ubMEDIAN_TEMP(13,0)<32;16,2>
2253
        mov (16) ubTEMP1(0,16)<1>     ubMEDIAN_TEMP(13,1)<32;16,2>
2254
 
2255
 (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2>    	ubMEDIAN_TEMP(11,0)<32;16,2>
2256
 (f0.1) mov (16) ubMEDIAN_TEMP(13,1)<2>		ubMEDIAN_TEMP(11,1)<32;16,2>
2257
 
2258
 (f0.0) mov (16) ubMEDIAN_TEMP(11,0)<2>     ubTEMP1(0,0)<16;16,1>
2259
 (f0.1) mov (16) ubMEDIAN_TEMP(11,1)<2>     ubTEMP1(0,16)<16;16,1>
2260
 
2261
 // MedianSwap(v6,v4) - U
2262
 // MedianSwap(v6,v4) - V
2263
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(15,0)<32;16,2>   ubMEDIAN_TEMP(13,0)<32;16,2>
2264
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(15,1)<32;16,2>   ubMEDIAN_TEMP(13,1)<32;16,2>
2265
 
2266
 (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2>    	ubMEDIAN_TEMP(15,0)<32;16,2>
2267
 (f0.1) mov (16) ubMEDIAN_TEMP(13,1)<2>		ubMEDIAN_TEMP(15,1)<32;16,2>
2268
 
2269
 // MedianSwap(v4,v2) - U
2270
 // MedianSwap(v4,v2) - V
2271
 cmp.g.f0.0 (16) null:w          ubMEDIAN_TEMP(13,0)<32;16,2>   	ubMEDIAN_TEMP(11,0)<32;16,2>
2272
 cmp.g.f0.1 (16) null:w          ubMEDIAN_TEMP(13,1)<32;16,2>  	ubMEDIAN_TEMP(11,1)<32;16,2>
2273
 
2274
 (f0.0) mov (16) ubMEDIAN_TEMP(13,0)<2>    	ubMEDIAN_TEMP(11,0)<32;16,2>
2275
 (f0.1) mov (16) ubMEDIAN_TEMP(13,1)<2>		ubMEDIAN_TEMP(11,1)<32;16,2>
2276
 
2277
// Sobel Value calculation for the current pixel v4
2278
//          v2 v1 v0
2279
//           *  *  *     <--- Different field - not used
2280
//          v5 v4 v3
2281
//           *  *  *     <--- Different field - not used
2282
//          v8 v7 v6
2283
//
2284
//    Gx = -v0 - 2*v3 - v6 + v2 + 2*v5 + v8
2285
//    Gy =  v0 + 2*v1 + v2 - v6 - 2*v7 - v8
2286
//
2287
//  Sobel = (|Gx| + |Gy|) >> 3
2288
 
2289
//TODO - Change Later - rT
2290
add (1) a0.0:uw  a0.0<0;1,0>:uw -128:uw
2291
 
2292
// - 2 * v3
2293
mul (16) acc0.0<1>:w  		r[a0.0,64]<16;16,1>:ub  		-2:w
2294
// + v8
2295
mac (16) acc0.0<1>:w  		r[a0.0,132]<16;16,1>:ub   		1:w
2296
// - v0
2297
mac (16) acc0.0<1>:w  		r[a0.0,0]<16;16,1>:ub  		-1:w
2298
// - v6
2299
mac (16) acc0.0<1>:w  		r[a0.0,128]<16;16,1>:ub  		-1:w
2300
// + v2
2301
mac (16) acc0.0<1>:w  		r[a0.0,4]<16;16,1>:ub   		1:w
2302
// + 2 * v5
2303
mac (16) wSOBEL_X(0)<1> 	r[a0.0,68]<16;16,1>:ub   		2:w
2304
// - 2 * v3
2305
mul (16) acc0.0<1>:w  		r[a0.0,96]<16;16,1>:ub  		-2:w
2306
// + v8
2307
mac (16) acc0.0<1>:w  		r[a0.0,164]<16;16,1>:ub   		1:w
2308
// - v0
2309
mac (16) acc0.0<1>:w  		r[a0.0,32]<16;16,1>:ub  		-1:w
2310
// - v6
2311
mac (16) acc0.0<1>:w  		r[a0.0,160]<16;16,1>:ub  		-1:w
2312
// + v2
2313
mac (16) acc0.0<1>:w  		r[a0.0,36]<16;16,1>:ub   		1:w
2314
// + 2 * v5
2315
mac (16) wSOBEL_X(1)<1> 	r[a0.0,100]<16;16,1>:ub   		2:w
2316
// - 2 * v3
2317
mul (16) acc0.0<1>:w  		r[a0.0,128]<16;16,1>:ub  		-2:w
2318
// + v8
2319
mac (16) acc0.0<1>:w  		r[a0.0,196]<16;16,1>:ub   		1:w
2320
// - v0
2321
mac (16) acc0.0<1>:w  		r[a0.0,64]<16;16,1>:ub  		-1:w
2322
// - v6
2323
mac (16) acc0.0<1>:w  		r[a0.0,192]<16;16,1>:ub  		-1:w
2324
// + v2
2325
mac (16) acc0.0<1>:w  		r[a0.0,68]<16;16,1>:ub   		1:w
2326
// + 2 * v5
2327
mac (16) wSOBEL_X(2)<1> 	r[a0.0,132]<16;16,1>:ub   		2:w
2328
// - 2 * v3
2329
mul (16) acc0.0<1>:w  		r[a0.0,160]<16;16,1>:ub  		-2:w
2330
// + v8
2331
mac (16) acc0.0<1>:w  		r[a0.0,228]<16;16,1>:ub   		1:w
2332
// - v0
2333
mac (16) acc0.0<1>:w  		r[a0.0,96]<16;16,1>:ub  		-1:w
2334
// - v6
2335
mac (16) acc0.0<1>:w  		r[a0.0,224]<16;16,1>:ub  		-1:w
2336
// + v2
2337
mac (16) acc0.0<1>:w  		r[a0.0,100]<16;16,1>:ub   		1:w
2338
// + 2 * v5
2339
mac (16) wSOBEL_X(3)<1> 	r[a0.0,164]<16;16,1>:ub   		2:w
2340
 
2341
// + 2 * v1
2342
mul (16) acc0.0<1>:w  r[a0.0,2]<16;16,1>:ub   	2:w
2343
// + v0
2344
mac (16) acc0.0<1>:w  r[a0.0,0]<16;16,1>:ub   	1:w
2345
// - v8
2346
mac (16) acc0.0<1>:w  r[a0.0,132]<16;16,1>:ub  -1:w
2347
// + v2
2348
mac (16) acc0.0<1>:w  r[a0.0,4]<16;16,1>:ub   	1:w
2349
// - v6
2350
mac (16) acc0.0<1>:w  r[a0.0,128]<16;16,1>:ub  -1:w
2351
// - 2 * v7
2352
mac (16) acc0.0<1>:w  r[a0.0,130]<16;16,1>:ub  -2:w
2353
 
2354
add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w		(abs)wSOBEL_X(0)<16;16,1>
2355
 
2356
shr (16) uwSOBEL(0)<1>	acc0.0<16;16,1>:uw   3:uw
2357
// + 2 * v1
2358
mul (16) acc0.0<1>:w  r[a0.0,34]<16;16,1>:ub   	2:w
2359
// + v0
2360
mac (16) acc0.0<1>:w  r[a0.0,32]<16;16,1>:ub   	1:w
2361
// - v8
2362
mac (16) acc0.0<1>:w  r[a0.0,164]<16;16,1>:ub  -1:w
2363
// + v2
2364
mac (16) acc0.0<1>:w  r[a0.0,36]<16;16,1>:ub   	1:w
2365
// - v6
2366
mac (16) acc0.0<1>:w  r[a0.0,160]<16;16,1>:ub  -1:w
2367
// - 2 * v7
2368
mac (16) acc0.0<1>:w  r[a0.0,162]<16;16,1>:ub  -2:w
2369
 
2370
add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w		(abs)wSOBEL_X(1)<16;16,1>
2371
 
2372
shr (16) uwSOBEL(1)<1>	acc0.0<16;16,1>:uw   3:uw
2373
// + 2 * v1
2374
mul (16) acc0.0<1>:w  r[a0.0,66]<16;16,1>:ub   	2:w
2375
// + v0
2376
mac (16) acc0.0<1>:w  r[a0.0,64]<16;16,1>:ub   	1:w
2377
// - v8
2378
mac (16) acc0.0<1>:w  r[a0.0,196]<16;16,1>:ub  -1:w
2379
// + v2
2380
mac (16) acc0.0<1>:w  r[a0.0,68]<16;16,1>:ub   	1:w
2381
// - v6
2382
mac (16) acc0.0<1>:w  r[a0.0,192]<16;16,1>:ub  -1:w
2383
// - 2 * v7
2384
mac (16) acc0.0<1>:w  r[a0.0,194]<16;16,1>:ub  -2:w
2385
 
2386
add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w		(abs)wSOBEL_X(2)<16;16,1>
2387
 
2388
shr (16) uwSOBEL(2)<1>	acc0.0<16;16,1>:uw   3:uw
2389
// + 2 * v1
2390
mul (16) acc0.0<1>:w  r[a0.0,98]<16;16,1>:ub   	2:w
2391
// + v0
2392
mac (16) acc0.0<1>:w  r[a0.0,96]<16;16,1>:ub   	1:w
2393
// - v8
2394
mac (16) acc0.0<1>:w  r[a0.0,228]<16;16,1>:ub  -1:w
2395
// + v2
2396
mac (16) acc0.0<1>:w  r[a0.0,100]<16;16,1>:ub   	1:w
2397
// - v6
2398
mac (16) acc0.0<1>:w  r[a0.0,224]<16;16,1>:ub  -1:w
2399
// - 2 * v7
2400
mac (16) acc0.0<1>:w  r[a0.0,226]<16;16,1>:ub  -2:w
2401
 
2402
add (16) acc0.0<1>:uw (abs)acc0.0<16;16,1>:w		(abs)wSOBEL_X(3)<16;16,1>
2403
 
2404
shr (16) uwSOBEL(3)<1>	acc0.0<16;16,1>:uw   3:uw
2405
 
2406
//Mov Median in CURBE_TEMP to free up temp space.
2407
mov (16)	ubMEDIAN(0,0)<1>  	ubMEDIAN_TEMP(4,0)<16;16,1>
2408
mov (16)	ubMEDIAN(0,16)<1> ubMEDIAN_TEMP(4,16)<16;16,1>
2409
mov (16)	ubMEDIAN(0,32)<1>  	ubMEDIAN_TEMP(13,0)<16;16,1>
2410
mov (16)	ubMEDIAN(0,48)<1> ubMEDIAN_TEMP(13,16)<16;16,1>
2411
 
2412
// Find:
2413
//      absDiff = abs(ubCurY - ubMedian)
2414
// Find the difference between pixel and median value.
2415
 
2416
//Median is interleaved. So difference is also interleaved.
2417
 
2418
//------------------------------------------------------------------------------------------
2419
//Process 16 U and 16 V pixels here and rest later.
2420
// first row - v0,v1,v2
2421
add (16) wDIFF(0)<1>   r[a0.0,0]<16;16,1>:ub  -ubMEDIAN(0,0)<16;16,1>
2422
add (16) wDIFF(1)<1>   r[a0.0,2]<16;16,1>:ub  -ubMEDIAN(0,0)<16;16,1>
2423
add (16) wDIFF(2)<1>   r[a0.0,4]<16;16,1>:ub  -ubMEDIAN(0,0)<16;16,1>
2424
 
2425
// second row - v3,v4,v5
2426
add (16) wDIFF(3)<1>   r[a0.0,64]<16;16,1>:ub  -ubMEDIAN(0,0)<16;16,1>
2427
add (16) wDIFF(4)<1>   r[a0.0,66]<16;16,1>:ub  -ubMEDIAN(0,0)<16;16,1>
2428
add (16) wDIFF(5)<1>   r[a0.0,68]<16;16,1>:ub  -ubMEDIAN(0,0)<16;16,1>
2429
 
2430
// third row - v6,v7,v8
2431
add (16) wDIFF(6)<1>   r[a0.0,128]<16;16,1>:ub  -ubMEDIAN(0,0)<16;16,1>
2432
add (16) wDIFF(7)<1>   r[a0.0,130]<16;16,1>:ub  -ubMEDIAN(0,0)<16;16,1>
2433
add (16) wDIFF(8)<1>   r[a0.0,132]<16;16,1>:ub  -ubMEDIAN(0,0)<16;16,1>
2434
// first row - v0,v1,v2
2435
add (16) wDIFF(9)<1>   r[a0.0,32]<16;16,1>:ub  -ubMEDIAN(0,16)<16;16,1>
2436
add (16) wDIFF(10)<1>   r[a0.0,34]<16;16,1>:ub  -ubMEDIAN(0,16)<16;16,1>
2437
add (16) wDIFF(11)<1>   r[a0.0,36]<16;16,1>:ub  -ubMEDIAN(0,16)<16;16,1>
2438
 
2439
// second row - v3,v4,v5
2440
add (16) wDIFF(12)<1>   r[a0.0,96]<16;16,1>:ub  -ubMEDIAN(0,16)<16;16,1>
2441
add (16) wDIFF(13)<1>   r[a0.0,98]<16;16,1>:ub  -ubMEDIAN(0,16)<16;16,1>
2442
add (16) wDIFF(14)<1>   r[a0.0,100]<16;16,1>:ub  -ubMEDIAN(0,16)<16;16,1>
2443
 
2444
// third row - v6,v7,v8
2445
add (16) wDIFF(15)<1>   r[a0.0,160]<16;16,1>:ub  -ubMEDIAN(0,16)<16;16,1>
2446
add (16) wDIFF(16)<1>   r[a0.0,162]<16;16,1>:ub  -ubMEDIAN(0,16)<16;16,1>
2447
add (16) wDIFF(17)<1>   r[a0.0,164]<16;16,1>:ub  -ubMEDIAN(0,16)<16;16,1>
2448
 
2449
//TODO - Change Later - rT
2450
add (1) a0.0:uw  a0.0<0;1,0>:uw 64:uw
2451
 
2452
// Find sum of all absolute differences AND
2453
// maximum absolute difference for 16 U and 16 V here.
2454
//First 2 rows of 8x4
2455
//Compare 0-1, 2-3, 4-5, 6-7
2456
cmp.g.f0.0 (16) null:uw         (abs)wDIFF(0)<16;16,1>   (abs)wDIFF(1)<16;16,1>
2457
cmp.g.f0.1 (16) null:uw         (abs)wDIFF(2)<16;16,1>   (abs)wDIFF(3)<16;16,1>
2458
cmp.g.f1.0 (16) null:uw         (abs)wDIFF(4)<16;16,1>   (abs)wDIFF(5)<16;16,1>
2459
cmp.g.f1.1 (16) null:uw         (abs)wDIFF(6)<16;16,1>   (abs)wDIFF(7)<16;16,1>
2460
 
2461
//Calculate SAD
2462
	add        (16) acc0.0<1>:uw     (abs)wDIFF(0)<16;16,1>  (abs)wDIFF(1)<16;16,1>
2463
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(2)<16;16,1>
2464
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(3)<16;16,1>
2465
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(4)<16;16,1>
2466
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(5)<16;16,1>
2467
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(6)<16;16,1>
2468
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(7)<16;16,1>
2469
	add        (16) uwSOAD(0)<1>  	 acc0.0<16;16,1>:uw 		(abs)wDIFF(8)<16;16,1>
2470
 
2471
(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(0)<16;16,1>   (abs)wDIFF(1)<16;16,1>
2472
(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(2)<16;16,1>   (abs)wDIFF(3)<16;16,1>
2473
(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(4)<16;16,1>   (abs)wDIFF(5)<16;16,1>
2474
(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(6)<16;16,1>   (abs)wDIFF(7)<16;16,1>
2475
 
2476
//------------
2477
	//DIFF(0-7) is not needed here. Populate it.
2478
	// first row - v0,v1,v2
2479
	add (16) wDIFF(0)<1>   r[a0.0,0]<16;16,1>:ub  -ubMEDIAN(1,0)<16;16,1>
2480
	add (16) wDIFF(1)<1>   r[a0.0,2]<16;16,1>:ub  -ubMEDIAN(1,0)<16;16,1>
2481
	add (16) wDIFF(2)<1>   r[a0.0,4]<16;16,1>:ub  -ubMEDIAN(1,0)<16;16,1>
2482
 
2483
	// second row - v3,v4,v5
2484
	add (16) wDIFF(3)<1>   r[a0.0,64]<16;16,1>:ub  -ubMEDIAN(1,0)<16;16,1>
2485
	add (16) wDIFF(4)<1>   r[a0.0,66]<16;16,1>:ub  -ubMEDIAN(1,0)<16;16,1>
2486
	add (16) wDIFF(5)<1>   r[a0.0,68]<16;16,1>:ub  -ubMEDIAN(1,0)<16;16,1>
2487
 
2488
	// third row - v6,v7
2489
	add (16) wDIFF(6)<1>   r[a0.0,128]<16;16,1>:ub  -ubMEDIAN(1,0)<16;16,1>
2490
	add (16) wDIFF(7)<1>   r[a0.0,130]<16;16,1>:ub  -ubMEDIAN(1,0)<16;16,1>
2491
//------------
2492
 
2493
//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7)
2494
cmp.g.f0.0 (16) null:uw      uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(1)<16;16,1>
2495
cmp.g.f0.1 (16) null:uw      uwCURBE_TEMP(2)<16;16,1>   uwCURBE_TEMP(3)<16;16,1>
2496
 
2497
(f0.0)sel (16) uwCURBE_TEMP(0)<1>  uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(1)<16;16,1>
2498
(f0.1)sel (16) uwCURBE_TEMP(2)<1>  uwCURBE_TEMP(2)<16;16,1>   uwCURBE_TEMP(3)<16;16,1>
2499
 
2500
//Compare Max(0,1,2,3) - Max(4,5,6,7)
2501
cmp.g.f0.0 (16) null:uw      		uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(2)<16;16,1>
2502
(f0.0)sel  (16) uwCURBE_TEMP(0)<1> 	uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(2)<16;16,1>
2503
 
2504
//Compare Max(0,1,2,3,4,5,6,7) - 8
2505
cmp.g.f0.0 (16) null:uw      			uwCURBE_TEMP(0)<16;16,1>   (abs)wDIFF(8)<16;16,1>
2506
(f0.0)sel  (16) uwMAX_ABS_DIFF(0)<1> uwCURBE_TEMP(0)<16;16,1>   (abs)wDIFF(8)<16;16,1>
2507
 
2508
//------------
2509
	//Load v8 - DIFF(8)
2510
	add (16) wDIFF(8)<1>   			r[a0.0,132]<16;16,1>:ub  -ubMEDIAN(1,0)<16;16,1>
2511
//------------
2512
//Compare 0-1, 2-3, 4-5, 6-7
2513
cmp.g.f0.0 (16) null:uw         (abs)wDIFF(9)<16;16,1>   (abs)wDIFF(10)<16;16,1>
2514
cmp.g.f0.1 (16) null:uw         (abs)wDIFF(11)<16;16,1>   (abs)wDIFF(12)<16;16,1>
2515
cmp.g.f1.0 (16) null:uw         (abs)wDIFF(13)<16;16,1>   (abs)wDIFF(14)<16;16,1>
2516
cmp.g.f1.1 (16) null:uw         (abs)wDIFF(15)<16;16,1>   (abs)wDIFF(16)<16;16,1>
2517
 
2518
//Calculate SAD
2519
	add        (16) acc0.0<1>:uw     (abs)wDIFF(9)<16;16,1>  (abs)wDIFF(10)<16;16,1>
2520
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(11)<16;16,1>
2521
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(12)<16;16,1>
2522
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(13)<16;16,1>
2523
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(14)<16;16,1>
2524
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(15)<16;16,1>
2525
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(16)<16;16,1>
2526
	add        (16) uwSOAD(1)<1>  	 acc0.0<16;16,1>:uw 		(abs)wDIFF(17)<16;16,1>
2527
 
2528
(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(9)<16;16,1>   (abs)wDIFF(10)<16;16,1>
2529
(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(11)<16;16,1>   (abs)wDIFF(12)<16;16,1>
2530
(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(13)<16;16,1>   (abs)wDIFF(14)<16;16,1>
2531
(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(15)<16;16,1>   (abs)wDIFF(16)<16;16,1>
2532
 
2533
//------------
2534
	//DIFF(0-7) is not needed here. Populate it.
2535
	// first row - v0,v1,v2
2536
	add (16) wDIFF(9)<1>   r[a0.0,32]<16;16,1>:ub  -ubMEDIAN(1,16)<16;16,1>
2537
	add (16) wDIFF(10)<1>   r[a0.0,34]<16;16,1>:ub  -ubMEDIAN(1,16)<16;16,1>
2538
	add (16) wDIFF(11)<1>   r[a0.0,36]<16;16,1>:ub  -ubMEDIAN(1,16)<16;16,1>
2539
 
2540
	// second row - v3,v4,v5
2541
	add (16) wDIFF(12)<1>   r[a0.0,96]<16;16,1>:ub  -ubMEDIAN(1,16)<16;16,1>
2542
	add (16) wDIFF(13)<1>   r[a0.0,98]<16;16,1>:ub  -ubMEDIAN(1,16)<16;16,1>
2543
	add (16) wDIFF(14)<1>   r[a0.0,100]<16;16,1>:ub  -ubMEDIAN(1,16)<16;16,1>
2544
 
2545
	// third row - v6,v7
2546
	add (16) wDIFF(15)<1>   r[a0.0,160]<16;16,1>:ub  -ubMEDIAN(1,16)<16;16,1>
2547
	add (16) wDIFF(16)<1>   r[a0.0,162]<16;16,1>:ub  -ubMEDIAN(1,16)<16;16,1>
2548
//------------
2549
 
2550
//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7)
2551
cmp.g.f0.0 (16) null:uw      uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(1)<16;16,1>
2552
cmp.g.f0.1 (16) null:uw      uwCURBE_TEMP(2)<16;16,1>   uwCURBE_TEMP(3)<16;16,1>
2553
 
2554
(f0.0)sel (16) uwCURBE_TEMP(0)<1>  uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(1)<16;16,1>
2555
(f0.1)sel (16) uwCURBE_TEMP(2)<1>  uwCURBE_TEMP(2)<16;16,1>   uwCURBE_TEMP(3)<16;16,1>
2556
 
2557
//Compare Max(0,1,2,3) - Max(4,5,6,7)
2558
cmp.g.f0.0 (16) null:uw      		uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(2)<16;16,1>
2559
(f0.0)sel  (16) uwCURBE_TEMP(0)<1> 	uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(2)<16;16,1>
2560
 
2561
//Compare Max(0,1,2,3,4,5,6,7) - 8
2562
cmp.g.f0.0 (16) null:uw      			uwCURBE_TEMP(0)<16;16,1>   (abs)wDIFF(17)<16;16,1>
2563
(f0.0)sel  (16) uwMAX_ABS_DIFF(1)<1> uwCURBE_TEMP(0)<16;16,1>   (abs)wDIFF(17)<16;16,1>
2564
 
2565
//------------
2566
	//Load v8 - DIFF(8)
2567
	add (16) wDIFF(17)<1>   			r[a0.0,164]<16;16,1>:ub  -ubMEDIAN(1,16)<16;16,1>
2568
//------------
2569
 
2570
//if ((sobel_edge_measure < m_SobelEdgeThreshold) && ((block_max-block_min) < m_LocalDiffThreshold))
2571
//						if (sigma_mb_min > sigma)
2572
//							sigma_mb_min = sigma;
2573
 
2574
//NOTE: block_min is always zero as median is one of the value in 3x3 block. So no need o calculate it.
2575
//		So just do -
2576
//if ((sobel_edge_measure < m_SobelEdgeThreshold) && ((block_max) < m_LocalDiffThreshold) && ( sigma < sigma_mb_min))
2577
//							sigma_mb_min = sigma;
2578
 
2579
//We are processing 32 bytes of U and 32 bytes of V - each of size 8x4.
2580
//Compare first 8 bytes with max possible (255).
2581
//Start above condition from second 8 bytes.
2582
 
2583
//TODO - Change Later - rT
2584
//	mov (1)	pCUR_MIN_SOAD_8x4:uw	1752:uw		//r54.24:ub
2585
 
2586
//First row of 8x4
2587
        cmp.l.f0.0 	(16) null:uw     		uwSOBEL(0)<16;16,1>         r55.30<0;2,1>:ub
2588
(f0.0)  cmp.l.f0.0 	(16) null:uw     		uwMAX_ABS_DIFF(0)<16;16,1>  r55.28<0;2,1>:ub
2589
(f0.0)  cmp.l.f0.0 	(16) null:uw     		uwSOAD(0)<16;16,1>			255:uw
2590
(f0.0)  sel 		(16) uwSOBEL(0)<1>   uwSOAD(0)<16;16,1>			255:uw
2591
 
2592
//Second row of 8x4
2593
		cmp.l.f0.0 	(16) null:uw     		uwSOBEL(1)<16;16,1>         r55.30<0;2,1>:ub
2594
(f0.0)  cmp.l.f0.0 	(16) null:uw     		uwMAX_ABS_DIFF(1)<16;16,1>  r55.28<0;2,1>:ub
2595
(f0.0)  cmp.l.f0.0 	(16) null:uw     		uwSOAD(1)<16;16,1>			uwSOBEL(0)<16;16,1>
2596
(f0.0)  mov 		(16) uwSOBEL(0)<1>   uwSOAD(1)<16;16,1>
2597
 
2598
// Find sum of all absolute differences AND
2599
// maximum absolute difference for 16 U and 16 V here.
2600
//Second 2 rows of 8x4
2601
//Compare 0-1, 2-3, 4-5, 6-7
2602
cmp.g.f0.0 (16) null:uw         (abs)wDIFF(0)<16;16,1>   (abs)wDIFF(1)<16;16,1>
2603
cmp.g.f0.1 (16) null:uw         (abs)wDIFF(2)<16;16,1>   (abs)wDIFF(3)<16;16,1>
2604
cmp.g.f1.0 (16) null:uw         (abs)wDIFF(4)<16;16,1>   (abs)wDIFF(5)<16;16,1>
2605
cmp.g.f1.1 (16) null:uw         (abs)wDIFF(6)<16;16,1>   (abs)wDIFF(7)<16;16,1>
2606
 
2607
//Calculate SAD
2608
	add        (16) acc0.0<1>:uw     (abs)wDIFF(0)<16;16,1>  (abs)wDIFF(1)<16;16,1>
2609
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(2)<16;16,1>
2610
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(3)<16;16,1>
2611
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(4)<16;16,1>
2612
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(5)<16;16,1>
2613
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(6)<16;16,1>
2614
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(7)<16;16,1>
2615
	add        (16) uwSOAD(0)<1> 	 acc0.0<16;16,1>:uw 		(abs)wDIFF(8)<16;16,1>
2616
 
2617
(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(0)<16;16,1>   (abs)wDIFF(1)<16;16,1>
2618
(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(2)<16;16,1>   (abs)wDIFF(3)<16;16,1>
2619
(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(4)<16;16,1>   (abs)wDIFF(5)<16;16,1>
2620
(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(6)<16;16,1>   (abs)wDIFF(7)<16;16,1>
2621
 
2622
//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7)
2623
cmp.g.f0.0 (16) null:uw      uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(1)<16;16,1>
2624
cmp.g.f0.1 (16) null:uw      uwCURBE_TEMP(2)<16;16,1>   uwCURBE_TEMP(3)<16;16,1>
2625
 
2626
(f0.0)sel (16) uwCURBE_TEMP(0)<1>  uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(1)<16;16,1>
2627
(f0.1)sel (16) uwCURBE_TEMP(2)<1>  uwCURBE_TEMP(2)<16;16,1>   uwCURBE_TEMP(3)<16;16,1>
2628
 
2629
//Compare Max(0,1,2,3) - Max(4,5,6,7)
2630
cmp.g.f0.0 (16) null:uw      		uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(2)<16;16,1>
2631
(f0.0)sel  (16) uwCURBE_TEMP(0)<1> 	uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(2)<16;16,1>
2632
 
2633
//Compare Max(0,1,2,3,4,5,6,7) - 8
2634
cmp.g.f0.0 (16) null:uw      			uwCURBE_TEMP(0)<16;16,1>   (abs)wDIFF(8)<16;16,1>
2635
(f0.0)sel  (16) uwMAX_ABS_DIFF(0)<1> 	uwCURBE_TEMP(0)<16;16,1>   (abs)wDIFF(8)<16;16,1>
2636
//Compare 0-1, 2-3, 4-5, 6-7
2637
cmp.g.f0.0 (16) null:uw         (abs)wDIFF(9)<16;16,1>   (abs)wDIFF(10)<16;16,1>
2638
cmp.g.f0.1 (16) null:uw         (abs)wDIFF(11)<16;16,1>   (abs)wDIFF(12)<16;16,1>
2639
cmp.g.f1.0 (16) null:uw         (abs)wDIFF(13)<16;16,1>   (abs)wDIFF(14)<16;16,1>
2640
cmp.g.f1.1 (16) null:uw         (abs)wDIFF(15)<16;16,1>   (abs)wDIFF(16)<16;16,1>
2641
 
2642
//Calculate SAD
2643
	add        (16) acc0.0<1>:uw     (abs)wDIFF(9)<16;16,1>  (abs)wDIFF(10)<16;16,1>
2644
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(11)<16;16,1>
2645
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(12)<16;16,1>
2646
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(13)<16;16,1>
2647
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(14)<16;16,1>
2648
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(15)<16;16,1>
2649
	add        (16) acc0.0<1>:uw     acc0.0<16;16,1>:uw 		(abs)wDIFF(16)<16;16,1>
2650
	add        (16) uwSOAD(1)<1> 	 acc0.0<16;16,1>:uw 		(abs)wDIFF(17)<16;16,1>
2651
 
2652
(f0.0) sel (16) uwCURBE_TEMP(0)<1> (abs)wDIFF(9)<16;16,1>   (abs)wDIFF(10)<16;16,1>
2653
(f0.1) sel (16) uwCURBE_TEMP(1)<1> (abs)wDIFF(11)<16;16,1>   (abs)wDIFF(12)<16;16,1>
2654
(f1.0) sel (16) uwCURBE_TEMP(2)<1> (abs)wDIFF(13)<16;16,1>   (abs)wDIFF(14)<16;16,1>
2655
(f1.1) sel (16) uwCURBE_TEMP(3)<1> (abs)wDIFF(15)<16;16,1>   (abs)wDIFF(16)<16;16,1>
2656
 
2657
//Compare Max(0,1) - Max(2,3), Max(4,5) - Max(6,7)
2658
cmp.g.f0.0 (16) null:uw      uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(1)<16;16,1>
2659
cmp.g.f0.1 (16) null:uw      uwCURBE_TEMP(2)<16;16,1>   uwCURBE_TEMP(3)<16;16,1>
2660
 
2661
(f0.0)sel (16) uwCURBE_TEMP(0)<1>  uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(1)<16;16,1>
2662
(f0.1)sel (16) uwCURBE_TEMP(2)<1>  uwCURBE_TEMP(2)<16;16,1>   uwCURBE_TEMP(3)<16;16,1>
2663
 
2664
//Compare Max(0,1,2,3) - Max(4,5,6,7)
2665
cmp.g.f0.0 (16) null:uw      		uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(2)<16;16,1>
2666
(f0.0)sel  (16) uwCURBE_TEMP(0)<1> 	uwCURBE_TEMP(0)<16;16,1>   uwCURBE_TEMP(2)<16;16,1>
2667
 
2668
//Compare Max(0,1,2,3,4,5,6,7) - 8
2669
cmp.g.f0.0 (16) null:uw      			uwCURBE_TEMP(0)<16;16,1>   (abs)wDIFF(17)<16;16,1>
2670
(f0.0)sel  (16) uwMAX_ABS_DIFF(1)<1> 	uwCURBE_TEMP(0)<16;16,1>   (abs)wDIFF(17)<16;16,1>
2671
 
2672
//Third row of 8x4
2673
        cmp.l.f0.0 	(16) null:uw     		uwSOBEL(2)<16;16,1>     	r55.30<0;2,1>:ub
2674
(f0.0)  cmp.l.f0.0 	(16) null:uw     		uwMAX_ABS_DIFF(0)<16;16,1>  r55.28<0;2,1>:ub
2675
(f0.0)  cmp.l.f0.0 	(16) null:uw     		uwSOAD(0)<16;16,1>			uwSOBEL(0)<16;16,1>
2676
(f0.0)  mov 		(16) uwSOBEL(0)<1>   uwSOAD(0)<16;16,1>
2677
 
2678
//Fourth row of 8x4
2679
		cmp.l.f0.0 	(16) null:uw     		uwSOBEL(3)<16;16,1>     	r55.30<0;2,1>:ub
2680
(f0.0)  cmp.l.f0.0 	(16) null:uw     		uwMAX_ABS_DIFF(1)<16;16,1>  r55.28<0;2,1>:ub
2681
(f0.0)  cmp.l.f0.0 	(16) null:uw     		uwSOAD(1)<16;16,1>			uwSOBEL(0)<16;16,1>
2682
(f0.0)  mov 		(16) uwSOBEL(0)<1>   uwSOAD(1)<16;16,1>
2683
 
2684
		cmp.l.f0.0 	(8) null:uw     		uwSOBEL(0,0)<8;8,1>  	uwSOBEL(0,8)<8;8,1>
2685
(f0.0)  sel 		(8) uwSOBEL(0)<1>   	uwSOBEL(0,0)<8;8,1>  	uwSOBEL(0,8)<8;8,1>
2686
 
2687
		cmp.l.f0.0 	(4) null:uw     		uwSOBEL(0,0)<4;4,1>  	uwSOBEL(0,4)<4;4,1>
2688
(f0.0)  sel 		(4) uwSOBEL(0)<1>   	uwSOBEL(0,0)<4;4,1>  	uwSOBEL(0,4)<4;4,1>
2689
 
2690
		cmp.l.f0.0 	(2) null:uw     					uwSOBEL(0,0)<2;2,1>  uwSOBEL(0,2)<2;2,1>
2691
(f0.0)  sel 		(2) r[a0.1,0]<1>:uw   	uwSOBEL(0,0)<2;2,1>  uwSOBEL(0,2)<2;2,1>
2692
 
2693
 
2694
 
2695
 
2696
 
2697
 
2698
// End of common.inc
2699
 
2700
mov (1) ip:ud r7.7<0;1,0>:d
2701
 
2702
 
2703
.end_code
2704
.end_kernel