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