xref: /aosp_15_r20/external/igt-gpu-tools/assembler/brw_eu_util.c (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
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