xref: /aosp_15_r20/external/mesa3d/src/asahi/compiler/test/test-lower-parallel-copy.cpp (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2021 Collabora, Ltd.
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #include "agx_builder.h"
7*61046927SAndroid Build Coastguard Worker #include "agx_compiler.h"
8*61046927SAndroid Build Coastguard Worker #include "agx_test.h"
9*61046927SAndroid Build Coastguard Worker 
10*61046927SAndroid Build Coastguard Worker #include <gtest/gtest.h>
11*61046927SAndroid Build Coastguard Worker 
12*61046927SAndroid Build Coastguard Worker #define CASE(copies, expected)                                                 \
13*61046927SAndroid Build Coastguard Worker    do {                                                                        \
14*61046927SAndroid Build Coastguard Worker       agx_builder *A = agx_test_builder(mem_ctx);                              \
15*61046927SAndroid Build Coastguard Worker       agx_builder *B = agx_test_builder(mem_ctx);                              \
16*61046927SAndroid Build Coastguard Worker                                                                                \
17*61046927SAndroid Build Coastguard Worker       agx_emit_parallel_copies(A, copies, ARRAY_SIZE(copies));                 \
18*61046927SAndroid Build Coastguard Worker                                                                                \
19*61046927SAndroid Build Coastguard Worker       {                                                                        \
20*61046927SAndroid Build Coastguard Worker          agx_builder *b = B;                                                   \
21*61046927SAndroid Build Coastguard Worker          expected;                                                             \
22*61046927SAndroid Build Coastguard Worker       }                                                                        \
23*61046927SAndroid Build Coastguard Worker                                                                                \
24*61046927SAndroid Build Coastguard Worker       ASSERT_SHADER_EQUAL(A->shader, B->shader);                               \
25*61046927SAndroid Build Coastguard Worker    } while (0)
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker static inline void
extr_swap(agx_builder * b,agx_index x)28*61046927SAndroid Build Coastguard Worker extr_swap(agx_builder *b, agx_index x)
29*61046927SAndroid Build Coastguard Worker {
30*61046927SAndroid Build Coastguard Worker    x.size = AGX_SIZE_32;
31*61046927SAndroid Build Coastguard Worker    agx_extr_to(b, x, x, x, agx_immediate(16), 0);
32*61046927SAndroid Build Coastguard Worker }
33*61046927SAndroid Build Coastguard Worker 
34*61046927SAndroid Build Coastguard Worker static inline void
xor_swap(agx_builder * b,agx_index x,agx_index y)35*61046927SAndroid Build Coastguard Worker xor_swap(agx_builder *b, agx_index x, agx_index y)
36*61046927SAndroid Build Coastguard Worker {
37*61046927SAndroid Build Coastguard Worker    agx_xor_to(b, x, x, y);
38*61046927SAndroid Build Coastguard Worker    agx_xor_to(b, y, x, y);
39*61046927SAndroid Build Coastguard Worker    agx_xor_to(b, x, x, y);
40*61046927SAndroid Build Coastguard Worker }
41*61046927SAndroid Build Coastguard Worker 
42*61046927SAndroid Build Coastguard Worker class LowerParallelCopy : public testing::Test {
43*61046927SAndroid Build Coastguard Worker  protected:
LowerParallelCopy()44*61046927SAndroid Build Coastguard Worker    LowerParallelCopy()
45*61046927SAndroid Build Coastguard Worker    {
46*61046927SAndroid Build Coastguard Worker       mem_ctx = ralloc_context(NULL);
47*61046927SAndroid Build Coastguard Worker    }
48*61046927SAndroid Build Coastguard Worker 
~LowerParallelCopy()49*61046927SAndroid Build Coastguard Worker    ~LowerParallelCopy()
50*61046927SAndroid Build Coastguard Worker    {
51*61046927SAndroid Build Coastguard Worker       ralloc_free(mem_ctx);
52*61046927SAndroid Build Coastguard Worker    }
53*61046927SAndroid Build Coastguard Worker 
54*61046927SAndroid Build Coastguard Worker    void *mem_ctx;
55*61046927SAndroid Build Coastguard Worker };
56*61046927SAndroid Build Coastguard Worker 
TEST_F(LowerParallelCopy,UnrelatedCopies)57*61046927SAndroid Build Coastguard Worker TEST_F(LowerParallelCopy, UnrelatedCopies)
58*61046927SAndroid Build Coastguard Worker {
59*61046927SAndroid Build Coastguard Worker    struct agx_copy test_1[] = {
60*61046927SAndroid Build Coastguard Worker       {.dest = 0, .src = agx_register(2, AGX_SIZE_32)},
61*61046927SAndroid Build Coastguard Worker       {.dest = 4, .src = agx_register(6, AGX_SIZE_32)},
62*61046927SAndroid Build Coastguard Worker    };
63*61046927SAndroid Build Coastguard Worker 
64*61046927SAndroid Build Coastguard Worker    CASE(test_1, {
65*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(0, AGX_SIZE_32), agx_register(2, AGX_SIZE_32));
66*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(4, AGX_SIZE_32), agx_register(6, AGX_SIZE_32));
67*61046927SAndroid Build Coastguard Worker    });
68*61046927SAndroid Build Coastguard Worker 
69*61046927SAndroid Build Coastguard Worker    struct agx_copy test_2[] = {
70*61046927SAndroid Build Coastguard Worker       {.dest = 0, .src = agx_register(1, AGX_SIZE_16)},
71*61046927SAndroid Build Coastguard Worker       {.dest = 4, .src = agx_register(5, AGX_SIZE_16)},
72*61046927SAndroid Build Coastguard Worker    };
73*61046927SAndroid Build Coastguard Worker 
74*61046927SAndroid Build Coastguard Worker    CASE(test_2, {
75*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(0, AGX_SIZE_16), agx_register(1, AGX_SIZE_16));
76*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(4, AGX_SIZE_16), agx_register(5, AGX_SIZE_16));
77*61046927SAndroid Build Coastguard Worker    });
78*61046927SAndroid Build Coastguard Worker }
79*61046927SAndroid Build Coastguard Worker 
TEST_F(LowerParallelCopy,RelatedSource)80*61046927SAndroid Build Coastguard Worker TEST_F(LowerParallelCopy, RelatedSource)
81*61046927SAndroid Build Coastguard Worker {
82*61046927SAndroid Build Coastguard Worker    struct agx_copy test_1[] = {
83*61046927SAndroid Build Coastguard Worker       {.dest = 0, .src = agx_register(2, AGX_SIZE_32)},
84*61046927SAndroid Build Coastguard Worker       {.dest = 4, .src = agx_register(2, AGX_SIZE_32)},
85*61046927SAndroid Build Coastguard Worker    };
86*61046927SAndroid Build Coastguard Worker 
87*61046927SAndroid Build Coastguard Worker    CASE(test_1, {
88*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(0, AGX_SIZE_32), agx_register(2, AGX_SIZE_32));
89*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(4, AGX_SIZE_32), agx_register(2, AGX_SIZE_32));
90*61046927SAndroid Build Coastguard Worker    });
91*61046927SAndroid Build Coastguard Worker 
92*61046927SAndroid Build Coastguard Worker    struct agx_copy test_2[] = {
93*61046927SAndroid Build Coastguard Worker       {.dest = 0, .src = agx_register(1, AGX_SIZE_16)},
94*61046927SAndroid Build Coastguard Worker       {.dest = 4, .src = agx_register(1, AGX_SIZE_16)},
95*61046927SAndroid Build Coastguard Worker    };
96*61046927SAndroid Build Coastguard Worker 
97*61046927SAndroid Build Coastguard Worker    CASE(test_2, {
98*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(0, AGX_SIZE_16), agx_register(1, AGX_SIZE_16));
99*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(4, AGX_SIZE_16), agx_register(1, AGX_SIZE_16));
100*61046927SAndroid Build Coastguard Worker    });
101*61046927SAndroid Build Coastguard Worker }
102*61046927SAndroid Build Coastguard Worker 
TEST_F(LowerParallelCopy,DependentCopies)103*61046927SAndroid Build Coastguard Worker TEST_F(LowerParallelCopy, DependentCopies)
104*61046927SAndroid Build Coastguard Worker {
105*61046927SAndroid Build Coastguard Worker    struct agx_copy test_1[] = {
106*61046927SAndroid Build Coastguard Worker       {.dest = 0, .src = agx_register(2, AGX_SIZE_32)},
107*61046927SAndroid Build Coastguard Worker       {.dest = 4, .src = agx_register(0, AGX_SIZE_32)},
108*61046927SAndroid Build Coastguard Worker    };
109*61046927SAndroid Build Coastguard Worker 
110*61046927SAndroid Build Coastguard Worker    CASE(test_1, {
111*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(4, AGX_SIZE_32), agx_register(0, AGX_SIZE_32));
112*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(0, AGX_SIZE_32), agx_register(2, AGX_SIZE_32));
113*61046927SAndroid Build Coastguard Worker    });
114*61046927SAndroid Build Coastguard Worker 
115*61046927SAndroid Build Coastguard Worker    struct agx_copy test_2[] = {
116*61046927SAndroid Build Coastguard Worker       {.dest = 0, .src = agx_register(1, AGX_SIZE_16)},
117*61046927SAndroid Build Coastguard Worker       {.dest = 4, .src = agx_register(0, AGX_SIZE_16)},
118*61046927SAndroid Build Coastguard Worker    };
119*61046927SAndroid Build Coastguard Worker 
120*61046927SAndroid Build Coastguard Worker    CASE(test_2, {
121*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(4, AGX_SIZE_16), agx_register(0, AGX_SIZE_16));
122*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(0, AGX_SIZE_16), agx_register(1, AGX_SIZE_16));
123*61046927SAndroid Build Coastguard Worker    });
124*61046927SAndroid Build Coastguard Worker }
125*61046927SAndroid Build Coastguard Worker 
TEST_F(LowerParallelCopy,ManyDependentCopies)126*61046927SAndroid Build Coastguard Worker TEST_F(LowerParallelCopy, ManyDependentCopies)
127*61046927SAndroid Build Coastguard Worker {
128*61046927SAndroid Build Coastguard Worker    struct agx_copy test_1[] = {
129*61046927SAndroid Build Coastguard Worker       {.dest = 0, .src = agx_register(2, AGX_SIZE_32)},
130*61046927SAndroid Build Coastguard Worker       {.dest = 4, .src = agx_register(0, AGX_SIZE_32)},
131*61046927SAndroid Build Coastguard Worker       {.dest = 8, .src = agx_register(6, AGX_SIZE_32)},
132*61046927SAndroid Build Coastguard Worker       {.dest = 6, .src = agx_register(4, AGX_SIZE_32)},
133*61046927SAndroid Build Coastguard Worker    };
134*61046927SAndroid Build Coastguard Worker 
135*61046927SAndroid Build Coastguard Worker    CASE(test_1, {
136*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(8, AGX_SIZE_32), agx_register(6, AGX_SIZE_32));
137*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(6, AGX_SIZE_32), agx_register(4, AGX_SIZE_32));
138*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(4, AGX_SIZE_32), agx_register(0, AGX_SIZE_32));
139*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(0, AGX_SIZE_32), agx_register(2, AGX_SIZE_32));
140*61046927SAndroid Build Coastguard Worker    });
141*61046927SAndroid Build Coastguard Worker 
142*61046927SAndroid Build Coastguard Worker    struct agx_copy test_2[] = {
143*61046927SAndroid Build Coastguard Worker       {.dest = 0, .src = agx_register(1, AGX_SIZE_16)},
144*61046927SAndroid Build Coastguard Worker       {.dest = 2, .src = agx_register(0, AGX_SIZE_16)},
145*61046927SAndroid Build Coastguard Worker       {.dest = 4, .src = agx_register(3, AGX_SIZE_16)},
146*61046927SAndroid Build Coastguard Worker       {.dest = 3, .src = agx_register(2, AGX_SIZE_16)},
147*61046927SAndroid Build Coastguard Worker    };
148*61046927SAndroid Build Coastguard Worker 
149*61046927SAndroid Build Coastguard Worker    CASE(test_2, {
150*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(4, AGX_SIZE_16), agx_register(3, AGX_SIZE_16));
151*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(3, AGX_SIZE_16), agx_register(2, AGX_SIZE_16));
152*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(2, AGX_SIZE_16), agx_register(0, AGX_SIZE_16));
153*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(0, AGX_SIZE_16), agx_register(1, AGX_SIZE_16));
154*61046927SAndroid Build Coastguard Worker    });
155*61046927SAndroid Build Coastguard Worker }
156*61046927SAndroid Build Coastguard Worker 
TEST_F(LowerParallelCopy,Swap)157*61046927SAndroid Build Coastguard Worker TEST_F(LowerParallelCopy, Swap)
158*61046927SAndroid Build Coastguard Worker {
159*61046927SAndroid Build Coastguard Worker    struct agx_copy test_1[] = {
160*61046927SAndroid Build Coastguard Worker       {.dest = 0, .src = agx_register(2, AGX_SIZE_32)},
161*61046927SAndroid Build Coastguard Worker       {.dest = 2, .src = agx_register(0, AGX_SIZE_32)},
162*61046927SAndroid Build Coastguard Worker    };
163*61046927SAndroid Build Coastguard Worker 
164*61046927SAndroid Build Coastguard Worker    CASE(test_1, {
165*61046927SAndroid Build Coastguard Worker       xor_swap(b, agx_register(0, AGX_SIZE_32), agx_register(2, AGX_SIZE_32));
166*61046927SAndroid Build Coastguard Worker    });
167*61046927SAndroid Build Coastguard Worker 
168*61046927SAndroid Build Coastguard Worker    struct agx_copy test_2[] = {
169*61046927SAndroid Build Coastguard Worker       {.dest = 0, .src = agx_register(1, AGX_SIZE_16)},
170*61046927SAndroid Build Coastguard Worker       {.dest = 1, .src = agx_register(0, AGX_SIZE_16)},
171*61046927SAndroid Build Coastguard Worker    };
172*61046927SAndroid Build Coastguard Worker 
173*61046927SAndroid Build Coastguard Worker    CASE(test_2, { extr_swap(b, agx_register(0, AGX_SIZE_16)); });
174*61046927SAndroid Build Coastguard Worker }
175*61046927SAndroid Build Coastguard Worker 
TEST_F(LowerParallelCopy,Cycle3)176*61046927SAndroid Build Coastguard Worker TEST_F(LowerParallelCopy, Cycle3)
177*61046927SAndroid Build Coastguard Worker {
178*61046927SAndroid Build Coastguard Worker    struct agx_copy test[] = {
179*61046927SAndroid Build Coastguard Worker       {.dest = 0, .src = agx_register(1, AGX_SIZE_16)},
180*61046927SAndroid Build Coastguard Worker       {.dest = 1, .src = agx_register(2, AGX_SIZE_16)},
181*61046927SAndroid Build Coastguard Worker       {.dest = 2, .src = agx_register(0, AGX_SIZE_16)},
182*61046927SAndroid Build Coastguard Worker    };
183*61046927SAndroid Build Coastguard Worker 
184*61046927SAndroid Build Coastguard Worker    CASE(test, {
185*61046927SAndroid Build Coastguard Worker       extr_swap(b, agx_register(0, AGX_SIZE_16));
186*61046927SAndroid Build Coastguard Worker       xor_swap(b, agx_register(1, AGX_SIZE_16), agx_register(2, AGX_SIZE_16));
187*61046927SAndroid Build Coastguard Worker    });
188*61046927SAndroid Build Coastguard Worker }
189*61046927SAndroid Build Coastguard Worker 
TEST_F(LowerParallelCopy,Immediate64)190*61046927SAndroid Build Coastguard Worker TEST_F(LowerParallelCopy, Immediate64)
191*61046927SAndroid Build Coastguard Worker {
192*61046927SAndroid Build Coastguard Worker    agx_index imm = agx_immediate(10);
193*61046927SAndroid Build Coastguard Worker    imm.size = AGX_SIZE_64;
194*61046927SAndroid Build Coastguard Worker 
195*61046927SAndroid Build Coastguard Worker    struct agx_copy test_1[] = {
196*61046927SAndroid Build Coastguard Worker       {.dest = 4, .src = imm},
197*61046927SAndroid Build Coastguard Worker    };
198*61046927SAndroid Build Coastguard Worker 
199*61046927SAndroid Build Coastguard Worker    CASE(test_1, {
200*61046927SAndroid Build Coastguard Worker       agx_mov_imm_to(b, agx_register(4, AGX_SIZE_32), 10);
201*61046927SAndroid Build Coastguard Worker       agx_mov_imm_to(b, agx_register(6, AGX_SIZE_32), 0);
202*61046927SAndroid Build Coastguard Worker    });
203*61046927SAndroid Build Coastguard Worker }
204*61046927SAndroid Build Coastguard Worker 
205*61046927SAndroid Build Coastguard Worker /* Test case from Hack et al */
TEST_F(LowerParallelCopy,TwoSwaps)206*61046927SAndroid Build Coastguard Worker TEST_F(LowerParallelCopy, TwoSwaps)
207*61046927SAndroid Build Coastguard Worker {
208*61046927SAndroid Build Coastguard Worker    struct agx_copy test[] = {
209*61046927SAndroid Build Coastguard Worker       {.dest = 4, .src = agx_register(2, AGX_SIZE_32)},
210*61046927SAndroid Build Coastguard Worker       {.dest = 6, .src = agx_register(4, AGX_SIZE_32)},
211*61046927SAndroid Build Coastguard Worker       {.dest = 2, .src = agx_register(6, AGX_SIZE_32)},
212*61046927SAndroid Build Coastguard Worker       {.dest = 8, .src = agx_register(8, AGX_SIZE_32)},
213*61046927SAndroid Build Coastguard Worker    };
214*61046927SAndroid Build Coastguard Worker 
215*61046927SAndroid Build Coastguard Worker    CASE(test, {
216*61046927SAndroid Build Coastguard Worker       xor_swap(b, agx_register(4, AGX_SIZE_32), agx_register(2, AGX_SIZE_32));
217*61046927SAndroid Build Coastguard Worker       xor_swap(b, agx_register(6, AGX_SIZE_32), agx_register(2, AGX_SIZE_32));
218*61046927SAndroid Build Coastguard Worker    });
219*61046927SAndroid Build Coastguard Worker }
220*61046927SAndroid Build Coastguard Worker 
TEST_F(LowerParallelCopy,VectorizeAlignedHalfRegs)221*61046927SAndroid Build Coastguard Worker TEST_F(LowerParallelCopy, VectorizeAlignedHalfRegs)
222*61046927SAndroid Build Coastguard Worker {
223*61046927SAndroid Build Coastguard Worker    struct agx_copy test[] = {
224*61046927SAndroid Build Coastguard Worker       {.dest = 0, .src = agx_register(10, AGX_SIZE_16)},
225*61046927SAndroid Build Coastguard Worker       {.dest = 1, .src = agx_register(11, AGX_SIZE_16)},
226*61046927SAndroid Build Coastguard Worker       {.dest = 2, .src = agx_uniform(8, AGX_SIZE_16)},
227*61046927SAndroid Build Coastguard Worker       {.dest = 3, .src = agx_uniform(9, AGX_SIZE_16)},
228*61046927SAndroid Build Coastguard Worker    };
229*61046927SAndroid Build Coastguard Worker 
230*61046927SAndroid Build Coastguard Worker    CASE(test, {
231*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(0, AGX_SIZE_32),
232*61046927SAndroid Build Coastguard Worker                  agx_register(10, AGX_SIZE_32));
233*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(2, AGX_SIZE_32), agx_uniform(8, AGX_SIZE_32));
234*61046927SAndroid Build Coastguard Worker    });
235*61046927SAndroid Build Coastguard Worker }
236*61046927SAndroid Build Coastguard Worker 
TEST_F(LowerParallelCopy,StackCopies)237*61046927SAndroid Build Coastguard Worker TEST_F(LowerParallelCopy, StackCopies)
238*61046927SAndroid Build Coastguard Worker {
239*61046927SAndroid Build Coastguard Worker    struct agx_copy test[] = {
240*61046927SAndroid Build Coastguard Worker       {.dest = 21, .dest_mem = true, .src = agx_register(20, AGX_SIZE_16)},
241*61046927SAndroid Build Coastguard Worker       {.dest = 22, .dest_mem = true, .src = agx_register(22, AGX_SIZE_32)},
242*61046927SAndroid Build Coastguard Worker       {.dest = 0, .src = agx_memory_register(10, AGX_SIZE_16)},
243*61046927SAndroid Build Coastguard Worker       {.dest = 1, .src = agx_memory_register(11, AGX_SIZE_16)},
244*61046927SAndroid Build Coastguard Worker       {.dest = 0, .dest_mem = true, .src = agx_memory_register(12, AGX_SIZE_16)},
245*61046927SAndroid Build Coastguard Worker       {.dest = 1, .dest_mem = true, .src = agx_memory_register(13, AGX_SIZE_16)},
246*61046927SAndroid Build Coastguard Worker       {.dest = 2,
247*61046927SAndroid Build Coastguard Worker        .dest_mem = true,
248*61046927SAndroid Build Coastguard Worker        .src = agx_memory_register(804, AGX_SIZE_32)},
249*61046927SAndroid Build Coastguard Worker       {.dest = 804,
250*61046927SAndroid Build Coastguard Worker        .dest_mem = true,
251*61046927SAndroid Build Coastguard Worker        .src = agx_memory_register(2, AGX_SIZE_32)},
252*61046927SAndroid Build Coastguard Worker       {.dest = 807,
253*61046927SAndroid Build Coastguard Worker        .dest_mem = true,
254*61046927SAndroid Build Coastguard Worker        .src = agx_memory_register(808, AGX_SIZE_16)},
255*61046927SAndroid Build Coastguard Worker       {.dest = 808,
256*61046927SAndroid Build Coastguard Worker        .dest_mem = true,
257*61046927SAndroid Build Coastguard Worker        .src = agx_memory_register(807, AGX_SIZE_16)},
258*61046927SAndroid Build Coastguard Worker    };
259*61046927SAndroid Build Coastguard Worker 
260*61046927SAndroid Build Coastguard Worker    CASE(test, {
261*61046927SAndroid Build Coastguard Worker       /* Vectorized fill */
262*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(0, AGX_SIZE_32),
263*61046927SAndroid Build Coastguard Worker                  agx_memory_register(10, AGX_SIZE_32));
264*61046927SAndroid Build Coastguard Worker 
265*61046927SAndroid Build Coastguard Worker       /* Regular spills */
266*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_memory_register(21, AGX_SIZE_16),
267*61046927SAndroid Build Coastguard Worker                  agx_register(20, AGX_SIZE_16));
268*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_memory_register(22, AGX_SIZE_32),
269*61046927SAndroid Build Coastguard Worker                  agx_register(22, AGX_SIZE_32));
270*61046927SAndroid Build Coastguard Worker 
271*61046927SAndroid Build Coastguard Worker       /* Vectorized stack->stack copy */
272*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_register(2, AGX_SIZE_32),
273*61046927SAndroid Build Coastguard Worker                  agx_memory_register(12, AGX_SIZE_32));
274*61046927SAndroid Build Coastguard Worker 
275*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_memory_register(0, AGX_SIZE_32),
276*61046927SAndroid Build Coastguard Worker                  agx_register(2, AGX_SIZE_32));
277*61046927SAndroid Build Coastguard Worker 
278*61046927SAndroid Build Coastguard Worker       /* Stack swap: 32-bit */
279*61046927SAndroid Build Coastguard Worker       agx_index temp1 = agx_register(4, AGX_SIZE_32);
280*61046927SAndroid Build Coastguard Worker       agx_index temp2 = agx_register(6, AGX_SIZE_32);
281*61046927SAndroid Build Coastguard Worker       agx_index spilled_gpr_vec2 = agx_register(0, AGX_SIZE_32);
282*61046927SAndroid Build Coastguard Worker       spilled_gpr_vec2.channels_m1++;
283*61046927SAndroid Build Coastguard Worker 
284*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, temp1, agx_memory_register(2, AGX_SIZE_32));
285*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, temp2, agx_memory_register(804, AGX_SIZE_32));
286*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_memory_register(804, AGX_SIZE_32), temp1);
287*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_memory_register(2, AGX_SIZE_32), temp2);
288*61046927SAndroid Build Coastguard Worker 
289*61046927SAndroid Build Coastguard Worker       /* Stack swap: 16-bit */
290*61046927SAndroid Build Coastguard Worker       spilled_gpr_vec2.size = AGX_SIZE_16;
291*61046927SAndroid Build Coastguard Worker       temp1.size = AGX_SIZE_16;
292*61046927SAndroid Build Coastguard Worker       temp2.size = AGX_SIZE_16;
293*61046927SAndroid Build Coastguard Worker 
294*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, temp1, agx_memory_register(807, AGX_SIZE_16));
295*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, temp2, agx_memory_register(808, AGX_SIZE_16));
296*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_memory_register(808, AGX_SIZE_16), temp1);
297*61046927SAndroid Build Coastguard Worker       agx_mov_to(b, agx_memory_register(807, AGX_SIZE_16), temp2);
298*61046927SAndroid Build Coastguard Worker    });
299*61046927SAndroid Build Coastguard Worker }
300*61046927SAndroid Build Coastguard Worker 
301*61046927SAndroid Build Coastguard Worker #if 0
302*61046927SAndroid Build Coastguard Worker TEST_F(LowerParallelCopy, LooksLikeASwap) {
303*61046927SAndroid Build Coastguard Worker    struct agx_copy test[] = {
304*61046927SAndroid Build Coastguard Worker         { .dest = 0, .src = agx_register(2, AGX_SIZE_32) },
305*61046927SAndroid Build Coastguard Worker         { .dest = 2, .src = agx_register(0, AGX_SIZE_32) },
306*61046927SAndroid Build Coastguard Worker         { .dest = 4, .src = agx_register(2, AGX_SIZE_32) },
307*61046927SAndroid Build Coastguard Worker    };
308*61046927SAndroid Build Coastguard Worker 
309*61046927SAndroid Build Coastguard Worker    CASE(test, {
310*61046927SAndroid Build Coastguard Worker          agx_mov_to(b, agx_register(4, AGX_SIZE_32), agx_register(2, AGX_SIZE_32));
311*61046927SAndroid Build Coastguard Worker          agx_mov_to(b, agx_register(2, AGX_SIZE_32), agx_register(0, AGX_SIZE_32));
312*61046927SAndroid Build Coastguard Worker          agx_mov_to(b, agx_register(0, AGX_SIZE_32), agx_register(4, AGX_SIZE_32));
313*61046927SAndroid Build Coastguard Worker    });
314*61046927SAndroid Build Coastguard Worker }
315*61046927SAndroid Build Coastguard Worker #endif
316