2 * Copyright © 2006 Intel Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24 * Wang Zhenyu <zhenyu.z.wang@intel.com>
25 * Keith Packard <keithp@keithp.com>
33 define(`dst_x_uw', `g1.8<2,4,0>UW')
34 define(`dst_y_uw', `g1.10<2,4,0>UW')
35 define(`screen_x0', `g1.0<0,1,0>F')
36 define(`screen_y0', `g1.4<0,1,0>F')
38 /* Source transformation parameters */
39 define(`src_du_dx', `g3.0<0,1,0>F')
40 define(`src_du_dy', `g3.4<0,1,0>F')
41 define(`src_uo', `g3.12<0,1,0>F')
42 define(`src_dv_dx', `g3.16<0,1,0>F')
43 define(`src_dv_dy', `g3.20<0,1,0>F')
44 define(`src_vo', `g3.28<0,1,0>F')
45 define(`src_dw_dx', `g4.0<0,1,0>F')
46 define(`src_dw_dy', `g4.4<0,1,0>F')
47 define(`src_wo', `g4.12<0,1,0>F')
49 define(`mask_du_dx', `g5.0<0,1,0>F')
50 define(`mask_du_dy', `g5.4<0,1,0>F')
51 define(`mask_uo', `g5.12<0,1,0>F')
52 define(`mask_dv_dx', `g5.16<0,1,0>F')
53 define(`mask_dv_dy', `g5.20<0,1,0>F')
54 define(`mask_vo', `g5.28<0,1,0>F')
55 define(`mask_dw_dx', `g6.0<0,1,0>F')
56 define(`mask_dw_dy', `g6.4<0,1,0>F')
57 define(`mask_wo', `g6.12<0,1,0>F')
60 * Local variables. Pairs must be aligned on even reg boundry
63 /* this holds the X dest coordinates */
65 define(`dst_x_0', `dst_x')
66 define(`dst_x_1', `g9')
68 /* this holds the Y dest coordinates */
69 define(`dst_y', `g10')
70 define(`dst_y_0', `dst_y')
71 define(`dst_y_1', `g11')
73 /* When computing x * dn/dx, use this */
74 define(`temp_x', `g30')
75 define(`temp_x_0', `temp_x')
76 define(`temp_x_1', `g31')
78 /* When computing y * dn/dy, use this */
79 define(`temp_y', `g28')
80 define(`temp_y_0', temp_y)
81 define(`temp_y_1', `g29')
83 /* when loading x/y, use these to hold them in UW format */
84 define(`temp_x_uw', temp_x)
85 define(`temp_y_uw', temp_y)
87 /* compute source and mask u/v to this pair to send to sampler */
88 define(`src_msg', `m1')
89 define(`src_msg_ind',`1')
92 define(`src_w', `g12')
93 define(`src_w_0', `src_w')
94 define(`src_w_1', `g13')
96 define(`mask_msg', `m7')
97 define(`mask_msg_ind',`7')
98 define(`mask_u', `m8')
99 define(`mask_v', `m10')
100 define(`mask_w', `src_w')
101 define(`mask_w_0', `src_w_0')
102 define(`mask_w_1', `src_w_1')
104 /* sample src to these registers */
105 define(`src_sample_base', `g14')
107 define(`src_sample_r', `g14')
108 define(`src_sample_r_01', `g14')
109 define(`src_sample_r_23', `g15')
111 define(`src_sample_g', `g16')
112 define(`src_sample_g_01', `g16')
113 define(`src_sample_g_23', `g17')
115 define(`src_sample_b', `g18')
116 define(`src_sample_b_01', `g18')
117 define(`src_sample_b_23', `g19')
119 define(`src_sample_a', `g20')
120 define(`src_sample_a_01', `g20')
121 define(`src_sample_a_23', `g21')
123 /* sample mask to these registers */
124 define(`mask_sample_base', `g22')
126 define(`mask_sample_r', `g22')
127 define(`mask_sample_r_01', `g22')
128 define(`mask_sample_r_23', `g23')
130 define(`mask_sample_g', `g24')
131 define(`mask_sample_g_01', `g24')
132 define(`mask_sample_g_23', `g25')
134 define(`mask_sample_b', `g26')
135 define(`mask_sample_b_01', `g26')
136 define(`mask_sample_b_23', `g27')
138 define(`mask_sample_a', `g28')
139 define(`mask_sample_a_01', `g28')
140 define(`mask_sample_a_23', `g29')
142 /* data port SIMD16 send registers */
144 define(`data_port_msg_0', `m0')
145 define(`data_port_msg_0_ind', `0')
146 define(`data_port_msg_1', `m1')
147 define(`data_port_r_01', `m2')
148 define(`data_port_g_01', `m3')
149 define(`data_port_b_01', `m4')
150 define(`data_port_a_01', `m5')
152 define(`data_port_r_23', `m6')
153 define(`data_port_g_23', `m7')
154 define(`data_port_b_23', `m8')
155 define(`data_port_a_23', `m9')