summaryrefslogtreecommitdiff
path: root/xvmc/shader/mc/field_f_b_igd.g4a
blob: c072cd6054f3c490be211fecad90c1ba09ef146c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/* GRF allocation:
   g1~g30: constant buffer
           g1~g2:intra IQ matrix
           g3~g4:non intra IQ matrix
           g5~g20:IDCT table
   g31:    thread payload 
   g58~g81:reference data
   g82:    thread payload backup
   g84~g107:IDCT data
   g115:   message descriptor for reading reference data   */
mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1};
mov (1) g126.8<1>UD ip {align1};
add (1) ip g21.0<1,1,1>UD 0x50UD {align1};          //jump to the lib to do IQ and IDCT 

/*field 0 forward prediction of Y*/
asr (2) g31.14<1>W g82.14<2,2,1>W 1W {align1};
add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1};
and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1};
and.nz (1) null g82.31<1,1,1>UB 0x1UW {align1};
(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1};
mov (1) g115.16<1>UW 0UW {align1};           //0:forward 1:backward
mov (1) a0.0<1>UD 0x0A4EUD {align1};         //g82.14,motion vector
mov (1) g126.8<1>UD ip {align1};
add (1) ip g21.0<1,1,1>UD 0x20UD {align1};   //jump to the lib to read reference data 

mov (8) g58.0<1>UD g32.0<8,8,1>UD {align1};
mov (8) g60.0<1>UD g33.0<8,8,1>UD {align1};
mov (8) g62.0<1>UD g34.0<8,8,1>UD {align1};
mov (8) g64.0<1>UD g35.0<8,8,1>UD {align1};
mov (8) g66.0<1>UD g36.0<8,8,1>UD {align1};
mov (8) g68.0<1>UD g37.0<8,8,1>UD {align1};
mov (8) g70.0<1>UD g38.0<8,8,1>UD {align1};
mov (8) g72.0<1>UD g39.0<8,8,1>UD {align1};

/*field 1 forward prediction of Y*/
asr (2) g31.14<1>W g82.22<2,2,1>W 1W {align1};
add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1};
and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1};
and.nz (1) null g82.31<1,1,1>UB 0x4UW {align1};
(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1};
mov (1) a0.0<1>UD 0x0A56UD {align1};         //g82.22,motion vector
mov (1) g126.8<1>UD ip {align1};
add (1) ip g21.0<1,1,1>UD 0x20UD {align1};   //jump to the lib to read reference data 

mov (8) g59.0<1>UD g32.0<8,8,1>UD {align1};
mov (8) g61.0<1>UD g33.0<8,8,1>UD {align1};
mov (8) g63.0<1>UD g34.0<8,8,1>UD {align1};
mov (8) g65.0<1>UD g35.0<8,8,1>UD {align1};
mov (8) g67.0<1>UD g36.0<8,8,1>UD {align1};
mov (8) g69.0<1>UD g37.0<8,8,1>UD {align1};
mov (8) g71.0<1>UD g38.0<8,8,1>UD {align1};
mov (8) g73.0<1>UD g39.0<8,8,1>UD {align1};

/*field 0 forward prediction of UV*/
shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1};

asr (2) g31.14<1>W g82.14<2,2,1>W 2W {align1};
add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1};
and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1};
and.nz (1) null g82.31<1,1,1>UB 0x1UW {align1};
(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1};
mov (1) a0.0<1>UD 0x0A4EUD {align1};         //g82.14,motion vector
mov (1) g126.8<1>UD ip {align1};
add (1) ip g21.0<1,1,1>UD 0x30UD {align1};   //jump to the lib to read reference data 

mov (16) g74.0<1>UW g32.0<8,8,1>UW {align1 compr};
mov (16) g76.0<1>UW g34.0<8,8,1>UW {align1 compr};
mov (16) g78.0<1>UW g36.0<8,8,1>UW {align1 compr};
mov (16) g80.0<1>UW g38.0<8,8,1>UW {align1 compr};

/*field 1 forward prediction of UV*/
asr (2) g31.14<1>W g82.22<2,2,1>W 2W {align1};
add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1};
and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1};
and.nz (1) null g82.31<1,1,1>UB 0x4UW {align1};
(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1};
mov (1) a0.0<1>UD 0x0A56UD {align1};         //g82.22,motion vector
mov (1) g126.8<1>UD ip {align1};
add (1) ip g21.0<1,1,1>UD 0x30UD {align1};   //jump to the lib to read reference data 

mov (16) g74.16<1>UW g32.0<8,8,1>UW {align1 compr};
mov (16) g76.16<1>UW g34.0<8,8,1>UW {align1 compr};
mov (16) g78.16<1>UW g36.0<8,8,1>UW {align1 compr};
mov (16) g80.16<1>UW g38.0<8,8,1>UW {align1 compr};

/*field 0 backward prediction of Y*/
mov(2) g31.0<1>UD g82.0<2,2,1>UD {align1};

asr (2) g31.14<1>W g82.18<2,2,1>W 1W {align1};
add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1};
and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1};
and.nz (1) null g82.31<1,1,1>UB 0x2UW {align1};
(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1};
mov (1) g115.16<1>UW 1UW {align1};           //0:forward 1:backward
mov (1) a0.0<1>UD 0x0A52UD {align1};         //g82.18,motion vector
mov (1) g126.8<1>UD ip {align1};
add (1) ip g21.0<1,1,1>UD 0x20UD {align1};   //jump to the lib to read reference data 

avg (16) g58.0<1>UW g58.0<16,16,1>UW g32.0<16,16,1>UW {align1};
avg (16) g60.0<1>UW g60.0<16,16,1>UW g33.0<16,16,1>UW {align1};
avg (16) g62.0<1>UW g62.0<16,16,1>UW g34.0<16,16,1>UW {align1};
avg (16) g64.0<1>UW g64.0<16,16,1>UW g35.0<16,16,1>UW {align1};
avg (16) g66.0<1>UW g66.0<16,16,1>UW g36.0<16,16,1>UW {align1};
avg (16) g68.0<1>UW g68.0<16,16,1>UW g37.0<16,16,1>UW {align1};
avg (16) g70.0<1>UW g70.0<16,16,1>UW g38.0<16,16,1>UW {align1};
avg (16) g72.0<1>UW g72.0<16,16,1>UW g39.0<16,16,1>UW {align1};

/*field 1 backward prediction of Y*/
asr (2) g31.14<1>W g82.26<2,2,1>W 1W {align1};
add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1};
and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1};
and.nz (1) null g82.31<1,1,1>UB 0x8UW {align1};
(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1};
mov (1) a0.0<1>UD 0x0A5AUD {align1};         //g82.14,motion vector
mov (1) g126.8<1>UD ip {align1};
add (1) ip g21.0<1,1,1>UD 0x20UD {align1};   //jump to the lib to read reference data 

avg (16) g59.0<1>UW g59.0<16,16,1>UW g32.0<16,16,1>UW {align1};
avg (16) g61.0<1>UW g61.0<16,16,1>UW g33.0<16,16,1>UW {align1};
avg (16) g63.0<1>UW g63.0<16,16,1>UW g34.0<16,16,1>UW {align1};
avg (16) g65.0<1>UW g65.0<16,16,1>UW g35.0<16,16,1>UW {align1};
avg (16) g67.0<1>UW g67.0<16,16,1>UW g36.0<16,16,1>UW {align1};
avg (16) g69.0<1>UW g69.0<16,16,1>UW g37.0<16,16,1>UW {align1};
avg (16) g71.0<1>UW g71.0<16,16,1>UW g38.0<16,16,1>UW {align1};
avg (16) g73.0<1>UW g73.0<16,16,1>UW g39.0<16,16,1>UW {align1};

/*field 0 backward prediction of UV*/
shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1};

asr (2) g31.14<1>W g82.18<2,2,1>W 2W {align1};
add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1};
and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1};
and.nz (1) null g82.31<1,1,1>UB 0x2UW {align1};
(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1};
mov (1) a0.0<1>UD 0x0A52UD {align1};         //g82.18,motion vector
mov (1) g126.8<1>UD ip {align1};
add (1) ip g21.0<1,1,1>UD 0x30UD {align1};   //jump to the lib to read reference data 

avg (16) g74.0<1>UW g74.0<8,8,1>UW g32.0<8,8,1>UW {align1 compr};
avg (16) g76.0<1>UW g76.0<8,8,1>UW g34.0<8,8,1>UW {align1 compr};
avg (16) g78.0<1>UW g78.0<8,8,1>UW g36.0<8,8,1>UW {align1 compr};
avg (16) g80.0<1>UW g80.0<8,8,1>UW g38.0<8,8,1>UW {align1 compr};

/*field 1 backward prediction of UV*/
asr (2) g31.14<1>W g82.26<2,2,1>W 2W {align1};
add (2) g115.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1};
and (1) g115.4<1>UD g115.4<1,1,1>UD 0xFFFFFFFEUD {align1};
and.nz (1) null g82.31<1,1,1>UB 0x8UW {align1};
(f0) add (1) g115.4<1>UD g115.4<1,1,1>UD 1UD {align1};
mov (1) a0.0<1>UD 0x0A5AUD {align1};         //g82.26,motion vector
mov (1) g126.8<1>UD ip {align1};
add (1) ip g21.0<1,1,1>UD 0x30UD {align1};   //jump to the lib to read reference data 

avg (16) g74.16<1>UW g74.16<8,8,1>UW g32.0<8,8,1>UW {align1 compr};
avg (16) g76.16<1>UW g76.16<8,8,1>UW g34.0<8,8,1>UW {align1 compr};
avg (16) g78.16<1>UW g78.16<8,8,1>UW g36.0<8,8,1>UW {align1 compr};
avg (16) g80.16<1>UW g80.16<8,8,1>UW g38.0<8,8,1>UW {align1 compr};

add (1) ip g21.0<1,1,1>UD 0x40UD {align1};          //jump to the lib to add the reference and idct data