1*d83cc019SAndroid Build Coastguard Worker /*
2*d83cc019SAndroid Build Coastguard Worker Copyright (C) Intel Corp. 2006. All Rights Reserved.
3*d83cc019SAndroid Build Coastguard Worker Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
4*d83cc019SAndroid Build Coastguard Worker develop this 3D driver.
5*d83cc019SAndroid Build Coastguard Worker
6*d83cc019SAndroid Build Coastguard Worker Permission is hereby granted, free of charge, to any person obtaining
7*d83cc019SAndroid Build Coastguard Worker a copy of this software and associated documentation files (the
8*d83cc019SAndroid Build Coastguard Worker "Software"), to deal in the Software without restriction, including
9*d83cc019SAndroid Build Coastguard Worker without limitation the rights to use, copy, modify, merge, publish,
10*d83cc019SAndroid Build Coastguard Worker distribute, sublicense, and/or sell copies of the Software, and to
11*d83cc019SAndroid Build Coastguard Worker permit persons to whom the Software is furnished to do so, subject to
12*d83cc019SAndroid Build Coastguard Worker the following conditions:
13*d83cc019SAndroid Build Coastguard Worker
14*d83cc019SAndroid Build Coastguard Worker The above copyright notice and this permission notice (including the
15*d83cc019SAndroid Build Coastguard Worker next paragraph) shall be included in all copies or substantial
16*d83cc019SAndroid Build Coastguard Worker portions of the Software.
17*d83cc019SAndroid Build Coastguard Worker
18*d83cc019SAndroid Build Coastguard Worker THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19*d83cc019SAndroid Build Coastguard Worker EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20*d83cc019SAndroid Build Coastguard Worker MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21*d83cc019SAndroid Build Coastguard Worker IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
22*d83cc019SAndroid Build Coastguard Worker LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23*d83cc019SAndroid Build Coastguard Worker OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24*d83cc019SAndroid Build Coastguard Worker WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25*d83cc019SAndroid Build Coastguard Worker
26*d83cc019SAndroid Build Coastguard Worker **********************************************************************/
27*d83cc019SAndroid Build Coastguard Worker /*
28*d83cc019SAndroid Build Coastguard Worker * Authors:
29*d83cc019SAndroid Build Coastguard Worker * Keith Whitwell <[email protected]>
30*d83cc019SAndroid Build Coastguard Worker */
31*d83cc019SAndroid Build Coastguard Worker
32*d83cc019SAndroid Build Coastguard Worker
33*d83cc019SAndroid Build Coastguard Worker #include "brw_context.h"
34*d83cc019SAndroid Build Coastguard Worker #include "brw_defines.h"
35*d83cc019SAndroid Build Coastguard Worker #include "brw_eu.h"
36*d83cc019SAndroid Build Coastguard Worker
37*d83cc019SAndroid Build Coastguard Worker
brw_math_invert(struct brw_compile * p,struct brw_reg dst,struct brw_reg src)38*d83cc019SAndroid Build Coastguard Worker void brw_math_invert( struct brw_compile *p,
39*d83cc019SAndroid Build Coastguard Worker struct brw_reg dst,
40*d83cc019SAndroid Build Coastguard Worker struct brw_reg src)
41*d83cc019SAndroid Build Coastguard Worker {
42*d83cc019SAndroid Build Coastguard Worker brw_math( p,
43*d83cc019SAndroid Build Coastguard Worker dst,
44*d83cc019SAndroid Build Coastguard Worker BRW_MATH_FUNCTION_INV,
45*d83cc019SAndroid Build Coastguard Worker 0,
46*d83cc019SAndroid Build Coastguard Worker src,
47*d83cc019SAndroid Build Coastguard Worker BRW_MATH_PRECISION_FULL,
48*d83cc019SAndroid Build Coastguard Worker BRW_MATH_DATA_VECTOR );
49*d83cc019SAndroid Build Coastguard Worker }
50*d83cc019SAndroid Build Coastguard Worker
51*d83cc019SAndroid Build Coastguard Worker
52*d83cc019SAndroid Build Coastguard Worker
brw_copy4(struct brw_compile * p,struct brw_reg dst,struct brw_reg src,unsigned count)53*d83cc019SAndroid Build Coastguard Worker void brw_copy4(struct brw_compile *p,
54*d83cc019SAndroid Build Coastguard Worker struct brw_reg dst,
55*d83cc019SAndroid Build Coastguard Worker struct brw_reg src,
56*d83cc019SAndroid Build Coastguard Worker unsigned count)
57*d83cc019SAndroid Build Coastguard Worker {
58*d83cc019SAndroid Build Coastguard Worker unsigned i;
59*d83cc019SAndroid Build Coastguard Worker
60*d83cc019SAndroid Build Coastguard Worker dst = vec4(dst);
61*d83cc019SAndroid Build Coastguard Worker src = vec4(src);
62*d83cc019SAndroid Build Coastguard Worker
63*d83cc019SAndroid Build Coastguard Worker for (i = 0; i < count; i++)
64*d83cc019SAndroid Build Coastguard Worker {
65*d83cc019SAndroid Build Coastguard Worker unsigned delta = i*32;
66*d83cc019SAndroid Build Coastguard Worker brw_MOV(p, byte_offset(dst, delta), byte_offset(src, delta));
67*d83cc019SAndroid Build Coastguard Worker brw_MOV(p, byte_offset(dst, delta+16), byte_offset(src, delta+16));
68*d83cc019SAndroid Build Coastguard Worker }
69*d83cc019SAndroid Build Coastguard Worker }
70*d83cc019SAndroid Build Coastguard Worker
71*d83cc019SAndroid Build Coastguard Worker
brw_copy8(struct brw_compile * p,struct brw_reg dst,struct brw_reg src,unsigned count)72*d83cc019SAndroid Build Coastguard Worker void brw_copy8(struct brw_compile *p,
73*d83cc019SAndroid Build Coastguard Worker struct brw_reg dst,
74*d83cc019SAndroid Build Coastguard Worker struct brw_reg src,
75*d83cc019SAndroid Build Coastguard Worker unsigned count)
76*d83cc019SAndroid Build Coastguard Worker {
77*d83cc019SAndroid Build Coastguard Worker unsigned i;
78*d83cc019SAndroid Build Coastguard Worker
79*d83cc019SAndroid Build Coastguard Worker dst = vec8(dst);
80*d83cc019SAndroid Build Coastguard Worker src = vec8(src);
81*d83cc019SAndroid Build Coastguard Worker
82*d83cc019SAndroid Build Coastguard Worker for (i = 0; i < count; i++)
83*d83cc019SAndroid Build Coastguard Worker {
84*d83cc019SAndroid Build Coastguard Worker unsigned delta = i*32;
85*d83cc019SAndroid Build Coastguard Worker brw_MOV(p, byte_offset(dst, delta), byte_offset(src, delta));
86*d83cc019SAndroid Build Coastguard Worker }
87*d83cc019SAndroid Build Coastguard Worker }
88*d83cc019SAndroid Build Coastguard Worker
89*d83cc019SAndroid Build Coastguard Worker
brw_copy_indirect_to_indirect(struct brw_compile * p,struct brw_indirect dst_ptr,struct brw_indirect src_ptr,unsigned count)90*d83cc019SAndroid Build Coastguard Worker void brw_copy_indirect_to_indirect(struct brw_compile *p,
91*d83cc019SAndroid Build Coastguard Worker struct brw_indirect dst_ptr,
92*d83cc019SAndroid Build Coastguard Worker struct brw_indirect src_ptr,
93*d83cc019SAndroid Build Coastguard Worker unsigned count)
94*d83cc019SAndroid Build Coastguard Worker {
95*d83cc019SAndroid Build Coastguard Worker unsigned i;
96*d83cc019SAndroid Build Coastguard Worker
97*d83cc019SAndroid Build Coastguard Worker for (i = 0; i < count; i++)
98*d83cc019SAndroid Build Coastguard Worker {
99*d83cc019SAndroid Build Coastguard Worker unsigned delta = i*32;
100*d83cc019SAndroid Build Coastguard Worker brw_MOV(p, deref_4f(dst_ptr, delta), deref_4f(src_ptr, delta));
101*d83cc019SAndroid Build Coastguard Worker brw_MOV(p, deref_4f(dst_ptr, delta+16), deref_4f(src_ptr, delta+16));
102*d83cc019SAndroid Build Coastguard Worker }
103*d83cc019SAndroid Build Coastguard Worker }
104*d83cc019SAndroid Build Coastguard Worker
105*d83cc019SAndroid Build Coastguard Worker
brw_copy_from_indirect(struct brw_compile * p,struct brw_reg dst,struct brw_indirect ptr,unsigned count)106*d83cc019SAndroid Build Coastguard Worker void brw_copy_from_indirect(struct brw_compile *p,
107*d83cc019SAndroid Build Coastguard Worker struct brw_reg dst,
108*d83cc019SAndroid Build Coastguard Worker struct brw_indirect ptr,
109*d83cc019SAndroid Build Coastguard Worker unsigned count)
110*d83cc019SAndroid Build Coastguard Worker {
111*d83cc019SAndroid Build Coastguard Worker unsigned i;
112*d83cc019SAndroid Build Coastguard Worker
113*d83cc019SAndroid Build Coastguard Worker dst = vec4(dst);
114*d83cc019SAndroid Build Coastguard Worker
115*d83cc019SAndroid Build Coastguard Worker for (i = 0; i < count; i++)
116*d83cc019SAndroid Build Coastguard Worker {
117*d83cc019SAndroid Build Coastguard Worker unsigned delta = i*32;
118*d83cc019SAndroid Build Coastguard Worker brw_MOV(p, byte_offset(dst, delta), deref_4f(ptr, delta));
119*d83cc019SAndroid Build Coastguard Worker brw_MOV(p, byte_offset(dst, delta+16), deref_4f(ptr, delta+16));
120*d83cc019SAndroid Build Coastguard Worker }
121*d83cc019SAndroid Build Coastguard Worker }
122*d83cc019SAndroid Build Coastguard Worker
123*d83cc019SAndroid Build Coastguard Worker
124*d83cc019SAndroid Build Coastguard Worker
125*d83cc019SAndroid Build Coastguard Worker
126