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