101e04c3fSmrg/* 201e04c3fSmrg Copyright (C) Intel Corp. 2006. All Rights Reserved. 301e04c3fSmrg Intel funded Tungsten Graphics to 401e04c3fSmrg develop this 3D driver. 501e04c3fSmrg 601e04c3fSmrg Permission is hereby granted, free of charge, to any person obtaining 701e04c3fSmrg a copy of this software and associated documentation files (the 801e04c3fSmrg "Software"), to deal in the Software without restriction, including 901e04c3fSmrg without limitation the rights to use, copy, modify, merge, publish, 1001e04c3fSmrg distribute, sublicense, and/or sell copies of the Software, and to 1101e04c3fSmrg permit persons to whom the Software is furnished to do so, subject to 1201e04c3fSmrg the following conditions: 1301e04c3fSmrg 1401e04c3fSmrg The above copyright notice and this permission notice (including the 1501e04c3fSmrg next paragraph) shall be included in all copies or substantial 1601e04c3fSmrg portions of the Software. 1701e04c3fSmrg 1801e04c3fSmrg THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 1901e04c3fSmrg EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2001e04c3fSmrg MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 2101e04c3fSmrg IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 2201e04c3fSmrg LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 2301e04c3fSmrg OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 2401e04c3fSmrg WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2501e04c3fSmrg 2601e04c3fSmrg **********************************************************************/ 2701e04c3fSmrg /* 2801e04c3fSmrg * Authors: 2901e04c3fSmrg * Keith Whitwell <keithw@vmware.com> 3001e04c3fSmrg */ 3101e04c3fSmrg 3201e04c3fSmrg 3301e04c3fSmrg#include "brw_eu_defines.h" 3401e04c3fSmrg#include "brw_eu.h" 3501e04c3fSmrg 3601e04c3fSmrg 3701e04c3fSmrgvoid brw_math_invert( struct brw_codegen *p, 3801e04c3fSmrg struct brw_reg dst, 3901e04c3fSmrg struct brw_reg src) 4001e04c3fSmrg{ 417ec681f3Smrg gfx4_math(p, 4201e04c3fSmrg dst, 4301e04c3fSmrg BRW_MATH_FUNCTION_INV, 4401e04c3fSmrg 0, 4501e04c3fSmrg src, 4601e04c3fSmrg BRW_MATH_PRECISION_FULL); 4701e04c3fSmrg} 4801e04c3fSmrg 4901e04c3fSmrg 5001e04c3fSmrg 5101e04c3fSmrgvoid brw_copy4(struct brw_codegen *p, 5201e04c3fSmrg struct brw_reg dst, 5301e04c3fSmrg struct brw_reg src, 5401e04c3fSmrg unsigned count) 5501e04c3fSmrg{ 5601e04c3fSmrg unsigned i; 5701e04c3fSmrg 5801e04c3fSmrg dst = vec4(dst); 5901e04c3fSmrg src = vec4(src); 6001e04c3fSmrg 6101e04c3fSmrg for (i = 0; i < count; i++) 6201e04c3fSmrg { 6301e04c3fSmrg unsigned delta = i*32; 6401e04c3fSmrg brw_MOV(p, byte_offset(dst, delta), byte_offset(src, delta)); 6501e04c3fSmrg brw_MOV(p, byte_offset(dst, delta+16), byte_offset(src, delta+16)); 6601e04c3fSmrg } 6701e04c3fSmrg} 6801e04c3fSmrg 6901e04c3fSmrg 7001e04c3fSmrgvoid brw_copy8(struct brw_codegen *p, 7101e04c3fSmrg struct brw_reg dst, 7201e04c3fSmrg struct brw_reg src, 7301e04c3fSmrg unsigned count) 7401e04c3fSmrg{ 7501e04c3fSmrg unsigned i; 7601e04c3fSmrg 7701e04c3fSmrg dst = vec8(dst); 7801e04c3fSmrg src = vec8(src); 7901e04c3fSmrg 8001e04c3fSmrg for (i = 0; i < count; i++) 8101e04c3fSmrg { 8201e04c3fSmrg unsigned delta = i*32; 8301e04c3fSmrg brw_MOV(p, byte_offset(dst, delta), byte_offset(src, delta)); 8401e04c3fSmrg } 8501e04c3fSmrg} 8601e04c3fSmrg 8701e04c3fSmrg 8801e04c3fSmrgvoid brw_copy_indirect_to_indirect(struct brw_codegen *p, 8901e04c3fSmrg struct brw_indirect dst_ptr, 9001e04c3fSmrg struct brw_indirect src_ptr, 9101e04c3fSmrg unsigned count) 9201e04c3fSmrg{ 9301e04c3fSmrg unsigned i; 9401e04c3fSmrg 9501e04c3fSmrg for (i = 0; i < count; i++) 9601e04c3fSmrg { 9701e04c3fSmrg unsigned delta = i*32; 9801e04c3fSmrg brw_MOV(p, deref_4f(dst_ptr, delta), deref_4f(src_ptr, delta)); 9901e04c3fSmrg brw_MOV(p, deref_4f(dst_ptr, delta+16), deref_4f(src_ptr, delta+16)); 10001e04c3fSmrg } 10101e04c3fSmrg} 10201e04c3fSmrg 10301e04c3fSmrg 10401e04c3fSmrgvoid brw_copy_from_indirect(struct brw_codegen *p, 10501e04c3fSmrg struct brw_reg dst, 10601e04c3fSmrg struct brw_indirect ptr, 10701e04c3fSmrg unsigned count) 10801e04c3fSmrg{ 10901e04c3fSmrg unsigned i; 11001e04c3fSmrg 11101e04c3fSmrg dst = vec4(dst); 11201e04c3fSmrg 11301e04c3fSmrg for (i = 0; i < count; i++) 11401e04c3fSmrg { 11501e04c3fSmrg unsigned delta = i*32; 11601e04c3fSmrg brw_MOV(p, byte_offset(dst, delta), deref_4f(ptr, delta)); 11701e04c3fSmrg brw_MOV(p, byte_offset(dst, delta+16), deref_4f(ptr, delta+16)); 11801e04c3fSmrg } 11901e04c3fSmrg} 120