1428d7b3dSmrg/*
2428d7b3dSmrg * Copyright © 2006 Intel Corporation
3428d7b3dSmrg *
4428d7b3dSmrg * Permission is hereby granted, free of charge, to any person obtaining a
5428d7b3dSmrg * copy of this software and associated documentation files (the "Software"),
6428d7b3dSmrg * to deal in the Software without restriction, including without limitation
7428d7b3dSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8428d7b3dSmrg * and/or sell copies of the Software, and to permit persons to whom the
9428d7b3dSmrg * Software is furnished to do so, subject to the following conditions:
10428d7b3dSmrg *
11428d7b3dSmrg * The above copyright notice and this permission notice (including the next
12428d7b3dSmrg * paragraph) shall be included in all copies or substantial portions of the
13428d7b3dSmrg * Software.
14428d7b3dSmrg *
15428d7b3dSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16428d7b3dSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17428d7b3dSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18428d7b3dSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19428d7b3dSmrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20428d7b3dSmrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21428d7b3dSmrg * IN THE SOFTWARE.
22428d7b3dSmrg *
23428d7b3dSmrg * Authors:
24428d7b3dSmrg *    Wang Zhenyu <zhenyu.z.wang@intel.com>
25428d7b3dSmrg *    Keith Packard <keithp@keithp.com>
26428d7b3dSmrg */
27428d7b3dSmrg 
28428d7b3dSmrg/*
29428d7b3dSmrg * Input parameters
30428d7b3dSmrg */
31428d7b3dSmrg
32428d7b3dSmrg/* Destination X/Y */
33428d7b3dSmrgdefine(`dst_x_uw',  `g1.8<2,4,0>UW')
34428d7b3dSmrgdefine(`dst_y_uw',  `g1.10<2,4,0>UW')
35428d7b3dSmrgdefine(`screen_x0', `g1.0<0,1,0>F')
36428d7b3dSmrgdefine(`screen_y0', `g1.4<0,1,0>F')
37428d7b3dSmrg
38428d7b3dSmrg/* Source transformation parameters */
39428d7b3dSmrgdefine(`src_du_dx', `g3.0<0,1,0>F')
40428d7b3dSmrgdefine(`src_du_dy', `g3.4<0,1,0>F')
41428d7b3dSmrgdefine(`src_uo',    `g3.12<0,1,0>F')
42428d7b3dSmrgdefine(`src_dv_dx', `g3.16<0,1,0>F')
43428d7b3dSmrgdefine(`src_dv_dy', `g3.20<0,1,0>F')
44428d7b3dSmrgdefine(`src_vo',    `g3.28<0,1,0>F')
45428d7b3dSmrgdefine(`src_dw_dx', `g4.0<0,1,0>F')
46428d7b3dSmrgdefine(`src_dw_dy', `g4.4<0,1,0>F')
47428d7b3dSmrgdefine(`src_wo',    `g4.12<0,1,0>F')
48428d7b3dSmrg
49428d7b3dSmrgdefine(`mask_du_dx', `g5.0<0,1,0>F')
50428d7b3dSmrgdefine(`mask_du_dy', `g5.4<0,1,0>F')
51428d7b3dSmrgdefine(`mask_uo',    `g5.12<0,1,0>F')
52428d7b3dSmrgdefine(`mask_dv_dx', `g5.16<0,1,0>F')
53428d7b3dSmrgdefine(`mask_dv_dy', `g5.20<0,1,0>F')
54428d7b3dSmrgdefine(`mask_vo',    `g5.28<0,1,0>F')
55428d7b3dSmrgdefine(`mask_dw_dx', `g6.0<0,1,0>F')
56428d7b3dSmrgdefine(`mask_dw_dy', `g6.4<0,1,0>F')
57428d7b3dSmrgdefine(`mask_wo',    `g6.12<0,1,0>F')
58428d7b3dSmrg
59428d7b3dSmrg/*
60428d7b3dSmrg * Local variables. Pairs must be aligned on even reg boundry
61428d7b3dSmrg */
62428d7b3dSmrg
63428d7b3dSmrg/* this holds the X dest coordinates */
64428d7b3dSmrgdefine(`dst_x',	    `g8')
65428d7b3dSmrgdefine(`dst_x_0',   `dst_x')
66428d7b3dSmrgdefine(`dst_x_1',   `g9')
67428d7b3dSmrg
68428d7b3dSmrg/* this holds the Y dest coordinates */
69428d7b3dSmrgdefine(`dst_y',	    `g10')
70428d7b3dSmrgdefine(`dst_y_0',   `dst_y')
71428d7b3dSmrgdefine(`dst_y_1',   `g11')
72428d7b3dSmrg
73428d7b3dSmrg/* When computing x * dn/dx, use this */
74428d7b3dSmrgdefine(`temp_x',    `g30')
75428d7b3dSmrgdefine(`temp_x_0',  `temp_x')
76428d7b3dSmrgdefine(`temp_x_1',  `g31')
77428d7b3dSmrg
78428d7b3dSmrg/* When computing y * dn/dy, use this */
79428d7b3dSmrgdefine(`temp_y',    `g28')
80428d7b3dSmrgdefine(`temp_y_0',  temp_y)
81428d7b3dSmrgdefine(`temp_y_1',  `g29')
82428d7b3dSmrg
83428d7b3dSmrg/* when loading x/y, use these to hold them in UW format */
84428d7b3dSmrgdefine(`temp_x_uw', temp_x)
85428d7b3dSmrgdefine(`temp_y_uw', temp_y)
86428d7b3dSmrg
87428d7b3dSmrg/* compute source and mask u/v to this pair to send to sampler */
88428d7b3dSmrgdefine(`src_msg',   `m1')
89428d7b3dSmrgdefine(`src_msg_ind',`1')
90428d7b3dSmrgdefine(`src_u',	    `m2')
91428d7b3dSmrgdefine(`src_v',	    `m4')
92428d7b3dSmrgdefine(`src_w',	    `g12')
93428d7b3dSmrgdefine(`src_w_0',   `src_w')
94428d7b3dSmrgdefine(`src_w_1',   `g13')
95428d7b3dSmrg
96428d7b3dSmrgdefine(`mask_msg',  `m7')
97428d7b3dSmrgdefine(`mask_msg_ind',`7')
98428d7b3dSmrgdefine(`mask_u',    `m8')
99428d7b3dSmrgdefine(`mask_v',    `m10')
100428d7b3dSmrgdefine(`mask_w',    `src_w')
101428d7b3dSmrgdefine(`mask_w_0',  `src_w_0')
102428d7b3dSmrgdefine(`mask_w_1',  `src_w_1')
103428d7b3dSmrg
104428d7b3dSmrg/* sample src to these registers */
105428d7b3dSmrgdefine(`src_sample_base',	`g14')
106428d7b3dSmrg
107428d7b3dSmrgdefine(`src_sample_r',		`g14')
108428d7b3dSmrgdefine(`src_sample_r_01',	`g14')
109428d7b3dSmrgdefine(`src_sample_r_23',	`g15')
110428d7b3dSmrg
111428d7b3dSmrgdefine(`src_sample_g',		`g16')
112428d7b3dSmrgdefine(`src_sample_g_01',	`g16')
113428d7b3dSmrgdefine(`src_sample_g_23',	`g17')
114428d7b3dSmrg
115428d7b3dSmrgdefine(`src_sample_b',		`g18')
116428d7b3dSmrgdefine(`src_sample_b_01',	`g18')
117428d7b3dSmrgdefine(`src_sample_b_23',	`g19')
118428d7b3dSmrg
119428d7b3dSmrgdefine(`src_sample_a',		`g20')
120428d7b3dSmrgdefine(`src_sample_a_01',	`g20')
121428d7b3dSmrgdefine(`src_sample_a_23',	`g21')
122428d7b3dSmrg
123428d7b3dSmrg/* sample mask to these registers */
124428d7b3dSmrgdefine(`mask_sample_base',	`g22')
125428d7b3dSmrg    
126428d7b3dSmrgdefine(`mask_sample_r',		`g22')
127428d7b3dSmrgdefine(`mask_sample_r_01',	`g22')
128428d7b3dSmrgdefine(`mask_sample_r_23',	`g23')
129428d7b3dSmrg    
130428d7b3dSmrgdefine(`mask_sample_g',		`g24')
131428d7b3dSmrgdefine(`mask_sample_g_01',	`g24')
132428d7b3dSmrgdefine(`mask_sample_g_23',	`g25')
133428d7b3dSmrg    
134428d7b3dSmrgdefine(`mask_sample_b',		`g26')
135428d7b3dSmrgdefine(`mask_sample_b_01',	`g26')
136428d7b3dSmrgdefine(`mask_sample_b_23',	`g27')
137428d7b3dSmrg    
138428d7b3dSmrgdefine(`mask_sample_a',		`g28')
139428d7b3dSmrgdefine(`mask_sample_a_01',	`g28')
140428d7b3dSmrgdefine(`mask_sample_a_23',	`g29')
141428d7b3dSmrg
142428d7b3dSmrg/* data port SIMD16 send registers */
143428d7b3dSmrg
144428d7b3dSmrgdefine(`data_port_msg_0',	`m0')
145428d7b3dSmrgdefine(`data_port_msg_0_ind',	`0')
146428d7b3dSmrgdefine(`data_port_msg_1',	`m1')
147428d7b3dSmrgdefine(`data_port_r_01',	`m2')
148428d7b3dSmrgdefine(`data_port_g_01',	`m3')
149428d7b3dSmrgdefine(`data_port_b_01',	`m4')
150428d7b3dSmrgdefine(`data_port_a_01',	`m5')
151428d7b3dSmrg
152428d7b3dSmrgdefine(`data_port_r_23',	`m6')
153428d7b3dSmrgdefine(`data_port_g_23',	`m7')
154428d7b3dSmrgdefine(`data_port_b_23',	`m8')
155428d7b3dSmrgdefine(`data_port_a_23',	`m9')
156428d7b3dSmrg
157