1b8021494Sopenharmony_ci// Copyright 2019, VIXL authors
2b8021494Sopenharmony_ci// All rights reserved.
3b8021494Sopenharmony_ci//
4b8021494Sopenharmony_ci// Redistribution and use in source and binary forms, with or without
5b8021494Sopenharmony_ci// modification, are permitted provided that the following conditions are met:
6b8021494Sopenharmony_ci//
7b8021494Sopenharmony_ci//   * Redistributions of source code must retain the above copyright notice,
8b8021494Sopenharmony_ci//     this list of conditions and the following disclaimer.
9b8021494Sopenharmony_ci//   * Redistributions in binary form must reproduce the above copyright notice,
10b8021494Sopenharmony_ci//     this list of conditions and the following disclaimer in the documentation
11b8021494Sopenharmony_ci//     and/or other materials provided with the distribution.
12b8021494Sopenharmony_ci//   * Neither the name of ARM Limited nor the names of its contributors may be
13b8021494Sopenharmony_ci//     used to endorse or promote products derived from this software without
14b8021494Sopenharmony_ci//     specific prior written permission.
15b8021494Sopenharmony_ci//
16b8021494Sopenharmony_ci// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
17b8021494Sopenharmony_ci// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18b8021494Sopenharmony_ci// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19b8021494Sopenharmony_ci// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
20b8021494Sopenharmony_ci// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21b8021494Sopenharmony_ci// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22b8021494Sopenharmony_ci// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23b8021494Sopenharmony_ci// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24b8021494Sopenharmony_ci// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25b8021494Sopenharmony_ci// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26b8021494Sopenharmony_ci
27b8021494Sopenharmony_ci
28b8021494Sopenharmony_ci#include <cstdio>
29b8021494Sopenharmony_ci#include <cstring>
30b8021494Sopenharmony_ci#include <string>
31b8021494Sopenharmony_ci
32b8021494Sopenharmony_ci#include "test-runner.h"
33b8021494Sopenharmony_ci
34b8021494Sopenharmony_ci#include "aarch64/disasm-aarch64.h"
35b8021494Sopenharmony_ci#include "aarch64/macro-assembler-aarch64.h"
36b8021494Sopenharmony_ci#include "test-disasm-aarch64.h"
37b8021494Sopenharmony_ci
38b8021494Sopenharmony_cinamespace vixl {
39b8021494Sopenharmony_cinamespace aarch64 {
40b8021494Sopenharmony_ci
41b8021494Sopenharmony_ciTEST(load_store_v_offset) {
42b8021494Sopenharmony_ci  SETUP();
43b8021494Sopenharmony_ci
44b8021494Sopenharmony_ci  COMPARE(ldr(s0, MemOperand(x1)), "ldr s0, [x1]");
45b8021494Sopenharmony_ci  COMPARE(ldr(s2, MemOperand(x3, 4)), "ldr s2, [x3, #4]");
46b8021494Sopenharmony_ci  COMPARE(ldr(s4, MemOperand(x5, 16380)), "ldr s4, [x5, #16380]");
47b8021494Sopenharmony_ci  COMPARE(ldr(d6, MemOperand(x7)), "ldr d6, [x7]");
48b8021494Sopenharmony_ci  COMPARE(ldr(d8, MemOperand(x9, 8)), "ldr d8, [x9, #8]");
49b8021494Sopenharmony_ci  COMPARE(ldr(d10, MemOperand(x11, 32760)), "ldr d10, [x11, #32760]");
50b8021494Sopenharmony_ci  COMPARE(str(s12, MemOperand(x13)), "str s12, [x13]");
51b8021494Sopenharmony_ci  COMPARE(str(s14, MemOperand(x15, 4)), "str s14, [x15, #4]");
52b8021494Sopenharmony_ci  COMPARE(str(s16, MemOperand(x17, 16380)), "str s16, [x17, #16380]");
53b8021494Sopenharmony_ci  COMPARE(str(d18, MemOperand(x19)), "str d18, [x19]");
54b8021494Sopenharmony_ci  COMPARE(str(d20, MemOperand(x21, 8)), "str d20, [x21, #8]");
55b8021494Sopenharmony_ci  COMPARE(str(d22, MemOperand(x23, 32760)), "str d22, [x23, #32760]");
56b8021494Sopenharmony_ci
57b8021494Sopenharmony_ci  COMPARE(ldr(b0, MemOperand(x1)), "ldr b0, [x1]");
58b8021494Sopenharmony_ci  COMPARE(ldr(b2, MemOperand(x3, 1)), "ldr b2, [x3, #1]");
59b8021494Sopenharmony_ci  COMPARE(ldr(b4, MemOperand(x5, 4095)), "ldr b4, [x5, #4095]");
60b8021494Sopenharmony_ci  COMPARE(ldr(h6, MemOperand(x7)), "ldr h6, [x7]");
61b8021494Sopenharmony_ci  COMPARE(ldr(h8, MemOperand(x9, 2)), "ldr h8, [x9, #2]");
62b8021494Sopenharmony_ci  COMPARE(ldr(h10, MemOperand(x11, 8190)), "ldr h10, [x11, #8190]");
63b8021494Sopenharmony_ci  COMPARE(ldr(q12, MemOperand(x13)), "ldr q12, [x13]");
64b8021494Sopenharmony_ci  COMPARE(ldr(q14, MemOperand(x15, 16)), "ldr q14, [x15, #16]");
65b8021494Sopenharmony_ci  COMPARE(ldr(q16, MemOperand(x17, 65520)), "ldr q16, [x17, #65520]");
66b8021494Sopenharmony_ci  COMPARE(str(b18, MemOperand(x19)), "str b18, [x19]");
67b8021494Sopenharmony_ci  COMPARE(str(b20, MemOperand(x21, 1)), "str b20, [x21, #1]");
68b8021494Sopenharmony_ci  COMPARE(str(b22, MemOperand(x23, 4095)), "str b22, [x23, #4095]");
69b8021494Sopenharmony_ci  COMPARE(str(h24, MemOperand(x25)), "str h24, [x25]");
70b8021494Sopenharmony_ci  COMPARE(str(h26, MemOperand(x27, 2)), "str h26, [x27, #2]");
71b8021494Sopenharmony_ci  COMPARE(str(h28, MemOperand(x29, 8190)), "str h28, [x29, #8190]");
72b8021494Sopenharmony_ci  COMPARE(str(q30, MemOperand(x30)), "str q30, [x30]");
73b8021494Sopenharmony_ci  COMPARE(str(q31, MemOperand(x1, 16)), "str q31, [x1, #16]");
74b8021494Sopenharmony_ci  COMPARE(str(q0, MemOperand(x3, 65520)), "str q0, [x3, #65520]");
75b8021494Sopenharmony_ci
76b8021494Sopenharmony_ci  COMPARE(ldr(s24, MemOperand(sp)), "ldr s24, [sp]");
77b8021494Sopenharmony_ci  COMPARE(ldr(d25, MemOperand(sp, 8)), "ldr d25, [sp, #8]");
78b8021494Sopenharmony_ci  COMPARE(ldr(b26, MemOperand(sp, 1)), "ldr b26, [sp, #1]");
79b8021494Sopenharmony_ci  COMPARE(ldr(h27, MemOperand(sp, 2)), "ldr h27, [sp, #2]");
80b8021494Sopenharmony_ci  COMPARE(ldr(q28, MemOperand(sp, 16)), "ldr q28, [sp, #16]");
81b8021494Sopenharmony_ci
82b8021494Sopenharmony_ci  CLEANUP();
83b8021494Sopenharmony_ci}
84b8021494Sopenharmony_ci
85b8021494Sopenharmony_ci
86b8021494Sopenharmony_ciTEST(load_store_v_pre) {
87b8021494Sopenharmony_ci  SETUP();
88b8021494Sopenharmony_ci
89b8021494Sopenharmony_ci  COMPARE(ldr(s0, MemOperand(x1, 4, PreIndex)), "ldr s0, [x1, #4]!");
90b8021494Sopenharmony_ci  COMPARE(ldr(s2, MemOperand(x3, 255, PreIndex)), "ldr s2, [x3, #255]!");
91b8021494Sopenharmony_ci  COMPARE(ldr(s4, MemOperand(x5, -256, PreIndex)), "ldr s4, [x5, #-256]!");
92b8021494Sopenharmony_ci  COMPARE(ldr(d6, MemOperand(x7, 8, PreIndex)), "ldr d6, [x7, #8]!");
93b8021494Sopenharmony_ci  COMPARE(ldr(d8, MemOperand(x9, 255, PreIndex)), "ldr d8, [x9, #255]!");
94b8021494Sopenharmony_ci  COMPARE(ldr(d10, MemOperand(x11, -256, PreIndex)), "ldr d10, [x11, #-256]!");
95b8021494Sopenharmony_ci
96b8021494Sopenharmony_ci  COMPARE(str(s12, MemOperand(x13, 4, PreIndex)), "str s12, [x13, #4]!");
97b8021494Sopenharmony_ci  COMPARE(str(s14, MemOperand(x15, 255, PreIndex)), "str s14, [x15, #255]!");
98b8021494Sopenharmony_ci  COMPARE(str(s16, MemOperand(x17, -256, PreIndex)), "str s16, [x17, #-256]!");
99b8021494Sopenharmony_ci  COMPARE(str(d18, MemOperand(x19, 8, PreIndex)), "str d18, [x19, #8]!");
100b8021494Sopenharmony_ci  COMPARE(str(d20, MemOperand(x21, 255, PreIndex)), "str d20, [x21, #255]!");
101b8021494Sopenharmony_ci  COMPARE(str(d22, MemOperand(x23, -256, PreIndex)), "str d22, [x23, #-256]!");
102b8021494Sopenharmony_ci
103b8021494Sopenharmony_ci  COMPARE(ldr(b0, MemOperand(x1, 1, PreIndex)), "ldr b0, [x1, #1]!");
104b8021494Sopenharmony_ci  COMPARE(ldr(b2, MemOperand(x3, 255, PreIndex)), "ldr b2, [x3, #255]!");
105b8021494Sopenharmony_ci  COMPARE(ldr(b4, MemOperand(x5, -256, PreIndex)), "ldr b4, [x5, #-256]!");
106b8021494Sopenharmony_ci  COMPARE(ldr(h6, MemOperand(x7, 2, PreIndex)), "ldr h6, [x7, #2]!");
107b8021494Sopenharmony_ci  COMPARE(ldr(h8, MemOperand(x9, 255, PreIndex)), "ldr h8, [x9, #255]!");
108b8021494Sopenharmony_ci  COMPARE(ldr(h10, MemOperand(x11, -256, PreIndex)), "ldr h10, [x11, #-256]!");
109b8021494Sopenharmony_ci  COMPARE(ldr(q12, MemOperand(x13, 16, PreIndex)), "ldr q12, [x13, #16]!");
110b8021494Sopenharmony_ci  COMPARE(ldr(q14, MemOperand(x15, 255, PreIndex)), "ldr q14, [x15, #255]!");
111b8021494Sopenharmony_ci  COMPARE(ldr(q16, MemOperand(x17, -256, PreIndex)), "ldr q16, [x17, #-256]!");
112b8021494Sopenharmony_ci
113b8021494Sopenharmony_ci  COMPARE(str(b18, MemOperand(x19, 1, PreIndex)), "str b18, [x19, #1]!");
114b8021494Sopenharmony_ci  COMPARE(str(b20, MemOperand(x21, 255, PreIndex)), "str b20, [x21, #255]!");
115b8021494Sopenharmony_ci  COMPARE(str(b22, MemOperand(x23, -256, PreIndex)), "str b22, [x23, #-256]!");
116b8021494Sopenharmony_ci  COMPARE(str(h24, MemOperand(x25, 2, PreIndex)), "str h24, [x25, #2]!");
117b8021494Sopenharmony_ci  COMPARE(str(h26, MemOperand(x27, 255, PreIndex)), "str h26, [x27, #255]!");
118b8021494Sopenharmony_ci  COMPARE(str(h28, MemOperand(x29, -256, PreIndex)), "str h28, [x29, #-256]!");
119b8021494Sopenharmony_ci  COMPARE(str(q30, MemOperand(x1, 16, PreIndex)), "str q30, [x1, #16]!");
120b8021494Sopenharmony_ci  COMPARE(str(q31, MemOperand(x3, 255, PreIndex)), "str q31, [x3, #255]!");
121b8021494Sopenharmony_ci  COMPARE(str(q0, MemOperand(x5, -256, PreIndex)), "str q0, [x5, #-256]!");
122b8021494Sopenharmony_ci
123b8021494Sopenharmony_ci  COMPARE(str(b24, MemOperand(sp, 1, PreIndex)), "str b24, [sp, #1]!");
124b8021494Sopenharmony_ci  COMPARE(str(h25, MemOperand(sp, -2, PreIndex)), "str h25, [sp, #-2]!");
125b8021494Sopenharmony_ci  COMPARE(str(s26, MemOperand(sp, 4, PreIndex)), "str s26, [sp, #4]!");
126b8021494Sopenharmony_ci  COMPARE(str(d27, MemOperand(sp, -8, PreIndex)), "str d27, [sp, #-8]!");
127b8021494Sopenharmony_ci  COMPARE(str(q28, MemOperand(sp, 16, PreIndex)), "str q28, [sp, #16]!");
128b8021494Sopenharmony_ci
129b8021494Sopenharmony_ci  COMPARE(ldr(b0, MemOperand(x1, 0, PreIndex)), "ldr b0, [x1, #0]!");
130b8021494Sopenharmony_ci  COMPARE(ldr(h2, MemOperand(x3, 0, PreIndex)), "ldr h2, [x3, #0]!");
131b8021494Sopenharmony_ci  COMPARE(ldr(s4, MemOperand(x5, 0, PreIndex)), "ldr s4, [x5, #0]!");
132b8021494Sopenharmony_ci  COMPARE(ldr(d6, MemOperand(x7, 0, PreIndex)), "ldr d6, [x7, #0]!");
133b8021494Sopenharmony_ci  COMPARE(ldr(q8, MemOperand(x9, 0, PreIndex)), "ldr q8, [x9, #0]!");
134b8021494Sopenharmony_ci  COMPARE(str(b0, MemOperand(x1, 0, PreIndex)), "str b0, [x1, #0]!");
135b8021494Sopenharmony_ci  COMPARE(str(h2, MemOperand(x3, 0, PreIndex)), "str h2, [x3, #0]!");
136b8021494Sopenharmony_ci  COMPARE(str(s4, MemOperand(x5, 0, PreIndex)), "str s4, [x5, #0]!");
137b8021494Sopenharmony_ci  COMPARE(str(d6, MemOperand(x7, 0, PreIndex)), "str d6, [x7, #0]!");
138b8021494Sopenharmony_ci  COMPARE(str(q8, MemOperand(x9, 0, PreIndex)), "str q8, [x9, #0]!");
139b8021494Sopenharmony_ci
140b8021494Sopenharmony_ci  CLEANUP();
141b8021494Sopenharmony_ci}
142b8021494Sopenharmony_ci
143b8021494Sopenharmony_ci
144b8021494Sopenharmony_ciTEST(load_store_v_post) {
145b8021494Sopenharmony_ci  SETUP();
146b8021494Sopenharmony_ci
147b8021494Sopenharmony_ci  COMPARE(ldr(s0, MemOperand(x1, 4, PostIndex)), "ldr s0, [x1], #4");
148b8021494Sopenharmony_ci  COMPARE(ldr(s2, MemOperand(x3, 255, PostIndex)), "ldr s2, [x3], #255");
149b8021494Sopenharmony_ci  COMPARE(ldr(s4, MemOperand(x5, -256, PostIndex)), "ldr s4, [x5], #-256");
150b8021494Sopenharmony_ci  COMPARE(ldr(d6, MemOperand(x7, 8, PostIndex)), "ldr d6, [x7], #8");
151b8021494Sopenharmony_ci  COMPARE(ldr(d8, MemOperand(x9, 255, PostIndex)), "ldr d8, [x9], #255");
152b8021494Sopenharmony_ci  COMPARE(ldr(d10, MemOperand(x11, -256, PostIndex)), "ldr d10, [x11], #-256");
153b8021494Sopenharmony_ci
154b8021494Sopenharmony_ci  COMPARE(str(s12, MemOperand(x13, 4, PostIndex)), "str s12, [x13], #4");
155b8021494Sopenharmony_ci  COMPARE(str(s14, MemOperand(x15, 255, PostIndex)), "str s14, [x15], #255");
156b8021494Sopenharmony_ci  COMPARE(str(s16, MemOperand(x17, -256, PostIndex)), "str s16, [x17], #-256");
157b8021494Sopenharmony_ci  COMPARE(str(d18, MemOperand(x19, 8, PostIndex)), "str d18, [x19], #8");
158b8021494Sopenharmony_ci  COMPARE(str(d20, MemOperand(x21, 255, PostIndex)), "str d20, [x21], #255");
159b8021494Sopenharmony_ci  COMPARE(str(d22, MemOperand(x23, -256, PostIndex)), "str d22, [x23], #-256");
160b8021494Sopenharmony_ci
161b8021494Sopenharmony_ci  COMPARE(ldr(b0, MemOperand(x1, 4, PostIndex)), "ldr b0, [x1], #4");
162b8021494Sopenharmony_ci  COMPARE(ldr(b2, MemOperand(x3, 255, PostIndex)), "ldr b2, [x3], #255");
163b8021494Sopenharmony_ci  COMPARE(ldr(b4, MemOperand(x5, -256, PostIndex)), "ldr b4, [x5], #-256");
164b8021494Sopenharmony_ci  COMPARE(ldr(h6, MemOperand(x7, 8, PostIndex)), "ldr h6, [x7], #8");
165b8021494Sopenharmony_ci  COMPARE(ldr(h8, MemOperand(x9, 255, PostIndex)), "ldr h8, [x9], #255");
166b8021494Sopenharmony_ci  COMPARE(ldr(h10, MemOperand(x11, -256, PostIndex)), "ldr h10, [x11], #-256");
167b8021494Sopenharmony_ci  COMPARE(ldr(q12, MemOperand(x13, 8, PostIndex)), "ldr q12, [x13], #8");
168b8021494Sopenharmony_ci  COMPARE(ldr(q14, MemOperand(x15, 255, PostIndex)), "ldr q14, [x15], #255");
169b8021494Sopenharmony_ci  COMPARE(ldr(q16, MemOperand(x17, -256, PostIndex)), "ldr q16, [x17], #-256");
170b8021494Sopenharmony_ci
171b8021494Sopenharmony_ci  COMPARE(str(b18, MemOperand(x19, 4, PostIndex)), "str b18, [x19], #4");
172b8021494Sopenharmony_ci  COMPARE(str(b20, MemOperand(x21, 255, PostIndex)), "str b20, [x21], #255");
173b8021494Sopenharmony_ci  COMPARE(str(b22, MemOperand(x23, -256, PostIndex)), "str b22, [x23], #-256");
174b8021494Sopenharmony_ci  COMPARE(str(h24, MemOperand(x25, 8, PostIndex)), "str h24, [x25], #8");
175b8021494Sopenharmony_ci  COMPARE(str(h26, MemOperand(x27, 255, PostIndex)), "str h26, [x27], #255");
176b8021494Sopenharmony_ci  COMPARE(str(h28, MemOperand(x29, -256, PostIndex)), "str h28, [x29], #-256");
177b8021494Sopenharmony_ci  COMPARE(str(q30, MemOperand(x1, 8, PostIndex)), "str q30, [x1], #8");
178b8021494Sopenharmony_ci  COMPARE(str(q31, MemOperand(x3, 255, PostIndex)), "str q31, [x3], #255");
179b8021494Sopenharmony_ci  COMPARE(str(q0, MemOperand(x5, -256, PostIndex)), "str q0, [x5], #-256");
180b8021494Sopenharmony_ci
181b8021494Sopenharmony_ci  COMPARE(ldr(b24, MemOperand(sp, -1, PreIndex)), "ldr b24, [sp, #-1]!");
182b8021494Sopenharmony_ci  COMPARE(ldr(h25, MemOperand(sp, 2, PreIndex)), "ldr h25, [sp, #2]!");
183b8021494Sopenharmony_ci  COMPARE(ldr(s26, MemOperand(sp, -4, PreIndex)), "ldr s26, [sp, #-4]!");
184b8021494Sopenharmony_ci  COMPARE(ldr(d27, MemOperand(sp, 8, PreIndex)), "ldr d27, [sp, #8]!");
185b8021494Sopenharmony_ci  COMPARE(ldr(q28, MemOperand(sp, -16, PreIndex)), "ldr q28, [sp, #-16]!");
186b8021494Sopenharmony_ci
187b8021494Sopenharmony_ci  COMPARE(ldr(b0, MemOperand(x1, 0, PostIndex)), "ldr b0, [x1], #0");
188b8021494Sopenharmony_ci  COMPARE(ldr(h2, MemOperand(x3, 0, PostIndex)), "ldr h2, [x3], #0");
189b8021494Sopenharmony_ci  COMPARE(ldr(s4, MemOperand(x5, 0, PostIndex)), "ldr s4, [x5], #0");
190b8021494Sopenharmony_ci  COMPARE(ldr(d6, MemOperand(x7, 0, PostIndex)), "ldr d6, [x7], #0");
191b8021494Sopenharmony_ci  COMPARE(ldr(q8, MemOperand(x9, 0, PostIndex)), "ldr q8, [x9], #0");
192b8021494Sopenharmony_ci  COMPARE(str(b0, MemOperand(x1, 0, PostIndex)), "str b0, [x1], #0");
193b8021494Sopenharmony_ci  COMPARE(str(h2, MemOperand(x3, 0, PostIndex)), "str h2, [x3], #0");
194b8021494Sopenharmony_ci  COMPARE(str(s4, MemOperand(x5, 0, PostIndex)), "str s4, [x5], #0");
195b8021494Sopenharmony_ci  COMPARE(str(d6, MemOperand(x7, 0, PostIndex)), "str d6, [x7], #0");
196b8021494Sopenharmony_ci  COMPARE(str(q8, MemOperand(x9, 0, PostIndex)), "str q8, [x9], #0");
197b8021494Sopenharmony_ci
198b8021494Sopenharmony_ci  CLEANUP();
199b8021494Sopenharmony_ci}
200b8021494Sopenharmony_ci
201b8021494Sopenharmony_ci
202b8021494Sopenharmony_ciTEST(load_store_v_regoffset) {
203b8021494Sopenharmony_ci  SETUP();
204b8021494Sopenharmony_ci
205b8021494Sopenharmony_ci  COMPARE(ldr(b0, MemOperand(x1, x2)), "ldr b0, [x1, x2]");
206b8021494Sopenharmony_ci  COMPARE(ldr(b1, MemOperand(x2, w3, UXTW)), "ldr b1, [x2, w3, uxtw]");
207b8021494Sopenharmony_ci  COMPARE(ldr(b2, MemOperand(x3, w4, SXTW)), "ldr b2, [x3, w4, sxtw]");
208b8021494Sopenharmony_ci  // We can't assemble this instruction, but we check it disassembles correctly.
209b8021494Sopenharmony_ci  COMPARE(dci(0x3c657883), "ldr b3, [x4, x5, lsl #0]");
210b8021494Sopenharmony_ci  COMPARE(ldr(b30, MemOperand(sp, xzr)), "ldr b30, [sp, xzr]");
211b8021494Sopenharmony_ci  COMPARE(ldr(b31, MemOperand(sp, wzr, UXTW)), "ldr b31, [sp, wzr, uxtw]");
212b8021494Sopenharmony_ci
213b8021494Sopenharmony_ci  COMPARE(ldr(h0, MemOperand(x1, x2)), "ldr h0, [x1, x2]");
214b8021494Sopenharmony_ci  COMPARE(ldr(h1, MemOperand(x2, w3, UXTW)), "ldr h1, [x2, w3, uxtw]");
215b8021494Sopenharmony_ci  COMPARE(ldr(h2, MemOperand(x3, w4, SXTW)), "ldr h2, [x3, w4, sxtw]");
216b8021494Sopenharmony_ci  COMPARE(ldr(h3, MemOperand(x4, w5, UXTW, 1)), "ldr h3, [x4, w5, uxtw #1]");
217b8021494Sopenharmony_ci  COMPARE(ldr(h4, MemOperand(x5, w5, SXTW, 1)), "ldr h4, [x5, w5, sxtw #1]");
218b8021494Sopenharmony_ci  COMPARE(ldr(h30, MemOperand(sp, xzr)), "ldr h30, [sp, xzr]");
219b8021494Sopenharmony_ci  COMPARE(ldr(h31, MemOperand(sp, wzr, SXTW, 1)),
220b8021494Sopenharmony_ci          "ldr h31, [sp, wzr, sxtw #1]");
221b8021494Sopenharmony_ci
222b8021494Sopenharmony_ci  COMPARE(ldr(s0, MemOperand(x1, x2)), "ldr s0, [x1, x2]");
223b8021494Sopenharmony_ci  COMPARE(ldr(s1, MemOperand(x2, w3, UXTW)), "ldr s1, [x2, w3, uxtw]");
224b8021494Sopenharmony_ci  COMPARE(ldr(s2, MemOperand(x3, w4, SXTW)), "ldr s2, [x3, w4, sxtw]");
225b8021494Sopenharmony_ci  COMPARE(ldr(s3, MemOperand(x4, w5, UXTW, 2)), "ldr s3, [x4, w5, uxtw #2]");
226b8021494Sopenharmony_ci  COMPARE(ldr(s4, MemOperand(x5, w5, SXTW, 2)), "ldr s4, [x5, w5, sxtw #2]");
227b8021494Sopenharmony_ci  COMPARE(ldr(s30, MemOperand(sp, xzr)), "ldr s30, [sp, xzr]");
228b8021494Sopenharmony_ci  COMPARE(ldr(s31, MemOperand(sp, wzr, SXTW, 2)),
229b8021494Sopenharmony_ci          "ldr s31, [sp, wzr, sxtw #2]");
230b8021494Sopenharmony_ci
231b8021494Sopenharmony_ci  COMPARE(ldr(d0, MemOperand(x1, x2)), "ldr d0, [x1, x2]");
232b8021494Sopenharmony_ci  COMPARE(ldr(d1, MemOperand(x2, w3, UXTW)), "ldr d1, [x2, w3, uxtw]");
233b8021494Sopenharmony_ci  COMPARE(ldr(d2, MemOperand(x3, w4, SXTW)), "ldr d2, [x3, w4, sxtw]");
234b8021494Sopenharmony_ci  COMPARE(ldr(d3, MemOperand(x4, w5, UXTW, 3)), "ldr d3, [x4, w5, uxtw #3]");
235b8021494Sopenharmony_ci  COMPARE(ldr(d4, MemOperand(x5, w5, SXTW, 3)), "ldr d4, [x5, w5, sxtw #3]");
236b8021494Sopenharmony_ci  COMPARE(ldr(d30, MemOperand(sp, xzr)), "ldr d30, [sp, xzr]");
237b8021494Sopenharmony_ci  COMPARE(ldr(d31, MemOperand(sp, wzr, SXTW, 3)),
238b8021494Sopenharmony_ci          "ldr d31, [sp, wzr, sxtw #3]");
239b8021494Sopenharmony_ci
240b8021494Sopenharmony_ci  COMPARE(ldr(q0, MemOperand(x1, x2)), "ldr q0, [x1, x2]");
241b8021494Sopenharmony_ci  COMPARE(ldr(q1, MemOperand(x2, w3, UXTW)), "ldr q1, [x2, w3, uxtw]");
242b8021494Sopenharmony_ci  COMPARE(ldr(q2, MemOperand(x3, w4, SXTW)), "ldr q2, [x3, w4, sxtw]");
243b8021494Sopenharmony_ci  COMPARE(ldr(q3, MemOperand(x4, w5, UXTW, 4)), "ldr q3, [x4, w5, uxtw #4]");
244b8021494Sopenharmony_ci  COMPARE(ldr(q4, MemOperand(x5, w5, SXTW, 4)), "ldr q4, [x5, w5, sxtw #4]");
245b8021494Sopenharmony_ci  COMPARE(ldr(q30, MemOperand(sp, xzr)), "ldr q30, [sp, xzr]");
246b8021494Sopenharmony_ci  COMPARE(ldr(q31, MemOperand(sp, wzr, SXTW, 4)),
247b8021494Sopenharmony_ci          "ldr q31, [sp, wzr, sxtw #4]");
248b8021494Sopenharmony_ci
249b8021494Sopenharmony_ci  COMPARE(str(b0, MemOperand(x1, x2)), "str b0, [x1, x2]");
250b8021494Sopenharmony_ci  COMPARE(str(b1, MemOperand(x2, w3, UXTW)), "str b1, [x2, w3, uxtw]");
251b8021494Sopenharmony_ci  COMPARE(str(b2, MemOperand(x3, w4, SXTW)), "str b2, [x3, w4, sxtw]");
252b8021494Sopenharmony_ci  // We can't assemble this instruction, but we check it disassembles correctly.
253b8021494Sopenharmony_ci  COMPARE(dci(0x3c257883), "str b3, [x4, x5, lsl #0]");
254b8021494Sopenharmony_ci  COMPARE(str(b30, MemOperand(sp, xzr)), "str b30, [sp, xzr]");
255b8021494Sopenharmony_ci  COMPARE(str(b31, MemOperand(sp, wzr, UXTW)), "str b31, [sp, wzr, uxtw]");
256b8021494Sopenharmony_ci
257b8021494Sopenharmony_ci  COMPARE(str(h0, MemOperand(x1, x2)), "str h0, [x1, x2]");
258b8021494Sopenharmony_ci  COMPARE(str(h1, MemOperand(x2, w3, UXTW)), "str h1, [x2, w3, uxtw]");
259b8021494Sopenharmony_ci  COMPARE(str(h2, MemOperand(x3, w4, SXTW)), "str h2, [x3, w4, sxtw]");
260b8021494Sopenharmony_ci  COMPARE(str(h3, MemOperand(x4, w5, UXTW, 1)), "str h3, [x4, w5, uxtw #1]");
261b8021494Sopenharmony_ci  COMPARE(str(h4, MemOperand(x5, w5, SXTW, 1)), "str h4, [x5, w5, sxtw #1]");
262b8021494Sopenharmony_ci  COMPARE(str(h30, MemOperand(sp, xzr)), "str h30, [sp, xzr]");
263b8021494Sopenharmony_ci  COMPARE(str(h31, MemOperand(sp, wzr, SXTW, 1)),
264b8021494Sopenharmony_ci          "str h31, [sp, wzr, sxtw #1]");
265b8021494Sopenharmony_ci
266b8021494Sopenharmony_ci  COMPARE(str(s0, MemOperand(x1, x2)), "str s0, [x1, x2]");
267b8021494Sopenharmony_ci  COMPARE(str(s1, MemOperand(x2, w3, UXTW)), "str s1, [x2, w3, uxtw]");
268b8021494Sopenharmony_ci  COMPARE(str(s2, MemOperand(x3, w4, SXTW)), "str s2, [x3, w4, sxtw]");
269b8021494Sopenharmony_ci  COMPARE(str(s3, MemOperand(x4, w5, UXTW, 2)), "str s3, [x4, w5, uxtw #2]");
270b8021494Sopenharmony_ci  COMPARE(str(s4, MemOperand(x5, w5, SXTW, 2)), "str s4, [x5, w5, sxtw #2]");
271b8021494Sopenharmony_ci  COMPARE(str(s30, MemOperand(sp, xzr)), "str s30, [sp, xzr]");
272b8021494Sopenharmony_ci  COMPARE(str(s31, MemOperand(sp, wzr, SXTW, 2)),
273b8021494Sopenharmony_ci          "str s31, [sp, wzr, sxtw #2]");
274b8021494Sopenharmony_ci
275b8021494Sopenharmony_ci  COMPARE(str(d0, MemOperand(x1, x2)), "str d0, [x1, x2]");
276b8021494Sopenharmony_ci  COMPARE(str(d1, MemOperand(x2, w3, UXTW)), "str d1, [x2, w3, uxtw]");
277b8021494Sopenharmony_ci  COMPARE(str(d2, MemOperand(x3, w4, SXTW)), "str d2, [x3, w4, sxtw]");
278b8021494Sopenharmony_ci  COMPARE(str(d3, MemOperand(x4, w5, UXTW, 3)), "str d3, [x4, w5, uxtw #3]");
279b8021494Sopenharmony_ci  COMPARE(str(d4, MemOperand(x5, w5, SXTW, 3)), "str d4, [x5, w5, sxtw #3]");
280b8021494Sopenharmony_ci  COMPARE(str(d30, MemOperand(sp, xzr)), "str d30, [sp, xzr]");
281b8021494Sopenharmony_ci  COMPARE(str(d31, MemOperand(sp, wzr, SXTW, 3)),
282b8021494Sopenharmony_ci          "str d31, [sp, wzr, sxtw #3]");
283b8021494Sopenharmony_ci
284b8021494Sopenharmony_ci  COMPARE(str(q0, MemOperand(x1, x2)), "str q0, [x1, x2]");
285b8021494Sopenharmony_ci  COMPARE(str(q1, MemOperand(x2, w3, UXTW)), "str q1, [x2, w3, uxtw]");
286b8021494Sopenharmony_ci  COMPARE(str(q2, MemOperand(x3, w4, SXTW)), "str q2, [x3, w4, sxtw]");
287b8021494Sopenharmony_ci  COMPARE(str(q3, MemOperand(x4, w5, UXTW, 4)), "str q3, [x4, w5, uxtw #4]");
288b8021494Sopenharmony_ci  COMPARE(str(q4, MemOperand(x5, w5, SXTW, 4)), "str q4, [x5, w5, sxtw #4]");
289b8021494Sopenharmony_ci  COMPARE(str(q30, MemOperand(sp, xzr)), "str q30, [sp, xzr]");
290b8021494Sopenharmony_ci  COMPARE(str(q31, MemOperand(sp, wzr, SXTW, 4)),
291b8021494Sopenharmony_ci          "str q31, [sp, wzr, sxtw #4]");
292b8021494Sopenharmony_ci
293b8021494Sopenharmony_ci  CLEANUP();
294b8021494Sopenharmony_ci}
295b8021494Sopenharmony_ci
296b8021494Sopenharmony_ci#define VLIST2(v) \
297b8021494Sopenharmony_ci  v, VRegister((v.GetCode() + 1) % 32, v.GetSizeInBits(), v.GetLanes())
298b8021494Sopenharmony_ci#define VLIST3(v) \
299b8021494Sopenharmony_ci  VLIST2(v), VRegister((v.GetCode() + 2) % 32, v.GetSizeInBits(), v.GetLanes())
300b8021494Sopenharmony_ci#define VLIST4(v) \
301b8021494Sopenharmony_ci  VLIST3(v), VRegister((v.GetCode() + 3) % 32, v.GetSizeInBits(), v.GetLanes())
302b8021494Sopenharmony_ci
303b8021494Sopenharmony_ci
304b8021494Sopenharmony_ci#define NEON_FORMAT_LIST(V) \
305b8021494Sopenharmony_ci  V(V8B(), "8b")            \
306b8021494Sopenharmony_ci  V(V16B(), "16b")          \
307b8021494Sopenharmony_ci  V(V4H(), "4h")            \
308b8021494Sopenharmony_ci  V(V8H(), "8h")            \
309b8021494Sopenharmony_ci  V(V2S(), "2s")            \
310b8021494Sopenharmony_ci  V(V4S(), "4s")            \
311b8021494Sopenharmony_ci  V(V2D(), "2d")
312b8021494Sopenharmony_ci
313b8021494Sopenharmony_ci#define NEON_FORMAT_LIST_LP(V)  \
314b8021494Sopenharmony_ci  V(V4H(), "4h", V8B(), "8b")   \
315b8021494Sopenharmony_ci  V(V2S(), "2s", V4H(), "4h")   \
316b8021494Sopenharmony_ci  V(V1D(), "1d", V2S(), "2s")   \
317b8021494Sopenharmony_ci  V(V8H(), "8h", V16B(), "16b") \
318b8021494Sopenharmony_ci  V(V4S(), "4s", V8H(), "8h")   \
319b8021494Sopenharmony_ci  V(V2D(), "2d", V4S(), "4s")
320b8021494Sopenharmony_ci
321b8021494Sopenharmony_ci#define NEON_FORMAT_LIST_LW(V) \
322b8021494Sopenharmony_ci  V(V8H(), "8h", V8B(), "8b")  \
323b8021494Sopenharmony_ci  V(V4S(), "4s", V4H(), "4h")  \
324b8021494Sopenharmony_ci  V(V2D(), "2d", V2S(), "2s")
325b8021494Sopenharmony_ci
326b8021494Sopenharmony_ci#define NEON_FORMAT_LIST_LW2(V) \
327b8021494Sopenharmony_ci  V(V8H(), "8h", V16B(), "16b") \
328b8021494Sopenharmony_ci  V(V4S(), "4s", V8H(), "8h")   \
329b8021494Sopenharmony_ci  V(V2D(), "2d", V4S(), "4s")
330b8021494Sopenharmony_ci
331b8021494Sopenharmony_ci#define NEON_FORMAT_LIST_BHS(V) \
332b8021494Sopenharmony_ci  V(V8B(), "8b")                \
333b8021494Sopenharmony_ci  V(V16B(), "16b")              \
334b8021494Sopenharmony_ci  V(V4H(), "4h")                \
335b8021494Sopenharmony_ci  V(V8H(), "8h")                \
336b8021494Sopenharmony_ci  V(V2S(), "2s")                \
337b8021494Sopenharmony_ci  V(V4S(), "4s")
338b8021494Sopenharmony_ci
339b8021494Sopenharmony_ci#define NEON_FORMAT_LIST_HS(V) \
340b8021494Sopenharmony_ci  V(V4H(), "4h")               \
341b8021494Sopenharmony_ci  V(V8H(), "8h")               \
342b8021494Sopenharmony_ci  V(V2S(), "2s")               \
343b8021494Sopenharmony_ci  V(V4S(), "4s")
344b8021494Sopenharmony_ci
345b8021494Sopenharmony_ciTEST(neon_load_store_vector) {
346b8021494Sopenharmony_ci  SETUP();
347b8021494Sopenharmony_ci
348b8021494Sopenharmony_ci#define DISASM_INST(M, S)                                               \
349b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v0.M, MemOperand(x15)), "ld1 {v0." S "}, [x15]");   \
350b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v1.M, v2.M, MemOperand(x16)),                       \
351b8021494Sopenharmony_ci                "ld1 {v1." S ", v2." S "}, [x16]");                     \
352b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v3.M, v4.M, v5.M, MemOperand(x17)),                 \
353b8021494Sopenharmony_ci                "ld1 {v3." S ", v4." S ", v5." S "}, [x17]");           \
354b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v6.M, v7.M, v8.M, v9.M, MemOperand(x18)),           \
355b8021494Sopenharmony_ci                "ld1 {v6." S ", v7." S ", v8." S ", v9." S "}, [x18]")  \
356b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v30.M, v31.M, v0.M, v1.M, MemOperand(sp)),          \
357b8021494Sopenharmony_ci                "ld1 {v30." S ", v31." S ", v0." S ", v1." S "}, [sp]") \
358b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v1.M, v2.M, MemOperand(x16)),                       \
359b8021494Sopenharmony_ci                "ld2 {v1." S ", v2." S "}, [x16]");                     \
360b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v3.M, v4.M, v5.M, MemOperand(x17)),                 \
361b8021494Sopenharmony_ci                "ld3 {v3." S ", v4." S ", v5." S "}, [x17]");           \
362b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v6.M, v7.M, v8.M, v9.M, MemOperand(x18)),           \
363b8021494Sopenharmony_ci                "ld4 {v6." S ", v7." S ", v8." S ", v9." S "}, [x18]")  \
364b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v30.M, v31.M, v0.M, v1.M, MemOperand(sp)),          \
365b8021494Sopenharmony_ci                "ld4 {v30." S ", v31." S ", v0." S ", v1." S "}, [sp]") \
366b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST);
367b8021494Sopenharmony_ci#undef DISASM_INST
368b8021494Sopenharmony_ci
369b8021494Sopenharmony_ci#define DISASM_INST(M, S)                                                      \
370b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v0.M, MemOperand(x15, x20, PostIndex)),                    \
371b8021494Sopenharmony_ci                "ld1 {v0." S "}, [x15], x20");                                 \
372b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v1.M, v2.M, MemOperand(x16, x21, PostIndex)),              \
373b8021494Sopenharmony_ci                "ld1 {v1." S ", v2." S "}, [x16], x21");                       \
374b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v3.M, v4.M, v5.M, MemOperand(x17, x22, PostIndex)),        \
375b8021494Sopenharmony_ci                "ld1 {v3." S ", v4." S ", v5." S "}, [x17], x22");             \
376b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v6.M, v7.M, v8.M, v9.M, MemOperand(x18, x23, PostIndex)),  \
377b8021494Sopenharmony_ci                "ld1 {v6." S ", v7." S ", v8." S ", v9." S "}, [x18], x23")    \
378b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v30.M, v31.M, v0.M, v1.M, MemOperand(sp, x24, PostIndex)), \
379b8021494Sopenharmony_ci                "ld1 {v30." S ", v31." S ", v0." S ", v1." S "}, [sp], x24")   \
380b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v1.M, v2.M, MemOperand(x16, x21, PostIndex)),              \
381b8021494Sopenharmony_ci                "ld2 {v1." S ", v2." S "}, [x16], x21");                       \
382b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v3.M, v4.M, v5.M, MemOperand(x17, x22, PostIndex)),        \
383b8021494Sopenharmony_ci                "ld3 {v3." S ", v4." S ", v5." S "}, [x17], x22");             \
384b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v6.M, v7.M, v8.M, v9.M, MemOperand(x18, x23, PostIndex)),  \
385b8021494Sopenharmony_ci                "ld4 {v6." S ", v7." S ", v8." S ", v9." S "}, [x18], x23")    \
386b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v30.M, v31.M, v0.M, v1.M, MemOperand(sp, x24, PostIndex)), \
387b8021494Sopenharmony_ci                "ld4 {v30." S ", v31." S ", v0." S ", v1." S "}, [sp], x24")   \
388b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST);
389b8021494Sopenharmony_ci#undef DISASM_INST
390b8021494Sopenharmony_ci
391b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v0.V8B(), MemOperand(x15, 8, PostIndex)),
392b8021494Sopenharmony_ci                "ld1 {v0.8b}, [x15], #8");
393b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v1.V16B(), MemOperand(x16, 16, PostIndex)),
394b8021494Sopenharmony_ci                "ld1 {v1.16b}, [x16], #16");
395b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v2.V4H(), v3.V4H(), MemOperand(x17, 16, PostIndex)),
396b8021494Sopenharmony_ci                "ld1 {v2.4h, v3.4h}, [x17], #16");
397b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v4.V8H(), v5.V8H(), MemOperand(x18, 32, PostIndex)),
398b8021494Sopenharmony_ci                "ld1 {v4.8h, v5.8h}, [x18], #32");
399b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v16.V2S(),
400b8021494Sopenharmony_ci                    v17.V2S(),
401b8021494Sopenharmony_ci                    v18.V2S(),
402b8021494Sopenharmony_ci                    MemOperand(x19, 24, PostIndex)),
403b8021494Sopenharmony_ci                "ld1 {v16.2s, v17.2s, v18.2s}, [x19], #24");
404b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v16.V4S(),
405b8021494Sopenharmony_ci                    v17.V4S(),
406b8021494Sopenharmony_ci                    v18.V4S(),
407b8021494Sopenharmony_ci                    MemOperand(x19, 48, PostIndex)),
408b8021494Sopenharmony_ci                "ld1 {v16.4s, v17.4s, v18.4s}, [x19], #48");
409b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v19.V2S(),
410b8021494Sopenharmony_ci                    v20.V2S(),
411b8021494Sopenharmony_ci                    v21.V2S(),
412b8021494Sopenharmony_ci                    v22.V2S(),
413b8021494Sopenharmony_ci                    MemOperand(x20, 32, PostIndex)),
414b8021494Sopenharmony_ci                "ld1 {v19.2s, v20.2s, v21.2s, v22.2s}, [x20], #32");
415b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v23.V2D(),
416b8021494Sopenharmony_ci                    v24.V2D(),
417b8021494Sopenharmony_ci                    v25.V2D(),
418b8021494Sopenharmony_ci                    v26.V2D(),
419b8021494Sopenharmony_ci                    MemOperand(x21, 64, PostIndex)),
420b8021494Sopenharmony_ci                "ld1 {v23.2d, v24.2d, v25.2d, v26.2d}, [x21], #64");
421b8021494Sopenharmony_ci
422b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v2.V4H(), v3.V4H(), MemOperand(x17, 16, PostIndex)),
423b8021494Sopenharmony_ci                "ld2 {v2.4h, v3.4h}, [x17], #16");
424b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v4.V8H(), v5.V8H(), MemOperand(x18, 32, PostIndex)),
425b8021494Sopenharmony_ci                "ld2 {v4.8h, v5.8h}, [x18], #32");
426b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v16.V2S(),
427b8021494Sopenharmony_ci                    v17.V2S(),
428b8021494Sopenharmony_ci                    v18.V2S(),
429b8021494Sopenharmony_ci                    MemOperand(x19, 24, PostIndex)),
430b8021494Sopenharmony_ci                "ld3 {v16.2s, v17.2s, v18.2s}, [x19], #24");
431b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v16.V4S(),
432b8021494Sopenharmony_ci                    v17.V4S(),
433b8021494Sopenharmony_ci                    v18.V4S(),
434b8021494Sopenharmony_ci                    MemOperand(x19, 48, PostIndex)),
435b8021494Sopenharmony_ci                "ld3 {v16.4s, v17.4s, v18.4s}, [x19], #48");
436b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v19.V2S(),
437b8021494Sopenharmony_ci                    v20.V2S(),
438b8021494Sopenharmony_ci                    v21.V2S(),
439b8021494Sopenharmony_ci                    v22.V2S(),
440b8021494Sopenharmony_ci                    MemOperand(x20, 32, PostIndex)),
441b8021494Sopenharmony_ci                "ld4 {v19.2s, v20.2s, v21.2s, v22.2s}, [x20], #32");
442b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v23.V2D(),
443b8021494Sopenharmony_ci                    v24.V2D(),
444b8021494Sopenharmony_ci                    v25.V2D(),
445b8021494Sopenharmony_ci                    v26.V2D(),
446b8021494Sopenharmony_ci                    MemOperand(x21, 64, PostIndex)),
447b8021494Sopenharmony_ci                "ld4 {v23.2d, v24.2d, v25.2d, v26.2d}, [x21], #64");
448b8021494Sopenharmony_ci
449b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v0.V1D(), MemOperand(x16)), "ld1 {v0.1d}, [x16]");
450b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v1.V1D(), v2.V1D(), MemOperand(x17, 16, PostIndex)),
451b8021494Sopenharmony_ci                "ld1 {v1.1d, v2.1d}, [x17], #16");
452b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v3.V1D(),
453b8021494Sopenharmony_ci                    v4.V1D(),
454b8021494Sopenharmony_ci                    v5.V1D(),
455b8021494Sopenharmony_ci                    MemOperand(x18, x19, PostIndex)),
456b8021494Sopenharmony_ci                "ld1 {v3.1d, v4.1d, v5.1d}, [x18], x19");
457b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v30.V1D(),
458b8021494Sopenharmony_ci                    v31.V1D(),
459b8021494Sopenharmony_ci                    v0.V1D(),
460b8021494Sopenharmony_ci                    v1.V1D(),
461b8021494Sopenharmony_ci                    MemOperand(x20, 32, PostIndex)),
462b8021494Sopenharmony_ci                "ld1 {v30.1d, v31.1d, v0.1d, v1.1d}, [x20], #32");
463b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(d30, d31, d0, d1, MemOperand(x21, x22, PostIndex)),
464b8021494Sopenharmony_ci                "ld1 {v30.1d, v31.1d, v0.1d, v1.1d}, [x21], x22");
465b8021494Sopenharmony_ci
466b8021494Sopenharmony_ci#define DISASM_INST(M, S)                                                   \
467b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v20.M, MemOperand(x15)), "st1 {v20." S "}, [x15]");     \
468b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v21.M, v22.M, MemOperand(x16)),                         \
469b8021494Sopenharmony_ci                "st1 {v21." S ", v22." S "}, [x16]");                       \
470b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v23.M, v24.M, v25.M, MemOperand(x17)),                  \
471b8021494Sopenharmony_ci                "st1 {v23." S ", v24." S ", v25." S "}, [x17]");            \
472b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v26.M, v27.M, v28.M, v29.M, MemOperand(x18)),           \
473b8021494Sopenharmony_ci                "st1 {v26." S ", v27." S ", v28." S ", v29." S "}, [x18]"); \
474b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v30.M, v31.M, v0.M, v1.M, MemOperand(sp)),              \
475b8021494Sopenharmony_ci                "st1 {v30." S ", v31." S ", v0." S ", v1." S "}, [sp]");    \
476b8021494Sopenharmony_ci  COMPARE_MACRO(St2(VLIST2(v21.M), MemOperand(x16)),                        \
477b8021494Sopenharmony_ci                "st2 {v21." S ", v22." S "}, [x16]");                       \
478b8021494Sopenharmony_ci  COMPARE_MACRO(St3(v23.M, v24.M, v25.M, MemOperand(x17)),                  \
479b8021494Sopenharmony_ci                "st3 {v23." S ", v24." S ", v25." S "}, [x17]");            \
480b8021494Sopenharmony_ci  COMPARE_MACRO(St4(v30.M, v31.M, v0.M, v1.M, MemOperand(sp)),              \
481b8021494Sopenharmony_ci                "st4 {v30." S ", v31." S ", v0." S ", v1." S "}, [sp]");
482b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST);
483b8021494Sopenharmony_ci#undef DISASM_INST
484b8021494Sopenharmony_ci
485b8021494Sopenharmony_ci#define DISASM_INST(M, S)                                                      \
486b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v0.M, MemOperand(x15, x20, PostIndex)),                    \
487b8021494Sopenharmony_ci                "st1 {v0." S "}, [x15], x20");                                 \
488b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v1.M, v2.M, MemOperand(x16, x21, PostIndex)),              \
489b8021494Sopenharmony_ci                "st1 {v1." S ", v2." S "}, [x16], x21");                       \
490b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v3.M, v4.M, v5.M, MemOperand(x17, x22, PostIndex)),        \
491b8021494Sopenharmony_ci                "st1 {v3." S ", v4." S ", v5." S "}, [x17], x22");             \
492b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v6.M, v7.M, v8.M, v9.M, MemOperand(x18, x23, PostIndex)),  \
493b8021494Sopenharmony_ci                "st1 {v6." S ", v7." S ", v8." S ", v9." S "}, [x18], x23");   \
494b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v30.M, v31.M, v0.M, v1.M, MemOperand(sp, x24, PostIndex)), \
495b8021494Sopenharmony_ci                "st1 {v30." S ", v31." S ", v0." S ", v1." S "}, [sp], x24");  \
496b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v1.M, v2.M, MemOperand(x16, x21, PostIndex)),              \
497b8021494Sopenharmony_ci                "st2 {v1." S ", v2." S "}, [x16], x21");                       \
498b8021494Sopenharmony_ci  COMPARE_MACRO(St3(v3.M, v4.M, v5.M, MemOperand(x17, x22, PostIndex)),        \
499b8021494Sopenharmony_ci                "st3 {v3." S ", v4." S ", v5." S "}, [x17], x22");             \
500b8021494Sopenharmony_ci  COMPARE_MACRO(St4(v6.M, v7.M, v8.M, v9.M, MemOperand(x18, x23, PostIndex)),  \
501b8021494Sopenharmony_ci                "st4 {v6." S ", v7." S ", v8." S ", v9." S "}, [x18], x23");   \
502b8021494Sopenharmony_ci  COMPARE_MACRO(St4(v30.M, v31.M, v0.M, v1.M, MemOperand(sp, x24, PostIndex)), \
503b8021494Sopenharmony_ci                "st4 {v30." S ", v31." S ", v0." S ", v1." S "}, [sp], x24");
504b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST);
505b8021494Sopenharmony_ci#undef DISASM_INST
506b8021494Sopenharmony_ci
507b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v0.V8B(), MemOperand(x15, 8, PostIndex)),
508b8021494Sopenharmony_ci                "st1 {v0.8b}, [x15], #8");
509b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v1.V16B(), MemOperand(x16, 16, PostIndex)),
510b8021494Sopenharmony_ci                "st1 {v1.16b}, [x16], #16");
511b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v2.V4H(), v3.V4H(), MemOperand(x17, 16, PostIndex)),
512b8021494Sopenharmony_ci                "st1 {v2.4h, v3.4h}, [x17], #16");
513b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v4.V8H(), v5.V8H(), MemOperand(x18, 32, PostIndex)),
514b8021494Sopenharmony_ci                "st1 {v4.8h, v5.8h}, [x18], #32");
515b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v16.V2S(),
516b8021494Sopenharmony_ci                    v17.V2S(),
517b8021494Sopenharmony_ci                    v18.V2S(),
518b8021494Sopenharmony_ci                    MemOperand(x19, 24, PostIndex)),
519b8021494Sopenharmony_ci                "st1 {v16.2s, v17.2s, v18.2s}, [x19], #24");
520b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v16.V4S(),
521b8021494Sopenharmony_ci                    v17.V4S(),
522b8021494Sopenharmony_ci                    v18.V4S(),
523b8021494Sopenharmony_ci                    MemOperand(x19, 48, PostIndex)),
524b8021494Sopenharmony_ci                "st1 {v16.4s, v17.4s, v18.4s}, [x19], #48");
525b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v19.V2S(),
526b8021494Sopenharmony_ci                    v20.V2S(),
527b8021494Sopenharmony_ci                    v21.V2S(),
528b8021494Sopenharmony_ci                    v22.V2S(),
529b8021494Sopenharmony_ci                    MemOperand(x20, 32, PostIndex)),
530b8021494Sopenharmony_ci                "st1 {v19.2s, v20.2s, v21.2s, v22.2s}, [x20], #32");
531b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v23.V2D(),
532b8021494Sopenharmony_ci                    v24.V2D(),
533b8021494Sopenharmony_ci                    v25.V2D(),
534b8021494Sopenharmony_ci                    v26.V2D(),
535b8021494Sopenharmony_ci                    MemOperand(x21, 64, PostIndex)),
536b8021494Sopenharmony_ci                "st1 {v23.2d, v24.2d, v25.2d, v26.2d}, [x21], #64");
537b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v1.V16B(), v2.V16B(), MemOperand(x16, 32, PostIndex)),
538b8021494Sopenharmony_ci                "st2 {v1.16b, v2.16b}, [x16], #32");
539b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v2.V4H(), v3.V4H(), MemOperand(x17, 16, PostIndex)),
540b8021494Sopenharmony_ci                "st2 {v2.4h, v3.4h}, [x17], #16");
541b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v4.V8H(), v5.V8H(), MemOperand(x18, 32, PostIndex)),
542b8021494Sopenharmony_ci                "st2 {v4.8h, v5.8h}, [x18], #32");
543b8021494Sopenharmony_ci  COMPARE_MACRO(St3(v16.V2S(),
544b8021494Sopenharmony_ci                    v17.V2S(),
545b8021494Sopenharmony_ci                    v18.V2S(),
546b8021494Sopenharmony_ci                    MemOperand(x19, 24, PostIndex)),
547b8021494Sopenharmony_ci                "st3 {v16.2s, v17.2s, v18.2s}, [x19], #24");
548b8021494Sopenharmony_ci  COMPARE_MACRO(St3(v16.V4S(),
549b8021494Sopenharmony_ci                    v17.V4S(),
550b8021494Sopenharmony_ci                    v18.V4S(),
551b8021494Sopenharmony_ci                    MemOperand(x19, 48, PostIndex)),
552b8021494Sopenharmony_ci                "st3 {v16.4s, v17.4s, v18.4s}, [x19], #48");
553b8021494Sopenharmony_ci  COMPARE_MACRO(St4(v19.V2S(),
554b8021494Sopenharmony_ci                    v20.V2S(),
555b8021494Sopenharmony_ci                    v21.V2S(),
556b8021494Sopenharmony_ci                    v22.V2S(),
557b8021494Sopenharmony_ci                    MemOperand(x20, 32, PostIndex)),
558b8021494Sopenharmony_ci                "st4 {v19.2s, v20.2s, v21.2s, v22.2s}, [x20], #32");
559b8021494Sopenharmony_ci  COMPARE_MACRO(St4(v23.V2D(),
560b8021494Sopenharmony_ci                    v24.V2D(),
561b8021494Sopenharmony_ci                    v25.V2D(),
562b8021494Sopenharmony_ci                    v26.V2D(),
563b8021494Sopenharmony_ci                    MemOperand(x21, 64, PostIndex)),
564b8021494Sopenharmony_ci                "st4 {v23.2d, v24.2d, v25.2d, v26.2d}, [x21], #64");
565b8021494Sopenharmony_ci
566b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v0.V1D(), MemOperand(x16)), "st1 {v0.1d}, [x16]");
567b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v1.V1D(), v2.V1D(), MemOperand(x17, 16, PostIndex)),
568b8021494Sopenharmony_ci                "st1 {v1.1d, v2.1d}, [x17], #16");
569b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v3.V1D(),
570b8021494Sopenharmony_ci                    v4.V1D(),
571b8021494Sopenharmony_ci                    v5.V1D(),
572b8021494Sopenharmony_ci                    MemOperand(x18, x19, PostIndex)),
573b8021494Sopenharmony_ci                "st1 {v3.1d, v4.1d, v5.1d}, [x18], x19");
574b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v30.V1D(),
575b8021494Sopenharmony_ci                    v31.V1D(),
576b8021494Sopenharmony_ci                    v0.V1D(),
577b8021494Sopenharmony_ci                    v1.V1D(),
578b8021494Sopenharmony_ci                    MemOperand(x20, 32, PostIndex)),
579b8021494Sopenharmony_ci                "st1 {v30.1d, v31.1d, v0.1d, v1.1d}, [x20], #32");
580b8021494Sopenharmony_ci  COMPARE_MACRO(St1(d30, d31, d0, d1, MemOperand(x21, x22, PostIndex)),
581b8021494Sopenharmony_ci                "st1 {v30.1d, v31.1d, v0.1d, v1.1d}, [x21], x22");
582b8021494Sopenharmony_ci
583b8021494Sopenharmony_ci  CLEANUP();
584b8021494Sopenharmony_ci}
585b8021494Sopenharmony_ci
586b8021494Sopenharmony_ci
587b8021494Sopenharmony_ciTEST(neon_load_store_vector_unallocated) {
588b8021494Sopenharmony_ci  SETUP();
589b8021494Sopenharmony_ci
590b8021494Sopenharmony_ci  // Encodings marked as unallocated during decoding to an instruction class.
591b8021494Sopenharmony_ci  const char* expected = "unallocated (Unallocated)";
592b8021494Sopenharmony_ci
593b8021494Sopenharmony_ci  // Encodings marked as unallocated within instruction classes
594b8021494Sopenharmony_ci  const char* expected_2 = "unallocated (NEONLoadStoreMultiStruct)";
595b8021494Sopenharmony_ci  const char* expected_3 = "unallocated (NEONLoadStoreMultiStructPostIndex)";
596b8021494Sopenharmony_ci
597b8021494Sopenharmony_ci  // LD[1-4] (multiple structures) (no offset)
598b8021494Sopenharmony_ci  COMPARE(dci(0x0c401000), expected);    // opcode = 0b0001
599b8021494Sopenharmony_ci  COMPARE(dci(0x0c403000), expected);    // opcode = 0b0011
600b8021494Sopenharmony_ci  COMPARE(dci(0x0c405000), expected);    // opcode = 0b0101
601b8021494Sopenharmony_ci  COMPARE(dci(0x0c409000), expected);    // opcode = 0b1001
602b8021494Sopenharmony_ci  COMPARE(dci(0x0c40b000), expected);    // opcode = 0b1011
603b8021494Sopenharmony_ci  COMPARE(dci(0x0c40c000), expected);    // opcode = 0b1100
604b8021494Sopenharmony_ci  COMPARE(dci(0x0c40d000), expected);    // opcode = 0b1101
605b8021494Sopenharmony_ci  COMPARE(dci(0x0c40e000), expected);    // opcode = 0b1110
606b8021494Sopenharmony_ci  COMPARE(dci(0x0c40f000), expected);    // opcode = 0b1111
607b8021494Sopenharmony_ci  COMPARE(dci(0x0c400c00), expected_2);  // opcode = 0b0000, size:Q = 0b110
608b8021494Sopenharmony_ci  COMPARE(dci(0x0c404c00), expected_2);  // opcode = 0b0100, size:Q = 0b110
609b8021494Sopenharmony_ci  COMPARE(dci(0x0c408c00), expected_2);  // opcode = 0b1000, size:Q = 0b110
610b8021494Sopenharmony_ci
611b8021494Sopenharmony_ci  // ST[1-4] (multiple structures) (no offset)
612b8021494Sopenharmony_ci  COMPARE(dci(0x0c001000), expected);    // opcode = 0b0001
613b8021494Sopenharmony_ci  COMPARE(dci(0x0c003000), expected);    // opcode = 0b0011
614b8021494Sopenharmony_ci  COMPARE(dci(0x0c005000), expected);    // opcode = 0b0101
615b8021494Sopenharmony_ci  COMPARE(dci(0x0c009000), expected);    // opcode = 0b1001
616b8021494Sopenharmony_ci  COMPARE(dci(0x0c00b000), expected);    // opcode = 0b1011
617b8021494Sopenharmony_ci  COMPARE(dci(0x0c00c000), expected);    // opcode = 0b1100
618b8021494Sopenharmony_ci  COMPARE(dci(0x0c00d000), expected);    // opcode = 0b1101
619b8021494Sopenharmony_ci  COMPARE(dci(0x0c00e000), expected);    // opcode = 0b1110
620b8021494Sopenharmony_ci  COMPARE(dci(0x0c00f000), expected);    // opcode = 0b1111
621b8021494Sopenharmony_ci  COMPARE(dci(0x0c000c00), expected_2);  // opcode = 0b0000, size:Q = 0b110
622b8021494Sopenharmony_ci  COMPARE(dci(0x0c004c00), expected_2);  // opcode = 0b0100, size:Q = 0b110
623b8021494Sopenharmony_ci  COMPARE(dci(0x0c008c00), expected_2);  // opcode = 0b1000, size:Q = 0b110
624b8021494Sopenharmony_ci
625b8021494Sopenharmony_ci  // LD[1-4] (multiple structures) (post index)
626b8021494Sopenharmony_ci  COMPARE(dci(0x0cc01000), expected);    // opcode = 0b0001
627b8021494Sopenharmony_ci  COMPARE(dci(0x0cc03000), expected);    // opcode = 0b0011
628b8021494Sopenharmony_ci  COMPARE(dci(0x0cc05000), expected);    // opcode = 0b0101
629b8021494Sopenharmony_ci  COMPARE(dci(0x0cc09000), expected);    // opcode = 0b1001
630b8021494Sopenharmony_ci  COMPARE(dci(0x0cc0b000), expected);    // opcode = 0b1011
631b8021494Sopenharmony_ci  COMPARE(dci(0x0cc0c000), expected);    // opcode = 0b1100
632b8021494Sopenharmony_ci  COMPARE(dci(0x0cc0d000), expected);    // opcode = 0b1101
633b8021494Sopenharmony_ci  COMPARE(dci(0x0cc0e000), expected);    // opcode = 0b1110
634b8021494Sopenharmony_ci  COMPARE(dci(0x0cc0f000), expected);    // opcode = 0b1111
635b8021494Sopenharmony_ci  COMPARE(dci(0x0cc00c00), expected_3);  // opcode = 0b0000, size:Q = 0b110
636b8021494Sopenharmony_ci  COMPARE(dci(0x0cc04c00), expected_3);  // opcode = 0b0100, size:Q = 0b110
637b8021494Sopenharmony_ci  COMPARE(dci(0x0cc08c00), expected_3);  // opcode = 0b1000, size:Q = 0b110
638b8021494Sopenharmony_ci
639b8021494Sopenharmony_ci  // ST[1-4] (multiple structures) (post index)
640b8021494Sopenharmony_ci  COMPARE(dci(0x0c801000), expected);    // opcode = 0b0001
641b8021494Sopenharmony_ci  COMPARE(dci(0x0c803000), expected);    // opcode = 0b0011
642b8021494Sopenharmony_ci  COMPARE(dci(0x0c805000), expected);    // opcode = 0b0101
643b8021494Sopenharmony_ci  COMPARE(dci(0x0c809000), expected);    // opcode = 0b1001
644b8021494Sopenharmony_ci  COMPARE(dci(0x0c80b000), expected);    // opcode = 0b1011
645b8021494Sopenharmony_ci  COMPARE(dci(0x0c80c000), expected);    // opcode = 0b1100
646b8021494Sopenharmony_ci  COMPARE(dci(0x0c80d000), expected);    // opcode = 0b1101
647b8021494Sopenharmony_ci  COMPARE(dci(0x0c80e000), expected);    // opcode = 0b1110
648b8021494Sopenharmony_ci  COMPARE(dci(0x0c80f000), expected);    // opcode = 0b1111
649b8021494Sopenharmony_ci  COMPARE(dci(0x0c800c00), expected_3);  // opcode = 0b0000, size:Q = 0b110
650b8021494Sopenharmony_ci  COMPARE(dci(0x0c804c00), expected_3);  // opcode = 0b0100, size:Q = 0b110
651b8021494Sopenharmony_ci  COMPARE(dci(0x0c808c00), expected_3);  // opcode = 0b1000, size:Q = 0b110
652b8021494Sopenharmony_ci
653b8021494Sopenharmony_ci  CLEANUP();
654b8021494Sopenharmony_ci}
655b8021494Sopenharmony_ci
656b8021494Sopenharmony_ci
657b8021494Sopenharmony_ciTEST(neon_load_store_lane) {
658b8021494Sopenharmony_ci  SETUP();
659b8021494Sopenharmony_ci
660b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v0.V8B(), 0, MemOperand(x15)), "ld1 {v0.b}[0], [x15]");
661b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v1.V16B(), 1, MemOperand(x16)), "ld1 {v1.b}[1], [x16]");
662b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v2.V4H(), 2, MemOperand(x17)), "ld1 {v2.h}[2], [x17]");
663b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v3.V8H(), 3, MemOperand(x18)), "ld1 {v3.h}[3], [x18]");
664b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v4.V2S(), 0, MemOperand(x19)), "ld1 {v4.s}[0], [x19]");
665b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v5.V4S(), 1, MemOperand(x20)), "ld1 {v5.s}[1], [x20]");
666b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v6.V2D(), 0, MemOperand(x21)), "ld1 {v6.d}[0], [x21]");
667b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v7.B(), 7, MemOperand(x22)), "ld1 {v7.b}[7], [x22]");
668b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v8.B(), 15, MemOperand(x23)), "ld1 {v8.b}[15], [x23]");
669b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v9.H(), 3, MemOperand(x24)), "ld1 {v9.h}[3], [x24]");
670b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v10.H(), 7, MemOperand(x25)), "ld1 {v10.h}[7], [x25]");
671b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v11.S(), 1, MemOperand(x26)), "ld1 {v11.s}[1], [x26]");
672b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v12.S(), 3, MemOperand(x27)), "ld1 {v12.s}[3], [x27]");
673b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v13.D(), 1, MemOperand(sp)), "ld1 {v13.d}[1], [sp]");
674b8021494Sopenharmony_ci
675b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v0.V8B(), 0, MemOperand(x15, x0, PostIndex)),
676b8021494Sopenharmony_ci                "ld1 {v0.b}[0], [x15], x0");
677b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v1.V16B(), 1, MemOperand(x16, 1, PostIndex)),
678b8021494Sopenharmony_ci                "ld1 {v1.b}[1], [x16], #1");
679b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v2.V4H(), 2, MemOperand(x17, 2, PostIndex)),
680b8021494Sopenharmony_ci                "ld1 {v2.h}[2], [x17], #2");
681b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v3.V8H(), 3, MemOperand(x18, x1, PostIndex)),
682b8021494Sopenharmony_ci                "ld1 {v3.h}[3], [x18], x1");
683b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v4.V2S(), 0, MemOperand(x19, x2, PostIndex)),
684b8021494Sopenharmony_ci                "ld1 {v4.s}[0], [x19], x2");
685b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v5.V4S(), 1, MemOperand(x20, 4, PostIndex)),
686b8021494Sopenharmony_ci                "ld1 {v5.s}[1], [x20], #4");
687b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v6.V2D(), 0, MemOperand(x21, 8, PostIndex)),
688b8021494Sopenharmony_ci                "ld1 {v6.d}[0], [x21], #8");
689b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v7.B(), 7, MemOperand(x22, 1, PostIndex)),
690b8021494Sopenharmony_ci                "ld1 {v7.b}[7], [x22], #1");
691b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v8.B(), 15, MemOperand(x23, x3, PostIndex)),
692b8021494Sopenharmony_ci                "ld1 {v8.b}[15], [x23], x3");
693b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v9.H(), 3, MemOperand(x24, x4, PostIndex)),
694b8021494Sopenharmony_ci                "ld1 {v9.h}[3], [x24], x4");
695b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v10.H(), 7, MemOperand(x25, 2, PostIndex)),
696b8021494Sopenharmony_ci                "ld1 {v10.h}[7], [x25], #2");
697b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v11.S(), 1, MemOperand(x26, 4, PostIndex)),
698b8021494Sopenharmony_ci                "ld1 {v11.s}[1], [x26], #4");
699b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v12.S(), 3, MemOperand(x27, x5, PostIndex)),
700b8021494Sopenharmony_ci                "ld1 {v12.s}[3], [x27], x5");
701b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v12.S(), 3, MemOperand(x27, 4, PostIndex)),
702b8021494Sopenharmony_ci                "ld1 {v12.s}[3], [x27], #4");
703b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v13.D(), 1, MemOperand(sp, x6, PostIndex)),
704b8021494Sopenharmony_ci                "ld1 {v13.d}[1], [sp], x6");
705b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1(v13.D(), 1, MemOperand(sp, 8, PostIndex)),
706b8021494Sopenharmony_ci                "ld1 {v13.d}[1], [sp], #8");
707b8021494Sopenharmony_ci
708b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v0.V8B(), v1.V8B(), 0, MemOperand(x15)),
709b8021494Sopenharmony_ci                "ld2 {v0.b, v1.b}[0], [x15]");
710b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v1.V16B(), v2.V16B(), 1, MemOperand(x16)),
711b8021494Sopenharmony_ci                "ld2 {v1.b, v2.b}[1], [x16]");
712b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v2.V4H(), v3.V4H(), 2, MemOperand(x17)),
713b8021494Sopenharmony_ci                "ld2 {v2.h, v3.h}[2], [x17]");
714b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v3.V8H(), v4.V8H(), 3, MemOperand(x18)),
715b8021494Sopenharmony_ci                "ld2 {v3.h, v4.h}[3], [x18]");
716b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v4.V2S(), v5.V2S(), 0, MemOperand(x19)),
717b8021494Sopenharmony_ci                "ld2 {v4.s, v5.s}[0], [x19]");
718b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v5.V4S(), v6.V4S(), 1, MemOperand(x20)),
719b8021494Sopenharmony_ci                "ld2 {v5.s, v6.s}[1], [x20]");
720b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v6.V2D(), v7.V2D(), 0, MemOperand(x21)),
721b8021494Sopenharmony_ci                "ld2 {v6.d, v7.d}[0], [x21]");
722b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v7.B(), v8.B(), 7, MemOperand(x22)),
723b8021494Sopenharmony_ci                "ld2 {v7.b, v8.b}[7], [x22]");
724b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v8.B(), v9.B(), 15, MemOperand(x23)),
725b8021494Sopenharmony_ci                "ld2 {v8.b, v9.b}[15], [x23]");
726b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v9.H(), v10.H(), 3, MemOperand(x24)),
727b8021494Sopenharmony_ci                "ld2 {v9.h, v10.h}[3], [x24]");
728b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v10.H(), v11.H(), 7, MemOperand(x25)),
729b8021494Sopenharmony_ci                "ld2 {v10.h, v11.h}[7], [x25]");
730b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v11.S(), v12.S(), 1, MemOperand(x26)),
731b8021494Sopenharmony_ci                "ld2 {v11.s, v12.s}[1], [x26]");
732b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v12.S(), v13.S(), 3, MemOperand(x27)),
733b8021494Sopenharmony_ci                "ld2 {v12.s, v13.s}[3], [x27]");
734b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v13.D(), v14.D(), 1, MemOperand(sp)),
735b8021494Sopenharmony_ci                "ld2 {v13.d, v14.d}[1], [sp]");
736b8021494Sopenharmony_ci
737b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v0.V8B(), v1.V8B(), 0, MemOperand(x15, x0, PostIndex)),
738b8021494Sopenharmony_ci                "ld2 {v0.b, v1.b}[0], [x15], x0");
739b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v1.V16B(), v2.V16B(), 1, MemOperand(x16, 2, PostIndex)),
740b8021494Sopenharmony_ci                "ld2 {v1.b, v2.b}[1], [x16], #2");
741b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v2.V4H(), v3.V4H(), 2, MemOperand(x17, 4, PostIndex)),
742b8021494Sopenharmony_ci                "ld2 {v2.h, v3.h}[2], [x17], #4");
743b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v3.V8H(), v4.V8H(), 3, MemOperand(x18, x1, PostIndex)),
744b8021494Sopenharmony_ci                "ld2 {v3.h, v4.h}[3], [x18], x1");
745b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v4.V2S(), v5.V2S(), 0, MemOperand(x19, x2, PostIndex)),
746b8021494Sopenharmony_ci                "ld2 {v4.s, v5.s}[0], [x19], x2");
747b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v5.V4S(), v6.V4S(), 1, MemOperand(x20, 8, PostIndex)),
748b8021494Sopenharmony_ci                "ld2 {v5.s, v6.s}[1], [x20], #8");
749b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v6.V2D(), v7.V2D(), 0, MemOperand(x21, 16, PostIndex)),
750b8021494Sopenharmony_ci                "ld2 {v6.d, v7.d}[0], [x21], #16");
751b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v7.B(), v8.B(), 7, MemOperand(x22, 2, PostIndex)),
752b8021494Sopenharmony_ci                "ld2 {v7.b, v8.b}[7], [x22], #2");
753b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v8.B(), v9.B(), 15, MemOperand(x23, x3, PostIndex)),
754b8021494Sopenharmony_ci                "ld2 {v8.b, v9.b}[15], [x23], x3");
755b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v9.H(), v10.H(), 3, MemOperand(x24, x4, PostIndex)),
756b8021494Sopenharmony_ci                "ld2 {v9.h, v10.h}[3], [x24], x4");
757b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v10.H(), v11.H(), 7, MemOperand(x25, 4, PostIndex)),
758b8021494Sopenharmony_ci                "ld2 {v10.h, v11.h}[7], [x25], #4");
759b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v11.S(), v12.S(), 1, MemOperand(x26, 8, PostIndex)),
760b8021494Sopenharmony_ci                "ld2 {v11.s, v12.s}[1], [x26], #8");
761b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v12.S(), v13.S(), 3, MemOperand(x27, x5, PostIndex)),
762b8021494Sopenharmony_ci                "ld2 {v12.s, v13.s}[3], [x27], x5");
763b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v11.S(), v12.S(), 3, MemOperand(x26, 8, PostIndex)),
764b8021494Sopenharmony_ci                "ld2 {v11.s, v12.s}[3], [x26], #8");
765b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v13.D(), v14.D(), 1, MemOperand(sp, x6, PostIndex)),
766b8021494Sopenharmony_ci                "ld2 {v13.d, v14.d}[1], [sp], x6");
767b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2(v13.D(), v14.D(), 1, MemOperand(sp, 16, PostIndex)),
768b8021494Sopenharmony_ci                "ld2 {v13.d, v14.d}[1], [sp], #16");
769b8021494Sopenharmony_ci
770b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v0.V8B(), v1.V8B(), v2.V8B(), 0, MemOperand(x15)),
771b8021494Sopenharmony_ci                "ld3 {v0.b, v1.b, v2.b}[0], [x15]");
772b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v1.V16B(), v2.V16B(), v3.V16B(), 1, MemOperand(x16)),
773b8021494Sopenharmony_ci                "ld3 {v1.b, v2.b, v3.b}[1], [x16]");
774b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v2.V4H(), v3.V4H(), v4.V4H(), 2, MemOperand(x17)),
775b8021494Sopenharmony_ci                "ld3 {v2.h, v3.h, v4.h}[2], [x17]");
776b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v3.V8H(), v4.V8H(), v5.V8H(), 3, MemOperand(x18)),
777b8021494Sopenharmony_ci                "ld3 {v3.h, v4.h, v5.h}[3], [x18]");
778b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v4.V2S(), v5.V2S(), v6.V2S(), 0, MemOperand(x19)),
779b8021494Sopenharmony_ci                "ld3 {v4.s, v5.s, v6.s}[0], [x19]");
780b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v5.V4S(), v6.V4S(), v7.V4S(), 1, MemOperand(x20)),
781b8021494Sopenharmony_ci                "ld3 {v5.s, v6.s, v7.s}[1], [x20]");
782b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v6.V2D(), v7.V2D(), v8.V2D(), 0, MemOperand(x21)),
783b8021494Sopenharmony_ci                "ld3 {v6.d, v7.d, v8.d}[0], [x21]");
784b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v7.B(), v8.B(), v9.B(), 7, MemOperand(x22)),
785b8021494Sopenharmony_ci                "ld3 {v7.b, v8.b, v9.b}[7], [x22]");
786b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v8.B(), v9.B(), v10.B(), 15, MemOperand(x23)),
787b8021494Sopenharmony_ci                "ld3 {v8.b, v9.b, v10.b}[15], [x23]");
788b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v9.H(), v10.H(), v11.H(), 3, MemOperand(x24)),
789b8021494Sopenharmony_ci                "ld3 {v9.h, v10.h, v11.h}[3], [x24]");
790b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v10.H(), v11.H(), v12.H(), 7, MemOperand(x25)),
791b8021494Sopenharmony_ci                "ld3 {v10.h, v11.h, v12.h}[7], [x25]");
792b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v11.S(), v12.S(), v13.S(), 1, MemOperand(x26)),
793b8021494Sopenharmony_ci                "ld3 {v11.s, v12.s, v13.s}[1], [x26]");
794b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v12.S(), v13.S(), v14.S(), 3, MemOperand(x27)),
795b8021494Sopenharmony_ci                "ld3 {v12.s, v13.s, v14.s}[3], [x27]");
796b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v13.D(), v14.D(), v15.D(), 1, MemOperand(sp)),
797b8021494Sopenharmony_ci                "ld3 {v13.d, v14.d, v15.d}[1], [sp]");
798b8021494Sopenharmony_ci
799b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v0.V8B(),
800b8021494Sopenharmony_ci                    v1.V8B(),
801b8021494Sopenharmony_ci                    v2.V8B(),
802b8021494Sopenharmony_ci                    0,
803b8021494Sopenharmony_ci                    MemOperand(x15, x0, PostIndex)),
804b8021494Sopenharmony_ci                "ld3 {v0.b, v1.b, v2.b}[0], [x15], x0");
805b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v1.V16B(),
806b8021494Sopenharmony_ci                    v2.V16B(),
807b8021494Sopenharmony_ci                    v3.V16B(),
808b8021494Sopenharmony_ci                    1,
809b8021494Sopenharmony_ci                    MemOperand(x16, 3, PostIndex)),
810b8021494Sopenharmony_ci                "ld3 {v1.b, v2.b, v3.b}[1], [x16], #3");
811b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v2.V4H(),
812b8021494Sopenharmony_ci                    v3.V4H(),
813b8021494Sopenharmony_ci                    v4.V4H(),
814b8021494Sopenharmony_ci                    2,
815b8021494Sopenharmony_ci                    MemOperand(x17, 6, PostIndex)),
816b8021494Sopenharmony_ci                "ld3 {v2.h, v3.h, v4.h}[2], [x17], #6");
817b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v3.V8H(),
818b8021494Sopenharmony_ci                    v4.V8H(),
819b8021494Sopenharmony_ci                    v5.V8H(),
820b8021494Sopenharmony_ci                    3,
821b8021494Sopenharmony_ci                    MemOperand(x18, x1, PostIndex)),
822b8021494Sopenharmony_ci                "ld3 {v3.h, v4.h, v5.h}[3], [x18], x1");
823b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v4.V2S(),
824b8021494Sopenharmony_ci                    v5.V2S(),
825b8021494Sopenharmony_ci                    v6.V2S(),
826b8021494Sopenharmony_ci                    0,
827b8021494Sopenharmony_ci                    MemOperand(x19, x2, PostIndex)),
828b8021494Sopenharmony_ci                "ld3 {v4.s, v5.s, v6.s}[0], [x19], x2");
829b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v5.V4S(),
830b8021494Sopenharmony_ci                    v6.V4S(),
831b8021494Sopenharmony_ci                    v7.V4S(),
832b8021494Sopenharmony_ci                    1,
833b8021494Sopenharmony_ci                    MemOperand(x20, 12, PostIndex)),
834b8021494Sopenharmony_ci                "ld3 {v5.s, v6.s, v7.s}[1], [x20], #12");
835b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v6.V2D(),
836b8021494Sopenharmony_ci                    v7.V2D(),
837b8021494Sopenharmony_ci                    v8.V2D(),
838b8021494Sopenharmony_ci                    0,
839b8021494Sopenharmony_ci                    MemOperand(x21, 24, PostIndex)),
840b8021494Sopenharmony_ci                "ld3 {v6.d, v7.d, v8.d}[0], [x21], #24");
841b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v7.B(), v8.B(), v9.B(), 7, MemOperand(x22, 3, PostIndex)),
842b8021494Sopenharmony_ci                "ld3 {v7.b, v8.b, v9.b}[7], [x22], #3");
843b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v8.B(),
844b8021494Sopenharmony_ci                    v9.B(),
845b8021494Sopenharmony_ci                    v10.B(),
846b8021494Sopenharmony_ci                    15,
847b8021494Sopenharmony_ci                    MemOperand(x23, x3, PostIndex)),
848b8021494Sopenharmony_ci                "ld3 {v8.b, v9.b, v10.b}[15], [x23], x3");
849b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v9.H(),
850b8021494Sopenharmony_ci                    v10.H(),
851b8021494Sopenharmony_ci                    v11.H(),
852b8021494Sopenharmony_ci                    3,
853b8021494Sopenharmony_ci                    MemOperand(x24, x4, PostIndex)),
854b8021494Sopenharmony_ci                "ld3 {v9.h, v10.h, v11.h}[3], [x24], x4");
855b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v10.H(),
856b8021494Sopenharmony_ci                    v11.H(),
857b8021494Sopenharmony_ci                    v12.H(),
858b8021494Sopenharmony_ci                    7,
859b8021494Sopenharmony_ci                    MemOperand(x25, 6, PostIndex)),
860b8021494Sopenharmony_ci                "ld3 {v10.h, v11.h, v12.h}[7], [x25], #6");
861b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v11.S(),
862b8021494Sopenharmony_ci                    v12.S(),
863b8021494Sopenharmony_ci                    v13.S(),
864b8021494Sopenharmony_ci                    1,
865b8021494Sopenharmony_ci                    MemOperand(x26, 12, PostIndex)),
866b8021494Sopenharmony_ci                "ld3 {v11.s, v12.s, v13.s}[1], [x26], #12");
867b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v12.S(),
868b8021494Sopenharmony_ci                    v13.S(),
869b8021494Sopenharmony_ci                    v14.S(),
870b8021494Sopenharmony_ci                    3,
871b8021494Sopenharmony_ci                    MemOperand(x27, x5, PostIndex)),
872b8021494Sopenharmony_ci                "ld3 {v12.s, v13.s, v14.s}[3], [x27], x5");
873b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v12.S(),
874b8021494Sopenharmony_ci                    v13.S(),
875b8021494Sopenharmony_ci                    v14.S(),
876b8021494Sopenharmony_ci                    3,
877b8021494Sopenharmony_ci                    MemOperand(x27, 12, PostIndex)),
878b8021494Sopenharmony_ci                "ld3 {v12.s, v13.s, v14.s}[3], [x27], #12");
879b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v13.D(),
880b8021494Sopenharmony_ci                    v14.D(),
881b8021494Sopenharmony_ci                    v15.D(),
882b8021494Sopenharmony_ci                    1,
883b8021494Sopenharmony_ci                    MemOperand(sp, x6, PostIndex)),
884b8021494Sopenharmony_ci                "ld3 {v13.d, v14.d, v15.d}[1], [sp], x6");
885b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3(v13.D(),
886b8021494Sopenharmony_ci                    v14.D(),
887b8021494Sopenharmony_ci                    v15.D(),
888b8021494Sopenharmony_ci                    1,
889b8021494Sopenharmony_ci                    MemOperand(sp, 24, PostIndex)),
890b8021494Sopenharmony_ci                "ld3 {v13.d, v14.d, v15.d}[1], [sp], #24");
891b8021494Sopenharmony_ci
892b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v0.V8B(), v1.V8B(), v2.V8B(), v3.V8B(), 0, MemOperand(x15)),
893b8021494Sopenharmony_ci                "ld4 {v0.b, v1.b, v2.b, v3.b}[0], [x15]");
894b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v1.V16B(),
895b8021494Sopenharmony_ci                    v2.V16B(),
896b8021494Sopenharmony_ci                    v3.V16B(),
897b8021494Sopenharmony_ci                    v4.V16B(),
898b8021494Sopenharmony_ci                    1,
899b8021494Sopenharmony_ci                    MemOperand(x16)),
900b8021494Sopenharmony_ci                "ld4 {v1.b, v2.b, v3.b, v4.b}[1], [x16]");
901b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v2.V4H(), v3.V4H(), v4.V4H(), v5.V4H(), 2, MemOperand(x17)),
902b8021494Sopenharmony_ci                "ld4 {v2.h, v3.h, v4.h, v5.h}[2], [x17]");
903b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v3.V8H(), v4.V8H(), v5.V8H(), v6.V8H(), 3, MemOperand(x18)),
904b8021494Sopenharmony_ci                "ld4 {v3.h, v4.h, v5.h, v6.h}[3], [x18]");
905b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v4.V2S(), v5.V2S(), v6.V2S(), v7.V2S(), 0, MemOperand(x19)),
906b8021494Sopenharmony_ci                "ld4 {v4.s, v5.s, v6.s, v7.s}[0], [x19]");
907b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v5.V4S(), v6.V4S(), v7.V4S(), v8.V4S(), 1, MemOperand(x20)),
908b8021494Sopenharmony_ci                "ld4 {v5.s, v6.s, v7.s, v8.s}[1], [x20]");
909b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v6.V2D(), v7.V2D(), v8.V2D(), v9.V2D(), 0, MemOperand(x21)),
910b8021494Sopenharmony_ci                "ld4 {v6.d, v7.d, v8.d, v9.d}[0], [x21]");
911b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v7.B(), v8.B(), v9.B(), v10.B(), 7, MemOperand(x22)),
912b8021494Sopenharmony_ci                "ld4 {v7.b, v8.b, v9.b, v10.b}[7], [x22]");
913b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v8.B(), v9.B(), v10.B(), v11.B(), 15, MemOperand(x23)),
914b8021494Sopenharmony_ci                "ld4 {v8.b, v9.b, v10.b, v11.b}[15], [x23]");
915b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v9.H(), v10.H(), v11.H(), v12.H(), 3, MemOperand(x24)),
916b8021494Sopenharmony_ci                "ld4 {v9.h, v10.h, v11.h, v12.h}[3], [x24]");
917b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v10.H(), v11.H(), v12.H(), v13.H(), 7, MemOperand(x25)),
918b8021494Sopenharmony_ci                "ld4 {v10.h, v11.h, v12.h, v13.h}[7], [x25]");
919b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v11.S(), v12.S(), v13.S(), v14.S(), 1, MemOperand(x26)),
920b8021494Sopenharmony_ci                "ld4 {v11.s, v12.s, v13.s, v14.s}[1], [x26]");
921b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v12.S(), v13.S(), v14.S(), v15.S(), 3, MemOperand(x27)),
922b8021494Sopenharmony_ci                "ld4 {v12.s, v13.s, v14.s, v15.s}[3], [x27]");
923b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v13.D(), v14.D(), v15.D(), v16.D(), 1, MemOperand(sp)),
924b8021494Sopenharmony_ci                "ld4 {v13.d, v14.d, v15.d, v16.d}[1], [sp]");
925b8021494Sopenharmony_ci
926b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v0.V8B(),
927b8021494Sopenharmony_ci                    v1.V8B(),
928b8021494Sopenharmony_ci                    v2.V8B(),
929b8021494Sopenharmony_ci                    v3.V8B(),
930b8021494Sopenharmony_ci                    0,
931b8021494Sopenharmony_ci                    MemOperand(x15, x0, PostIndex)),
932b8021494Sopenharmony_ci                "ld4 {v0.b, v1.b, v2.b, v3.b}[0], [x15], x0");
933b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v1.V16B(),
934b8021494Sopenharmony_ci                    v2.V16B(),
935b8021494Sopenharmony_ci                    v3.V16B(),
936b8021494Sopenharmony_ci                    v4.V16B(),
937b8021494Sopenharmony_ci                    1,
938b8021494Sopenharmony_ci                    MemOperand(x16, 4, PostIndex)),
939b8021494Sopenharmony_ci                "ld4 {v1.b, v2.b, v3.b, v4.b}[1], [x16], #4");
940b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v2.V4H(),
941b8021494Sopenharmony_ci                    v3.V4H(),
942b8021494Sopenharmony_ci                    v4.V4H(),
943b8021494Sopenharmony_ci                    v5.V4H(),
944b8021494Sopenharmony_ci                    2,
945b8021494Sopenharmony_ci                    MemOperand(x17, 8, PostIndex)),
946b8021494Sopenharmony_ci                "ld4 {v2.h, v3.h, v4.h, v5.h}[2], [x17], #8");
947b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v3.V8H(),
948b8021494Sopenharmony_ci                    v4.V8H(),
949b8021494Sopenharmony_ci                    v5.V8H(),
950b8021494Sopenharmony_ci                    v6.V8H(),
951b8021494Sopenharmony_ci                    3,
952b8021494Sopenharmony_ci                    MemOperand(x18, x1, PostIndex)),
953b8021494Sopenharmony_ci                "ld4 {v3.h, v4.h, v5.h, v6.h}[3], [x18], x1");
954b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v4.V2S(),
955b8021494Sopenharmony_ci                    v5.V2S(),
956b8021494Sopenharmony_ci                    v6.V2S(),
957b8021494Sopenharmony_ci                    v7.V2S(),
958b8021494Sopenharmony_ci                    0,
959b8021494Sopenharmony_ci                    MemOperand(x19, x2, PostIndex)),
960b8021494Sopenharmony_ci                "ld4 {v4.s, v5.s, v6.s, v7.s}[0], [x19], x2");
961b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v5.V4S(),
962b8021494Sopenharmony_ci                    v6.V4S(),
963b8021494Sopenharmony_ci                    v7.V4S(),
964b8021494Sopenharmony_ci                    v8.V4S(),
965b8021494Sopenharmony_ci                    1,
966b8021494Sopenharmony_ci                    MemOperand(x20, 16, PostIndex)),
967b8021494Sopenharmony_ci                "ld4 {v5.s, v6.s, v7.s, v8.s}[1], [x20], #16");
968b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v6.V2D(),
969b8021494Sopenharmony_ci                    v7.V2D(),
970b8021494Sopenharmony_ci                    v8.V2D(),
971b8021494Sopenharmony_ci                    v9.V2D(),
972b8021494Sopenharmony_ci                    0,
973b8021494Sopenharmony_ci                    MemOperand(x21, 32, PostIndex)),
974b8021494Sopenharmony_ci                "ld4 {v6.d, v7.d, v8.d, v9.d}[0], [x21], #32");
975b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v7.B(),
976b8021494Sopenharmony_ci                    v8.B(),
977b8021494Sopenharmony_ci                    v9.B(),
978b8021494Sopenharmony_ci                    v10.B(),
979b8021494Sopenharmony_ci                    7,
980b8021494Sopenharmony_ci                    MemOperand(x22, 4, PostIndex)),
981b8021494Sopenharmony_ci                "ld4 {v7.b, v8.b, v9.b, v10.b}[7], [x22], #4");
982b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v8.B(),
983b8021494Sopenharmony_ci                    v9.B(),
984b8021494Sopenharmony_ci                    v10.B(),
985b8021494Sopenharmony_ci                    v11.B(),
986b8021494Sopenharmony_ci                    15,
987b8021494Sopenharmony_ci                    MemOperand(x23, x3, PostIndex)),
988b8021494Sopenharmony_ci                "ld4 {v8.b, v9.b, v10.b, v11.b}[15], [x23], x3");
989b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v9.H(),
990b8021494Sopenharmony_ci                    v10.H(),
991b8021494Sopenharmony_ci                    v11.H(),
992b8021494Sopenharmony_ci                    v12.H(),
993b8021494Sopenharmony_ci                    3,
994b8021494Sopenharmony_ci                    MemOperand(x24, x4, PostIndex)),
995b8021494Sopenharmony_ci                "ld4 {v9.h, v10.h, v11.h, v12.h}[3], [x24], x4");
996b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v10.H(),
997b8021494Sopenharmony_ci                    v11.H(),
998b8021494Sopenharmony_ci                    v12.H(),
999b8021494Sopenharmony_ci                    v13.H(),
1000b8021494Sopenharmony_ci                    7,
1001b8021494Sopenharmony_ci                    MemOperand(x25, 8, PostIndex)),
1002b8021494Sopenharmony_ci                "ld4 {v10.h, v11.h, v12.h, v13.h}[7], [x25], #8");
1003b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v11.S(),
1004b8021494Sopenharmony_ci                    v12.S(),
1005b8021494Sopenharmony_ci                    v13.S(),
1006b8021494Sopenharmony_ci                    v14.S(),
1007b8021494Sopenharmony_ci                    1,
1008b8021494Sopenharmony_ci                    MemOperand(x26, 16, PostIndex)),
1009b8021494Sopenharmony_ci                "ld4 {v11.s, v12.s, v13.s, v14.s}[1], [x26], #16");
1010b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v12.S(),
1011b8021494Sopenharmony_ci                    v13.S(),
1012b8021494Sopenharmony_ci                    v14.S(),
1013b8021494Sopenharmony_ci                    v15.S(),
1014b8021494Sopenharmony_ci                    3,
1015b8021494Sopenharmony_ci                    MemOperand(x27, x5, PostIndex)),
1016b8021494Sopenharmony_ci                "ld4 {v12.s, v13.s, v14.s, v15.s}[3], [x27], x5");
1017b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v11.S(),
1018b8021494Sopenharmony_ci                    v12.S(),
1019b8021494Sopenharmony_ci                    v13.S(),
1020b8021494Sopenharmony_ci                    v14.S(),
1021b8021494Sopenharmony_ci                    3,
1022b8021494Sopenharmony_ci                    MemOperand(x26, 16, PostIndex)),
1023b8021494Sopenharmony_ci                "ld4 {v11.s, v12.s, v13.s, v14.s}[3], [x26], #16");
1024b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v13.D(),
1025b8021494Sopenharmony_ci                    v14.D(),
1026b8021494Sopenharmony_ci                    v15.D(),
1027b8021494Sopenharmony_ci                    v16.D(),
1028b8021494Sopenharmony_ci                    1,
1029b8021494Sopenharmony_ci                    MemOperand(sp, x6, PostIndex)),
1030b8021494Sopenharmony_ci                "ld4 {v13.d, v14.d, v15.d, v16.d}[1], [sp], x6");
1031b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4(v13.D(),
1032b8021494Sopenharmony_ci                    v14.D(),
1033b8021494Sopenharmony_ci                    v15.D(),
1034b8021494Sopenharmony_ci                    v16.D(),
1035b8021494Sopenharmony_ci                    1,
1036b8021494Sopenharmony_ci                    MemOperand(sp, 32, PostIndex)),
1037b8021494Sopenharmony_ci                "ld4 {v13.d, v14.d, v15.d, v16.d}[1], [sp], #32");
1038b8021494Sopenharmony_ci
1039b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v0.V8B(), 0, MemOperand(x15)), "st1 {v0.b}[0], [x15]");
1040b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v1.V16B(), 1, MemOperand(x16)), "st1 {v1.b}[1], [x16]");
1041b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v2.V4H(), 2, MemOperand(x17)), "st1 {v2.h}[2], [x17]");
1042b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v3.V8H(), 3, MemOperand(x18)), "st1 {v3.h}[3], [x18]");
1043b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v4.V2S(), 0, MemOperand(x19)), "st1 {v4.s}[0], [x19]");
1044b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v5.V4S(), 1, MemOperand(x20)), "st1 {v5.s}[1], [x20]");
1045b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v6.V2D(), 0, MemOperand(x21)), "st1 {v6.d}[0], [x21]");
1046b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v7.B(), 7, MemOperand(x22)), "st1 {v7.b}[7], [x22]");
1047b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v8.B(), 15, MemOperand(x23)), "st1 {v8.b}[15], [x23]");
1048b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v9.H(), 3, MemOperand(x24)), "st1 {v9.h}[3], [x24]");
1049b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v10.H(), 7, MemOperand(x25)), "st1 {v10.h}[7], [x25]");
1050b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v11.S(), 1, MemOperand(x26)), "st1 {v11.s}[1], [x26]");
1051b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v12.S(), 3, MemOperand(x27)), "st1 {v12.s}[3], [x27]");
1052b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v13.D(), 1, MemOperand(sp)), "st1 {v13.d}[1], [sp]");
1053b8021494Sopenharmony_ci
1054b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v0.V8B(), 0, MemOperand(x15, x0, PostIndex)),
1055b8021494Sopenharmony_ci                "st1 {v0.b}[0], [x15], x0");
1056b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v1.V16B(), 1, MemOperand(x16, 1, PostIndex)),
1057b8021494Sopenharmony_ci                "st1 {v1.b}[1], [x16], #1");
1058b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v2.V4H(), 2, MemOperand(x17, 2, PostIndex)),
1059b8021494Sopenharmony_ci                "st1 {v2.h}[2], [x17], #2");
1060b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v3.V8H(), 3, MemOperand(x18, x1, PostIndex)),
1061b8021494Sopenharmony_ci                "st1 {v3.h}[3], [x18], x1");
1062b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v4.V2S(), 0, MemOperand(x19, x2, PostIndex)),
1063b8021494Sopenharmony_ci                "st1 {v4.s}[0], [x19], x2");
1064b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v5.V4S(), 1, MemOperand(x20, 4, PostIndex)),
1065b8021494Sopenharmony_ci                "st1 {v5.s}[1], [x20], #4");
1066b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v6.V2D(), 0, MemOperand(x21, 8, PostIndex)),
1067b8021494Sopenharmony_ci                "st1 {v6.d}[0], [x21], #8");
1068b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v7.B(), 7, MemOperand(x22, 1, PostIndex)),
1069b8021494Sopenharmony_ci                "st1 {v7.b}[7], [x22], #1");
1070b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v8.B(), 15, MemOperand(x23, x3, PostIndex)),
1071b8021494Sopenharmony_ci                "st1 {v8.b}[15], [x23], x3");
1072b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v9.H(), 3, MemOperand(x24, x4, PostIndex)),
1073b8021494Sopenharmony_ci                "st1 {v9.h}[3], [x24], x4");
1074b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v10.H(), 7, MemOperand(x25, 2, PostIndex)),
1075b8021494Sopenharmony_ci                "st1 {v10.h}[7], [x25], #2");
1076b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v11.S(), 1, MemOperand(x26, 4, PostIndex)),
1077b8021494Sopenharmony_ci                "st1 {v11.s}[1], [x26], #4");
1078b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v12.S(), 3, MemOperand(x27, x5, PostIndex)),
1079b8021494Sopenharmony_ci                "st1 {v12.s}[3], [x27], x5");
1080b8021494Sopenharmony_ci  COMPARE_MACRO(St1(v13.D(), 1, MemOperand(sp, x6, PostIndex)),
1081b8021494Sopenharmony_ci                "st1 {v13.d}[1], [sp], x6");
1082b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v0.V8B(), v1.V8B(), 0, MemOperand(x15, x0, PostIndex)),
1083b8021494Sopenharmony_ci                "st2 {v0.b, v1.b}[0], [x15], x0");
1084b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v1.V16B(), v2.V16B(), 1, MemOperand(x16, 2, PostIndex)),
1085b8021494Sopenharmony_ci                "st2 {v1.b, v2.b}[1], [x16], #2");
1086b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v2.V4H(), v3.V4H(), 2, MemOperand(x17, 4, PostIndex)),
1087b8021494Sopenharmony_ci                "st2 {v2.h, v3.h}[2], [x17], #4");
1088b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v3.V8H(), v4.V8H(), 3, MemOperand(x18, x1, PostIndex)),
1089b8021494Sopenharmony_ci                "st2 {v3.h, v4.h}[3], [x18], x1");
1090b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v4.V2S(), v5.V2S(), 0, MemOperand(x19, x2, PostIndex)),
1091b8021494Sopenharmony_ci                "st2 {v4.s, v5.s}[0], [x19], x2");
1092b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v5.V4S(), v6.V4S(), 1, MemOperand(x20, 8, PostIndex)),
1093b8021494Sopenharmony_ci                "st2 {v5.s, v6.s}[1], [x20], #8");
1094b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v6.V2D(), v7.V2D(), 0, MemOperand(x21, 16, PostIndex)),
1095b8021494Sopenharmony_ci                "st2 {v6.d, v7.d}[0], [x21], #16");
1096b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v7.B(), v8.B(), 7, MemOperand(x22, 2, PostIndex)),
1097b8021494Sopenharmony_ci                "st2 {v7.b, v8.b}[7], [x22], #2");
1098b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v8.B(), v9.B(), 15, MemOperand(x23, x3, PostIndex)),
1099b8021494Sopenharmony_ci                "st2 {v8.b, v9.b}[15], [x23], x3");
1100b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v9.H(), v10.H(), 3, MemOperand(x24, x4, PostIndex)),
1101b8021494Sopenharmony_ci                "st2 {v9.h, v10.h}[3], [x24], x4");
1102b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v10.H(), v11.H(), 7, MemOperand(x25, 4, PostIndex)),
1103b8021494Sopenharmony_ci                "st2 {v10.h, v11.h}[7], [x25], #4");
1104b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v11.S(), v12.S(), 1, MemOperand(x26, 8, PostIndex)),
1105b8021494Sopenharmony_ci                "st2 {v11.s, v12.s}[1], [x26], #8");
1106b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v12.S(), v13.S(), 3, MemOperand(x27, x5, PostIndex)),
1107b8021494Sopenharmony_ci                "st2 {v12.s, v13.s}[3], [x27], x5");
1108b8021494Sopenharmony_ci  COMPARE_MACRO(St2(v13.D(), v14.D(), 1, MemOperand(sp, x6, PostIndex)),
1109b8021494Sopenharmony_ci                "st2 {v13.d, v14.d}[1], [sp], x6");
1110b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v0.V8B()), 0, MemOperand(x15, x0, PostIndex)),
1111b8021494Sopenharmony_ci                "st3 {v0.b, v1.b, v2.b}[0], [x15], x0");
1112b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v1.V16B()), 1, MemOperand(x16, 3, PostIndex)),
1113b8021494Sopenharmony_ci                "st3 {v1.b, v2.b, v3.b}[1], [x16], #3");
1114b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v2.V4H()), 2, MemOperand(x17, 6, PostIndex)),
1115b8021494Sopenharmony_ci                "st3 {v2.h, v3.h, v4.h}[2], [x17], #6");
1116b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v3.V8H()), 3, MemOperand(x18, x1, PostIndex)),
1117b8021494Sopenharmony_ci                "st3 {v3.h, v4.h, v5.h}[3], [x18], x1");
1118b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v4.V2S()), 0, MemOperand(x19, x2, PostIndex)),
1119b8021494Sopenharmony_ci                "st3 {v4.s, v5.s, v6.s}[0], [x19], x2");
1120b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v5.V4S()), 1, MemOperand(x20, 12, PostIndex)),
1121b8021494Sopenharmony_ci                "st3 {v5.s, v6.s, v7.s}[1], [x20], #12");
1122b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v6.V2D()), 0, MemOperand(x21, 24, PostIndex)),
1123b8021494Sopenharmony_ci                "st3 {v6.d, v7.d, v8.d}[0], [x21], #24");
1124b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v7.B()), 7, MemOperand(x22, 3, PostIndex)),
1125b8021494Sopenharmony_ci                "st3 {v7.b, v8.b, v9.b}[7], [x22], #3");
1126b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v8.B()), 15, MemOperand(x23, x3, PostIndex)),
1127b8021494Sopenharmony_ci                "st3 {v8.b, v9.b, v10.b}[15], [x23], x3");
1128b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v9.H()), 3, MemOperand(x24, x4, PostIndex)),
1129b8021494Sopenharmony_ci                "st3 {v9.h, v10.h, v11.h}[3], [x24], x4");
1130b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v10.H()), 7, MemOperand(x25, 6, PostIndex)),
1131b8021494Sopenharmony_ci                "st3 {v10.h, v11.h, v12.h}[7], [x25], #6");
1132b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v11.S()), 1, MemOperand(x26, 12, PostIndex)),
1133b8021494Sopenharmony_ci                "st3 {v11.s, v12.s, v13.s}[1], [x26], #12");
1134b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v12.S()), 3, MemOperand(x27, x5, PostIndex)),
1135b8021494Sopenharmony_ci                "st3 {v12.s, v13.s, v14.s}[3], [x27], x5");
1136b8021494Sopenharmony_ci  COMPARE_MACRO(St3(VLIST3(v13.D()), 1, MemOperand(sp, x6, PostIndex)),
1137b8021494Sopenharmony_ci                "st3 {v13.d, v14.d, v15.d}[1], [sp], x6");
1138b8021494Sopenharmony_ci
1139b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v0.V8B()), 0, MemOperand(x15, x0, PostIndex)),
1140b8021494Sopenharmony_ci                "st4 {v0.b, v1.b, v2.b, v3.b}[0], [x15], x0");
1141b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v1.V16B()), 1, MemOperand(x16, 4, PostIndex)),
1142b8021494Sopenharmony_ci                "st4 {v1.b, v2.b, v3.b, v4.b}[1], [x16], #4");
1143b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v2.V4H()), 2, MemOperand(x17, 8, PostIndex)),
1144b8021494Sopenharmony_ci                "st4 {v2.h, v3.h, v4.h, v5.h}[2], [x17], #8");
1145b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v3.V8H()), 3, MemOperand(x18, x1, PostIndex)),
1146b8021494Sopenharmony_ci                "st4 {v3.h, v4.h, v5.h, v6.h}[3], [x18], x1");
1147b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v4.V2S()), 0, MemOperand(x19, x2, PostIndex)),
1148b8021494Sopenharmony_ci                "st4 {v4.s, v5.s, v6.s, v7.s}[0], [x19], x2");
1149b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v5.V4S()), 1, MemOperand(x20, 16, PostIndex)),
1150b8021494Sopenharmony_ci                "st4 {v5.s, v6.s, v7.s, v8.s}[1], [x20], #16");
1151b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v6.V2D()), 0, MemOperand(x21, 32, PostIndex)),
1152b8021494Sopenharmony_ci                "st4 {v6.d, v7.d, v8.d, v9.d}[0], [x21], #32");
1153b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v7.B()), 7, MemOperand(x22, 4, PostIndex)),
1154b8021494Sopenharmony_ci                "st4 {v7.b, v8.b, v9.b, v10.b}[7], [x22], #4");
1155b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v8.B()), 15, MemOperand(x23, x3, PostIndex)),
1156b8021494Sopenharmony_ci                "st4 {v8.b, v9.b, v10.b, v11.b}[15], [x23], x3");
1157b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v9.H()), 3, MemOperand(x24, x4, PostIndex)),
1158b8021494Sopenharmony_ci                "st4 {v9.h, v10.h, v11.h, v12.h}[3], [x24], x4");
1159b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v10.H()), 7, MemOperand(x25, 8, PostIndex)),
1160b8021494Sopenharmony_ci                "st4 {v10.h, v11.h, v12.h, v13.h}[7], [x25], #8");
1161b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v11.S()), 1, MemOperand(x26, 16, PostIndex)),
1162b8021494Sopenharmony_ci                "st4 {v11.s, v12.s, v13.s, v14.s}[1], [x26], #16");
1163b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v12.S()), 3, MemOperand(x27, x5, PostIndex)),
1164b8021494Sopenharmony_ci                "st4 {v12.s, v13.s, v14.s, v15.s}[3], [x27], x5");
1165b8021494Sopenharmony_ci  COMPARE_MACRO(St4(VLIST4(v13.D()), 1, MemOperand(sp, x6, PostIndex)),
1166b8021494Sopenharmony_ci                "st4 {v13.d, v14.d, v15.d, v16.d}[1], [sp], x6");
1167b8021494Sopenharmony_ci
1168b8021494Sopenharmony_ci  CLEANUP();
1169b8021494Sopenharmony_ci}
1170b8021494Sopenharmony_ci
1171b8021494Sopenharmony_ci
1172b8021494Sopenharmony_ciTEST(neon_load_store_lane_unallocated) {
1173b8021494Sopenharmony_ci  SETUP();
1174b8021494Sopenharmony_ci
1175b8021494Sopenharmony_ci  const char* expected = "unallocated (Unallocated)";
1176b8021494Sopenharmony_ci  // LD1 (single structure) (no offset)
1177b8021494Sopenharmony_ci  COMPARE(dci(0x0d404400), expected);  // .h, size<0> = 1
1178b8021494Sopenharmony_ci  COMPARE(dci(0x0d408800), expected);  // .s, size<1> = 1
1179b8021494Sopenharmony_ci  COMPARE(dci(0x0d409400), expected);  // .d, size<0> = 1, S = 1
1180b8021494Sopenharmony_ci  // LD2 (single structure) (no offset)
1181b8021494Sopenharmony_ci  COMPARE(dci(0x0d604400), expected);  // .h, size<0> = 1
1182b8021494Sopenharmony_ci  COMPARE(dci(0x0d608800), expected);  // .s, size<1> = 1
1183b8021494Sopenharmony_ci  COMPARE(dci(0x0d609400), expected);  // .d, size<0> = 1, S = 1
1184b8021494Sopenharmony_ci  // LD3 (single structure) (no offset)
1185b8021494Sopenharmony_ci  COMPARE(dci(0x0d406400), expected);  // .h, size<0> = 1
1186b8021494Sopenharmony_ci  COMPARE(dci(0x0d40a800), expected);  // .s, size<1> = 1
1187b8021494Sopenharmony_ci  COMPARE(dci(0x0d40b400), expected);  // .d, size<0> = 1, S = 1
1188b8021494Sopenharmony_ci  // LD4 (single structure) (no offset)
1189b8021494Sopenharmony_ci  COMPARE(dci(0x0d606400), expected);  // .h, size<0> = 1
1190b8021494Sopenharmony_ci  COMPARE(dci(0x0d60a800), expected);  // .s, size<1> = 1
1191b8021494Sopenharmony_ci  COMPARE(dci(0x0d60b400), expected);  // .d, size<0> = 1, S = 1
1192b8021494Sopenharmony_ci  // ST1 (single structure) (no offset)
1193b8021494Sopenharmony_ci  COMPARE(dci(0x0d004400), expected);  // .h, size<0> = 1
1194b8021494Sopenharmony_ci  COMPARE(dci(0x0d008800), expected);  // .s, size<1> = 1
1195b8021494Sopenharmony_ci  COMPARE(dci(0x0d009400), expected);  // .d, size<0> = 1, S = 1
1196b8021494Sopenharmony_ci  // ST2 (single structure) (no offset)
1197b8021494Sopenharmony_ci  COMPARE(dci(0x0d204400), expected);  // .h, size<0> = 1
1198b8021494Sopenharmony_ci  COMPARE(dci(0x0d208800), expected);  // .s, size<1> = 1
1199b8021494Sopenharmony_ci  COMPARE(dci(0x0d209400), expected);  // .d, size<0> = 1, S = 1
1200b8021494Sopenharmony_ci  // ST3 (single structure) (no offset)
1201b8021494Sopenharmony_ci  COMPARE(dci(0x0d006400), expected);  // .h, size<0> = 1
1202b8021494Sopenharmony_ci  COMPARE(dci(0x0d00a800), expected);  // .s, size<1> = 1
1203b8021494Sopenharmony_ci  COMPARE(dci(0x0d00b400), expected);  // .d, size<0> = 1, S = 1
1204b8021494Sopenharmony_ci  // ST4 (single structure) (no offset)
1205b8021494Sopenharmony_ci  COMPARE(dci(0x0d206400), expected);  // .h, size<0> = 1
1206b8021494Sopenharmony_ci  COMPARE(dci(0x0d20a800), expected);  // .s, size<1> = 1
1207b8021494Sopenharmony_ci  COMPARE(dci(0x0d20b400), expected);  // .d, size<0> = 1, S = 1
1208b8021494Sopenharmony_ci
1209b8021494Sopenharmony_ci  // LD1 (single structure) (post index)
1210b8021494Sopenharmony_ci  COMPARE(dci(0x0dc04400), expected);  // .h, size<0> = 1
1211b8021494Sopenharmony_ci  COMPARE(dci(0x0dc08800), expected);  // .s, size<1> = 1
1212b8021494Sopenharmony_ci  COMPARE(dci(0x0dc09400), expected);  // .d, size<0> = 1, S = 1
1213b8021494Sopenharmony_ci  // LD2 (single structure) (post index)
1214b8021494Sopenharmony_ci  COMPARE(dci(0x0de04400), expected);  // .h, size<0> = 1
1215b8021494Sopenharmony_ci  COMPARE(dci(0x0de08800), expected);  // .s, size<1> = 1
1216b8021494Sopenharmony_ci  COMPARE(dci(0x0de09400), expected);  // .d, size<0> = 1, S = 1
1217b8021494Sopenharmony_ci  // LD3 (single structure) (post index)
1218b8021494Sopenharmony_ci  COMPARE(dci(0x0dc06400), expected);  // .h, size<0> = 1
1219b8021494Sopenharmony_ci  COMPARE(dci(0x0dc0a800), expected);  // .s, size<1> = 1
1220b8021494Sopenharmony_ci  COMPARE(dci(0x0dc0b400), expected);  // .d, size<0> = 1, S = 1
1221b8021494Sopenharmony_ci  // LD4 (single structure) (post index)
1222b8021494Sopenharmony_ci  COMPARE(dci(0x0de06400), expected);  // .h, size<0> = 1
1223b8021494Sopenharmony_ci  COMPARE(dci(0x0de0a800), expected);  // .s, size<1> = 1
1224b8021494Sopenharmony_ci  COMPARE(dci(0x0de0b400), expected);  // .d, size<0> = 1, S = 1
1225b8021494Sopenharmony_ci  // ST1 (single structure) (post index)
1226b8021494Sopenharmony_ci  COMPARE(dci(0x0d804400), expected);  // .h, size<0> = 1
1227b8021494Sopenharmony_ci  COMPARE(dci(0x0d808800), expected);  // .s, size<1> = 1
1228b8021494Sopenharmony_ci  COMPARE(dci(0x0d809400), expected);  // .d, size<0> = 1, S = 1
1229b8021494Sopenharmony_ci  // ST2 (single structure) (post index)
1230b8021494Sopenharmony_ci  COMPARE(dci(0x0da04400), expected);  // .h, size<0> = 1
1231b8021494Sopenharmony_ci  COMPARE(dci(0x0da08800), expected);  // .s, size<1> = 1
1232b8021494Sopenharmony_ci  COMPARE(dci(0x0da09400), expected);  // .d, size<0> = 1, S = 1
1233b8021494Sopenharmony_ci  // ST3 (single structure) (post index)
1234b8021494Sopenharmony_ci  COMPARE(dci(0x0d806400), expected);  // .h, size<0> = 1
1235b8021494Sopenharmony_ci  COMPARE(dci(0x0d80a800), expected);  // .s, size<1> = 1
1236b8021494Sopenharmony_ci  COMPARE(dci(0x0d80b400), expected);  // .d, size<0> = 1, S = 1
1237b8021494Sopenharmony_ci  // ST4 (single structure) (post index)
1238b8021494Sopenharmony_ci  COMPARE(dci(0x0da06400), expected);  // .h, size<0> = 1
1239b8021494Sopenharmony_ci  COMPARE(dci(0x0da0a800), expected);  // .s, size<1> = 1
1240b8021494Sopenharmony_ci  COMPARE(dci(0x0da0b400), expected);  // .d, size<0> = 1, S = 1
1241b8021494Sopenharmony_ci
1242b8021494Sopenharmony_ci  CLEANUP();
1243b8021494Sopenharmony_ci}
1244b8021494Sopenharmony_ci
1245b8021494Sopenharmony_ci
1246b8021494Sopenharmony_ciTEST(neon_load_all_lanes) {
1247b8021494Sopenharmony_ci  SETUP();
1248b8021494Sopenharmony_ci
1249b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v14.V8B(), MemOperand(x0)), "ld1r {v14.8b}, [x0]");
1250b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v15.V16B(), MemOperand(x1)), "ld1r {v15.16b}, [x1]");
1251b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v16.V4H(), MemOperand(x2)), "ld1r {v16.4h}, [x2]");
1252b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v17.V8H(), MemOperand(x3)), "ld1r {v17.8h}, [x3]");
1253b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v18.V2S(), MemOperand(x4)), "ld1r {v18.2s}, [x4]");
1254b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v19.V4S(), MemOperand(x5)), "ld1r {v19.4s}, [x5]");
1255b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v20.V2D(), MemOperand(sp)), "ld1r {v20.2d}, [sp]");
1256b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v21.V1D(), MemOperand(x30)), "ld1r {v21.1d}, [x30]");
1257b8021494Sopenharmony_ci
1258b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v22.V8B(), MemOperand(x6, 1, PostIndex)),
1259b8021494Sopenharmony_ci                "ld1r {v22.8b}, [x6], #1");
1260b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v23.V16B(), MemOperand(x7, x16, PostIndex)),
1261b8021494Sopenharmony_ci                "ld1r {v23.16b}, [x7], x16");
1262b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v24.V4H(), MemOperand(x8, x17, PostIndex)),
1263b8021494Sopenharmony_ci                "ld1r {v24.4h}, [x8], x17");
1264b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v25.V8H(), MemOperand(x9, 2, PostIndex)),
1265b8021494Sopenharmony_ci                "ld1r {v25.8h}, [x9], #2");
1266b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v26.V2S(), MemOperand(x10, 4, PostIndex)),
1267b8021494Sopenharmony_ci                "ld1r {v26.2s}, [x10], #4");
1268b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v27.V4S(), MemOperand(x11, x18, PostIndex)),
1269b8021494Sopenharmony_ci                "ld1r {v27.4s}, [x11], x18");
1270b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v28.V2D(), MemOperand(x12, 8, PostIndex)),
1271b8021494Sopenharmony_ci                "ld1r {v28.2d}, [x12], #8");
1272b8021494Sopenharmony_ci  COMPARE_MACRO(Ld1r(v29.V1D(), MemOperand(x13, 8, PostIndex)),
1273b8021494Sopenharmony_ci                "ld1r {v29.1d}, [x13], #8");
1274b8021494Sopenharmony_ci
1275b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v14.V8B(), v15.V8B(), MemOperand(x0)),
1276b8021494Sopenharmony_ci                "ld2r {v14.8b, v15.8b}, [x0]");
1277b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v15.V16B(), v16.V16B(), MemOperand(x1)),
1278b8021494Sopenharmony_ci                "ld2r {v15.16b, v16.16b}, [x1]");
1279b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v16.V4H(), v17.V4H(), MemOperand(x2)),
1280b8021494Sopenharmony_ci                "ld2r {v16.4h, v17.4h}, [x2]");
1281b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v17.V8H(), v18.V8H(), MemOperand(x3)),
1282b8021494Sopenharmony_ci                "ld2r {v17.8h, v18.8h}, [x3]");
1283b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v18.V2S(), v19.V2S(), MemOperand(x4)),
1284b8021494Sopenharmony_ci                "ld2r {v18.2s, v19.2s}, [x4]");
1285b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v19.V4S(), v20.V4S(), MemOperand(x5)),
1286b8021494Sopenharmony_ci                "ld2r {v19.4s, v20.4s}, [x5]");
1287b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v20.V2D(), v21.V2D(), MemOperand(sp)),
1288b8021494Sopenharmony_ci                "ld2r {v20.2d, v21.2d}, [sp]");
1289b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v21.V8B(), v22.V8B(), MemOperand(x6, 2, PostIndex)),
1290b8021494Sopenharmony_ci                "ld2r {v21.8b, v22.8b}, [x6], #2");
1291b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v22.V16B(), v23.V16B(), MemOperand(x7, x16, PostIndex)),
1292b8021494Sopenharmony_ci                "ld2r {v22.16b, v23.16b}, [x7], x16");
1293b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v23.V4H(), v24.V4H(), MemOperand(x8, x17, PostIndex)),
1294b8021494Sopenharmony_ci                "ld2r {v23.4h, v24.4h}, [x8], x17");
1295b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v24.V8H(), v25.V8H(), MemOperand(x9, 4, PostIndex)),
1296b8021494Sopenharmony_ci                "ld2r {v24.8h, v25.8h}, [x9], #4");
1297b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v25.V2S(), v26.V2S(), MemOperand(x10, 8, PostIndex)),
1298b8021494Sopenharmony_ci                "ld2r {v25.2s, v26.2s}, [x10], #8");
1299b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v26.V4S(), v27.V4S(), MemOperand(x11, x18, PostIndex)),
1300b8021494Sopenharmony_ci                "ld2r {v26.4s, v27.4s}, [x11], x18");
1301b8021494Sopenharmony_ci  COMPARE_MACRO(Ld2r(v27.V2D(), v28.V2D(), MemOperand(x12, 16, PostIndex)),
1302b8021494Sopenharmony_ci                "ld2r {v27.2d, v28.2d}, [x12], #16");
1303b8021494Sopenharmony_ci
1304b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v14.V8B(), v15.V8B(), v16.V8B(), MemOperand(x0)),
1305b8021494Sopenharmony_ci                "ld3r {v14.8b, v15.8b, v16.8b}, [x0]");
1306b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v15.V16B(), v16.V16B(), v17.V16B(), MemOperand(x1)),
1307b8021494Sopenharmony_ci                "ld3r {v15.16b, v16.16b, v17.16b}, [x1]");
1308b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v16.V4H(), v17.V4H(), v18.V4H(), MemOperand(x2)),
1309b8021494Sopenharmony_ci                "ld3r {v16.4h, v17.4h, v18.4h}, [x2]");
1310b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v17.V8H(), v18.V8H(), v19.V8H(), MemOperand(x3)),
1311b8021494Sopenharmony_ci                "ld3r {v17.8h, v18.8h, v19.8h}, [x3]");
1312b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v18.V2S(), v19.V2S(), v20.V2S(), MemOperand(x4)),
1313b8021494Sopenharmony_ci                "ld3r {v18.2s, v19.2s, v20.2s}, [x4]");
1314b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v19.V4S(), v20.V4S(), v21.V4S(), MemOperand(x5)),
1315b8021494Sopenharmony_ci                "ld3r {v19.4s, v20.4s, v21.4s}, [x5]");
1316b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v20.V2D(), v21.V2D(), v22.V2D(), MemOperand(sp)),
1317b8021494Sopenharmony_ci                "ld3r {v20.2d, v21.2d, v22.2d}, [sp]");
1318b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v21.V8B(),
1319b8021494Sopenharmony_ci                     v22.V8B(),
1320b8021494Sopenharmony_ci                     v23.V8B(),
1321b8021494Sopenharmony_ci                     MemOperand(x6, 3, PostIndex)),
1322b8021494Sopenharmony_ci                "ld3r {v21.8b, v22.8b, v23.8b}, [x6], #3");
1323b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v22.V16B(),
1324b8021494Sopenharmony_ci                     v23.V16B(),
1325b8021494Sopenharmony_ci                     v24.V16B(),
1326b8021494Sopenharmony_ci                     MemOperand(x7, x16, PostIndex)),
1327b8021494Sopenharmony_ci                "ld3r {v22.16b, v23.16b, v24.16b}, [x7], x16");
1328b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v23.V4H(),
1329b8021494Sopenharmony_ci                     v24.V4H(),
1330b8021494Sopenharmony_ci                     v25.V4H(),
1331b8021494Sopenharmony_ci                     MemOperand(x8, x17, PostIndex)),
1332b8021494Sopenharmony_ci                "ld3r {v23.4h, v24.4h, v25.4h}, [x8], x17");
1333b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v24.V8H(),
1334b8021494Sopenharmony_ci                     v25.V8H(),
1335b8021494Sopenharmony_ci                     v26.V8H(),
1336b8021494Sopenharmony_ci                     MemOperand(x9, 6, PostIndex)),
1337b8021494Sopenharmony_ci                "ld3r {v24.8h, v25.8h, v26.8h}, [x9], #6");
1338b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v25.V2S(),
1339b8021494Sopenharmony_ci                     v26.V2S(),
1340b8021494Sopenharmony_ci                     v27.V2S(),
1341b8021494Sopenharmony_ci                     MemOperand(x10, 12, PostIndex)),
1342b8021494Sopenharmony_ci                "ld3r {v25.2s, v26.2s, v27.2s}, [x10], #12");
1343b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v26.V4S(),
1344b8021494Sopenharmony_ci                     v27.V4S(),
1345b8021494Sopenharmony_ci                     v28.V4S(),
1346b8021494Sopenharmony_ci                     MemOperand(x11, x18, PostIndex)),
1347b8021494Sopenharmony_ci                "ld3r {v26.4s, v27.4s, v28.4s}, [x11], x18");
1348b8021494Sopenharmony_ci  COMPARE_MACRO(Ld3r(v27.V2D(),
1349b8021494Sopenharmony_ci                     v28.V2D(),
1350b8021494Sopenharmony_ci                     v29.V2D(),
1351b8021494Sopenharmony_ci                     MemOperand(x12, 24, PostIndex)),
1352b8021494Sopenharmony_ci                "ld3r {v27.2d, v28.2d, v29.2d}, [x12], #24");
1353b8021494Sopenharmony_ci
1354b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v14.V8B(),
1355b8021494Sopenharmony_ci                     v15.V8B(),
1356b8021494Sopenharmony_ci                     v16.V8B(),
1357b8021494Sopenharmony_ci                     v17.V8B(),
1358b8021494Sopenharmony_ci                     MemOperand(x0)),
1359b8021494Sopenharmony_ci                "ld4r {v14.8b, v15.8b, v16.8b, v17.8b}, [x0]");
1360b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v15.V16B(),
1361b8021494Sopenharmony_ci                     v16.V16B(),
1362b8021494Sopenharmony_ci                     v17.V16B(),
1363b8021494Sopenharmony_ci                     v18.V16B(),
1364b8021494Sopenharmony_ci                     MemOperand(x1)),
1365b8021494Sopenharmony_ci                "ld4r {v15.16b, v16.16b, v17.16b, v18.16b}, [x1]");
1366b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v16.V4H(),
1367b8021494Sopenharmony_ci                     v17.V4H(),
1368b8021494Sopenharmony_ci                     v18.V4H(),
1369b8021494Sopenharmony_ci                     v19.V4H(),
1370b8021494Sopenharmony_ci                     MemOperand(x2)),
1371b8021494Sopenharmony_ci                "ld4r {v16.4h, v17.4h, v18.4h, v19.4h}, [x2]");
1372b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v17.V8H(),
1373b8021494Sopenharmony_ci                     v18.V8H(),
1374b8021494Sopenharmony_ci                     v19.V8H(),
1375b8021494Sopenharmony_ci                     v20.V8H(),
1376b8021494Sopenharmony_ci                     MemOperand(x3)),
1377b8021494Sopenharmony_ci                "ld4r {v17.8h, v18.8h, v19.8h, v20.8h}, [x3]");
1378b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v18.V2S(),
1379b8021494Sopenharmony_ci                     v19.V2S(),
1380b8021494Sopenharmony_ci                     v20.V2S(),
1381b8021494Sopenharmony_ci                     v21.V2S(),
1382b8021494Sopenharmony_ci                     MemOperand(x4)),
1383b8021494Sopenharmony_ci                "ld4r {v18.2s, v19.2s, v20.2s, v21.2s}, [x4]");
1384b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v19.V4S(),
1385b8021494Sopenharmony_ci                     v20.V4S(),
1386b8021494Sopenharmony_ci                     v21.V4S(),
1387b8021494Sopenharmony_ci                     v22.V4S(),
1388b8021494Sopenharmony_ci                     MemOperand(x5)),
1389b8021494Sopenharmony_ci                "ld4r {v19.4s, v20.4s, v21.4s, v22.4s}, [x5]");
1390b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v20.V2D(),
1391b8021494Sopenharmony_ci                     v21.V2D(),
1392b8021494Sopenharmony_ci                     v22.V2D(),
1393b8021494Sopenharmony_ci                     v23.V2D(),
1394b8021494Sopenharmony_ci                     MemOperand(sp)),
1395b8021494Sopenharmony_ci                "ld4r {v20.2d, v21.2d, v22.2d, v23.2d}, [sp]");
1396b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v21.V8B(),
1397b8021494Sopenharmony_ci                     v22.V8B(),
1398b8021494Sopenharmony_ci                     v23.V8B(),
1399b8021494Sopenharmony_ci                     v24.V8B(),
1400b8021494Sopenharmony_ci                     MemOperand(x6, 4, PostIndex)),
1401b8021494Sopenharmony_ci                "ld4r {v21.8b, v22.8b, v23.8b, v24.8b}, [x6], #4");
1402b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v22.V16B(),
1403b8021494Sopenharmony_ci                     v23.V16B(),
1404b8021494Sopenharmony_ci                     v24.V16B(),
1405b8021494Sopenharmony_ci                     v25.V16B(),
1406b8021494Sopenharmony_ci                     MemOperand(x7, x16, PostIndex)),
1407b8021494Sopenharmony_ci                "ld4r {v22.16b, v23.16b, v24.16b, v25.16b}, [x7], x16");
1408b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v23.V4H(),
1409b8021494Sopenharmony_ci                     v24.V4H(),
1410b8021494Sopenharmony_ci                     v25.V4H(),
1411b8021494Sopenharmony_ci                     v26.V4H(),
1412b8021494Sopenharmony_ci                     MemOperand(x8, x17, PostIndex)),
1413b8021494Sopenharmony_ci                "ld4r {v23.4h, v24.4h, v25.4h, v26.4h}, [x8], x17");
1414b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v24.V8H(),
1415b8021494Sopenharmony_ci                     v25.V8H(),
1416b8021494Sopenharmony_ci                     v26.V8H(),
1417b8021494Sopenharmony_ci                     v27.V8H(),
1418b8021494Sopenharmony_ci                     MemOperand(x9, 8, PostIndex)),
1419b8021494Sopenharmony_ci                "ld4r {v24.8h, v25.8h, v26.8h, v27.8h}, [x9], #8");
1420b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v25.V2S(),
1421b8021494Sopenharmony_ci                     v26.V2S(),
1422b8021494Sopenharmony_ci                     v27.V2S(),
1423b8021494Sopenharmony_ci                     v28.V2S(),
1424b8021494Sopenharmony_ci                     MemOperand(x10, 16, PostIndex)),
1425b8021494Sopenharmony_ci                "ld4r {v25.2s, v26.2s, v27.2s, v28.2s}, [x10], #16");
1426b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v26.V4S(),
1427b8021494Sopenharmony_ci                     v27.V4S(),
1428b8021494Sopenharmony_ci                     v28.V4S(),
1429b8021494Sopenharmony_ci                     v29.V4S(),
1430b8021494Sopenharmony_ci                     MemOperand(x11, x18, PostIndex)),
1431b8021494Sopenharmony_ci                "ld4r {v26.4s, v27.4s, v28.4s, v29.4s}, [x11], x18");
1432b8021494Sopenharmony_ci  COMPARE_MACRO(Ld4r(v27.V2D(),
1433b8021494Sopenharmony_ci                     v28.V2D(),
1434b8021494Sopenharmony_ci                     v29.V2D(),
1435b8021494Sopenharmony_ci                     v30.V2D(),
1436b8021494Sopenharmony_ci                     MemOperand(x12, 32, PostIndex)),
1437b8021494Sopenharmony_ci                "ld4r {v27.2d, v28.2d, v29.2d, v30.2d}, [x12], #32");
1438b8021494Sopenharmony_ci
1439b8021494Sopenharmony_ci  CLEANUP();
1440b8021494Sopenharmony_ci}
1441b8021494Sopenharmony_ci
1442b8021494Sopenharmony_ci
1443b8021494Sopenharmony_ciTEST(neon_load_all_lanes_unallocated) {
1444b8021494Sopenharmony_ci  SETUP();
1445b8021494Sopenharmony_ci
1446b8021494Sopenharmony_ci  const char* expected = "unallocated (Unallocated)";
1447b8021494Sopenharmony_ci  // LD1R (single structure) (no offset)
1448b8021494Sopenharmony_ci  COMPARE(dci(0x0d00c000), expected);  // L = 0
1449b8021494Sopenharmony_ci  COMPARE(dci(0x0d40d000), expected);  // S = 1
1450b8021494Sopenharmony_ci  // LD2R (single structure) (no offset)
1451b8021494Sopenharmony_ci  COMPARE(dci(0x0d20c000), expected);  // L = 0
1452b8021494Sopenharmony_ci  COMPARE(dci(0x0d60d000), expected);  // S = 1
1453b8021494Sopenharmony_ci  // LD3R (single structure) (no offset)
1454b8021494Sopenharmony_ci  COMPARE(dci(0x0d00e000), expected);  // L = 0
1455b8021494Sopenharmony_ci  COMPARE(dci(0x0d40f000), expected);  // S = 1
1456b8021494Sopenharmony_ci  // LD4R (single structure) (no offset)
1457b8021494Sopenharmony_ci  COMPARE(dci(0x0d20e000), expected);  // L = 0
1458b8021494Sopenharmony_ci  COMPARE(dci(0x0d60f000), expected);  // S = 1
1459b8021494Sopenharmony_ci
1460b8021494Sopenharmony_ci  // LD1R (single structure) (post index)
1461b8021494Sopenharmony_ci  COMPARE(dci(0x0d80c000), expected);  // L = 0
1462b8021494Sopenharmony_ci  COMPARE(dci(0x0dc0d000), expected);  // S = 1
1463b8021494Sopenharmony_ci  // LD2R (single structure) (post index)
1464b8021494Sopenharmony_ci  COMPARE(dci(0x0da0c000), expected);  // L = 0
1465b8021494Sopenharmony_ci  COMPARE(dci(0x0de0d000), expected);  // S = 1
1466b8021494Sopenharmony_ci  // LD3R (single structure) (post index)
1467b8021494Sopenharmony_ci  COMPARE(dci(0x0d80e000), expected);  // L = 0
1468b8021494Sopenharmony_ci  COMPARE(dci(0x0dc0f000), expected);  // S = 1
1469b8021494Sopenharmony_ci  // LD4R (single structure) (post index)
1470b8021494Sopenharmony_ci  COMPARE(dci(0x0da0e000), expected);  // L = 0
1471b8021494Sopenharmony_ci  COMPARE(dci(0x0de0f000), expected);  // S = 1
1472b8021494Sopenharmony_ci
1473b8021494Sopenharmony_ci  CLEANUP();
1474b8021494Sopenharmony_ci}
1475b8021494Sopenharmony_ci
1476b8021494Sopenharmony_ci
1477b8021494Sopenharmony_ciTEST(neon_3same) {
1478b8021494Sopenharmony_ci  SETUP();
1479b8021494Sopenharmony_ci
1480b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1481b8021494Sopenharmony_ci  COMPARE_MACRO(Cmeq(v0.M, v1.M, v2.M), "cmeq v0." S ", v1." S ", v2." S);
1482b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1483b8021494Sopenharmony_ci#undef DISASM_INST
1484b8021494Sopenharmony_ci
1485b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1486b8021494Sopenharmony_ci  COMPARE_MACRO(Cmge(v0.M, v1.M, v2.M), "cmge v0." S ", v1." S ", v2." S);
1487b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1488b8021494Sopenharmony_ci#undef DISASM_INST
1489b8021494Sopenharmony_ci
1490b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1491b8021494Sopenharmony_ci  COMPARE_MACRO(Cmgt(v0.M, v1.M, v2.M), "cmgt v0." S ", v1." S ", v2." S);
1492b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1493b8021494Sopenharmony_ci#undef DISASM_INST
1494b8021494Sopenharmony_ci
1495b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1496b8021494Sopenharmony_ci  COMPARE_MACRO(Cmhi(v0.M, v1.M, v2.M), "cmhi v0." S ", v1." S ", v2." S);
1497b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1498b8021494Sopenharmony_ci#undef DISASM_INST
1499b8021494Sopenharmony_ci
1500b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1501b8021494Sopenharmony_ci  COMPARE_MACRO(Cmhs(v0.M, v1.M, v2.M), "cmhs v0." S ", v1." S ", v2." S);
1502b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1503b8021494Sopenharmony_ci#undef DISASM_INST
1504b8021494Sopenharmony_ci
1505b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1506b8021494Sopenharmony_ci  COMPARE_MACRO(Cmtst(v0.M, v1.M, v2.M), "cmtst v0." S ", v1." S ", v2." S);
1507b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1508b8021494Sopenharmony_ci#undef DISASM_INST
1509b8021494Sopenharmony_ci
1510b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1511b8021494Sopenharmony_ci  COMPARE_MACRO(Add(v0.M, v1.M, v2.M), "add v0." S ", v1." S ", v2." S);
1512b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1513b8021494Sopenharmony_ci#undef DISASM_INST
1514b8021494Sopenharmony_ci
1515b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1516b8021494Sopenharmony_ci  COMPARE_MACRO(Sub(v3.M, v4.M, v5.M), "sub v3." S ", v4." S ", v5." S);
1517b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1518b8021494Sopenharmony_ci#undef DISASM_INST
1519b8021494Sopenharmony_ci
1520b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1521b8021494Sopenharmony_ci  COMPARE_MACRO(Sabd(v3.M, v4.M, v5.M), "sabd v3." S ", v4." S ", v5." S);
1522b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1523b8021494Sopenharmony_ci#undef DISASM_INST
1524b8021494Sopenharmony_ci
1525b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1526b8021494Sopenharmony_ci  COMPARE_MACRO(Uabd(v3.M, v4.M, v5.M), "uabd v3." S ", v4." S ", v5." S);
1527b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1528b8021494Sopenharmony_ci#undef DISASM_INST
1529b8021494Sopenharmony_ci
1530b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1531b8021494Sopenharmony_ci  COMPARE_MACRO(Saba(v3.M, v4.M, v5.M), "saba v3." S ", v4." S ", v5." S);
1532b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1533b8021494Sopenharmony_ci#undef DISASM_INST
1534b8021494Sopenharmony_ci
1535b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1536b8021494Sopenharmony_ci  COMPARE_MACRO(Uaba(v3.M, v4.M, v5.M), "uaba v3." S ", v4." S ", v5." S);
1537b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1538b8021494Sopenharmony_ci#undef DISASM_INST
1539b8021494Sopenharmony_ci
1540b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1541b8021494Sopenharmony_ci  COMPARE_MACRO(Smax(v3.M, v4.M, v5.M), "smax v3." S ", v4." S ", v5." S);
1542b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1543b8021494Sopenharmony_ci#undef DISASM_INST
1544b8021494Sopenharmony_ci
1545b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1546b8021494Sopenharmony_ci  COMPARE_MACRO(Smin(v3.M, v4.M, v5.M), "smin v3." S ", v4." S ", v5." S);
1547b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1548b8021494Sopenharmony_ci#undef DISASM_INST
1549b8021494Sopenharmony_ci
1550b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1551b8021494Sopenharmony_ci  COMPARE_MACRO(Umax(v3.M, v4.M, v5.M), "umax v3." S ", v4." S ", v5." S);
1552b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1553b8021494Sopenharmony_ci#undef DISASM_INST
1554b8021494Sopenharmony_ci
1555b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1556b8021494Sopenharmony_ci  COMPARE_MACRO(Umin(v3.M, v4.M, v5.M), "umin v3." S ", v4." S ", v5." S);
1557b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1558b8021494Sopenharmony_ci#undef DISASM_INST
1559b8021494Sopenharmony_ci
1560b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1561b8021494Sopenharmony_ci  COMPARE_MACRO(Smaxp(v3.M, v4.M, v5.M), "smaxp v3." S ", v4." S ", v5." S);
1562b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1563b8021494Sopenharmony_ci#undef DISASM_INST
1564b8021494Sopenharmony_ci
1565b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1566b8021494Sopenharmony_ci  COMPARE_MACRO(Sminp(v3.M, v4.M, v5.M), "sminp v3." S ", v4." S ", v5." S);
1567b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1568b8021494Sopenharmony_ci#undef DISASM_INST
1569b8021494Sopenharmony_ci
1570b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1571b8021494Sopenharmony_ci  COMPARE_MACRO(Umaxp(v3.M, v4.M, v5.M), "umaxp v3." S ", v4." S ", v5." S);
1572b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1573b8021494Sopenharmony_ci#undef DISASM_INST
1574b8021494Sopenharmony_ci
1575b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1576b8021494Sopenharmony_ci  COMPARE_MACRO(Uminp(v3.M, v4.M, v5.M), "uminp v3." S ", v4." S ", v5." S);
1577b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1578b8021494Sopenharmony_ci#undef DISASM_INST
1579b8021494Sopenharmony_ci
1580b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1581b8021494Sopenharmony_ci  COMPARE_MACRO(Uqadd(v6.M, v7.M, v8.M), "uqadd v6." S ", v7." S ", v8." S);
1582b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1583b8021494Sopenharmony_ci#undef DISASM_INST
1584b8021494Sopenharmony_ci
1585b8021494Sopenharmony_ci#define DISASM_INST(M, S)                  \
1586b8021494Sopenharmony_ci  COMPARE_MACRO(Sqadd(v9.M, v10.M, v11.M), \
1587b8021494Sopenharmony_ci                "sqadd v9." S ", v10." S   \
1588b8021494Sopenharmony_ci                ", "                       \
1589b8021494Sopenharmony_ci                "v11." S);
1590b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1591b8021494Sopenharmony_ci#undef DISASM_INST
1592b8021494Sopenharmony_ci
1593b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1594b8021494Sopenharmony_ci  COMPARE_MACRO(Uqsub(v6.M, v7.M, v8.M), "uqsub v6." S ", v7." S ", v8." S);
1595b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1596b8021494Sopenharmony_ci#undef DISASM_INST
1597b8021494Sopenharmony_ci
1598b8021494Sopenharmony_ci#define DISASM_INST(M, S)                  \
1599b8021494Sopenharmony_ci  COMPARE_MACRO(Sqsub(v9.M, v10.M, v11.M), \
1600b8021494Sopenharmony_ci                "sqsub v9." S ", v10." S   \
1601b8021494Sopenharmony_ci                ", "                       \
1602b8021494Sopenharmony_ci                "v11." S);
1603b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1604b8021494Sopenharmony_ci#undef DISASM_INST
1605b8021494Sopenharmony_ci
1606b8021494Sopenharmony_ci#define DISASM_INST(M, S)                  \
1607b8021494Sopenharmony_ci  COMPARE_MACRO(Sshl(v12.M, v13.M, v14.M), \
1608b8021494Sopenharmony_ci                "sshl v12." S ", v13." S   \
1609b8021494Sopenharmony_ci                ", "                       \
1610b8021494Sopenharmony_ci                "v14." S);
1611b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1612b8021494Sopenharmony_ci#undef DISASM_INST
1613b8021494Sopenharmony_ci
1614b8021494Sopenharmony_ci#define DISASM_INST(M, S)                  \
1615b8021494Sopenharmony_ci  COMPARE_MACRO(Ushl(v15.M, v16.M, v17.M), \
1616b8021494Sopenharmony_ci                "ushl v15." S ", v16." S   \
1617b8021494Sopenharmony_ci                ", "                       \
1618b8021494Sopenharmony_ci                "v17." S);
1619b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1620b8021494Sopenharmony_ci#undef DISASM_INST
1621b8021494Sopenharmony_ci
1622b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
1623b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshl(v18.M, v19.M, v20.M), \
1624b8021494Sopenharmony_ci                "sqshl v18." S ", v19." S ", v20." S);
1625b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1626b8021494Sopenharmony_ci#undef DISASM_INST
1627b8021494Sopenharmony_ci
1628b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
1629b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshl(v21.M, v22.M, v23.M), \
1630b8021494Sopenharmony_ci                "uqshl v21." S ", v22." S ", v23." S);
1631b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1632b8021494Sopenharmony_ci#undef DISASM_INST
1633b8021494Sopenharmony_ci
1634b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
1635b8021494Sopenharmony_ci  COMPARE_MACRO(Srshl(v24.M, v25.M, v26.M), \
1636b8021494Sopenharmony_ci                "srshl v24." S ", v25." S ", v26." S);
1637b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1638b8021494Sopenharmony_ci#undef DISASM_INST
1639b8021494Sopenharmony_ci
1640b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
1641b8021494Sopenharmony_ci  COMPARE_MACRO(Urshl(v27.M, v28.M, v29.M), \
1642b8021494Sopenharmony_ci                "urshl v27." S ", v28." S ", v29." S);
1643b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1644b8021494Sopenharmony_ci#undef DISASM_INST
1645b8021494Sopenharmony_ci
1646b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
1647b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshl(v30.M, v31.M, v0.M), \
1648b8021494Sopenharmony_ci                "sqrshl v30." S ", v31." S ", v0." S);
1649b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1650b8021494Sopenharmony_ci#undef DISASM_INST
1651b8021494Sopenharmony_ci
1652b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1653b8021494Sopenharmony_ci  COMPARE_MACRO(Uqrshl(v1.M, v2.M, v3.M), "uqrshl v1." S ", v2." S ", v3." S);
1654b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1655b8021494Sopenharmony_ci#undef DISASM_INST
1656b8021494Sopenharmony_ci
1657b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1658b8021494Sopenharmony_ci  COMPARE_MACRO(Shadd(v4.M, v5.M, v6.M), "shadd v4." S ", v5." S ", v6." S);
1659b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1660b8021494Sopenharmony_ci#undef DISASM_INST
1661b8021494Sopenharmony_ci
1662b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1663b8021494Sopenharmony_ci  COMPARE_MACRO(Uhadd(v7.M, v8.M, v9.M), "uhadd v7." S ", v8." S ", v9." S);
1664b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1665b8021494Sopenharmony_ci#undef DISASM_INST
1666b8021494Sopenharmony_ci
1667b8021494Sopenharmony_ci#define DISASM_INST(M, S)                    \
1668b8021494Sopenharmony_ci  COMPARE_MACRO(Srhadd(v10.M, v11.M, v12.M), \
1669b8021494Sopenharmony_ci                "srhadd v10." S ", v11." S ", v12." S);
1670b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1671b8021494Sopenharmony_ci#undef DISASM_INST
1672b8021494Sopenharmony_ci
1673b8021494Sopenharmony_ci#define DISASM_INST(M, S)                    \
1674b8021494Sopenharmony_ci  COMPARE_MACRO(Urhadd(v13.M, v14.M, v15.M), \
1675b8021494Sopenharmony_ci                "urhadd v13." S ", v14." S ", v15." S);
1676b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1677b8021494Sopenharmony_ci#undef DISASM_INST
1678b8021494Sopenharmony_ci
1679b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
1680b8021494Sopenharmony_ci  COMPARE_MACRO(Shsub(v16.M, v17.M, v18.M), \
1681b8021494Sopenharmony_ci                "shsub v16." S ", v17." S ", v18." S);
1682b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1683b8021494Sopenharmony_ci#undef DISASM_INST
1684b8021494Sopenharmony_ci
1685b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
1686b8021494Sopenharmony_ci  COMPARE_MACRO(Uhsub(v19.M, v20.M, v21.M), \
1687b8021494Sopenharmony_ci                "uhsub v19." S ", v20." S ", v21." S);
1688b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1689b8021494Sopenharmony_ci#undef DISASM_INST
1690b8021494Sopenharmony_ci
1691b8021494Sopenharmony_ci#define DISASM_INST(M, S)                  \
1692b8021494Sopenharmony_ci  COMPARE_MACRO(Addp(v19.M, v20.M, v21.M), \
1693b8021494Sopenharmony_ci                "addp v19." S ", v20." S   \
1694b8021494Sopenharmony_ci                ", "                       \
1695b8021494Sopenharmony_ci                "v21." S);
1696b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
1697b8021494Sopenharmony_ci#undef DISASM_INST
1698b8021494Sopenharmony_ci
1699b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1700b8021494Sopenharmony_ci  COMPARE_MACRO(Mla(v19.M, v20.M, v21.M), "mla v19." S ", v20." S ", v21." S);
1701b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1702b8021494Sopenharmony_ci#undef DISASM_INST
1703b8021494Sopenharmony_ci
1704b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1705b8021494Sopenharmony_ci  COMPARE_MACRO(Mls(v19.M, v20.M, v21.M), "mls v19." S ", v20." S ", v21." S);
1706b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1707b8021494Sopenharmony_ci#undef DISASM_INST
1708b8021494Sopenharmony_ci
1709b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1710b8021494Sopenharmony_ci  COMPARE_MACRO(Mul(v19.M, v20.M, v21.M), "mul v19." S ", v20." S ", v21." S);
1711b8021494Sopenharmony_ci  NEON_FORMAT_LIST_BHS(DISASM_INST)
1712b8021494Sopenharmony_ci#undef DISASM_INST
1713b8021494Sopenharmony_ci
1714b8021494Sopenharmony_ci#define DISASM_INST(M, S)                  \
1715b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmulh(v1.M, v2.M, v3.M), \
1716b8021494Sopenharmony_ci                "sqdmulh v1." S ", v2." S  \
1717b8021494Sopenharmony_ci                ", "                       \
1718b8021494Sopenharmony_ci                "v3." S);
1719b8021494Sopenharmony_ci  NEON_FORMAT_LIST_HS(DISASM_INST)
1720b8021494Sopenharmony_ci#undef DISASM_INST
1721b8021494Sopenharmony_ci
1722b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
1723b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmulh(v1.M, v2.M, v3.M), \
1724b8021494Sopenharmony_ci                "sqrdmulh v1." S ", v2." S ", v3." S);
1725b8021494Sopenharmony_ci  NEON_FORMAT_LIST_HS(DISASM_INST)
1726b8021494Sopenharmony_ci#undef DISASM_INST
1727b8021494Sopenharmony_ci
1728b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
1729b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlah(v1.M, v2.M, v3.M), \
1730b8021494Sopenharmony_ci                "sqrdmlah v1." S ", v2." S ", v3." S);
1731b8021494Sopenharmony_ci  NEON_FORMAT_LIST_HS(DISASM_INST)
1732b8021494Sopenharmony_ci#undef DISASM_INST
1733b8021494Sopenharmony_ci
1734b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
1735b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlsh(v1.M, v2.M, v3.M), \
1736b8021494Sopenharmony_ci                "sqrdmlsh v1." S ", v2." S ", v3." S);
1737b8021494Sopenharmony_ci  NEON_FORMAT_LIST_HS(DISASM_INST)
1738b8021494Sopenharmony_ci#undef DISASM_INST
1739b8021494Sopenharmony_ci
1740b8021494Sopenharmony_ci  COMPARE_MACRO(Sdot(v1.V2S(), v2.V8B(), v3.V8B()), "sdot v1.2s, v2.8b, v3.8b");
1741b8021494Sopenharmony_ci  COMPARE_MACRO(Sdot(v1.V4S(), v2.V16B(), v3.V16B()),
1742b8021494Sopenharmony_ci                "sdot v1.4s, v2.16b, v3.16b");
1743b8021494Sopenharmony_ci
1744b8021494Sopenharmony_ci  COMPARE_MACRO(Udot(v1.V2S(), v2.V8B(), v3.V8B()), "udot v1.2s, v2.8b, v3.8b");
1745b8021494Sopenharmony_ci  COMPARE_MACRO(Udot(v1.V4S(), v2.V16B(), v3.V16B()),
1746b8021494Sopenharmony_ci                "udot v1.4s, v2.16b, v3.16b");
1747b8021494Sopenharmony_ci
1748b8021494Sopenharmony_ci  COMPARE_MACRO(Usdot(v7.V2S(), v9.V8B(), v30.V8B()),
1749b8021494Sopenharmony_ci                "usdot v7.2s, v9.8b, v30.8b");
1750b8021494Sopenharmony_ci  COMPARE_MACRO(Usdot(v7.V4S(), v9.V16B(), v30.V16B()),
1751b8021494Sopenharmony_ci                "usdot v7.4s, v9.16b, v30.16b");
1752b8021494Sopenharmony_ci
1753b8021494Sopenharmony_ci  COMPARE_MACRO(And(v6.V8B(), v7.V8B(), v8.V8B()), "and v6.8b, v7.8b, v8.8b");
1754b8021494Sopenharmony_ci  COMPARE_MACRO(And(v6.V16B(), v7.V16B(), v8.V16B()),
1755b8021494Sopenharmony_ci                "and v6.16b, v7.16b, v8.16b");
1756b8021494Sopenharmony_ci
1757b8021494Sopenharmony_ci  COMPARE_MACRO(Bic(v6.V8B(), v7.V8B(), v8.V8B()), "bic v6.8b, v7.8b, v8.8b");
1758b8021494Sopenharmony_ci  COMPARE_MACRO(Bic(v6.V16B(), v7.V16B(), v8.V16B()),
1759b8021494Sopenharmony_ci                "bic v6.16b, v7.16b, v8.16b");
1760b8021494Sopenharmony_ci
1761b8021494Sopenharmony_ci  COMPARE_MACRO(Orr(v6.V8B(), v7.V8B(), v8.V8B()), "orr v6.8b, v7.8b, v8.8b");
1762b8021494Sopenharmony_ci  COMPARE_MACRO(Orr(v6.V16B(), v7.V16B(), v8.V16B()),
1763b8021494Sopenharmony_ci                "orr v6.16b, v7.16b, v8.16b");
1764b8021494Sopenharmony_ci
1765b8021494Sopenharmony_ci  COMPARE_MACRO(Orr(v6.V8B(), v7.V8B(), v7.V8B()), "mov v6.8b, v7.8b");
1766b8021494Sopenharmony_ci  COMPARE_MACRO(Orr(v6.V16B(), v7.V16B(), v7.V16B()), "mov v6.16b, v7.16b");
1767b8021494Sopenharmony_ci
1768b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v6.V8B(), v8.V8B()), "mov v6.8b, v8.8b");
1769b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v6.V16B(), v8.V16B()), "mov v6.16b, v8.16b");
1770b8021494Sopenharmony_ci
1771b8021494Sopenharmony_ci  COMPARE_MACRO(Orn(v6.V8B(), v7.V8B(), v8.V8B()), "orn v6.8b, v7.8b, v8.8b");
1772b8021494Sopenharmony_ci  COMPARE_MACRO(Orn(v6.V16B(), v7.V16B(), v8.V16B()),
1773b8021494Sopenharmony_ci                "orn v6.16b, v7.16b, v8.16b");
1774b8021494Sopenharmony_ci
1775b8021494Sopenharmony_ci  COMPARE_MACRO(Eor(v6.V8B(), v7.V8B(), v8.V8B()), "eor v6.8b, v7.8b, v8.8b");
1776b8021494Sopenharmony_ci  COMPARE_MACRO(Eor(v6.V16B(), v7.V16B(), v8.V16B()),
1777b8021494Sopenharmony_ci                "eor v6.16b, v7.16b, v8.16b");
1778b8021494Sopenharmony_ci
1779b8021494Sopenharmony_ci  COMPARE_MACRO(Bif(v6.V8B(), v7.V8B(), v8.V8B()), "bif v6.8b, v7.8b, v8.8b");
1780b8021494Sopenharmony_ci  COMPARE_MACRO(Bif(v6.V16B(), v7.V16B(), v8.V16B()),
1781b8021494Sopenharmony_ci                "bif v6.16b, v7.16b, v8.16b");
1782b8021494Sopenharmony_ci
1783b8021494Sopenharmony_ci  COMPARE_MACRO(Bit(v6.V8B(), v7.V8B(), v8.V8B()), "bit v6.8b, v7.8b, v8.8b");
1784b8021494Sopenharmony_ci  COMPARE_MACRO(Bit(v6.V16B(), v7.V16B(), v8.V16B()),
1785b8021494Sopenharmony_ci                "bit v6.16b, v7.16b, v8.16b");
1786b8021494Sopenharmony_ci
1787b8021494Sopenharmony_ci  COMPARE_MACRO(Bsl(v6.V8B(), v7.V8B(), v8.V8B()), "bsl v6.8b, v7.8b, v8.8b");
1788b8021494Sopenharmony_ci  COMPARE_MACRO(Bsl(v6.V16B(), v7.V16B(), v8.V16B()),
1789b8021494Sopenharmony_ci                "bsl v6.16b, v7.16b, v8.16b");
1790b8021494Sopenharmony_ci
1791b8021494Sopenharmony_ci  COMPARE_MACRO(Pmul(v6.V8B(), v7.V8B(), v8.V8B()), "pmul v6.8b, v7.8b, v8.8b");
1792b8021494Sopenharmony_ci  COMPARE_MACRO(Pmul(v6.V16B(), v7.V16B(), v8.V16B()),
1793b8021494Sopenharmony_ci                "pmul v6.16b, v7.16b, v8.16b");
1794b8021494Sopenharmony_ci
1795b8021494Sopenharmony_ci  CLEANUP();
1796b8021494Sopenharmony_ci}
1797b8021494Sopenharmony_ci
1798b8021494Sopenharmony_ciTEST(neon_3same_fp16) {
1799b8021494Sopenharmony_ci  SETUP();
1800b8021494Sopenharmony_ci
1801b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxnm(v0.V8H(), v1.V8H(), v2.V8H()),
1802b8021494Sopenharmony_ci                "fmaxnm v0.8h, v1.8h, v2.8h");
1803b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxnm(v3.V4H(), v4.V4H(), v5.V4H()),
1804b8021494Sopenharmony_ci                "fmaxnm v3.4h, v4.4h, v5.4h");
1805b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(v6.V8H(), v7.V8H(), v8.V8H()), "fmla v6.8h, v7.8h, v8.8h");
1806b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(v9.V4H(), v10.V4H(), v11.V4H()),
1807b8021494Sopenharmony_ci                "fmla v9.4h, v10.4h, v11.4h");
1808b8021494Sopenharmony_ci  COMPARE_MACRO(Fadd(v12.V8H(), v13.V8H(), v14.V8H()),
1809b8021494Sopenharmony_ci                "fadd v12.8h, v13.8h, v14.8h");
1810b8021494Sopenharmony_ci  COMPARE_MACRO(Fadd(v15.V4H(), v16.V4H(), v17.V4H()),
1811b8021494Sopenharmony_ci                "fadd v15.4h, v16.4h, v17.4h");
1812b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v18.V8H(), v19.V8H(), v20.V8H()),
1813b8021494Sopenharmony_ci                "fmulx v18.8h, v19.8h, v20.8h");
1814b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v21.V4H(), v22.V4H(), v23.V4H()),
1815b8021494Sopenharmony_ci                "fmulx v21.4h, v22.4h, v23.4h");
1816b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmeq(v24.V8H(), v25.V8H(), v26.V8H()),
1817b8021494Sopenharmony_ci                "fcmeq v24.8h, v25.8h, v26.8h");
1818b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmeq(v27.V4H(), v28.V4H(), v29.V4H()),
1819b8021494Sopenharmony_ci                "fcmeq v27.4h, v28.4h, v29.4h");
1820b8021494Sopenharmony_ci  COMPARE_MACRO(Fmax(v30.V8H(), v0.V8H(), v1.V8H()),
1821b8021494Sopenharmony_ci                "fmax v30.8h, v0.8h, v1.8h");
1822b8021494Sopenharmony_ci  COMPARE_MACRO(Fmax(v2.V4H(), v3.V4H(), v4.V4H()), "fmax v2.4h, v3.4h, v4.4h");
1823b8021494Sopenharmony_ci  COMPARE_MACRO(Frecps(v5.V8H(), v6.V8H(), v7.V8H()),
1824b8021494Sopenharmony_ci                "frecps v5.8h, v6.8h, v7.8h");
1825b8021494Sopenharmony_ci  COMPARE_MACRO(Frecps(v8.V4H(), v9.V4H(), v10.V4H()),
1826b8021494Sopenharmony_ci                "frecps v8.4h, v9.4h, v10.4h");
1827b8021494Sopenharmony_ci  COMPARE_MACRO(Fminnm(v11.V8H(), v12.V8H(), v13.V8H()),
1828b8021494Sopenharmony_ci                "fminnm v11.8h, v12.8h, v13.8h");
1829b8021494Sopenharmony_ci  COMPARE_MACRO(Fminnm(v14.V4H(), v15.V4H(), v16.V4H()),
1830b8021494Sopenharmony_ci                "fminnm v14.4h, v15.4h, v16.4h");
1831b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(v17.V8H(), v18.V8H(), v19.V8H()),
1832b8021494Sopenharmony_ci                "fmls v17.8h, v18.8h, v19.8h");
1833b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(v20.V4H(), v21.V4H(), v22.V4H()),
1834b8021494Sopenharmony_ci                "fmls v20.4h, v21.4h, v22.4h");
1835b8021494Sopenharmony_ci  COMPARE_MACRO(Fsub(v23.V8H(), v24.V8H(), v25.V8H()),
1836b8021494Sopenharmony_ci                "fsub v23.8h, v24.8h, v25.8h");
1837b8021494Sopenharmony_ci  COMPARE_MACRO(Fsub(v26.V4H(), v27.V4H(), v28.V4H()),
1838b8021494Sopenharmony_ci                "fsub v26.4h, v27.4h, v28.4h");
1839b8021494Sopenharmony_ci  COMPARE_MACRO(Fmin(v29.V8H(), v30.V8H(), v0.V8H()),
1840b8021494Sopenharmony_ci                "fmin v29.8h, v30.8h, v0.8h");
1841b8021494Sopenharmony_ci  COMPARE_MACRO(Fmin(v1.V4H(), v2.V4H(), v3.V4H()), "fmin v1.4h, v2.4h, v3.4h");
1842b8021494Sopenharmony_ci  COMPARE_MACRO(Frsqrts(v4.V8H(), v5.V8H(), v6.V8H()),
1843b8021494Sopenharmony_ci                "frsqrts v4.8h, v5.8h, v6.8h");
1844b8021494Sopenharmony_ci  COMPARE_MACRO(Frsqrts(v7.V4H(), v8.V4H(), v9.V4H()),
1845b8021494Sopenharmony_ci                "frsqrts v7.4h, v8.4h, v9.4h");
1846b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxnmp(v10.V8H(), v11.V8H(), v12.V8H()),
1847b8021494Sopenharmony_ci                "fmaxnmp v10.8h, v11.8h, v12.8h");
1848b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxnmp(v13.V4H(), v14.V4H(), v15.V4H()),
1849b8021494Sopenharmony_ci                "fmaxnmp v13.4h, v14.4h, v15.4h");
1850b8021494Sopenharmony_ci  COMPARE_MACRO(Faddp(v16.V8H(), v17.V8H(), v18.V8H()),
1851b8021494Sopenharmony_ci                "faddp v16.8h, v17.8h, v18.8h");
1852b8021494Sopenharmony_ci  COMPARE_MACRO(Faddp(v19.V4H(), v20.V4H(), v21.V4H()),
1853b8021494Sopenharmony_ci                "faddp v19.4h, v20.4h, v21.4h");
1854b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(v22.V8H(), v23.V8H(), v24.V8H()),
1855b8021494Sopenharmony_ci                "fmul v22.8h, v23.8h, v24.8h");
1856b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(v25.V4H(), v26.V4H(), v27.V4H()),
1857b8021494Sopenharmony_ci                "fmul v25.4h, v26.4h, v27.4h");
1858b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmge(v28.V8H(), v29.V8H(), v30.V8H()),
1859b8021494Sopenharmony_ci                "fcmge v28.8h, v29.8h, v30.8h");
1860b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmge(v0.V4H(), v1.V4H(), v2.V4H()),
1861b8021494Sopenharmony_ci                "fcmge v0.4h, v1.4h, v2.4h");
1862b8021494Sopenharmony_ci  COMPARE_MACRO(Facge(v3.V8H(), v4.V8H(), v5.V8H()),
1863b8021494Sopenharmony_ci                "facge v3.8h, v4.8h, v5.8h");
1864b8021494Sopenharmony_ci  COMPARE_MACRO(Facge(v6.V4H(), v7.V4H(), v8.V4H()),
1865b8021494Sopenharmony_ci                "facge v6.4h, v7.4h, v8.4h");
1866b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxp(v9.V8H(), v10.V8H(), v11.V8H()),
1867b8021494Sopenharmony_ci                "fmaxp v9.8h, v10.8h, v11.8h");
1868b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxp(v12.V4H(), v13.V4H(), v14.V4H()),
1869b8021494Sopenharmony_ci                "fmaxp v12.4h, v13.4h, v14.4h");
1870b8021494Sopenharmony_ci  COMPARE_MACRO(Fdiv(v15.V8H(), v16.V8H(), v17.V8H()),
1871b8021494Sopenharmony_ci                "fdiv v15.8h, v16.8h, v17.8h");
1872b8021494Sopenharmony_ci  COMPARE_MACRO(Fdiv(v18.V4H(), v19.V4H(), v20.V4H()),
1873b8021494Sopenharmony_ci                "fdiv v18.4h, v19.4h, v20.4h");
1874b8021494Sopenharmony_ci  COMPARE_MACRO(Fminnmp(v21.V8H(), v22.V8H(), v23.V8H()),
1875b8021494Sopenharmony_ci                "fminnmp v21.8h, v22.8h, v23.8h");
1876b8021494Sopenharmony_ci  COMPARE_MACRO(Fminnmp(v24.V4H(), v25.V4H(), v26.V4H()),
1877b8021494Sopenharmony_ci                "fminnmp v24.4h, v25.4h, v26.4h");
1878b8021494Sopenharmony_ci  COMPARE_MACRO(Fabd(v27.V8H(), v28.V8H(), v29.V8H()),
1879b8021494Sopenharmony_ci                "fabd v27.8h, v28.8h, v29.8h");
1880b8021494Sopenharmony_ci  COMPARE_MACRO(Fabd(v30.V4H(), v0.V4H(), v1.V4H()),
1881b8021494Sopenharmony_ci                "fabd v30.4h, v0.4h, v1.4h");
1882b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmgt(v2.V8H(), v3.V8H(), v4.V8H()),
1883b8021494Sopenharmony_ci                "fcmgt v2.8h, v3.8h, v4.8h");
1884b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmgt(v5.V4H(), v6.V4H(), v7.V4H()),
1885b8021494Sopenharmony_ci                "fcmgt v5.4h, v6.4h, v7.4h");
1886b8021494Sopenharmony_ci  COMPARE_MACRO(Facgt(v8.V8H(), v9.V8H(), v10.V8H()),
1887b8021494Sopenharmony_ci                "facgt v8.8h, v9.8h, v10.8h");
1888b8021494Sopenharmony_ci  COMPARE_MACRO(Facgt(v11.V4H(), v12.V4H(), v13.V4H()),
1889b8021494Sopenharmony_ci                "facgt v11.4h, v12.4h, v13.4h");
1890b8021494Sopenharmony_ci  COMPARE_MACRO(Fminp(v14.V8H(), v15.V8H(), v16.V8H()),
1891b8021494Sopenharmony_ci                "fminp v14.8h, v15.8h, v16.8h");
1892b8021494Sopenharmony_ci  COMPARE_MACRO(Fminp(v17.V4H(), v18.V4H(), v19.V4H()),
1893b8021494Sopenharmony_ci                "fminp v17.4h, v18.4h, v19.4h");
1894b8021494Sopenharmony_ci
1895b8021494Sopenharmony_ci  CLEANUP();
1896b8021494Sopenharmony_ci}
1897b8021494Sopenharmony_ci
1898b8021494Sopenharmony_ciTEST(neon_3same_extra_fcadd) {
1899b8021494Sopenharmony_ci  SETUP();
1900b8021494Sopenharmony_ci
1901b8021494Sopenharmony_ci  COMPARE_MACRO(Fcadd(v4.V4H(), v5.V4H(), v6.V4H(), 270),
1902b8021494Sopenharmony_ci                "fcadd v4.4h, v5.4h, v6.4h, #270");
1903b8021494Sopenharmony_ci  COMPARE_MACRO(Fcadd(v4.V8H(), v5.V8H(), v6.V8H(), 90),
1904b8021494Sopenharmony_ci                "fcadd v4.8h, v5.8h, v6.8h, #90");
1905b8021494Sopenharmony_ci  COMPARE_MACRO(Fcadd(v1.V2S(), v2.V2S(), v3.V2S(), 90),
1906b8021494Sopenharmony_ci                "fcadd v1.2s, v2.2s, v3.2s, #90");
1907b8021494Sopenharmony_ci  COMPARE_MACRO(Fcadd(v1.V4S(), v2.V4S(), v3.V4S(), 270),
1908b8021494Sopenharmony_ci                "fcadd v1.4s, v2.4s, v3.4s, #270");
1909b8021494Sopenharmony_ci  COMPARE_MACRO(Fcadd(v29.V2D(), v30.V2D(), v31.V2D(), 90),
1910b8021494Sopenharmony_ci                "fcadd v29.2d, v30.2d, v31.2d, #90");
1911b8021494Sopenharmony_ci
1912b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmla(v4.V8H(), v5.V8H(), v6.V8H(), 270),
1913b8021494Sopenharmony_ci                "fcmla v4.8h, v5.8h, v6.8h, #270");
1914b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmla(v9.V2S(), v8.V2S(), v7.V2S(), 180),
1915b8021494Sopenharmony_ci                "fcmla v9.2s, v8.2s, v7.2s, #180");
1916b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmla(v11.V4S(), v12.V4S(), v13.V4S(), 90),
1917b8021494Sopenharmony_ci                "fcmla v11.4s, v12.4s, v13.4s, #90");
1918b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmla(v21.V2D(), v22.V2D(), v23.V2D(), 0),
1919b8021494Sopenharmony_ci                "fcmla v21.2d, v22.2d, v23.2d, #0");
1920b8021494Sopenharmony_ci
1921b8021494Sopenharmony_ci  // The FC* instructions span multiple opcodes, so they have special cases in
1922b8021494Sopenharmony_ci  // the disassembler. Verify that similar encodings don't get disassembled as
1923b8021494Sopenharmony_ci  // FC* instructions.
1924b8021494Sopenharmony_ci  COMPARE(dci(0x2e00ec00), "unallocated (Unallocated)");  // opcode = 0x1101
1925b8021494Sopenharmony_ci  COMPARE(dci(0x2e00fc00), "unallocated (Unallocated)");  // opcode = 0x1111
1926b8021494Sopenharmony_ci
1927b8021494Sopenharmony_ci  CLEANUP();
1928b8021494Sopenharmony_ci}
1929b8021494Sopenharmony_ci
1930b8021494Sopenharmony_ci#define NEON_FORMAT_LIST_FP(V) \
1931b8021494Sopenharmony_ci  V(V2S(), "2s")               \
1932b8021494Sopenharmony_ci  V(V4S(), "4s")               \
1933b8021494Sopenharmony_ci  V(V2D(), "2d")
1934b8021494Sopenharmony_ci
1935b8021494Sopenharmony_ci#define NEON_FORMAT_LIST_FP_FP16(V) \
1936b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(V)            \
1937b8021494Sopenharmony_ci  V(V4H(), "4h")                    \
1938b8021494Sopenharmony_ci  V(V8H(), "8h")
1939b8021494Sopenharmony_ci
1940b8021494Sopenharmony_ciTEST(neon_fp_3same) {
1941b8021494Sopenharmony_ci  SETUP();
1942b8021494Sopenharmony_ci
1943b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1944b8021494Sopenharmony_ci  COMPARE_MACRO(Fadd(v0.M, v1.M, v2.M), "fadd v0." S ", v1." S ", v2." S);
1945b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP_FP16(DISASM_INST)
1946b8021494Sopenharmony_ci#undef DISASM_INST
1947b8021494Sopenharmony_ci
1948b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1949b8021494Sopenharmony_ci  COMPARE_MACRO(Fsub(v3.M, v4.M, v5.M), "fsub v3." S ", v4." S ", v5." S);
1950b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP_FP16(DISASM_INST)
1951b8021494Sopenharmony_ci#undef DISASM_INST
1952b8021494Sopenharmony_ci
1953b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1954b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(v6.M, v7.M, v8.M), "fmul v6." S ", v7." S ", v8." S);
1955b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP_FP16(DISASM_INST)
1956b8021494Sopenharmony_ci#undef DISASM_INST
1957b8021494Sopenharmony_ci
1958b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
1959b8021494Sopenharmony_ci  COMPARE_MACRO(Fdiv(v9.M, v10.M, v11.M), "fdiv v9." S ", v10." S ", v11." S);
1960b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP_FP16(DISASM_INST)
1961b8021494Sopenharmony_ci#undef DISASM_INST
1962b8021494Sopenharmony_ci
1963b8021494Sopenharmony_ci#define DISASM_INST(M, S)                  \
1964b8021494Sopenharmony_ci  COMPARE_MACRO(Fmin(v12.M, v13.M, v14.M), \
1965b8021494Sopenharmony_ci                "fmin v12." S ", v13." S   \
1966b8021494Sopenharmony_ci                ", "                       \
1967b8021494Sopenharmony_ci                "v14." S);
1968b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP_FP16(DISASM_INST)
1969b8021494Sopenharmony_ci#undef DISASM_INST
1970b8021494Sopenharmony_ci
1971b8021494Sopenharmony_ci#define DISASM_INST(M, S)                    \
1972b8021494Sopenharmony_ci  COMPARE_MACRO(Fminnm(v15.M, v16.M, v17.M), \
1973b8021494Sopenharmony_ci                "fminnm v15." S ", v16." S ", v17." S);
1974b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP_FP16(DISASM_INST)
1975b8021494Sopenharmony_ci#undef DISASM_INST
1976b8021494Sopenharmony_ci
1977b8021494Sopenharmony_ci#define DISASM_INST(M, S)                  \
1978b8021494Sopenharmony_ci  COMPARE_MACRO(Fmax(v18.M, v19.M, v20.M), \
1979b8021494Sopenharmony_ci                "fmax v18." S ", v19." S   \
1980b8021494Sopenharmony_ci                ", "                       \
1981b8021494Sopenharmony_ci                "v20." S);
1982b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP_FP16(DISASM_INST)
1983b8021494Sopenharmony_ci#undef DISASM_INST
1984b8021494Sopenharmony_ci
1985b8021494Sopenharmony_ci#define DISASM_INST(M, S)                    \
1986b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxnm(v21.M, v22.M, v23.M), \
1987b8021494Sopenharmony_ci                "fmaxnm v21." S ", v22." S ", v23." S);
1988b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP_FP16(DISASM_INST)
1989b8021494Sopenharmony_ci#undef DISASM_INST
1990b8021494Sopenharmony_ci
1991b8021494Sopenharmony_ci#define DISASM_INST(M, S)                    \
1992b8021494Sopenharmony_ci  COMPARE_MACRO(Frecps(v24.M, v25.M, v26.M), \
1993b8021494Sopenharmony_ci                "frecps v24." S ", v25." S ", v26." S);
1994b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
1995b8021494Sopenharmony_ci#undef DISASM_INST
1996b8021494Sopenharmony_ci
1997b8021494Sopenharmony_ci#define DISASM_INST(M, S)                     \
1998b8021494Sopenharmony_ci  COMPARE_MACRO(Frsqrts(v27.M, v28.M, v29.M), \
1999b8021494Sopenharmony_ci                "frsqrts v27." S ", v28." S ", v29." S);
2000b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2001b8021494Sopenharmony_ci#undef DISASM_INST
2002b8021494Sopenharmony_ci
2003b8021494Sopenharmony_ci#define DISASM_INST(M, S)                  \
2004b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v30.M, v31.M, v0.M), \
2005b8021494Sopenharmony_ci                "fmulx v30." S ", v31." S  \
2006b8021494Sopenharmony_ci                ", "                       \
2007b8021494Sopenharmony_ci                "v0." S);
2008b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2009b8021494Sopenharmony_ci#undef DISASM_INST
2010b8021494Sopenharmony_ci
2011b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
2012b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(v1.M, v2.M, v3.M), "fmla v1." S ", v2." S ", v3." S);
2013b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2014b8021494Sopenharmony_ci#undef DISASM_INST
2015b8021494Sopenharmony_ci
2016b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
2017b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(v4.M, v5.M, v6.M), "fmls v4." S ", v5." S ", v6." S);
2018b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2019b8021494Sopenharmony_ci#undef DISASM_INST
2020b8021494Sopenharmony_ci
2021b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
2022b8021494Sopenharmony_ci  COMPARE_MACRO(Fabd(v7.M, v8.M, v9.M), "fabd v7." S ", v8." S ", v9." S);
2023b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2024b8021494Sopenharmony_ci#undef DISASM_INST
2025b8021494Sopenharmony_ci
2026b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
2027b8021494Sopenharmony_ci  COMPARE_MACRO(Faddp(v10.M, v11.M, v12.M), \
2028b8021494Sopenharmony_ci                "faddp v10." S ", v11." S ", v12." S);
2029b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2030b8021494Sopenharmony_ci#undef DISASM_INST
2031b8021494Sopenharmony_ci
2032b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
2033b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxp(v13.M, v14.M, v15.M), \
2034b8021494Sopenharmony_ci                "fmaxp v13." S ", v14." S ", v15." S);
2035b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2036b8021494Sopenharmony_ci#undef DISASM_INST
2037b8021494Sopenharmony_ci
2038b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
2039b8021494Sopenharmony_ci  COMPARE_MACRO(Fminp(v16.M, v17.M, v18.M), \
2040b8021494Sopenharmony_ci                "fminp v16." S ", v17." S ", v18." S);
2041b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2042b8021494Sopenharmony_ci#undef DISASM_INST
2043b8021494Sopenharmony_ci
2044b8021494Sopenharmony_ci#define DISASM_INST(M, S)                     \
2045b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxnmp(v19.M, v20.M, v21.M), \
2046b8021494Sopenharmony_ci                "fmaxnmp v19." S ", v20." S ", v21." S);
2047b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2048b8021494Sopenharmony_ci#undef DISASM_INST
2049b8021494Sopenharmony_ci
2050b8021494Sopenharmony_ci#define DISASM_INST(M, S)                     \
2051b8021494Sopenharmony_ci  COMPARE_MACRO(Fminnmp(v22.M, v23.M, v24.M), \
2052b8021494Sopenharmony_ci                "fminnmp v22." S ", v23." S ", v24." S);
2053b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2054b8021494Sopenharmony_ci#undef DISASM_INST
2055b8021494Sopenharmony_ci
2056b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
2057b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmeq(v25.M, v26.M, v27.M), \
2058b8021494Sopenharmony_ci                "fcmeq v25." S ", v26." S ", v27." S);
2059b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2060b8021494Sopenharmony_ci#undef DISASM_INST
2061b8021494Sopenharmony_ci
2062b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
2063b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmge(v25.M, v26.M, v27.M), \
2064b8021494Sopenharmony_ci                "fcmge v25." S ", v26." S ", v27." S);
2065b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2066b8021494Sopenharmony_ci#undef DISASM_INST
2067b8021494Sopenharmony_ci
2068b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
2069b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmgt(v25.M, v26.M, v27.M), \
2070b8021494Sopenharmony_ci                "fcmgt v25." S ", v26." S ", v27." S);
2071b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2072b8021494Sopenharmony_ci#undef DISASM_INST
2073b8021494Sopenharmony_ci
2074b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
2075b8021494Sopenharmony_ci  COMPARE_MACRO(Facge(v25.M, v26.M, v27.M), \
2076b8021494Sopenharmony_ci                "facge v25." S ", v26." S ", v27." S);
2077b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2078b8021494Sopenharmony_ci#undef DISASM_INST
2079b8021494Sopenharmony_ci
2080b8021494Sopenharmony_ci#define DISASM_INST(M, S)                   \
2081b8021494Sopenharmony_ci  COMPARE_MACRO(Facgt(v25.M, v26.M, v27.M), \
2082b8021494Sopenharmony_ci                "facgt v25." S ", v26." S ", v27." S);
2083b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
2084b8021494Sopenharmony_ci#undef DISASM_INST
2085b8021494Sopenharmony_ci
2086b8021494Sopenharmony_ci  // FMLAL and so on have mixed operands, but still use the NEON3Same encoding.
2087b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlal(v5.V2S(), v12.V2H(), v6.V2H()),
2088b8021494Sopenharmony_ci                "fmlal v5.2s, v12.2h, v6.2h");
2089b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlal2(v14.V2S(), v10.V2H(), v9.V2H()),
2090b8021494Sopenharmony_ci                "fmlal2 v14.2s, v10.2h, v9.2h");
2091b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlsl(v31.V2S(), v9.V2H(), v28.V2H()),
2092b8021494Sopenharmony_ci                "fmlsl v31.2s, v9.2h, v28.2h");
2093b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlsl2(v21.V2S(), v22.V2H(), v2.V2H()),
2094b8021494Sopenharmony_ci                "fmlsl2 v21.2s, v22.2h, v2.2h");
2095b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlal(v26.V4S(), v26.V4H(), v30.V4H()),
2096b8021494Sopenharmony_ci                "fmlal v26.4s, v26.4h, v30.4h");
2097b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlal2(v15.V4S(), v18.V4H(), v25.V4H()),
2098b8021494Sopenharmony_ci                "fmlal2 v15.4s, v18.4h, v25.4h");
2099b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlsl(v9.V4S(), v4.V4H(), v23.V4H()),
2100b8021494Sopenharmony_ci                "fmlsl v9.4s, v4.4h, v23.4h");
2101b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlsl2(v28.V4S(), v28.V4H(), v17.V4H()),
2102b8021494Sopenharmony_ci                "fmlsl2 v28.4s, v28.4h, v17.4h");
2103b8021494Sopenharmony_ci
2104b8021494Sopenharmony_ci  // Verify that unallocated encodings similar to FMLAL (and so on) are properly
2105b8021494Sopenharmony_ci  // handled.
2106b8021494Sopenharmony_ci  COMPARE(dci(0x0e66ed85), "unallocated (Unallocated)");
2107b8021494Sopenharmony_ci  COMPARE(dci(0x2e69cd4e), "unallocated (Unallocated)");
2108b8021494Sopenharmony_ci  COMPARE(dci(0x0efced3f), "unallocated (Unallocated)");
2109b8021494Sopenharmony_ci  COMPARE(dci(0x2ee2ced5), "unallocated (Unallocated)");
2110b8021494Sopenharmony_ci  COMPARE(dci(0x4e7eef5a), "unallocated (Unallocated)");
2111b8021494Sopenharmony_ci  COMPARE(dci(0x6e79ce4f), "unallocated (Unallocated)");
2112b8021494Sopenharmony_ci  COMPARE(dci(0x4ef7ec89), "unallocated (Unallocated)");
2113b8021494Sopenharmony_ci  COMPARE(dci(0x6ef1cf9c), "unallocated (Unallocated)");
2114b8021494Sopenharmony_ci
2115b8021494Sopenharmony_ci  CLEANUP();
2116b8021494Sopenharmony_ci}
2117b8021494Sopenharmony_ci
2118b8021494Sopenharmony_ci
2119b8021494Sopenharmony_ci#define NEON_SCALAR_FORMAT_LIST(V) \
2120b8021494Sopenharmony_ci  V(B(), "b")                      \
2121b8021494Sopenharmony_ci  V(H(), "h")                      \
2122b8021494Sopenharmony_ci  V(S(), "s")                      \
2123b8021494Sopenharmony_ci  V(D(), "d")
2124b8021494Sopenharmony_ci
2125b8021494Sopenharmony_ciTEST(neon_scalar_3same) {
2126b8021494Sopenharmony_ci  SETUP();
2127b8021494Sopenharmony_ci
2128b8021494Sopenharmony_ci  // Instructions that only support D-sized scalar operations.
2129b8021494Sopenharmony_ci  COMPARE_MACRO(Add(v0.D(), v1.D(), v2.D()), "add d0, d1, d2");
2130b8021494Sopenharmony_ci  COMPARE_MACRO(Sub(v3.D(), v4.D(), v5.D()), "sub d3, d4, d5");
2131b8021494Sopenharmony_ci  COMPARE_MACRO(Cmeq(v0.D(), v1.D(), v2.D()), "cmeq d0, d1, d2");
2132b8021494Sopenharmony_ci  COMPARE_MACRO(Cmge(v3.D(), v4.D(), v5.D()), "cmge d3, d4, d5");
2133b8021494Sopenharmony_ci  COMPARE_MACRO(Cmgt(v6.D(), v7.D(), v8.D()), "cmgt d6, d7, d8");
2134b8021494Sopenharmony_ci  COMPARE_MACRO(Cmhi(v0.D(), v1.D(), v2.D()), "cmhi d0, d1, d2");
2135b8021494Sopenharmony_ci  COMPARE_MACRO(Cmhs(v3.D(), v4.D(), v5.D()), "cmhs d3, d4, d5");
2136b8021494Sopenharmony_ci  COMPARE_MACRO(Cmtst(v6.D(), v7.D(), v8.D()), "cmtst d6, d7, d8");
2137b8021494Sopenharmony_ci  COMPARE_MACRO(Ushl(v6.D(), v7.D(), v8.D()), "ushl d6, d7, d8");
2138b8021494Sopenharmony_ci  COMPARE_MACRO(Sshl(v6.D(), v7.D(), v8.D()), "sshl d6, d7, d8");
2139b8021494Sopenharmony_ci  COMPARE_MACRO(Urshl(v9.D(), v10.D(), v11.D()), "urshl d9, d10, d11");
2140b8021494Sopenharmony_ci  COMPARE_MACRO(Srshl(v9.D(), v10.D(), v11.D()), "srshl d9, d10, d11");
2141b8021494Sopenharmony_ci
2142b8021494Sopenharmony_ci  // Instructions that support S and D-sized scalar operations.
2143b8021494Sopenharmony_ci  COMPARE_MACRO(Frecps(v12.S(), v13.S(), v14.S()), "frecps s12, s13, s14");
2144b8021494Sopenharmony_ci  COMPARE_MACRO(Frecps(v15.D(), v16.D(), v17.D()), "frecps d15, d16, d17");
2145b8021494Sopenharmony_ci  COMPARE_MACRO(Frsqrts(v18.S(), v19.S(), v20.S()), "frsqrts s18, s19, s20");
2146b8021494Sopenharmony_ci  COMPARE_MACRO(Frsqrts(v21.D(), v22.D(), v23.D()), "frsqrts d21, d22, d23");
2147b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v12.S(), v13.S(), v14.S()), "fmulx s12, s13, s14");
2148b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v15.D(), v16.D(), v17.D()), "fmulx d15, d16, d17");
2149b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmeq(v12.S(), v13.S(), v14.S()), "fcmeq s12, s13, s14");
2150b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmeq(v15.D(), v16.D(), v17.D()), "fcmeq d15, d16, d17");
2151b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmge(v12.S(), v13.S(), v14.S()), "fcmge s12, s13, s14");
2152b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmge(v15.D(), v16.D(), v17.D()), "fcmge d15, d16, d17");
2153b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmgt(v12.S(), v13.S(), v14.S()), "fcmgt s12, s13, s14");
2154b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmgt(v15.D(), v16.D(), v17.D()), "fcmgt d15, d16, d17");
2155b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmge(v12.S(), v13.S(), v14.S()), "fcmge s12, s13, s14");
2156b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmge(v15.D(), v16.D(), v17.D()), "fcmge d15, d16, d17");
2157b8021494Sopenharmony_ci  COMPARE_MACRO(Facgt(v12.S(), v13.S(), v14.S()), "facgt s12, s13, s14");
2158b8021494Sopenharmony_ci  COMPARE_MACRO(Facgt(v15.D(), v16.D(), v17.D()), "facgt d15, d16, d17");
2159b8021494Sopenharmony_ci
2160b8021494Sopenharmony_ci  // Instructions that support H and S-sized scalar operations.
2161b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmulh(v12.S(), v13.S(), v14.S()), "sqdmulh s12, s13, s14");
2162b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmulh(v15.H(), v16.H(), v17.H()), "sqdmulh h15, h16, h17");
2163b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmulh(v12.S(), v13.S(), v14.S()), "sqrdmulh s12, s13, s14");
2164b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmulh(v15.H(), v16.H(), v17.H()), "sqrdmulh h15, h16, h17");
2165b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlah(v12.S(), v13.S(), v14.S()), "sqrdmlah s12, s13, s14");
2166b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlah(v15.H(), v16.H(), v17.H()), "sqrdmlah h15, h16, h17");
2167b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlsh(v12.S(), v13.S(), v14.S()), "sqrdmlsh s12, s13, s14");
2168b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlsh(v15.H(), v16.H(), v17.H()), "sqrdmlsh h15, h16, h17");
2169b8021494Sopenharmony_ci
2170b8021494Sopenharmony_ci#define DISASM_INST(M, R) \
2171b8021494Sopenharmony_ci  COMPARE_MACRO(Uqadd(v6.M, v7.M, v8.M), "uqadd " R "6, " R "7, " R "8");
2172b8021494Sopenharmony_ci  NEON_SCALAR_FORMAT_LIST(DISASM_INST)
2173b8021494Sopenharmony_ci#undef DISASM_INST
2174b8021494Sopenharmony_ci
2175b8021494Sopenharmony_ci#define DISASM_INST(M, R) \
2176b8021494Sopenharmony_ci  COMPARE_MACRO(Uqsub(v9.M, v10.M, v11.M), "uqsub " R "9, " R "10, " R "11");
2177b8021494Sopenharmony_ci  NEON_SCALAR_FORMAT_LIST(DISASM_INST)
2178b8021494Sopenharmony_ci#undef DISASM_INST
2179b8021494Sopenharmony_ci
2180b8021494Sopenharmony_ci#define DISASM_INST(M, R)                    \
2181b8021494Sopenharmony_ci  COMPARE_MACRO(Sqadd(v12.M, v13.M, v14.M),  \
2182b8021494Sopenharmony_ci                "sqadd " R "12, " R "13, " R \
2183b8021494Sopenharmony_ci                "1"                          \
2184b8021494Sopenharmony_ci                "4");
2185b8021494Sopenharmony_ci  NEON_SCALAR_FORMAT_LIST(DISASM_INST)
2186b8021494Sopenharmony_ci#undef DISASM_INST
2187b8021494Sopenharmony_ci
2188b8021494Sopenharmony_ci#define DISASM_INST(M, R)                    \
2189b8021494Sopenharmony_ci  COMPARE_MACRO(Sqsub(v15.M, v16.M, v17.M),  \
2190b8021494Sopenharmony_ci                "sqsub " R "15, " R "16, " R \
2191b8021494Sopenharmony_ci                "1"                          \
2192b8021494Sopenharmony_ci                "7");
2193b8021494Sopenharmony_ci  NEON_SCALAR_FORMAT_LIST(DISASM_INST)
2194b8021494Sopenharmony_ci#undef DISASM_INST
2195b8021494Sopenharmony_ci
2196b8021494Sopenharmony_ci#define DISASM_INST(M, R)                    \
2197b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshl(v18.M, v19.M, v20.M),  \
2198b8021494Sopenharmony_ci                "uqshl " R "18, " R "19, " R \
2199b8021494Sopenharmony_ci                "2"                          \
2200b8021494Sopenharmony_ci                "0");
2201b8021494Sopenharmony_ci  NEON_SCALAR_FORMAT_LIST(DISASM_INST)
2202b8021494Sopenharmony_ci#undef DISASM_INST
2203b8021494Sopenharmony_ci
2204b8021494Sopenharmony_ci#define DISASM_INST(M, R)                    \
2205b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshl(v21.M, v22.M, v23.M),  \
2206b8021494Sopenharmony_ci                "sqshl " R "21, " R "22, " R \
2207b8021494Sopenharmony_ci                "2"                          \
2208b8021494Sopenharmony_ci                "3");
2209b8021494Sopenharmony_ci  NEON_SCALAR_FORMAT_LIST(DISASM_INST)
2210b8021494Sopenharmony_ci#undef DISASM_INST
2211b8021494Sopenharmony_ci
2212b8021494Sopenharmony_ci#define DISASM_INST(M, R) \
2213b8021494Sopenharmony_ci  COMPARE_MACRO(Uqrshl(v30.M, v31.M, v0.M), "uqrshl " R "30, " R "31, " R "0");
2214b8021494Sopenharmony_ci  NEON_SCALAR_FORMAT_LIST(DISASM_INST)
2215b8021494Sopenharmony_ci#undef DISASM_INST
2216b8021494Sopenharmony_ci
2217b8021494Sopenharmony_ci#define DISASM_INST(M, R) \
2218b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshl(v1.M, v2.M, v3.M), "sqrshl " R "1, " R "2, " R "3");
2219b8021494Sopenharmony_ci  NEON_SCALAR_FORMAT_LIST(DISASM_INST)
2220b8021494Sopenharmony_ci#undef DISASM_INST
2221b8021494Sopenharmony_ci
2222b8021494Sopenharmony_ci  CLEANUP();
2223b8021494Sopenharmony_ci}
2224b8021494Sopenharmony_ci
2225b8021494Sopenharmony_ci
2226b8021494Sopenharmony_ciTEST(neon_scalar_3same_fp16) {
2227b8021494Sopenharmony_ci  SETUP();
2228b8021494Sopenharmony_ci
2229b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v0.H(), v1.H(), v2.H()), "fmulx h0, h1, h2");
2230b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmeq(v3.H(), v4.H(), v5.H()), "fcmeq h3, h4, h5");
2231b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmge(v6.H(), v7.H(), v8.H()), "fcmge h6, h7, h8");
2232b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmgt(v9.H(), v10.H(), v11.H()), "fcmgt h9, h10, h11");
2233b8021494Sopenharmony_ci  COMPARE_MACRO(Facge(v12.H(), v13.H(), v14.H()), "facge h12, h13, h14");
2234b8021494Sopenharmony_ci  COMPARE_MACRO(Facgt(v15.H(), v16.H(), v17.H()), "facgt h15, h16, h17");
2235b8021494Sopenharmony_ci  COMPARE_MACRO(Frecps(v18.H(), v19.H(), v20.H()), "frecps h18, h19, h20");
2236b8021494Sopenharmony_ci  COMPARE_MACRO(Frsqrts(v21.H(), v22.H(), v23.H()), "frsqrts h21, h22, h23");
2237b8021494Sopenharmony_ci  COMPARE_MACRO(Fabd(v24.H(), v25.H(), v26.H()), "fabd h24, h25, h26");
2238b8021494Sopenharmony_ci
2239b8021494Sopenharmony_ci  CLEANUP();
2240b8021494Sopenharmony_ci}
2241b8021494Sopenharmony_ci
2242b8021494Sopenharmony_ci
2243b8021494Sopenharmony_ciTEST(neon_byelement) {
2244b8021494Sopenharmony_ci  SETUP();
2245b8021494Sopenharmony_ci
2246b8021494Sopenharmony_ci  COMPARE_MACRO(Mul(v0.V4H(), v1.V4H(), v2.H(), 0),
2247b8021494Sopenharmony_ci                "mul v0.4h, v1.4h, v2.h[0]");
2248b8021494Sopenharmony_ci  COMPARE_MACRO(Mul(v2.V8H(), v3.V8H(), v15.H(), 7),
2249b8021494Sopenharmony_ci                "mul v2.8h, v3.8h, v15.h[7]");
2250b8021494Sopenharmony_ci  COMPARE_MACRO(Mul(v0.V2S(), v1.V2S(), v2.S(), 0),
2251b8021494Sopenharmony_ci                "mul v0.2s, v1.2s, v2.s[0]");
2252b8021494Sopenharmony_ci  COMPARE_MACRO(Mul(v2.V4S(), v3.V4S(), v15.S(), 3),
2253b8021494Sopenharmony_ci                "mul v2.4s, v3.4s, v15.s[3]");
2254b8021494Sopenharmony_ci  COMPARE_MACRO(Mul(v11.V2S(), v17.V2S(), v26.S(), 1),
2255b8021494Sopenharmony_ci                "mul v11.2s, v17.2s, v26.s[1]");
2256b8021494Sopenharmony_ci
2257b8021494Sopenharmony_ci  COMPARE_MACRO(Mla(v0.V4H(), v1.V4H(), v2.H(), 0),
2258b8021494Sopenharmony_ci                "mla v0.4h, v1.4h, v2.h[0]");
2259b8021494Sopenharmony_ci  COMPARE_MACRO(Mla(v2.V8H(), v3.V8H(), v15.H(), 7),
2260b8021494Sopenharmony_ci                "mla v2.8h, v3.8h, v15.h[7]");
2261b8021494Sopenharmony_ci  COMPARE_MACRO(Mla(v0.V2S(), v1.V2S(), v2.S(), 0),
2262b8021494Sopenharmony_ci                "mla v0.2s, v1.2s, v2.s[0]");
2263b8021494Sopenharmony_ci  COMPARE_MACRO(Mla(v2.V4S(), v3.V4S(), v15.S(), 3),
2264b8021494Sopenharmony_ci                "mla v2.4s, v3.4s, v15.s[3]");
2265b8021494Sopenharmony_ci  COMPARE_MACRO(Mla(v11.V2S(), v17.V2S(), v26.S(), 1),
2266b8021494Sopenharmony_ci                "mla v11.2s, v17.2s, v26.s[1]");
2267b8021494Sopenharmony_ci
2268b8021494Sopenharmony_ci  COMPARE_MACRO(Mls(v0.V4H(), v1.V4H(), v2.H(), 0),
2269b8021494Sopenharmony_ci                "mls v0.4h, v1.4h, v2.h[0]");
2270b8021494Sopenharmony_ci  COMPARE_MACRO(Mls(v2.V8H(), v3.V8H(), v15.H(), 7),
2271b8021494Sopenharmony_ci                "mls v2.8h, v3.8h, v15.h[7]");
2272b8021494Sopenharmony_ci  COMPARE_MACRO(Mls(v0.V2S(), v1.V2S(), v2.S(), 0),
2273b8021494Sopenharmony_ci                "mls v0.2s, v1.2s, v2.s[0]");
2274b8021494Sopenharmony_ci  COMPARE_MACRO(Mls(v2.V4S(), v3.V4S(), v15.S(), 3),
2275b8021494Sopenharmony_ci                "mls v2.4s, v3.4s, v15.s[3]");
2276b8021494Sopenharmony_ci  COMPARE_MACRO(Mls(v11.V2S(), v17.V2S(), v31.S(), 1),
2277b8021494Sopenharmony_ci                "mls v11.2s, v17.2s, v31.s[1]");
2278b8021494Sopenharmony_ci
2279b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmulh(v0.V4H(), v1.V4H(), v2.H(), 0),
2280b8021494Sopenharmony_ci                "sqdmulh v0.4h, v1.4h, v2.h[0]");
2281b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmulh(v2.V8H(), v3.V8H(), v15.H(), 7),
2282b8021494Sopenharmony_ci                "sqdmulh v2.8h, v3.8h, v15.h[7]");
2283b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmulh(v0.V2S(), v1.V2S(), v2.S(), 0),
2284b8021494Sopenharmony_ci                "sqdmulh v0.2s, v1.2s, v2.s[0]");
2285b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmulh(v2.V4S(), v3.V4S(), v15.S(), 3),
2286b8021494Sopenharmony_ci                "sqdmulh v2.4s, v3.4s, v15.s[3]");
2287b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmulh(v11.V2S(), v17.V2S(), v31.S(), 1),
2288b8021494Sopenharmony_ci                "sqdmulh v11.2s, v17.2s, v31.s[1]");
2289b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmulh(h0, h1, v2.H(), 0), "sqdmulh h0, h1, v2.h[0]");
2290b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmulh(s0, s1, v2.S(), 0), "sqdmulh s0, s1, v2.s[0]");
2291b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmulh(s0, s1, v31.S(), 1), "sqdmulh s0, s1, v31.s[1]");
2292b8021494Sopenharmony_ci
2293b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmulh(v0.V4H(), v1.V4H(), v2.H(), 0),
2294b8021494Sopenharmony_ci                "sqrdmulh v0.4h, v1.4h, v2.h[0]");
2295b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmulh(v2.V8H(), v3.V8H(), v15.H(), 7),
2296b8021494Sopenharmony_ci                "sqrdmulh v2.8h, v3.8h, v15.h[7]");
2297b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmulh(v0.V2S(), v1.V2S(), v2.S(), 0),
2298b8021494Sopenharmony_ci                "sqrdmulh v0.2s, v1.2s, v2.s[0]");
2299b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmulh(v2.V4S(), v3.V4S(), v15.S(), 3),
2300b8021494Sopenharmony_ci                "sqrdmulh v2.4s, v3.4s, v15.s[3]");
2301b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmulh(v11.V2S(), v17.V2S(), v31.S(), 1),
2302b8021494Sopenharmony_ci                "sqrdmulh v11.2s, v17.2s, v31.s[1]");
2303b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmulh(h0, h1, v2.H(), 0), "sqrdmulh h0, h1, v2.h[0]");
2304b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmulh(s0, s1, v2.S(), 0), "sqrdmulh s0, s1, v2.s[0]");
2305b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmulh(s0, s1, v31.S(), 1), "sqrdmulh s0, s1, v31.s[1]");
2306b8021494Sopenharmony_ci
2307b8021494Sopenharmony_ci  COMPARE_MACRO(Sdot(v0.V2S(), v1.V8B(), v2.S4B(), 0),
2308b8021494Sopenharmony_ci                "sdot v0.2s, v1.8b, v2.4b[0]");
2309b8021494Sopenharmony_ci  COMPARE_MACRO(Sdot(v2.V4S(), v3.V16B(), v15.S4B(), 3),
2310b8021494Sopenharmony_ci                "sdot v2.4s, v3.16b, v15.4b[3]");
2311b8021494Sopenharmony_ci  COMPARE_MACRO(Sdot(v11.V2S(), v17.V8B(), v31.S4B(), 1),
2312b8021494Sopenharmony_ci                "sdot v11.2s, v17.8b, v31.4b[1]");
2313b8021494Sopenharmony_ci
2314b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlah(v0.V4H(), v1.V4H(), v2.H(), 0),
2315b8021494Sopenharmony_ci                "sqrdmlah v0.4h, v1.4h, v2.h[0]");
2316b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlah(v2.V8H(), v3.V8H(), v15.H(), 7),
2317b8021494Sopenharmony_ci                "sqrdmlah v2.8h, v3.8h, v15.h[7]");
2318b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlah(v0.V2S(), v1.V2S(), v2.S(), 0),
2319b8021494Sopenharmony_ci                "sqrdmlah v0.2s, v1.2s, v2.s[0]");
2320b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlah(v2.V4S(), v3.V4S(), v15.S(), 3),
2321b8021494Sopenharmony_ci                "sqrdmlah v2.4s, v3.4s, v15.s[3]");
2322b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlah(v11.V2S(), v17.V2S(), v31.S(), 1),
2323b8021494Sopenharmony_ci                "sqrdmlah v11.2s, v17.2s, v31.s[1]");
2324b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlah(h0, h1, v2.H(), 0), "sqrdmlah h0, h1, v2.h[0]");
2325b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlah(s0, s1, v2.S(), 0), "sqrdmlah s0, s1, v2.s[0]");
2326b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlah(s0, s1, v31.S(), 1), "sqrdmlah s0, s1, v31.s[1]");
2327b8021494Sopenharmony_ci
2328b8021494Sopenharmony_ci  COMPARE_MACRO(Udot(v0.V2S(), v1.V8B(), v2.S4B(), 0),
2329b8021494Sopenharmony_ci                "udot v0.2s, v1.8b, v2.4b[0]");
2330b8021494Sopenharmony_ci  COMPARE_MACRO(Udot(v2.V4S(), v3.V16B(), v15.S4B(), 3),
2331b8021494Sopenharmony_ci                "udot v2.4s, v3.16b, v15.4b[3]");
2332b8021494Sopenharmony_ci  COMPARE_MACRO(Udot(v11.V2S(), v17.V8B(), v31.S4B(), 1),
2333b8021494Sopenharmony_ci                "udot v11.2s, v17.8b, v31.4b[1]");
2334b8021494Sopenharmony_ci
2335b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlsh(v0.V4H(), v1.V4H(), v2.H(), 0),
2336b8021494Sopenharmony_ci                "sqrdmlsh v0.4h, v1.4h, v2.h[0]");
2337b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlsh(v2.V8H(), v3.V8H(), v15.H(), 7),
2338b8021494Sopenharmony_ci                "sqrdmlsh v2.8h, v3.8h, v15.h[7]");
2339b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlsh(v0.V2S(), v1.V2S(), v2.S(), 0),
2340b8021494Sopenharmony_ci                "sqrdmlsh v0.2s, v1.2s, v2.s[0]");
2341b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlsh(v2.V4S(), v3.V4S(), v15.S(), 3),
2342b8021494Sopenharmony_ci                "sqrdmlsh v2.4s, v3.4s, v15.s[3]");
2343b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlsh(v11.V2S(), v17.V2S(), v31.S(), 1),
2344b8021494Sopenharmony_ci                "sqrdmlsh v11.2s, v17.2s, v31.s[1]");
2345b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlsh(h0, h1, v2.H(), 0), "sqrdmlsh h0, h1, v2.h[0]");
2346b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlsh(s0, s1, v2.S(), 0), "sqrdmlsh s0, s1, v2.s[0]");
2347b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrdmlsh(s0, s1, v31.S(), 1), "sqrdmlsh s0, s1, v31.s[1]");
2348b8021494Sopenharmony_ci
2349b8021494Sopenharmony_ci  COMPARE_MACRO(Smull(v0.V4S(), v1.V4H(), v2.H(), 0),
2350b8021494Sopenharmony_ci                "smull v0.4s, v1.4h, v2.h[0]");
2351b8021494Sopenharmony_ci  COMPARE_MACRO(Smull2(v2.V4S(), v3.V8H(), v4.H(), 7),
2352b8021494Sopenharmony_ci                "smull2 v2.4s, v3.8h, v4.h[7]");
2353b8021494Sopenharmony_ci  COMPARE_MACRO(Smull(v0.V2D(), v1.V2S(), v2.S(), 0),
2354b8021494Sopenharmony_ci                "smull v0.2d, v1.2s, v2.s[0]");
2355b8021494Sopenharmony_ci  COMPARE_MACRO(Smull2(v2.V2D(), v3.V4S(), v4.S(), 3),
2356b8021494Sopenharmony_ci                "smull2 v2.2d, v3.4s, v4.s[3]");
2357b8021494Sopenharmony_ci  COMPARE_MACRO(Smull(v11.V2D(), v17.V2S(), v31.S(), 1),
2358b8021494Sopenharmony_ci                "smull v11.2d, v17.2s, v31.s[1]");
2359b8021494Sopenharmony_ci
2360b8021494Sopenharmony_ci  COMPARE_MACRO(Umull(v0.V4S(), v1.V4H(), v2.H(), 0),
2361b8021494Sopenharmony_ci                "umull v0.4s, v1.4h, v2.h[0]");
2362b8021494Sopenharmony_ci  COMPARE_MACRO(Umull2(v2.V4S(), v3.V8H(), v4.H(), 7),
2363b8021494Sopenharmony_ci                "umull2 v2.4s, v3.8h, v4.h[7]");
2364b8021494Sopenharmony_ci  COMPARE_MACRO(Umull(v0.V2D(), v1.V2S(), v2.S(), 0),
2365b8021494Sopenharmony_ci                "umull v0.2d, v1.2s, v2.s[0]");
2366b8021494Sopenharmony_ci  COMPARE_MACRO(Umull2(v2.V2D(), v3.V4S(), v4.S(), 3),
2367b8021494Sopenharmony_ci                "umull2 v2.2d, v3.4s, v4.s[3]");
2368b8021494Sopenharmony_ci  COMPARE_MACRO(Umull(v11.V2D(), v17.V2S(), v31.S(), 1),
2369b8021494Sopenharmony_ci                "umull v11.2d, v17.2s, v31.s[1]");
2370b8021494Sopenharmony_ci
2371b8021494Sopenharmony_ci  COMPARE_MACRO(Smlal(v0.V4S(), v1.V4H(), v2.H(), 0),
2372b8021494Sopenharmony_ci                "smlal v0.4s, v1.4h, v2.h[0]");
2373b8021494Sopenharmony_ci  COMPARE_MACRO(Smlal2(v2.V4S(), v3.V8H(), v4.H(), 7),
2374b8021494Sopenharmony_ci                "smlal2 v2.4s, v3.8h, v4.h[7]");
2375b8021494Sopenharmony_ci  COMPARE_MACRO(Smlal(v0.V2D(), v1.V2S(), v2.S(), 0),
2376b8021494Sopenharmony_ci                "smlal v0.2d, v1.2s, v2.s[0]");
2377b8021494Sopenharmony_ci  COMPARE_MACRO(Smlal2(v2.V2D(), v3.V4S(), v4.S(), 3),
2378b8021494Sopenharmony_ci                "smlal2 v2.2d, v3.4s, v4.s[3]");
2379b8021494Sopenharmony_ci  COMPARE_MACRO(Smlal(v11.V2D(), v17.V2S(), v31.S(), 1),
2380b8021494Sopenharmony_ci                "smlal v11.2d, v17.2s, v31.s[1]");
2381b8021494Sopenharmony_ci
2382b8021494Sopenharmony_ci  COMPARE_MACRO(Umlal(v0.V4S(), v1.V4H(), v2.H(), 0),
2383b8021494Sopenharmony_ci                "umlal v0.4s, v1.4h, v2.h[0]");
2384b8021494Sopenharmony_ci  COMPARE_MACRO(Umlal2(v2.V4S(), v3.V8H(), v4.H(), 7),
2385b8021494Sopenharmony_ci                "umlal2 v2.4s, v3.8h, v4.h[7]");
2386b8021494Sopenharmony_ci  COMPARE_MACRO(Umlal(v0.V2D(), v1.V2S(), v2.S(), 0),
2387b8021494Sopenharmony_ci                "umlal v0.2d, v1.2s, v2.s[0]");
2388b8021494Sopenharmony_ci  COMPARE_MACRO(Umlal2(v2.V2D(), v3.V4S(), v4.S(), 3),
2389b8021494Sopenharmony_ci                "umlal2 v2.2d, v3.4s, v4.s[3]");
2390b8021494Sopenharmony_ci  COMPARE_MACRO(Umlal(v11.V2D(), v17.V2S(), v31.S(), 1),
2391b8021494Sopenharmony_ci                "umlal v11.2d, v17.2s, v31.s[1]");
2392b8021494Sopenharmony_ci
2393b8021494Sopenharmony_ci  COMPARE_MACRO(Smlsl(v0.V4S(), v1.V4H(), v2.H(), 0),
2394b8021494Sopenharmony_ci                "smlsl v0.4s, v1.4h, v2.h[0]");
2395b8021494Sopenharmony_ci  COMPARE_MACRO(Smlsl2(v2.V4S(), v3.V8H(), v4.H(), 7),
2396b8021494Sopenharmony_ci                "smlsl2 v2.4s, v3.8h, v4.h[7]");
2397b8021494Sopenharmony_ci  COMPARE_MACRO(Smlsl(v0.V2D(), v1.V2S(), v2.S(), 0),
2398b8021494Sopenharmony_ci                "smlsl v0.2d, v1.2s, v2.s[0]");
2399b8021494Sopenharmony_ci  COMPARE_MACRO(Smlsl2(v2.V2D(), v3.V4S(), v4.S(), 3),
2400b8021494Sopenharmony_ci                "smlsl2 v2.2d, v3.4s, v4.s[3]");
2401b8021494Sopenharmony_ci  COMPARE_MACRO(Smlsl(v11.V2D(), v17.V2S(), v31.S(), 1),
2402b8021494Sopenharmony_ci                "smlsl v11.2d, v17.2s, v31.s[1]");
2403b8021494Sopenharmony_ci
2404b8021494Sopenharmony_ci  COMPARE_MACRO(Umlsl(v0.V4S(), v1.V4H(), v2.H(), 0),
2405b8021494Sopenharmony_ci                "umlsl v0.4s, v1.4h, v2.h[0]");
2406b8021494Sopenharmony_ci  COMPARE_MACRO(Umlsl2(v2.V4S(), v3.V8H(), v4.H(), 7),
2407b8021494Sopenharmony_ci                "umlsl2 v2.4s, v3.8h, v4.h[7]");
2408b8021494Sopenharmony_ci  COMPARE_MACRO(Umlsl(v0.V2D(), v1.V2S(), v2.S(), 0),
2409b8021494Sopenharmony_ci                "umlsl v0.2d, v1.2s, v2.s[0]");
2410b8021494Sopenharmony_ci  COMPARE_MACRO(Umlsl2(v2.V2D(), v3.V4S(), v4.S(), 3),
2411b8021494Sopenharmony_ci                "umlsl2 v2.2d, v3.4s, v4.s[3]");
2412b8021494Sopenharmony_ci  COMPARE_MACRO(Umlsl(v11.V2D(), v17.V2S(), v31.S(), 1),
2413b8021494Sopenharmony_ci                "umlsl v11.2d, v17.2s, v31.s[1]");
2414b8021494Sopenharmony_ci
2415b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull(v0.V4S(), v1.V4H(), v2.H(), 0),
2416b8021494Sopenharmony_ci                "sqdmull v0.4s, v1.4h, v2.h[0]");
2417b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull2(v2.V4S(), v3.V8H(), v4.H(), 7),
2418b8021494Sopenharmony_ci                "sqdmull2 v2.4s, v3.8h, v4.h[7]");
2419b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull(v0.V2D(), v1.V2S(), v2.S(), 0),
2420b8021494Sopenharmony_ci                "sqdmull v0.2d, v1.2s, v2.s[0]");
2421b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull2(v2.V2D(), v3.V4S(), v4.S(), 3),
2422b8021494Sopenharmony_ci                "sqdmull2 v2.2d, v3.4s, v4.s[3]");
2423b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull(v11.V2D(), v17.V2S(), v31.S(), 1),
2424b8021494Sopenharmony_ci                "sqdmull v11.2d, v17.2s, v31.s[1]");
2425b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull(s0, h1, v2.H(), 0), "sqdmull s0, h1, v2.h[0]");
2426b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull(d0, s1, v2.S(), 0), "sqdmull d0, s1, v2.s[0]");
2427b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull(d0, s1, v31.S(), 0), "sqdmull d0, s1, v31.s[0]");
2428b8021494Sopenharmony_ci
2429b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal(v0.V4S(), v1.V4H(), v2.H(), 0),
2430b8021494Sopenharmony_ci                "sqdmlal v0.4s, v1.4h, v2.h[0]");
2431b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal2(v2.V4S(), v3.V8H(), v4.H(), 7),
2432b8021494Sopenharmony_ci                "sqdmlal2 v2.4s, v3.8h, v4.h[7]");
2433b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal(v0.V2D(), v1.V2S(), v2.S(), 0),
2434b8021494Sopenharmony_ci                "sqdmlal v0.2d, v1.2s, v2.s[0]");
2435b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal2(v2.V2D(), v3.V4S(), v4.S(), 3),
2436b8021494Sopenharmony_ci                "sqdmlal2 v2.2d, v3.4s, v4.s[3]");
2437b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal(v11.V2D(), v17.V2S(), v31.S(), 1),
2438b8021494Sopenharmony_ci                "sqdmlal v11.2d, v17.2s, v31.s[1]");
2439b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal(s0, h1, v2.H(), 0), "sqdmlal s0, h1, v2.h[0]");
2440b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal(d0, s1, v2.S(), 0), "sqdmlal d0, s1, v2.s[0]");
2441b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal(d0, s1, v31.S(), 0), "sqdmlal d0, s1, v31.s[0]");
2442b8021494Sopenharmony_ci
2443b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl(v0.V4S(), v1.V4H(), v2.H(), 0),
2444b8021494Sopenharmony_ci                "sqdmlsl v0.4s, v1.4h, v2.h[0]");
2445b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl2(v2.V4S(), v3.V8H(), v4.H(), 7),
2446b8021494Sopenharmony_ci                "sqdmlsl2 v2.4s, v3.8h, v4.h[7]");
2447b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl(v0.V2D(), v1.V2S(), v2.S(), 0),
2448b8021494Sopenharmony_ci                "sqdmlsl v0.2d, v1.2s, v2.s[0]");
2449b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl2(v2.V2D(), v3.V4S(), v4.S(), 3),
2450b8021494Sopenharmony_ci                "sqdmlsl2 v2.2d, v3.4s, v4.s[3]");
2451b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl(v11.V2D(), v17.V2S(), v31.S(), 1),
2452b8021494Sopenharmony_ci                "sqdmlsl v11.2d, v17.2s, v31.s[1]");
2453b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl(s0, h1, v2.H(), 0), "sqdmlsl s0, h1, v2.h[0]");
2454b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl(d0, s1, v2.S(), 0), "sqdmlsl d0, s1, v2.s[0]");
2455b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl(d0, s1, v31.S(), 0), "sqdmlsl d0, s1, v31.s[0]");
2456b8021494Sopenharmony_ci
2457b8021494Sopenharmony_ci  // FMLAL and so on are special cases in that the {2} variants operate
2458b8021494Sopenharmony_ci  // independently from the lane count.
2459b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlal(v5.V2S(), v12.V2H(), v6.H(), 7),
2460b8021494Sopenharmony_ci                "fmlal v5.2s, v12.2h, v6.h[7]");
2461b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlal2(v14.V2S(), v10.V2H(), v9.H(), 6),
2462b8021494Sopenharmony_ci                "fmlal2 v14.2s, v10.2h, v9.h[6]");
2463b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlsl(v31.V2S(), v9.V2H(), v15.H(), 5),
2464b8021494Sopenharmony_ci                "fmlsl v31.2s, v9.2h, v15.h[5]");
2465b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlsl2(v21.V2S(), v22.V2H(), v2.H(), 4),
2466b8021494Sopenharmony_ci                "fmlsl2 v21.2s, v22.2h, v2.h[4]");
2467b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlal(v26.V4S(), v26.V4H(), v0.H(), 3),
2468b8021494Sopenharmony_ci                "fmlal v26.4s, v26.4h, v0.h[3]");
2469b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlal2(v15.V4S(), v18.V4H(), v15.H(), 2),
2470b8021494Sopenharmony_ci                "fmlal2 v15.4s, v18.4h, v15.h[2]");
2471b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlsl(v9.V4S(), v4.V4H(), v3.H(), 1),
2472b8021494Sopenharmony_ci                "fmlsl v9.4s, v4.4h, v3.h[1]");
2473b8021494Sopenharmony_ci  COMPARE_MACRO(Fmlsl2(v28.V4S(), v28.V4H(), v7.H(), 0),
2474b8021494Sopenharmony_ci                "fmlsl2 v28.4s, v28.4h, v7.h[0]");
2475b8021494Sopenharmony_ci
2476b8021494Sopenharmony_ci  COMPARE_MACRO(Sudot(v10.V2S(), v21.V8B(), v31.S4B(), 0),
2477b8021494Sopenharmony_ci                "sudot v10.2s, v21.8b, v31.4b[0]");
2478b8021494Sopenharmony_ci  COMPARE_MACRO(Sudot(v12.V4S(), v23.V16B(), v16.S4B(), 3),
2479b8021494Sopenharmony_ci                "sudot v12.4s, v23.16b, v16.4b[3]");
2480b8021494Sopenharmony_ci  COMPARE_MACRO(Sudot(v11.V2S(), v17.V8B(), v31.S4B(), 1),
2481b8021494Sopenharmony_ci                "sudot v11.2s, v17.8b, v31.4b[1]");
2482b8021494Sopenharmony_ci  COMPARE_MACRO(Usdot(v10.V2S(), v21.V8B(), v31.S4B(), 0),
2483b8021494Sopenharmony_ci                "usdot v10.2s, v21.8b, v31.4b[0]");
2484b8021494Sopenharmony_ci  COMPARE_MACRO(Usdot(v12.V4S(), v23.V16B(), v16.S4B(), 3),
2485b8021494Sopenharmony_ci                "usdot v12.4s, v23.16b, v16.4b[3]");
2486b8021494Sopenharmony_ci  COMPARE_MACRO(Usdot(v11.V2S(), v17.V8B(), v31.S4B(), 1),
2487b8021494Sopenharmony_ci                "usdot v11.2s, v17.8b, v31.4b[1]");
2488b8021494Sopenharmony_ci
2489b8021494Sopenharmony_ci  CLEANUP();
2490b8021494Sopenharmony_ci}
2491b8021494Sopenharmony_ci
2492b8021494Sopenharmony_ci
2493b8021494Sopenharmony_ciTEST(neon_fp_byelement) {
2494b8021494Sopenharmony_ci  SETUP();
2495b8021494Sopenharmony_ci
2496b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(v0.V4H(), v1.V4H(), v2.H(), 0),
2497b8021494Sopenharmony_ci                "fmul v0.4h, v1.4h, v2.h[0]");
2498b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(v2.V8H(), v3.V8H(), v15.H(), 7),
2499b8021494Sopenharmony_ci                "fmul v2.8h, v3.8h, v15.h[7]");
2500b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(v0.V2S(), v1.V2S(), v2.S(), 0),
2501b8021494Sopenharmony_ci                "fmul v0.2s, v1.2s, v2.s[0]");
2502b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(v2.V4S(), v3.V4S(), v15.S(), 3),
2503b8021494Sopenharmony_ci                "fmul v2.4s, v3.4s, v15.s[3]");
2504b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(v2.V4S(), v3.V4S(), v31.S(), 3),
2505b8021494Sopenharmony_ci                "fmul v2.4s, v3.4s, v31.s[3]");
2506b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(v0.V2D(), v1.V2D(), v2.D(), 0),
2507b8021494Sopenharmony_ci                "fmul v0.2d, v1.2d, v2.d[0]");
2508b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(v0.V2D(), v1.V2D(), v2.D(), 1),
2509b8021494Sopenharmony_ci                "fmul v0.2d, v1.2d, v2.d[1]");
2510b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(v0.V2D(), v1.V2D(), v31.D(), 1),
2511b8021494Sopenharmony_ci                "fmul v0.2d, v1.2d, v31.d[1]");
2512b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(h0, h1, v2.H(), 0), "fmul h0, h1, v2.h[0]");
2513b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(s0, s1, v2.S(), 0), "fmul s0, s1, v2.s[0]");
2514b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(s0, s1, v31.S(), 0), "fmul s0, s1, v31.s[0]");
2515b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(d0, d1, v2.D(), 0), "fmul d0, d1, v2.d[0]");
2516b8021494Sopenharmony_ci  COMPARE_MACRO(Fmul(d0, d1, v31.D(), 0), "fmul d0, d1, v31.d[0]");
2517b8021494Sopenharmony_ci
2518b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(v0.V4H(), v1.V4H(), v2.H(), 0),
2519b8021494Sopenharmony_ci                "fmla v0.4h, v1.4h, v2.h[0]");
2520b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(v2.V8H(), v3.V8H(), v15.H(), 7),
2521b8021494Sopenharmony_ci                "fmla v2.8h, v3.8h, v15.h[7]");
2522b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(v0.V2S(), v1.V2S(), v2.S(), 0),
2523b8021494Sopenharmony_ci                "fmla v0.2s, v1.2s, v2.s[0]");
2524b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(v2.V4S(), v3.V4S(), v15.S(), 3),
2525b8021494Sopenharmony_ci                "fmla v2.4s, v3.4s, v15.s[3]");
2526b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(v2.V4S(), v3.V4S(), v31.S(), 3),
2527b8021494Sopenharmony_ci                "fmla v2.4s, v3.4s, v31.s[3]");
2528b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(v0.V2D(), v1.V2D(), v2.D(), 0),
2529b8021494Sopenharmony_ci                "fmla v0.2d, v1.2d, v2.d[0]");
2530b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(v0.V2D(), v1.V2D(), v15.D(), 1),
2531b8021494Sopenharmony_ci                "fmla v0.2d, v1.2d, v15.d[1]");
2532b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(v0.V2D(), v1.V2D(), v31.D(), 1),
2533b8021494Sopenharmony_ci                "fmla v0.2d, v1.2d, v31.d[1]");
2534b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(h0, h1, v2.H(), 0), "fmla h0, h1, v2.h[0]");
2535b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(s0, s1, v2.S(), 0), "fmla s0, s1, v2.s[0]");
2536b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(s0, s1, v31.S(), 0), "fmla s0, s1, v31.s[0]");
2537b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(d0, d1, v2.D(), 0), "fmla d0, d1, v2.d[0]");
2538b8021494Sopenharmony_ci  COMPARE_MACRO(Fmla(d0, d1, v31.D(), 0), "fmla d0, d1, v31.d[0]");
2539b8021494Sopenharmony_ci
2540b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(v0.V4H(), v1.V4H(), v2.H(), 0),
2541b8021494Sopenharmony_ci                "fmls v0.4h, v1.4h, v2.h[0]");
2542b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(v2.V8H(), v3.V8H(), v15.H(), 7),
2543b8021494Sopenharmony_ci                "fmls v2.8h, v3.8h, v15.h[7]");
2544b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(v0.V2S(), v1.V2S(), v2.S(), 0),
2545b8021494Sopenharmony_ci                "fmls v0.2s, v1.2s, v2.s[0]");
2546b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(v2.V4S(), v3.V4S(), v15.S(), 3),
2547b8021494Sopenharmony_ci                "fmls v2.4s, v3.4s, v15.s[3]");
2548b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(v2.V4S(), v3.V4S(), v31.S(), 3),
2549b8021494Sopenharmony_ci                "fmls v2.4s, v3.4s, v31.s[3]");
2550b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(v0.V2D(), v1.V2D(), v2.D(), 0),
2551b8021494Sopenharmony_ci                "fmls v0.2d, v1.2d, v2.d[0]");
2552b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(v0.V2D(), v1.V2D(), v15.D(), 1),
2553b8021494Sopenharmony_ci                "fmls v0.2d, v1.2d, v15.d[1]");
2554b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(v0.V2D(), v1.V2D(), v31.D(), 1),
2555b8021494Sopenharmony_ci                "fmls v0.2d, v1.2d, v31.d[1]");
2556b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(h0, h1, v2.H(), 0), "fmls h0, h1, v2.h[0]");
2557b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(s0, s1, v2.S(), 0), "fmls s0, s1, v2.s[0]");
2558b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(s0, s1, v31.S(), 0), "fmls s0, s1, v31.s[0]");
2559b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(d0, d1, v2.D(), 0), "fmls d0, d1, v2.d[0]");
2560b8021494Sopenharmony_ci  COMPARE_MACRO(Fmls(d0, d1, v31.D(), 0), "fmls d0, d1, v31.d[0]");
2561b8021494Sopenharmony_ci
2562b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v0.V4H(), v1.V4H(), v2.H(), 0),
2563b8021494Sopenharmony_ci                "fmulx v0.4h, v1.4h, v2.h[0]");
2564b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v2.V8H(), v3.V8H(), v15.H(), 7),
2565b8021494Sopenharmony_ci                "fmulx v2.8h, v3.8h, v15.h[7]");
2566b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v0.V2S(), v1.V2S(), v2.S(), 0),
2567b8021494Sopenharmony_ci                "fmulx v0.2s, v1.2s, v2.s[0]");
2568b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v2.V4S(), v3.V4S(), v8.S(), 3),
2569b8021494Sopenharmony_ci                "fmulx v2.4s, v3.4s, v8.s[3]");
2570b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v2.V4S(), v3.V4S(), v31.S(), 3),
2571b8021494Sopenharmony_ci                "fmulx v2.4s, v3.4s, v31.s[3]");
2572b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v0.V2D(), v1.V2D(), v2.D(), 0),
2573b8021494Sopenharmony_ci                "fmulx v0.2d, v1.2d, v2.d[0]");
2574b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v0.V2D(), v1.V2D(), v15.D(), 1),
2575b8021494Sopenharmony_ci                "fmulx v0.2d, v1.2d, v15.d[1]");
2576b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(v0.V2D(), v1.V2D(), v31.D(), 1),
2577b8021494Sopenharmony_ci                "fmulx v0.2d, v1.2d, v31.d[1]");
2578b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(h0, h1, v2.H(), 0), "fmulx h0, h1, v2.h[0]");
2579b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(s0, s1, v2.S(), 0), "fmulx s0, s1, v2.s[0]");
2580b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(s0, s1, v31.S(), 0), "fmulx s0, s1, v31.s[0]");
2581b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(d0, d1, v2.D(), 0), "fmulx d0, d1, v2.d[0]");
2582b8021494Sopenharmony_ci  COMPARE_MACRO(Fmulx(d0, d1, v31.D(), 0), "fmulx d0, d1, v31.d[0]");
2583b8021494Sopenharmony_ci
2584b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmla(v0.V4S(), v1.V4S(), v2.S(), 0, 270),
2585b8021494Sopenharmony_ci                "fcmla v0.4s, v1.4s, v2.s[0], #270");
2586b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmla(v0.V4S(), v1.V4S(), v2.S(), 1, 180),
2587b8021494Sopenharmony_ci                "fcmla v0.4s, v1.4s, v2.s[1], #180");
2588b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmla(v0.V4S(), v1.V4S(), v31.S(), 1, 180),
2589b8021494Sopenharmony_ci                "fcmla v0.4s, v1.4s, v31.s[1], #180");
2590b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmla(v0.V4H(), v1.V4H(), v2.H(), 2, 90),
2591b8021494Sopenharmony_ci                "fcmla v0.4h, v1.4h, v2.h[2], #90");
2592b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmla(v0.V8H(), v1.V8H(), v2.H(), 3, 0),
2593b8021494Sopenharmony_ci                "fcmla v0.8h, v1.8h, v2.h[3], #0");
2594b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmla(v0.V8H(), v1.V8H(), v31.H(), 3, 0),
2595b8021494Sopenharmony_ci                "fcmla v0.8h, v1.8h, v31.h[3], #0");
2596b8021494Sopenharmony_ci
2597b8021494Sopenharmony_ci  CLEANUP();
2598b8021494Sopenharmony_ci}
2599b8021494Sopenharmony_ci
2600b8021494Sopenharmony_ci
2601b8021494Sopenharmony_ciTEST(neon_3different) {
2602b8021494Sopenharmony_ci  SETUP();
2603b8021494Sopenharmony_ci
2604b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2605b8021494Sopenharmony_ci  COMPARE_MACRO(Uaddl(v0.TA, v1.TB, v2.TB), \
2606b8021494Sopenharmony_ci                "uaddl v0." TAS ", v1." TBS ", v2." TBS);
2607b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2608b8021494Sopenharmony_ci#undef DISASM_INST
2609b8021494Sopenharmony_ci
2610b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2611b8021494Sopenharmony_ci  COMPARE_MACRO(Uaddl2(v0.TA, v1.TB, v2.TB), \
2612b8021494Sopenharmony_ci                "uaddl2 v0." TAS ", v1." TBS ", v2." TBS);
2613b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2614b8021494Sopenharmony_ci#undef DISASM_INST
2615b8021494Sopenharmony_ci
2616b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2617b8021494Sopenharmony_ci  COMPARE_MACRO(Uaddw(v0.TA, v1.TA, v2.TB), \
2618b8021494Sopenharmony_ci                "uaddw v0." TAS ", v1." TAS ", v2." TBS);
2619b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2620b8021494Sopenharmony_ci#undef DISASM_INST
2621b8021494Sopenharmony_ci
2622b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2623b8021494Sopenharmony_ci  COMPARE_MACRO(Uaddw2(v0.TA, v1.TA, v2.TB), \
2624b8021494Sopenharmony_ci                "uaddw2 v0." TAS ", v1." TAS ", v2." TBS);
2625b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2626b8021494Sopenharmony_ci#undef DISASM_INST
2627b8021494Sopenharmony_ci
2628b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2629b8021494Sopenharmony_ci  COMPARE_MACRO(Saddl(v0.TA, v1.TB, v2.TB), \
2630b8021494Sopenharmony_ci                "saddl v0." TAS ", v1." TBS ", v2." TBS);
2631b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2632b8021494Sopenharmony_ci#undef DISASM_INST
2633b8021494Sopenharmony_ci
2634b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2635b8021494Sopenharmony_ci  COMPARE_MACRO(Saddl2(v0.TA, v1.TB, v2.TB), \
2636b8021494Sopenharmony_ci                "saddl2 v0." TAS ", v1." TBS ", v2." TBS);
2637b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2638b8021494Sopenharmony_ci#undef DISASM_INST
2639b8021494Sopenharmony_ci
2640b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2641b8021494Sopenharmony_ci  COMPARE_MACRO(Saddw(v0.TA, v1.TA, v2.TB), \
2642b8021494Sopenharmony_ci                "saddw v0." TAS ", v1." TAS ", v2." TBS);
2643b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2644b8021494Sopenharmony_ci#undef DISASM_INST
2645b8021494Sopenharmony_ci
2646b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2647b8021494Sopenharmony_ci  COMPARE_MACRO(Saddw2(v0.TA, v1.TA, v2.TB), \
2648b8021494Sopenharmony_ci                "saddw2 v0." TAS ", v1." TAS ", v2." TBS);
2649b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2650b8021494Sopenharmony_ci#undef DISASM_INST
2651b8021494Sopenharmony_ci
2652b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2653b8021494Sopenharmony_ci  COMPARE_MACRO(Usubl(v0.TA, v1.TB, v2.TB), \
2654b8021494Sopenharmony_ci                "usubl v0." TAS ", v1." TBS ", v2." TBS);
2655b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2656b8021494Sopenharmony_ci#undef DISASM_INST
2657b8021494Sopenharmony_ci
2658b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2659b8021494Sopenharmony_ci  COMPARE_MACRO(Usubl2(v0.TA, v1.TB, v2.TB), \
2660b8021494Sopenharmony_ci                "usubl2 v0." TAS ", v1." TBS ", v2." TBS);
2661b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2662b8021494Sopenharmony_ci#undef DISASM_INST
2663b8021494Sopenharmony_ci
2664b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2665b8021494Sopenharmony_ci  COMPARE_MACRO(Usubw(v0.TA, v1.TA, v2.TB), \
2666b8021494Sopenharmony_ci                "usubw v0." TAS ", v1." TAS ", v2." TBS);
2667b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2668b8021494Sopenharmony_ci#undef DISASM_INST
2669b8021494Sopenharmony_ci
2670b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2671b8021494Sopenharmony_ci  COMPARE_MACRO(Usubw2(v0.TA, v1.TA, v2.TB), \
2672b8021494Sopenharmony_ci                "usubw2 v0." TAS ", v1." TAS ", v2." TBS);
2673b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2674b8021494Sopenharmony_ci#undef DISASM_INST
2675b8021494Sopenharmony_ci
2676b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2677b8021494Sopenharmony_ci  COMPARE_MACRO(Ssubl(v0.TA, v1.TB, v2.TB), \
2678b8021494Sopenharmony_ci                "ssubl v0." TAS ", v1." TBS ", v2." TBS);
2679b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2680b8021494Sopenharmony_ci#undef DISASM_INST
2681b8021494Sopenharmony_ci
2682b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2683b8021494Sopenharmony_ci  COMPARE_MACRO(Ssubl2(v0.TA, v1.TB, v2.TB), \
2684b8021494Sopenharmony_ci                "ssubl2 v0." TAS ", v1." TBS ", v2." TBS);
2685b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2686b8021494Sopenharmony_ci#undef DISASM_INST
2687b8021494Sopenharmony_ci
2688b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2689b8021494Sopenharmony_ci  COMPARE_MACRO(Ssubw(v0.TA, v1.TA, v2.TB), \
2690b8021494Sopenharmony_ci                "ssubw v0." TAS ", v1." TAS ", v2." TBS);
2691b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2692b8021494Sopenharmony_ci#undef DISASM_INST
2693b8021494Sopenharmony_ci
2694b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2695b8021494Sopenharmony_ci  COMPARE_MACRO(Ssubw2(v0.TA, v1.TA, v2.TB), \
2696b8021494Sopenharmony_ci                "ssubw2 v0." TAS ", v1." TAS ", v2." TBS);
2697b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2698b8021494Sopenharmony_ci#undef DISASM_INST
2699b8021494Sopenharmony_ci
2700b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2701b8021494Sopenharmony_ci  COMPARE_MACRO(Sabal(v0.TA, v1.TB, v2.TB), \
2702b8021494Sopenharmony_ci                "sabal v0." TAS ", v1." TBS ", v2." TBS);
2703b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2704b8021494Sopenharmony_ci#undef DISASM_INST
2705b8021494Sopenharmony_ci
2706b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2707b8021494Sopenharmony_ci  COMPARE_MACRO(Sabal2(v0.TA, v1.TB, v2.TB), \
2708b8021494Sopenharmony_ci                "sabal2 v0." TAS ", v1." TBS ", v2." TBS);
2709b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2710b8021494Sopenharmony_ci#undef DISASM_INST
2711b8021494Sopenharmony_ci
2712b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2713b8021494Sopenharmony_ci  COMPARE_MACRO(Uabal(v0.TA, v1.TB, v2.TB), \
2714b8021494Sopenharmony_ci                "uabal v0." TAS ", v1." TBS ", v2." TBS);
2715b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2716b8021494Sopenharmony_ci#undef DISASM_INST
2717b8021494Sopenharmony_ci
2718b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2719b8021494Sopenharmony_ci  COMPARE_MACRO(Uabal2(v0.TA, v1.TB, v2.TB), \
2720b8021494Sopenharmony_ci                "uabal2 v0." TAS ", v1." TBS ", v2." TBS);
2721b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2722b8021494Sopenharmony_ci#undef DISASM_INST
2723b8021494Sopenharmony_ci
2724b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2725b8021494Sopenharmony_ci  COMPARE_MACRO(Sabdl(v0.TA, v1.TB, v2.TB), \
2726b8021494Sopenharmony_ci                "sabdl v0." TAS ", v1." TBS ", v2." TBS);
2727b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2728b8021494Sopenharmony_ci#undef DISASM_INST
2729b8021494Sopenharmony_ci
2730b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2731b8021494Sopenharmony_ci  COMPARE_MACRO(Sabdl2(v0.TA, v1.TB, v2.TB), \
2732b8021494Sopenharmony_ci                "sabdl2 v0." TAS ", v1." TBS ", v2." TBS);
2733b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2734b8021494Sopenharmony_ci#undef DISASM_INST
2735b8021494Sopenharmony_ci
2736b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2737b8021494Sopenharmony_ci  COMPARE_MACRO(Uabdl(v0.TA, v1.TB, v2.TB), \
2738b8021494Sopenharmony_ci                "uabdl v0." TAS ", v1." TBS ", v2." TBS);
2739b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2740b8021494Sopenharmony_ci#undef DISASM_INST
2741b8021494Sopenharmony_ci
2742b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2743b8021494Sopenharmony_ci  COMPARE_MACRO(Uabdl2(v0.TA, v1.TB, v2.TB), \
2744b8021494Sopenharmony_ci                "uabdl2 v0." TAS ", v1." TBS ", v2." TBS);
2745b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2746b8021494Sopenharmony_ci#undef DISASM_INST
2747b8021494Sopenharmony_ci
2748b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2749b8021494Sopenharmony_ci  COMPARE_MACRO(Smlal(v0.TA, v1.TB, v2.TB), \
2750b8021494Sopenharmony_ci                "smlal v0." TAS ", v1." TBS ", v2." TBS);
2751b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2752b8021494Sopenharmony_ci#undef DISASM_INST
2753b8021494Sopenharmony_ci
2754b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2755b8021494Sopenharmony_ci  COMPARE_MACRO(Smlal2(v0.TA, v1.TB, v2.TB), \
2756b8021494Sopenharmony_ci                "smlal2 v0." TAS ", v1." TBS ", v2." TBS);
2757b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2758b8021494Sopenharmony_ci#undef DISASM_INST
2759b8021494Sopenharmony_ci
2760b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2761b8021494Sopenharmony_ci  COMPARE_MACRO(Umlsl(v0.TA, v1.TB, v2.TB), \
2762b8021494Sopenharmony_ci                "umlsl v0." TAS ", v1." TBS ", v2." TBS);
2763b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2764b8021494Sopenharmony_ci#undef DISASM_INST
2765b8021494Sopenharmony_ci
2766b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2767b8021494Sopenharmony_ci  COMPARE_MACRO(Umlsl2(v0.TA, v1.TB, v2.TB), \
2768b8021494Sopenharmony_ci                "umlsl2 v0." TAS ", v1." TBS ", v2." TBS);
2769b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2770b8021494Sopenharmony_ci#undef DISASM_INST
2771b8021494Sopenharmony_ci
2772b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2773b8021494Sopenharmony_ci  COMPARE_MACRO(Smlsl(v0.TA, v1.TB, v2.TB), \
2774b8021494Sopenharmony_ci                "smlsl v0." TAS ", v1." TBS ", v2." TBS);
2775b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2776b8021494Sopenharmony_ci#undef DISASM_INST
2777b8021494Sopenharmony_ci
2778b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2779b8021494Sopenharmony_ci  COMPARE_MACRO(Smlsl2(v0.TA, v1.TB, v2.TB), \
2780b8021494Sopenharmony_ci                "smlsl2 v0." TAS ", v1." TBS ", v2." TBS);
2781b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2782b8021494Sopenharmony_ci#undef DISASM_INST
2783b8021494Sopenharmony_ci
2784b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2785b8021494Sopenharmony_ci  COMPARE_MACRO(Umlsl(v0.TA, v1.TB, v2.TB), \
2786b8021494Sopenharmony_ci                "umlsl v0." TAS ", v1." TBS ", v2." TBS);
2787b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2788b8021494Sopenharmony_ci#undef DISASM_INST
2789b8021494Sopenharmony_ci
2790b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2791b8021494Sopenharmony_ci  COMPARE_MACRO(Umlsl2(v0.TA, v1.TB, v2.TB), \
2792b8021494Sopenharmony_ci                "umlsl2 v0." TAS ", v1." TBS ", v2." TBS);
2793b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2794b8021494Sopenharmony_ci#undef DISASM_INST
2795b8021494Sopenharmony_ci
2796b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2797b8021494Sopenharmony_ci  COMPARE_MACRO(Smull(v0.TA, v1.TB, v2.TB), \
2798b8021494Sopenharmony_ci                "smull v0." TAS ", v1." TBS ", v2." TBS);
2799b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2800b8021494Sopenharmony_ci#undef DISASM_INST
2801b8021494Sopenharmony_ci
2802b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2803b8021494Sopenharmony_ci  COMPARE_MACRO(Smull2(v0.TA, v1.TB, v2.TB), \
2804b8021494Sopenharmony_ci                "smull2 v0." TAS ", v1." TBS ", v2." TBS);
2805b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2806b8021494Sopenharmony_ci#undef DISASM_INST
2807b8021494Sopenharmony_ci
2808b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)       \
2809b8021494Sopenharmony_ci  COMPARE_MACRO(Umull(v0.TA, v1.TB, v2.TB), \
2810b8021494Sopenharmony_ci                "umull v0." TAS ", v1." TBS ", v2." TBS);
2811b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW(DISASM_INST)
2812b8021494Sopenharmony_ci#undef DISASM_INST
2813b8021494Sopenharmony_ci
2814b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS)        \
2815b8021494Sopenharmony_ci  COMPARE_MACRO(Umull2(v0.TA, v1.TB, v2.TB), \
2816b8021494Sopenharmony_ci                "umull2 v0." TAS ", v1." TBS ", v2." TBS);
2817b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LW2(DISASM_INST)
2818b8021494Sopenharmony_ci#undef DISASM_INST
2819b8021494Sopenharmony_ci
2820b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull(v0.V4S(), v1.V4H(), v2.V4H()),
2821b8021494Sopenharmony_ci                "sqdmull v0.4s, v1.4h, v2.4h");
2822b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull(v1.V2D(), v2.V2S(), v3.V2S()),
2823b8021494Sopenharmony_ci                "sqdmull v1.2d, v2.2s, v3.2s");
2824b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull2(v2.V4S(), v3.V8H(), v4.V8H()),
2825b8021494Sopenharmony_ci                "sqdmull2 v2.4s, v3.8h, v4.8h");
2826b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull2(v3.V2D(), v4.V4S(), v5.V4S()),
2827b8021494Sopenharmony_ci                "sqdmull2 v3.2d, v4.4s, v5.4s");
2828b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull(s0, h1, h2), "sqdmull s0, h1, h2");
2829b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmull(d1, s2, s3), "sqdmull d1, s2, s3");
2830b8021494Sopenharmony_ci
2831b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal(v0.V4S(), v1.V4H(), v2.V4H()),
2832b8021494Sopenharmony_ci                "sqdmlal v0.4s, v1.4h, v2.4h");
2833b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal(v1.V2D(), v2.V2S(), v3.V2S()),
2834b8021494Sopenharmony_ci                "sqdmlal v1.2d, v2.2s, v3.2s");
2835b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal2(v2.V4S(), v3.V8H(), v4.V8H()),
2836b8021494Sopenharmony_ci                "sqdmlal2 v2.4s, v3.8h, v4.8h");
2837b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal2(v3.V2D(), v4.V4S(), v5.V4S()),
2838b8021494Sopenharmony_ci                "sqdmlal2 v3.2d, v4.4s, v5.4s");
2839b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal(s0, h1, h2), "sqdmlal s0, h1, h2");
2840b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlal(d1, s2, s3), "sqdmlal d1, s2, s3");
2841b8021494Sopenharmony_ci
2842b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl(v0.V4S(), v1.V4H(), v2.V4H()),
2843b8021494Sopenharmony_ci                "sqdmlsl v0.4s, v1.4h, v2.4h");
2844b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl(v1.V2D(), v2.V2S(), v3.V2S()),
2845b8021494Sopenharmony_ci                "sqdmlsl v1.2d, v2.2s, v3.2s");
2846b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl2(v2.V4S(), v3.V8H(), v4.V8H()),
2847b8021494Sopenharmony_ci                "sqdmlsl2 v2.4s, v3.8h, v4.8h");
2848b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl2(v3.V2D(), v4.V4S(), v5.V4S()),
2849b8021494Sopenharmony_ci                "sqdmlsl2 v3.2d, v4.4s, v5.4s");
2850b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl(s0, h1, h2), "sqdmlsl s0, h1, h2");
2851b8021494Sopenharmony_ci  COMPARE_MACRO(Sqdmlsl(d1, s2, s3), "sqdmlsl d1, s2, s3");
2852b8021494Sopenharmony_ci
2853b8021494Sopenharmony_ci  COMPARE_MACRO(Addhn(v0.V8B(), v1.V8H(), v2.V8H()),
2854b8021494Sopenharmony_ci                "addhn v0.8b, v1.8h, v2.8h");
2855b8021494Sopenharmony_ci  COMPARE_MACRO(Addhn(v1.V4H(), v2.V4S(), v3.V4S()),
2856b8021494Sopenharmony_ci                "addhn v1.4h, v2.4s, v3.4s");
2857b8021494Sopenharmony_ci  COMPARE_MACRO(Addhn(v2.V2S(), v3.V2D(), v4.V2D()),
2858b8021494Sopenharmony_ci                "addhn v2.2s, v3.2d, v4.2d");
2859b8021494Sopenharmony_ci  COMPARE_MACRO(Addhn2(v0.V16B(), v1.V8H(), v5.V8H()),
2860b8021494Sopenharmony_ci                "addhn2 v0.16b, v1.8h, v5.8h");
2861b8021494Sopenharmony_ci  COMPARE_MACRO(Addhn2(v1.V8H(), v2.V4S(), v6.V4S()),
2862b8021494Sopenharmony_ci                "addhn2 v1.8h, v2.4s, v6.4s");
2863b8021494Sopenharmony_ci  COMPARE_MACRO(Addhn2(v2.V4S(), v3.V2D(), v7.V2D()),
2864b8021494Sopenharmony_ci                "addhn2 v2.4s, v3.2d, v7.2d");
2865b8021494Sopenharmony_ci
2866b8021494Sopenharmony_ci  COMPARE_MACRO(Raddhn(v0.V8B(), v1.V8H(), v2.V8H()),
2867b8021494Sopenharmony_ci                "raddhn v0.8b, v1.8h, v2.8h");
2868b8021494Sopenharmony_ci  COMPARE_MACRO(Raddhn(v1.V4H(), v2.V4S(), v3.V4S()),
2869b8021494Sopenharmony_ci                "raddhn v1.4h, v2.4s, v3.4s");
2870b8021494Sopenharmony_ci  COMPARE_MACRO(Raddhn(v2.V2S(), v3.V2D(), v4.V2D()),
2871b8021494Sopenharmony_ci                "raddhn v2.2s, v3.2d, v4.2d");
2872b8021494Sopenharmony_ci  COMPARE_MACRO(Raddhn2(v0.V16B(), v1.V8H(), v5.V8H()),
2873b8021494Sopenharmony_ci                "raddhn2 v0.16b, v1.8h, v5.8h");
2874b8021494Sopenharmony_ci  COMPARE_MACRO(Raddhn2(v1.V8H(), v2.V4S(), v6.V4S()),
2875b8021494Sopenharmony_ci                "raddhn2 v1.8h, v2.4s, v6.4s");
2876b8021494Sopenharmony_ci  COMPARE_MACRO(Raddhn2(v2.V4S(), v3.V2D(), v7.V2D()),
2877b8021494Sopenharmony_ci                "raddhn2 v2.4s, v3.2d, v7.2d");
2878b8021494Sopenharmony_ci
2879b8021494Sopenharmony_ci  COMPARE_MACRO(Subhn(v1.V4H(), v2.V4S(), v3.V4S()),
2880b8021494Sopenharmony_ci                "subhn v1.4h, v2.4s, v3.4s");
2881b8021494Sopenharmony_ci  COMPARE_MACRO(Subhn(v2.V2S(), v3.V2D(), v4.V2D()),
2882b8021494Sopenharmony_ci                "subhn v2.2s, v3.2d, v4.2d");
2883b8021494Sopenharmony_ci  COMPARE_MACRO(Subhn2(v0.V16B(), v1.V8H(), v5.V8H()),
2884b8021494Sopenharmony_ci                "subhn2 v0.16b, v1.8h, v5.8h");
2885b8021494Sopenharmony_ci  COMPARE_MACRO(Subhn2(v1.V8H(), v2.V4S(), v6.V4S()),
2886b8021494Sopenharmony_ci                "subhn2 v1.8h, v2.4s, v6.4s");
2887b8021494Sopenharmony_ci  COMPARE_MACRO(Subhn2(v2.V4S(), v3.V2D(), v7.V2D()),
2888b8021494Sopenharmony_ci                "subhn2 v2.4s, v3.2d, v7.2d");
2889b8021494Sopenharmony_ci
2890b8021494Sopenharmony_ci  COMPARE_MACRO(Rsubhn(v0.V8B(), v1.V8H(), v2.V8H()),
2891b8021494Sopenharmony_ci                "rsubhn v0.8b, v1.8h, v2.8h");
2892b8021494Sopenharmony_ci  COMPARE_MACRO(Rsubhn(v1.V4H(), v2.V4S(), v3.V4S()),
2893b8021494Sopenharmony_ci                "rsubhn v1.4h, v2.4s, v3.4s");
2894b8021494Sopenharmony_ci  COMPARE_MACRO(Rsubhn(v2.V2S(), v3.V2D(), v4.V2D()),
2895b8021494Sopenharmony_ci                "rsubhn v2.2s, v3.2d, v4.2d");
2896b8021494Sopenharmony_ci  COMPARE_MACRO(Rsubhn2(v0.V16B(), v1.V8H(), v5.V8H()),
2897b8021494Sopenharmony_ci                "rsubhn2 v0.16b, v1.8h, v5.8h");
2898b8021494Sopenharmony_ci  COMPARE_MACRO(Rsubhn2(v1.V8H(), v2.V4S(), v6.V4S()),
2899b8021494Sopenharmony_ci                "rsubhn2 v1.8h, v2.4s, v6.4s");
2900b8021494Sopenharmony_ci  COMPARE_MACRO(Rsubhn2(v2.V4S(), v3.V2D(), v7.V2D()),
2901b8021494Sopenharmony_ci                "rsubhn2 v2.4s, v3.2d, v7.2d");
2902b8021494Sopenharmony_ci
2903b8021494Sopenharmony_ci  COMPARE_MACRO(Pmull(v0.V8H(), v1.V8B(), v2.V8B()),
2904b8021494Sopenharmony_ci                "pmull v0.8h, v1.8b, v2.8b");
2905b8021494Sopenharmony_ci  COMPARE_MACRO(Pmull2(v2.V8H(), v3.V16B(), v4.V16B()),
2906b8021494Sopenharmony_ci                "pmull2 v2.8h, v3.16b, v4.16b");
2907b8021494Sopenharmony_ci
2908b8021494Sopenharmony_ci  CLEANUP();
2909b8021494Sopenharmony_ci}
2910b8021494Sopenharmony_ci
2911b8021494Sopenharmony_ci
2912b8021494Sopenharmony_ciTEST(neon_perm) {
2913b8021494Sopenharmony_ci  SETUP();
2914b8021494Sopenharmony_ci
2915b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
2916b8021494Sopenharmony_ci  COMPARE_MACRO(Trn1(v0.M, v1.M, v2.M), "trn1 v0." S ", v1." S ", v2." S);
2917b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
2918b8021494Sopenharmony_ci#undef DISASM_INST
2919b8021494Sopenharmony_ci
2920b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
2921b8021494Sopenharmony_ci  COMPARE_MACRO(Trn2(v0.M, v1.M, v2.M), "trn2 v0." S ", v1." S ", v2." S);
2922b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
2923b8021494Sopenharmony_ci#undef DISASM_INST
2924b8021494Sopenharmony_ci
2925b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
2926b8021494Sopenharmony_ci  COMPARE_MACRO(Uzp1(v0.M, v1.M, v2.M), "uzp1 v0." S ", v1." S ", v2." S);
2927b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
2928b8021494Sopenharmony_ci#undef DISASM_INST
2929b8021494Sopenharmony_ci
2930b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
2931b8021494Sopenharmony_ci  COMPARE_MACRO(Uzp2(v0.M, v1.M, v2.M), "uzp2 v0." S ", v1." S ", v2." S);
2932b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
2933b8021494Sopenharmony_ci#undef DISASM_INST
2934b8021494Sopenharmony_ci
2935b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
2936b8021494Sopenharmony_ci  COMPARE_MACRO(Zip1(v0.M, v1.M, v2.M), "zip1 v0." S ", v1." S ", v2." S);
2937b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
2938b8021494Sopenharmony_ci#undef DISASM_INST
2939b8021494Sopenharmony_ci
2940b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
2941b8021494Sopenharmony_ci  COMPARE_MACRO(Zip2(v0.M, v1.M, v2.M), "zip2 v0." S ", v1." S ", v2." S);
2942b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
2943b8021494Sopenharmony_ci#undef DISASM_INST
2944b8021494Sopenharmony_ci
2945b8021494Sopenharmony_ci  CLEANUP();
2946b8021494Sopenharmony_ci}
2947b8021494Sopenharmony_ci
2948b8021494Sopenharmony_ci
2949b8021494Sopenharmony_ciTEST(neon_copy) {
2950b8021494Sopenharmony_ci  SETUP();
2951b8021494Sopenharmony_ci
2952b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v1.V16B(), 4, v5.V16B(), 0), "mov v1.b[4], v5.b[0]");
2953b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v2.V8B(), 5, v6.V8B(), 1), "mov v2.b[5], v6.b[1]");
2954b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v3.B(), 6, v7.B(), 2), "mov v3.b[6], v7.b[2]");
2955b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v4.V8H(), 7, v8.V8H(), 3), "mov v4.h[7], v8.h[3]");
2956b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v5.V4H(), 3, v9.V4H(), 0), "mov v5.h[3], v9.h[0]");
2957b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v6.H(), 6, v1.H(), 1), "mov v6.h[6], v1.h[1]");
2958b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v7.V4S(), 2, v2.V4S(), 2), "mov v7.s[2], v2.s[2]");
2959b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v8.V2S(), 1, v3.V2S(), 0), "mov v8.s[1], v3.s[0]");
2960b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v9.S(), 0, v4.S(), 1), "mov v9.s[0], v4.s[1]");
2961b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v1.V2D(), 1, v5.V2D(), 0), "mov v1.d[1], v5.d[0]");
2962b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v2.D(), 0, v6.D(), 1), "mov v2.d[0], v6.d[1]");
2963b8021494Sopenharmony_ci
2964b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v3.V16B(), 4, v7.V16B(), 0), "mov v3.b[4], v7.b[0]");
2965b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v4.V8B(), 5, v8.V8B(), 1), "mov v4.b[5], v8.b[1]");
2966b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v5.B(), 6, v9.B(), 2), "mov v5.b[6], v9.b[2]");
2967b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v6.V8H(), 7, v1.V8H(), 3), "mov v6.h[7], v1.h[3]");
2968b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v7.V4H(), 0, v2.V4H(), 0), "mov v7.h[0], v2.h[0]");
2969b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v8.H(), 1, v3.H(), 1), "mov v8.h[1], v3.h[1]");
2970b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v9.V4S(), 2, v4.V4S(), 2), "mov v9.s[2], v4.s[2]");
2971b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v1.V2S(), 3, v5.V2S(), 0), "mov v1.s[3], v5.s[0]");
2972b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v2.S(), 0, v6.S(), 1), "mov v2.s[0], v6.s[1]");
2973b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v3.V2D(), 1, v7.V2D(), 0), "mov v3.d[1], v7.d[0]");
2974b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v4.D(), 0, v8.D(), 1), "mov v4.d[0], v8.d[1]");
2975b8021494Sopenharmony_ci
2976b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v1.V16B(), 4, w0), "mov v1.b[4], w0");
2977b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v2.V8B(), 5, w1), "mov v2.b[5], w1");
2978b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v3.B(), 6, w2), "mov v3.b[6], w2");
2979b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v4.V8H(), 7, w3), "mov v4.h[7], w3");
2980b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v5.V4H(), 3, w0), "mov v5.h[3], w0");
2981b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v6.H(), 6, w1), "mov v6.h[6], w1");
2982b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v7.V4S(), 2, w2), "mov v7.s[2], w2");
2983b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v8.V2S(), 1, w0), "mov v8.s[1], w0");
2984b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v9.S(), 0, w1), "mov v9.s[0], w1");
2985b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v1.V2D(), 1, x0), "mov v1.d[1], x0");
2986b8021494Sopenharmony_ci  COMPARE_MACRO(Ins(v2.D(), 0, x1), "mov v2.d[0], x1");
2987b8021494Sopenharmony_ci
2988b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v1.V16B(), 4, w0), "mov v1.b[4], w0");
2989b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v2.V8B(), 5, w1), "mov v2.b[5], w1");
2990b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v3.B(), 6, w2), "mov v3.b[6], w2");
2991b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v4.V8H(), 7, w3), "mov v4.h[7], w3");
2992b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v5.V4H(), 3, w0), "mov v5.h[3], w0");
2993b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v6.H(), 6, w1), "mov v6.h[6], w1");
2994b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v7.V4S(), 2, w2), "mov v7.s[2], w2");
2995b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v8.V2S(), 1, w0), "mov v8.s[1], w0");
2996b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v9.S(), 0, w1), "mov v9.s[0], w1");
2997b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v1.V2D(), 1, x0), "mov v1.d[1], x0");
2998b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v2.D(), 0, x1), "mov v2.d[0], x1");
2999b8021494Sopenharmony_ci
3000b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v5.V8B(), v9.V8B(), 6), "dup v5.8b, v9.b[6]");
3001b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v6.V16B(), v1.V16B(), 5), "dup v6.16b, v1.b[5]");
3002b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v7.V4H(), v2.V4H(), 4), "dup v7.4h, v2.h[4]");
3003b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v8.V8H(), v3.V8H(), 3), "dup v8.8h, v3.h[3]");
3004b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v9.V2S(), v4.V2S(), 2), "dup v9.2s, v4.s[2]");
3005b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v1.V4S(), v5.V4S(), 1), "dup v1.4s, v5.s[1]");
3006b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v2.V2D(), v6.V2D(), 0), "dup v2.2d, v6.d[0]");
3007b8021494Sopenharmony_ci
3008b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v5.B(), v9.B(), 6), "mov b5, v9.b[6]");
3009b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v7.H(), v2.H(), 4), "mov h7, v2.h[4]");
3010b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v9.S(), v4.S(), 2), "mov s9, v4.s[2]");
3011b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v2.D(), v6.D(), 0), "mov d2, v6.d[0]");
3012b8021494Sopenharmony_ci
3013b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v5.B(), v9.B(), 6), "mov b5, v9.b[6]");
3014b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v7.H(), v2.H(), 4), "mov h7, v2.h[4]");
3015b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v9.S(), v4.S(), 2), "mov s9, v4.s[2]");
3016b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v2.D(), v6.D(), 0), "mov d2, v6.d[0]");
3017b8021494Sopenharmony_ci
3018b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v0.B(), v1.V8B(), 7), "mov b0, v1.b[7]");
3019b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(b2, v3.V16B(), 15), "mov b2, v3.b[15]");
3020b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v4.H(), v5.V4H(), 3), "mov h4, v5.h[3]");
3021b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(h6, v7.V8H(), 7), "mov h6, v7.h[7]");
3022b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v8.S(), v9.V2S(), 1), "mov s8, v9.s[1]");
3023b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(s10, v11.V4S(), 3), "mov s10, v11.s[3]");
3024b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(v12.D(), v13.V2D(), 1), "mov d12, v13.d[1]");
3025b8021494Sopenharmony_ci
3026b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v5.V8B(), w0), "dup v5.8b, w0");
3027b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v6.V16B(), w1), "dup v6.16b, w1");
3028b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v7.V4H(), w2), "dup v7.4h, w2");
3029b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v8.V8H(), w3), "dup v8.8h, w3");
3030b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v9.V2S(), w4), "dup v9.2s, w4");
3031b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v1.V4S(), w5), "dup v1.4s, w5");
3032b8021494Sopenharmony_ci  COMPARE_MACRO(Dup(v2.V2D(), x6), "dup v2.2d, x6");
3033b8021494Sopenharmony_ci
3034b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(w0, v1.V16B(), 4), "smov w0, v1.b[4]");
3035b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(w1, v2.V8B(), 5), "smov w1, v2.b[5]");
3036b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(w2, v3.B(), 6), "smov w2, v3.b[6]");
3037b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(w3, v4.V8H(), 7), "smov w3, v4.h[7]");
3038b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(w0, v5.V4H(), 3), "smov w0, v5.h[3]");
3039b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(w1, v6.H(), 6), "smov w1, v6.h[6]");
3040b8021494Sopenharmony_ci
3041b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(x0, v1.V16B(), 4), "smov x0, v1.b[4]");
3042b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(x1, v2.V8B(), 5), "smov x1, v2.b[5]");
3043b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(x2, v3.B(), 6), "smov x2, v3.b[6]");
3044b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(x3, v4.V8H(), 7), "smov x3, v4.h[7]");
3045b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(x0, v5.V4H(), 3), "smov x0, v5.h[3]");
3046b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(x1, v6.H(), 6), "smov x1, v6.h[6]");
3047b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(x2, v7.V4S(), 2), "smov x2, v7.s[2]");
3048b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(x0, v8.V2S(), 1), "smov x0, v8.s[1]");
3049b8021494Sopenharmony_ci  COMPARE_MACRO(Smov(x1, v9.S(), 0), "smov x1, v9.s[0]");
3050b8021494Sopenharmony_ci
3051b8021494Sopenharmony_ci  COMPARE_MACRO(Umov(w0, v1.V16B(), 4), "umov w0, v1.b[4]");
3052b8021494Sopenharmony_ci  COMPARE_MACRO(Umov(w1, v2.V8B(), 5), "umov w1, v2.b[5]");
3053b8021494Sopenharmony_ci  COMPARE_MACRO(Umov(w2, v3.B(), 6), "umov w2, v3.b[6]");
3054b8021494Sopenharmony_ci  COMPARE_MACRO(Umov(w3, v4.V8H(), 7), "umov w3, v4.h[7]");
3055b8021494Sopenharmony_ci  COMPARE_MACRO(Umov(w0, v5.V4H(), 3), "umov w0, v5.h[3]");
3056b8021494Sopenharmony_ci  COMPARE_MACRO(Umov(w1, v6.H(), 6), "umov w1, v6.h[6]");
3057b8021494Sopenharmony_ci  COMPARE_MACRO(Umov(w2, v7.V4S(), 2), "mov w2, v7.s[2]");
3058b8021494Sopenharmony_ci  COMPARE_MACRO(Umov(w0, v8.V2S(), 1), "mov w0, v8.s[1]");
3059b8021494Sopenharmony_ci  COMPARE_MACRO(Umov(w1, v9.S(), 0), "mov w1, v9.s[0]");
3060b8021494Sopenharmony_ci  COMPARE_MACRO(Umov(x0, v1.V2D(), 1), "mov x0, v1.d[1]");
3061b8021494Sopenharmony_ci  COMPARE_MACRO(Umov(x1, v2.D(), 0), "mov x1, v2.d[0]");
3062b8021494Sopenharmony_ci
3063b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(w2, v7.V4S(), 2), "mov w2, v7.s[2]");
3064b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(w0, v8.V2S(), 1), "mov w0, v8.s[1]");
3065b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(w1, v9.S(), 0), "mov w1, v9.s[0]");
3066b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(x0, v1.V2D(), 1), "mov x0, v1.d[1]");
3067b8021494Sopenharmony_ci  COMPARE_MACRO(Mov(x1, v2.D(), 0), "mov x1, v2.d[0]");
3068b8021494Sopenharmony_ci
3069b8021494Sopenharmony_ci  CLEANUP();
3070b8021494Sopenharmony_ci}
3071b8021494Sopenharmony_ci
3072b8021494Sopenharmony_ci
3073b8021494Sopenharmony_ciTEST(neon_table) {
3074b8021494Sopenharmony_ci  SETUP();
3075b8021494Sopenharmony_ci
3076b8021494Sopenharmony_ci  COMPARE_MACRO(Tbl(v0.V8B(), v1.V16B(), v2.V8B()),
3077b8021494Sopenharmony_ci                "tbl v0.8b, {v1.16b}, v2.8b");
3078b8021494Sopenharmony_ci  COMPARE_MACRO(Tbl(v3.V8B(), v4.V16B(), v5.V16B(), v6.V8B()),
3079b8021494Sopenharmony_ci                "tbl v3.8b, {v4.16b, v5.16b}, v6.8b");
3080b8021494Sopenharmony_ci  COMPARE_MACRO(Tbl(v7.V8B(), v8.V16B(), v9.V16B(), v10.V16B(), v11.V8B()),
3081b8021494Sopenharmony_ci                "tbl v7.8b, {v8.16b, v9.16b, v10.16b}, v11.8b");
3082b8021494Sopenharmony_ci  COMPARE_MACRO(Tbl(v12.V8B(),
3083b8021494Sopenharmony_ci                    v13.V16B(),
3084b8021494Sopenharmony_ci                    v14.V16B(),
3085b8021494Sopenharmony_ci                    v15.V16B(),
3086b8021494Sopenharmony_ci                    v16.V16B(),
3087b8021494Sopenharmony_ci                    v17.V8B()),
3088b8021494Sopenharmony_ci                "tbl v12.8b, {v13.16b, v14.16b, v15.16b, v16.16b}, v17.8b");
3089b8021494Sopenharmony_ci  COMPARE_MACRO(Tbl(v18.V16B(), v19.V16B(), v20.V16B()),
3090b8021494Sopenharmony_ci                "tbl v18.16b, {v19.16b}, v20.16b");
3091b8021494Sopenharmony_ci  COMPARE_MACRO(Tbl(v21.V16B(), v22.V16B(), v23.V16B(), v24.V16B()),
3092b8021494Sopenharmony_ci                "tbl v21.16b, {v22.16b, v23.16b}, v24.16b");
3093b8021494Sopenharmony_ci  COMPARE_MACRO(Tbl(v25.V16B(), v26.V16B(), v27.V16B(), v28.V16B(), v29.V16B()),
3094b8021494Sopenharmony_ci                "tbl v25.16b, {v26.16b, v27.16b, v28.16b}, v29.16b");
3095b8021494Sopenharmony_ci  COMPARE_MACRO(Tbl(v30.V16B(),
3096b8021494Sopenharmony_ci                    v31.V16B(),
3097b8021494Sopenharmony_ci                    v0.V16B(),
3098b8021494Sopenharmony_ci                    v1.V16B(),
3099b8021494Sopenharmony_ci                    v2.V16B(),
3100b8021494Sopenharmony_ci                    v3.V16B()),
3101b8021494Sopenharmony_ci                "tbl v30.16b, {v31.16b, v0.16b, v1.16b, v2.16b}, v3.16b");
3102b8021494Sopenharmony_ci
3103b8021494Sopenharmony_ci  COMPARE_MACRO(Tbx(v0.V8B(), v1.V16B(), v2.V8B()),
3104b8021494Sopenharmony_ci                "tbx v0.8b, {v1.16b}, v2.8b");
3105b8021494Sopenharmony_ci  COMPARE_MACRO(Tbx(v3.V8B(), v4.V16B(), v5.V16B(), v6.V8B()),
3106b8021494Sopenharmony_ci                "tbx v3.8b, {v4.16b, v5.16b}, v6.8b");
3107b8021494Sopenharmony_ci  COMPARE_MACRO(Tbx(v7.V8B(), v8.V16B(), v9.V16B(), v10.V16B(), v11.V8B()),
3108b8021494Sopenharmony_ci                "tbx v7.8b, {v8.16b, v9.16b, v10.16b}, v11.8b");
3109b8021494Sopenharmony_ci  COMPARE_MACRO(Tbx(v12.V8B(),
3110b8021494Sopenharmony_ci                    v13.V16B(),
3111b8021494Sopenharmony_ci                    v14.V16B(),
3112b8021494Sopenharmony_ci                    v15.V16B(),
3113b8021494Sopenharmony_ci                    v16.V16B(),
3114b8021494Sopenharmony_ci                    v17.V8B()),
3115b8021494Sopenharmony_ci                "tbx v12.8b, {v13.16b, v14.16b, v15.16b, v16.16b}, v17.8b");
3116b8021494Sopenharmony_ci  COMPARE_MACRO(Tbx(v18.V16B(), v19.V16B(), v20.V16B()),
3117b8021494Sopenharmony_ci                "tbx v18.16b, {v19.16b}, v20.16b");
3118b8021494Sopenharmony_ci  COMPARE_MACRO(Tbx(v21.V16B(), v22.V16B(), v23.V16B(), v24.V16B()),
3119b8021494Sopenharmony_ci                "tbx v21.16b, {v22.16b, v23.16b}, v24.16b");
3120b8021494Sopenharmony_ci  COMPARE_MACRO(Tbx(v25.V16B(), v26.V16B(), v27.V16B(), v28.V16B(), v29.V16B()),
3121b8021494Sopenharmony_ci                "tbx v25.16b, {v26.16b, v27.16b, v28.16b}, v29.16b");
3122b8021494Sopenharmony_ci  COMPARE_MACRO(Tbx(v30.V16B(),
3123b8021494Sopenharmony_ci                    v31.V16B(),
3124b8021494Sopenharmony_ci                    v0.V16B(),
3125b8021494Sopenharmony_ci                    v1.V16B(),
3126b8021494Sopenharmony_ci                    v2.V16B(),
3127b8021494Sopenharmony_ci                    v3.V16B()),
3128b8021494Sopenharmony_ci                "tbx v30.16b, {v31.16b, v0.16b, v1.16b, v2.16b}, v3.16b");
3129b8021494Sopenharmony_ci
3130b8021494Sopenharmony_ci  CLEANUP();
3131b8021494Sopenharmony_ci}
3132b8021494Sopenharmony_ci
3133b8021494Sopenharmony_ci
3134b8021494Sopenharmony_ciTEST(neon_extract) {
3135b8021494Sopenharmony_ci  SETUP();
3136b8021494Sopenharmony_ci
3137b8021494Sopenharmony_ci  COMPARE_MACRO(Ext(v4.V8B(), v5.V8B(), v6.V8B(), 0),
3138b8021494Sopenharmony_ci                "ext v4.8b, v5.8b, v6.8b, #0");
3139b8021494Sopenharmony_ci  COMPARE_MACRO(Ext(v1.V8B(), v2.V8B(), v3.V8B(), 7),
3140b8021494Sopenharmony_ci                "ext v1.8b, v2.8b, v3.8b, #7");
3141b8021494Sopenharmony_ci  COMPARE_MACRO(Ext(v1.V16B(), v2.V16B(), v3.V16B(), 0),
3142b8021494Sopenharmony_ci                "ext v1.16b, v2.16b, v3.16b, #0");
3143b8021494Sopenharmony_ci  COMPARE_MACRO(Ext(v1.V16B(), v2.V16B(), v3.V16B(), 15),
3144b8021494Sopenharmony_ci                "ext v1.16b, v2.16b, v3.16b, #15");
3145b8021494Sopenharmony_ci
3146b8021494Sopenharmony_ci  CLEANUP();
3147b8021494Sopenharmony_ci}
3148b8021494Sopenharmony_ci
3149b8021494Sopenharmony_ci
3150b8021494Sopenharmony_ciTEST(neon_modimm) {
3151b8021494Sopenharmony_ci  SETUP();
3152b8021494Sopenharmony_ci
3153b8021494Sopenharmony_ci  COMPARE_MACRO(Orr(v4.V4H(), 0xaa, 0), "orr v4.4h, #0xaa, lsl #0");
3154b8021494Sopenharmony_ci  COMPARE_MACRO(Orr(v1.V8H(), 0xcc, 8), "orr v1.8h, #0xcc, lsl #8");
3155b8021494Sopenharmony_ci  COMPARE_MACRO(Orr(v4.V2S(), 0xaa, 0), "orr v4.2s, #0xaa, lsl #0");
3156b8021494Sopenharmony_ci  COMPARE_MACRO(Orr(v1.V2S(), 0xcc, 8), "orr v1.2s, #0xcc, lsl #8");
3157b8021494Sopenharmony_ci  COMPARE_MACRO(Orr(v4.V4S(), 0xaa, 16), "orr v4.4s, #0xaa, lsl #16");
3158b8021494Sopenharmony_ci  COMPARE_MACRO(Orr(v1.V4S(), 0xcc, 24), "orr v1.4s, #0xcc, lsl #24");
3159b8021494Sopenharmony_ci
3160b8021494Sopenharmony_ci  COMPARE_MACRO(Bic(v4.V4H(), 0xaa, 0), "bic v4.4h, #0xaa, lsl #0");
3161b8021494Sopenharmony_ci  COMPARE_MACRO(Bic(v1.V8H(), 0xcc, 8), "bic v1.8h, #0xcc, lsl #8");
3162b8021494Sopenharmony_ci  COMPARE_MACRO(Bic(v4.V2S(), 0xaa, 0), "bic v4.2s, #0xaa, lsl #0");
3163b8021494Sopenharmony_ci  COMPARE_MACRO(Bic(v1.V2S(), 0xcc, 8), "bic v1.2s, #0xcc, lsl #8");
3164b8021494Sopenharmony_ci  COMPARE_MACRO(Bic(v4.V4S(), 0xaa, 16), "bic v4.4s, #0xaa, lsl #16");
3165b8021494Sopenharmony_ci  COMPARE_MACRO(Bic(v1.V4S(), 0xcc, 24), "bic v1.4s, #0xcc, lsl #24");
3166b8021494Sopenharmony_ci
3167b8021494Sopenharmony_ci  COMPARE_MACRO(Mvni(v4.V4H(), 0xaa, LSL, 0), "mvni v4.4h, #0xaa, lsl #0");
3168b8021494Sopenharmony_ci  COMPARE_MACRO(Mvni(v1.V8H(), 0xcc, LSL, 8), "mvni v1.8h, #0xcc, lsl #8");
3169b8021494Sopenharmony_ci  COMPARE_MACRO(Mvni(v4.V2S(), 0xaa, LSL, 0), "mvni v4.2s, #0xaa, lsl #0");
3170b8021494Sopenharmony_ci  COMPARE_MACRO(Mvni(v1.V2S(), 0xcc, LSL, 8), "mvni v1.2s, #0xcc, lsl #8");
3171b8021494Sopenharmony_ci  COMPARE_MACRO(Mvni(v4.V4S(), 0xaa, LSL, 16), "mvni v4.4s, #0xaa, lsl #16");
3172b8021494Sopenharmony_ci  COMPARE_MACRO(Mvni(v1.V4S(), 0xcc, LSL, 24), "mvni v1.4s, #0xcc, lsl #24");
3173b8021494Sopenharmony_ci
3174b8021494Sopenharmony_ci  COMPARE_MACRO(Mvni(v4.V2S(), 0xaa, MSL, 8), "mvni v4.2s, #0xaa, msl #8");
3175b8021494Sopenharmony_ci  COMPARE_MACRO(Mvni(v1.V2S(), 0xcc, MSL, 16), "mvni v1.2s, #0xcc, msl #16");
3176b8021494Sopenharmony_ci  COMPARE_MACRO(Mvni(v4.V4S(), 0xaa, MSL, 8), "mvni v4.4s, #0xaa, msl #8");
3177b8021494Sopenharmony_ci  COMPARE_MACRO(Mvni(v1.V4S(), 0xcc, MSL, 16), "mvni v1.4s, #0xcc, msl #16");
3178b8021494Sopenharmony_ci
3179b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v4.V8B(), 0xaa), "movi v4.8b, #0xaa");
3180b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v1.V16B(), 0xcc), "movi v1.16b, #0xcc");
3181b8021494Sopenharmony_ci
3182b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v4.V4H(), 0xaa, LSL, 0), "movi v4.4h, #0xaa, lsl #0");
3183b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v1.V8H(), 0xcc, LSL, 8), "movi v1.8h, #0xcc, lsl #8");
3184b8021494Sopenharmony_ci
3185b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v4.V2S(), 0xaa, LSL, 0), "movi v4.2s, #0xaa, lsl #0");
3186b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v1.V2S(), 0xcc, LSL, 8), "movi v1.2s, #0xcc, lsl #8");
3187b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v4.V4S(), 0xaa, LSL, 16), "movi v4.4s, #0xaa, lsl #16");
3188b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v1.V4S(), 0xcc, LSL, 24), "movi v1.4s, #0xcc, lsl #24");
3189b8021494Sopenharmony_ci
3190b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v4.V2S(), 0xaa, MSL, 8), "movi v4.2s, #0xaa, msl #8");
3191b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v1.V2S(), 0xcc, MSL, 16), "movi v1.2s, #0xcc, msl #16");
3192b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v4.V4S(), 0xaa, MSL, 8), "movi v4.4s, #0xaa, msl #8");
3193b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v1.V4S(), 0xcc, MSL, 16), "movi v1.4s, #0xcc, msl #16");
3194b8021494Sopenharmony_ci
3195b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(d2, 0xffff0000ffffff), "movi d2, #0xffff0000ffffff");
3196b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v1.V2D(), 0xffff0000ffffff),
3197b8021494Sopenharmony_ci                "movi v1.2d, #0xffff0000ffffff");
3198b8021494Sopenharmony_ci
3199b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v2.V2D(), 0xff00ff00ff00ff, 0xff00ff00ff00ff),
3200b8021494Sopenharmony_ci                "movi v2.2d, #0xff00ff00ff00ff");
3201b8021494Sopenharmony_ci  COMPARE_MACRO(Movi(v3.V2D(), 0xffff, 0xff00ff00ff00ff),
3202b8021494Sopenharmony_ci                "movi d3, #0xff00ff00ff00ff\n"
3203b8021494Sopenharmony_ci                "mov x16, #0xffff\n"
3204b8021494Sopenharmony_ci                "mov v3.d[1], x16");
3205b8021494Sopenharmony_ci
3206b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(v0.V2S(), 1.0f), "fmov v0.2s, #0x70 (1.0000)");
3207b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(v31.V2S(), -13.0f), "fmov v31.2s, #0xaa (-13.0000)");
3208b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(v0.V4S(), 1.0f), "fmov v0.4s, #0x70 (1.0000)");
3209b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(v31.V4S(), -13.0f), "fmov v31.4s, #0xaa (-13.0000)");
3210b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(v1.V2D(), 1.0), "fmov v1.2d, #0x70 (1.0000)");
3211b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(v29.V2D(), -13.0), "fmov v29.2d, #0xaa (-13.0000)");
3212b8021494Sopenharmony_ci
3213b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(v0.V4H(), Float16(-5.0f)), "fmov v0.4h, #0x94 (-5.0000)");
3214b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(v31.V8H(), Float16(29.0f)),
3215b8021494Sopenharmony_ci                "fmov v31.8h, #0x3d (29.0000)");
3216b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(v0.V4H(), Float16(-5.0)), "fmov v0.4h, #0x94 (-5.0000)");
3217b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(v31.V8H(), Float16(29.0)), "fmov v31.8h, #0x3d (29.0000)");
3218b8021494Sopenharmony_ci
3219b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(v5.D(), 1, x14), "fmov v5.D[1], x14");
3220b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(x14, v5.D(), 1), "fmov x14, v5.D[1]");
3221b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(v3.D(), 0, x21), "mov v3.d[0], x21");
3222b8021494Sopenharmony_ci  COMPARE_MACRO(Fmov(x21, v3.D(), 0), "mov x21, v3.d[0]");
3223b8021494Sopenharmony_ci
3224b8021494Sopenharmony_ci  // An unallocated form of fmov.
3225b8021494Sopenharmony_ci  COMPARE(dci(0x2f07ffff), "unallocated (Unallocated)");
3226b8021494Sopenharmony_ci
3227b8021494Sopenharmony_ci  CLEANUP();
3228b8021494Sopenharmony_ci}
3229b8021494Sopenharmony_ci
3230b8021494Sopenharmony_ci
3231b8021494Sopenharmony_ciTEST(neon_2regmisc) {
3232b8021494Sopenharmony_ci  SETUP();
3233b8021494Sopenharmony_ci
3234b8021494Sopenharmony_ci  COMPARE_MACRO(Shll(v1.V8H(), v8.V8B(), 8), "shll v1.8h, v8.8b, #8");
3235b8021494Sopenharmony_ci  COMPARE_MACRO(Shll(v3.V4S(), v1.V4H(), 16), "shll v3.4s, v1.4h, #16");
3236b8021494Sopenharmony_ci  COMPARE_MACRO(Shll(v5.V2D(), v3.V2S(), 32), "shll v5.2d, v3.2s, #32");
3237b8021494Sopenharmony_ci  COMPARE_MACRO(Shll2(v2.V8H(), v9.V16B(), 8), "shll2 v2.8h, v9.16b, #8");
3238b8021494Sopenharmony_ci  COMPARE_MACRO(Shll2(v4.V4S(), v2.V8H(), 16), "shll2 v4.4s, v2.8h, #16");
3239b8021494Sopenharmony_ci  COMPARE_MACRO(Shll2(v6.V2D(), v4.V4S(), 32), "shll2 v6.2d, v4.4s, #32");
3240b8021494Sopenharmony_ci
3241b8021494Sopenharmony_ci  // An unallocated form of shll.
3242b8021494Sopenharmony_ci  COMPARE(dci(0x2ee13bff), "unallocated (Unallocated)");
3243b8021494Sopenharmony_ci  // An unallocated form of shll2.
3244b8021494Sopenharmony_ci  COMPARE(dci(0x6ee13bff), "unallocated (Unallocated)");
3245b8021494Sopenharmony_ci
3246b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3247b8021494Sopenharmony_ci  COMPARE_MACRO(Cmeq(v0.M, v1.M, 0), "cmeq v0." S ", v1." S ", #0");
3248b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
3249b8021494Sopenharmony_ci#undef DISASM_INST
3250b8021494Sopenharmony_ci
3251b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3252b8021494Sopenharmony_ci  COMPARE_MACRO(Cmge(v0.M, v1.M, 0), "cmge v0." S ", v1." S ", #0");
3253b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
3254b8021494Sopenharmony_ci#undef DISASM_INST
3255b8021494Sopenharmony_ci
3256b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3257b8021494Sopenharmony_ci  COMPARE_MACRO(Cmgt(v0.M, v1.M, 0), "cmgt v0." S ", v1." S ", #0");
3258b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
3259b8021494Sopenharmony_ci#undef DISASM_INST
3260b8021494Sopenharmony_ci
3261b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3262b8021494Sopenharmony_ci  COMPARE_MACRO(Cmle(v0.M, v1.M, 0), "cmle v0." S ", v1." S ", #0");
3263b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
3264b8021494Sopenharmony_ci#undef DISASM_INST
3265b8021494Sopenharmony_ci
3266b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3267b8021494Sopenharmony_ci  COMPARE_MACRO(Cmlt(v0.M, v1.M, 0), "cmlt v0." S ", v1." S ", #0");
3268b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
3269b8021494Sopenharmony_ci#undef DISASM_INST
3270b8021494Sopenharmony_ci
3271b8021494Sopenharmony_ci  COMPARE_MACRO(Cmeq(v0.D(), v1.D(), 0), "cmeq d0, d1, #0");
3272b8021494Sopenharmony_ci  COMPARE_MACRO(Cmge(v3.D(), v4.D(), 0), "cmge d3, d4, #0");
3273b8021494Sopenharmony_ci  COMPARE_MACRO(Cmgt(v6.D(), v7.D(), 0), "cmgt d6, d7, #0");
3274b8021494Sopenharmony_ci  COMPARE_MACRO(Cmle(v0.D(), v1.D(), 0), "cmle d0, d1, #0");
3275b8021494Sopenharmony_ci  COMPARE_MACRO(Cmlt(v3.D(), v4.D(), 0), "cmlt d3, d4, #0");
3276b8021494Sopenharmony_ci
3277b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3278b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmeq(v0.M, v1.M, 0), "fcmeq v0." S ", v1." S ", #0.0");
3279b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
3280b8021494Sopenharmony_ci#undef DISASM_INST
3281b8021494Sopenharmony_ci
3282b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmeq(v0.S(), v1.S(), 0),
3283b8021494Sopenharmony_ci                "fcmeq s0, s1, "
3284b8021494Sopenharmony_ci                "#0.0");
3285b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmeq(v0.D(), v1.D(), 0),
3286b8021494Sopenharmony_ci                "fcmeq d0, d1, "
3287b8021494Sopenharmony_ci                "#0.0");
3288b8021494Sopenharmony_ci
3289b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3290b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmge(v0.M, v1.M, 0), "fcmge v0." S ", v1." S ", #0.0");
3291b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
3292b8021494Sopenharmony_ci#undef DISASM_INST
3293b8021494Sopenharmony_ci
3294b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmge(v0.S(), v1.S(), 0),
3295b8021494Sopenharmony_ci                "fcmge s0, s1, "
3296b8021494Sopenharmony_ci                "#0.0");
3297b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmge(v0.D(), v1.D(), 0),
3298b8021494Sopenharmony_ci                "fcmge d0, d1, "
3299b8021494Sopenharmony_ci                "#0.0");
3300b8021494Sopenharmony_ci
3301b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3302b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmgt(v0.M, v1.M, 0), "fcmgt v0." S ", v1." S ", #0.0");
3303b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
3304b8021494Sopenharmony_ci#undef DISASM_INST
3305b8021494Sopenharmony_ci
3306b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmgt(v0.S(), v1.S(), 0),
3307b8021494Sopenharmony_ci                "fcmgt s0, s1, "
3308b8021494Sopenharmony_ci                "#0.0");
3309b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmgt(v0.D(), v1.D(), 0),
3310b8021494Sopenharmony_ci                "fcmgt d0, d1, "
3311b8021494Sopenharmony_ci                "#0.0");
3312b8021494Sopenharmony_ci
3313b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3314b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmle(v0.M, v1.M, 0), "fcmle v0." S ", v1." S ", #0.0");
3315b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
3316b8021494Sopenharmony_ci#undef DISASM_INST
3317b8021494Sopenharmony_ci
3318b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmle(v0.S(), v1.S(), 0),
3319b8021494Sopenharmony_ci                "fcmle s0, s1, "
3320b8021494Sopenharmony_ci                "#0.0");
3321b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmle(v0.D(), v1.D(), 0),
3322b8021494Sopenharmony_ci                "fcmle d0, d1, "
3323b8021494Sopenharmony_ci                "#0.0");
3324b8021494Sopenharmony_ci
3325b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3326b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmlt(v0.M, v1.M, 0), "fcmlt v0." S ", v1." S ", #0.0");
3327b8021494Sopenharmony_ci  NEON_FORMAT_LIST_FP(DISASM_INST)
3328b8021494Sopenharmony_ci#undef DISASM_INST
3329b8021494Sopenharmony_ci
3330b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmlt(v0.S(), v1.S(), 0),
3331b8021494Sopenharmony_ci                "fcmlt s0, s1, "
3332b8021494Sopenharmony_ci                "#0.0");
3333b8021494Sopenharmony_ci  COMPARE_MACRO(Fcmlt(v0.D(), v1.D(), 0),
3334b8021494Sopenharmony_ci                "fcmlt d0, d1, "
3335b8021494Sopenharmony_ci                "#0.0");
3336b8021494Sopenharmony_ci
3337b8021494Sopenharmony_ci#define DISASM_INST(M, S) COMPARE_MACRO(Neg(v0.M, v1.M), "neg v0." S ", v1." S);
3338b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
3339b8021494Sopenharmony_ci#undef DISASM_INST
3340b8021494Sopenharmony_ci
3341b8021494Sopenharmony_ci  COMPARE_MACRO(Neg(v0.D(), v1.D()), "neg d0, d1");
3342b8021494Sopenharmony_ci
3343b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3344b8021494Sopenharmony_ci  COMPARE_MACRO(Sqneg(v0.M, v1.M), "sqneg v0." S ", v1." S);
3345b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
3346b8021494Sopenharmony_ci#undef DISASM_INST
3347b8021494Sopenharmony_ci
3348b8021494Sopenharmony_ci  COMPARE_MACRO(Sqneg(b0, b1), "sqneg b0, b1");
3349b8021494Sopenharmony_ci  COMPARE_MACRO(Sqneg(h1, h2), "sqneg h1, h2");
3350b8021494Sopenharmony_ci  COMPARE_MACRO(Sqneg(s2, s3), "sqneg s2, s3");
3351b8021494Sopenharmony_ci  COMPARE_MACRO(Sqneg(d3, d4), "sqneg d3, d4");
3352b8021494Sopenharmony_ci
3353b8021494Sopenharmony_ci#define DISASM_INST(M, S) COMPARE_MACRO(Abs(v0.M, v1.M), "abs v0." S ", v1." S);
3354b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
3355b8021494Sopenharmony_ci#undef DISASM_INST
3356b8021494Sopenharmony_ci
3357b8021494Sopenharmony_ci  COMPARE_MACRO(Abs(v0.D(), v1.D()), "abs d0, d1");
3358b8021494Sopenharmony_ci
3359b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3360b8021494Sopenharmony_ci  COMPARE_MACRO(Sqabs(v0.M, v1.M), "sqabs v0." S ", v1." S);
3361b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
3362b8021494Sopenharmony_ci#undef DISASM_INST
3363b8021494Sopenharmony_ci
3364b8021494Sopenharmony_ci  COMPARE_MACRO(Sqabs(b0, b1), "sqabs b0, b1");
3365b8021494Sopenharmony_ci  COMPARE_MACRO(Sqabs(h1, h2), "sqabs h1, h2");
3366b8021494Sopenharmony_ci  COMPARE_MACRO(Sqabs(s2, s3), "sqabs s2, s3");
3367b8021494Sopenharmony_ci  COMPARE_MACRO(Sqabs(d3, d4), "sqabs d3, d4");
3368b8021494Sopenharmony_ci
3369b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3370b8021494Sopenharmony_ci  COMPARE_MACRO(Suqadd(v0.M, v1.M), "suqadd v0." S ", v1." S);
3371b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
3372b8021494Sopenharmony_ci#undef DISASM_INST
3373b8021494Sopenharmony_ci
3374b8021494Sopenharmony_ci  COMPARE_MACRO(Suqadd(b0, b1), "suqadd b0, b1");
3375b8021494Sopenharmony_ci  COMPARE_MACRO(Suqadd(h1, h2), "suqadd h1, h2");
3376b8021494Sopenharmony_ci  COMPARE_MACRO(Suqadd(s2, s3), "suqadd s2, s3");
3377b8021494Sopenharmony_ci  COMPARE_MACRO(Suqadd(d3, d4), "suqadd d3, d4");
3378b8021494Sopenharmony_ci
3379b8021494Sopenharmony_ci#define DISASM_INST(M, S) \
3380b8021494Sopenharmony_ci  COMPARE_MACRO(Usqadd(v0.M, v1.M), "usqadd v0." S ", v1." S);
3381b8021494Sopenharmony_ci  NEON_FORMAT_LIST(DISASM_INST)
3382b8021494Sopenharmony_ci#undef DISASM_INST
3383b8021494Sopenharmony_ci
3384b8021494Sopenharmony_ci  COMPARE_MACRO(Usqadd(b0, b1), "usqadd b0, b1");
3385b8021494Sopenharmony_ci  COMPARE_MACRO(Usqadd(h1, h2), "usqadd h1, h2");
3386b8021494Sopenharmony_ci  COMPARE_MACRO(Usqadd(s2, s3), "usqadd s2, s3");
3387b8021494Sopenharmony_ci  COMPARE_MACRO(Usqadd(d3, d4), "usqadd d3, d4");
3388b8021494Sopenharmony_ci
3389b8021494Sopenharmony_ci  COMPARE_MACRO(Xtn(v0.V8B(), v1.V8H()),
3390b8021494Sopenharmony_ci                "xtn v0.8b, "
3391b8021494Sopenharmony_ci                "v1.8h");
3392b8021494Sopenharmony_ci  COMPARE_MACRO(Xtn(v1.V4H(), v2.V4S()),
3393b8021494Sopenharmony_ci                "xtn v1.4h, "
3394b8021494Sopenharmony_ci                "v2.4s");
3395b8021494Sopenharmony_ci  COMPARE_MACRO(Xtn(v2.V2S(), v3.V2D()),
3396b8021494Sopenharmony_ci                "xtn v2.2s, "
3397b8021494Sopenharmony_ci                "v3.2d");
3398b8021494Sopenharmony_ci  COMPARE_MACRO(Xtn2(v0.V16B(), v1.V8H()),
3399b8021494Sopenharmony_ci                "xtn2 v0.16b, "
3400b8021494Sopenharmony_ci                "v1.8h");
3401b8021494Sopenharmony_ci  COMPARE_MACRO(Xtn2(v1.V8H(), v2.V4S()),
3402b8021494Sopenharmony_ci                "xtn2 v1.8h, "
3403b8021494Sopenharmony_ci                "v2.4s");
3404b8021494Sopenharmony_ci  COMPARE_MACRO(Xtn2(v2.V4S(), v3.V2D()),
3405b8021494Sopenharmony_ci                "xtn2 v2.4s, "
3406b8021494Sopenharmony_ci                "v3.2d");
3407b8021494Sopenharmony_ci
3408b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtn(v0.V8B(), v1.V8H()),
3409b8021494Sopenharmony_ci                "sqxtn v0.8b, "
3410b8021494Sopenharmony_ci                "v1.8h");
3411b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtn(v1.V4H(), v2.V4S()),
3412b8021494Sopenharmony_ci                "sqxtn v1.4h, "
3413b8021494Sopenharmony_ci                "v2.4s");
3414b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtn(v2.V2S(), v3.V2D()),
3415b8021494Sopenharmony_ci                "sqxtn v2.2s, "
3416b8021494Sopenharmony_ci                "v3.2d");
3417b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtn2(v0.V16B(), v1.V8H()),
3418b8021494Sopenharmony_ci                "sqxtn2 v0.16b, "
3419b8021494Sopenharmony_ci                "v1.8h");
3420b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtn2(v1.V8H(), v2.V4S()),
3421b8021494Sopenharmony_ci                "sqxtn2 v1.8h, "
3422b8021494Sopenharmony_ci                "v2.4s");
3423b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtn2(v2.V4S(), v3.V2D()),
3424b8021494Sopenharmony_ci                "sqxtn2 v2.4s, "
3425b8021494Sopenharmony_ci                "v3.2d");
3426b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtn(b19, h0), "sqxtn b19, h0");
3427b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtn(h20, s0), "sqxtn h20, s0");
3428b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtn(s21, d0), "sqxtn s21, d0");
3429b8021494Sopenharmony_ci
3430b8021494Sopenharmony_ci  COMPARE_MACRO(Uqxtn(v0.V8B(), v1.V8H()),
3431b8021494Sopenharmony_ci                "uqxtn v0.8b, "
3432b8021494Sopenharmony_ci                "v1.8h");
3433b8021494Sopenharmony_ci  COMPARE_MACRO(Uqxtn(v1.V4H(), v2.V4S()),
3434b8021494Sopenharmony_ci                "uqxtn v1.4h, "
3435b8021494Sopenharmony_ci                "v2.4s");
3436b8021494Sopenharmony_ci  COMPARE_MACRO(Uqxtn(v2.V2S(), v3.V2D()),
3437b8021494Sopenharmony_ci                "uqxtn v2.2s, "
3438b8021494Sopenharmony_ci                "v3.2d");
3439b8021494Sopenharmony_ci  COMPARE_MACRO(Uqxtn2(v0.V16B(), v1.V8H()),
3440b8021494Sopenharmony_ci                "uqxtn2 v0.16b, "
3441b8021494Sopenharmony_ci                "v1.8h");
3442b8021494Sopenharmony_ci  COMPARE_MACRO(Uqxtn2(v1.V8H(), v2.V4S()),
3443b8021494Sopenharmony_ci                "uqxtn2 v1.8h, "
3444b8021494Sopenharmony_ci                "v2.4s");
3445b8021494Sopenharmony_ci  COMPARE_MACRO(Uqxtn2(v2.V4S(), v3.V2D()),
3446b8021494Sopenharmony_ci                "uqxtn2 v2.4s, "
3447b8021494Sopenharmony_ci                "v3.2d");
3448b8021494Sopenharmony_ci  COMPARE_MACRO(Uqxtn(b19, h0), "uqxtn b19, h0");
3449b8021494Sopenharmony_ci  COMPARE_MACRO(Uqxtn(h20, s0), "uqxtn h20, s0");
3450b8021494Sopenharmony_ci  COMPARE_MACRO(Uqxtn(s21, d0), "uqxtn s21, d0");
3451b8021494Sopenharmony_ci
3452b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtun(v0.V8B(), v1.V8H()),
3453b8021494Sopenharmony_ci                "sqxtun v0.8b, "
3454b8021494Sopenharmony_ci                "v1.8h");
3455b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtun(v1.V4H(), v2.V4S()),
3456b8021494Sopenharmony_ci                "sqxtun v1.4h, "
3457b8021494Sopenharmony_ci                "v2.4s");
3458b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtun(v2.V2S(), v3.V2D()),
3459b8021494Sopenharmony_ci                "sqxtun v2.2s, "
3460b8021494Sopenharmony_ci                "v3.2d");
3461b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtun2(v0.V16B(), v1.V8H()),
3462b8021494Sopenharmony_ci                "sqxtun2 v0.16b, "
3463b8021494Sopenharmony_ci                "v1.8h");
3464b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtun2(v1.V8H(), v2.V4S()),
3465b8021494Sopenharmony_ci                "sqxtun2 v1.8h, "
3466b8021494Sopenharmony_ci                "v2.4s");
3467b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtun2(v2.V4S(), v3.V2D()),
3468b8021494Sopenharmony_ci                "sqxtun2 v2.4s, "
3469b8021494Sopenharmony_ci                "v3.2d");
3470b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtun(b19, h0), "sqxtun b19, h0");
3471b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtun(h20, s0), "sqxtun h20, s0");
3472b8021494Sopenharmony_ci  COMPARE_MACRO(Sqxtun(s21, d0), "sqxtun s21, d0");
3473b8021494Sopenharmony_ci
3474b8021494Sopenharmony_ci  COMPARE_MACRO(Cls(v1.V8B(), v8.V8B()),
3475b8021494Sopenharmony_ci                "cls v1.8b, "
3476b8021494Sopenharmony_ci                "v8.8b");
3477b8021494Sopenharmony_ci  COMPARE_MACRO(Cls(v2.V16B(), v9.V16B()),
3478b8021494Sopenharmony_ci                "cls v2.16b, "
3479b8021494Sopenharmony_ci                "v9.16b");
3480b8021494Sopenharmony_ci  COMPARE_MACRO(Cls(v3.V4H(), v1.V4H()),
3481b8021494Sopenharmony_ci                "cls v3.4h, "
3482b8021494Sopenharmony_ci                "v1.4h");
3483b8021494Sopenharmony_ci  COMPARE_MACRO(Cls(v4.V8H(), v2.V8H()),
3484b8021494Sopenharmony_ci                "cls v4.8h, "
3485b8021494Sopenharmony_ci                "v2.8h");
3486b8021494Sopenharmony_ci  COMPARE_MACRO(Cls(v5.V2S(), v3.V2S()),
3487b8021494Sopenharmony_ci                "cls v5.2s, "
3488b8021494Sopenharmony_ci                "v3.2s");
3489b8021494Sopenharmony_ci  COMPARE_MACRO(Cls(v6.V4S(), v4.V4S()),
3490b8021494Sopenharmony_ci                "cls v6.4s, "
3491b8021494Sopenharmony_ci                "v4.4s");
3492b8021494Sopenharmony_ci
3493b8021494Sopenharmony_ci  COMPARE_MACRO(Clz(v1.V8B(), v8.V8B()),
3494b8021494Sopenharmony_ci                "clz v1.8b, "
3495b8021494Sopenharmony_ci                "v8.8b");
3496b8021494Sopenharmony_ci  COMPARE_MACRO(Clz(v2.V16B(), v9.V16B()),
3497b8021494Sopenharmony_ci                "clz v2.16b, "
3498b8021494Sopenharmony_ci                "v9.16b");
3499b8021494Sopenharmony_ci  COMPARE_MACRO(Clz(v3.V4H(), v1.V4H()),
3500b8021494Sopenharmony_ci                "clz v3.4h, "
3501b8021494Sopenharmony_ci                "v1.4h");
3502b8021494Sopenharmony_ci  COMPARE_MACRO(Clz(v4.V8H(), v2.V8H()),
3503b8021494Sopenharmony_ci                "clz v4.8h, "
3504b8021494Sopenharmony_ci                "v2.8h");
3505b8021494Sopenharmony_ci  COMPARE_MACRO(Clz(v5.V2S(), v3.V2S()),
3506b8021494Sopenharmony_ci                "clz v5.2s, "
3507b8021494Sopenharmony_ci                "v3.2s");
3508b8021494Sopenharmony_ci  COMPARE_MACRO(Clz(v6.V4S(), v4.V4S()),
3509b8021494Sopenharmony_ci                "clz v6.4s, "
3510b8021494Sopenharmony_ci                "v4.4s");
3511b8021494Sopenharmony_ci
3512b8021494Sopenharmony_ci  COMPARE_MACRO(Cnt(v1.V8B(), v8.V8B()),
3513b8021494Sopenharmony_ci                "cnt v1.8b, "
3514b8021494Sopenharmony_ci                "v8.8b");
3515b8021494Sopenharmony_ci  COMPARE_MACRO(Cnt(v2.V16B(), v9.V16B()),
3516b8021494Sopenharmony_ci                "cnt v2.16b, "
3517b8021494Sopenharmony_ci                "v9.16b");
3518b8021494Sopenharmony_ci
3519b8021494Sopenharmony_ci  COMPARE_MACRO(Mvn(v4.V8B(), v5.V8B()),
3520b8021494Sopenharmony_ci                "mvn v4.8b, "
3521b8021494Sopenharmony_ci                "v5.8b");
3522b8021494Sopenharmony_ci  COMPARE_MACRO(Mvn(v4.V16B(), v5.V16B()),
3523b8021494Sopenharmony_ci                "mvn v4.16b, "
3524b8021494Sopenharmony_ci                "v5.16b");
3525b8021494Sopenharmony_ci
3526b8021494Sopenharmony_ci  COMPARE_MACRO(Not(v4.V8B(), v5.V8B()),
3527b8021494Sopenharmony_ci                "mvn v4.8b, "
3528b8021494Sopenharmony_ci                "v5.8b");
3529b8021494Sopenharmony_ci  COMPARE_MACRO(Not(v4.V16B(), v5.V16B()),
3530b8021494Sopenharmony_ci                "mvn v4.16b, "
3531b8021494Sopenharmony_ci                "v5.16b");
3532b8021494Sopenharmony_ci
3533b8021494Sopenharmony_ci  COMPARE_MACRO(Rev64(v1.V8B(), v8.V8B()),
3534b8021494Sopenharmony_ci                "rev64 v1.8b, "
3535b8021494Sopenharmony_ci                "v8.8b");
3536b8021494Sopenharmony_ci  COMPARE_MACRO(Rev64(v2.V16B(), v9.V16B()),
3537b8021494Sopenharmony_ci                "rev64 v2.16b, "
3538b8021494Sopenharmony_ci                "v9.16b");
3539b8021494Sopenharmony_ci  COMPARE_MACRO(Rev64(v3.V4H(), v1.V4H()),
3540b8021494Sopenharmony_ci                "rev64 v3.4h, "
3541b8021494Sopenharmony_ci                "v1.4h");
3542b8021494Sopenharmony_ci  COMPARE_MACRO(Rev64(v4.V8H(), v2.V8H()),
3543b8021494Sopenharmony_ci                "rev64 v4.8h, "
3544b8021494Sopenharmony_ci                "v2.8h");
3545b8021494Sopenharmony_ci  COMPARE_MACRO(Rev64(v5.V2S(), v3.V2S()),
3546b8021494Sopenharmony_ci                "rev64 v5.2s, "
3547b8021494Sopenharmony_ci                "v3.2s");
3548b8021494Sopenharmony_ci  COMPARE_MACRO(Rev64(v6.V4S(), v4.V4S()),
3549b8021494Sopenharmony_ci                "rev64 v6.4s, "
3550b8021494Sopenharmony_ci                "v4.4s");
3551b8021494Sopenharmony_ci
3552b8021494Sopenharmony_ci  COMPARE_MACRO(Rev32(v1.V8B(), v8.V8B()),
3553b8021494Sopenharmony_ci                "rev32 v1.8b, "
3554b8021494Sopenharmony_ci                "v8.8b");
3555b8021494Sopenharmony_ci  COMPARE_MACRO(Rev32(v2.V16B(), v9.V16B()),
3556b8021494Sopenharmony_ci                "rev32 v2.16b, "
3557b8021494Sopenharmony_ci                "v9.16b");
3558b8021494Sopenharmony_ci  COMPARE_MACRO(Rev32(v3.V4H(), v1.V4H()),
3559b8021494Sopenharmony_ci                "rev32 v3.4h, "
3560b8021494Sopenharmony_ci                "v1.4h");
3561b8021494Sopenharmony_ci  COMPARE_MACRO(Rev32(v4.V8H(), v2.V8H()),
3562b8021494Sopenharmony_ci                "rev32 v4.8h, "
3563b8021494Sopenharmony_ci                "v2.8h");
3564b8021494Sopenharmony_ci
3565b8021494Sopenharmony_ci  COMPARE_MACRO(Rev16(v1.V8B(), v8.V8B()),
3566b8021494Sopenharmony_ci                "rev16 v1.8b, "
3567b8021494Sopenharmony_ci                "v8.8b");
3568b8021494Sopenharmony_ci  COMPARE_MACRO(Rev16(v2.V16B(), v9.V16B()),
3569b8021494Sopenharmony_ci                "rev16 v2.16b, "
3570b8021494Sopenharmony_ci                "v9.16b");
3571b8021494Sopenharmony_ci
3572b8021494Sopenharmony_ci  COMPARE_MACRO(Rbit(v1.V8B(), v8.V8B()),
3573b8021494Sopenharmony_ci                "rbit v1.8b, "
3574b8021494Sopenharmony_ci                "v8.8b");
3575b8021494Sopenharmony_ci  COMPARE_MACRO(Rbit(v2.V16B(), v9.V16B()),
3576b8021494Sopenharmony_ci                "rbit v2.16b, "
3577b8021494Sopenharmony_ci                "v9.16b");
3578b8021494Sopenharmony_ci
3579b8021494Sopenharmony_ci  COMPARE_MACRO(Ursqrte(v2.V2S(), v9.V2S()),
3580b8021494Sopenharmony_ci                "ursqrte v2.2s, "
3581b8021494Sopenharmony_ci                "v9.2s");
3582b8021494Sopenharmony_ci  COMPARE_MACRO(Ursqrte(v16.V4S(), v23.V4S()),
3583b8021494Sopenharmony_ci                "ursqrte v16.4s, "
3584b8021494Sopenharmony_ci                "v23.4s");
3585b8021494Sopenharmony_ci
3586b8021494Sopenharmony_ci  COMPARE_MACRO(Urecpe(v2.V2S(), v9.V2S()),
3587b8021494Sopenharmony_ci                "urecpe v2.2s, "
3588b8021494Sopenharmony_ci                "v9.2s");
3589b8021494Sopenharmony_ci  COMPARE_MACRO(Urecpe(v16.V4S(), v23.V4S()),
3590b8021494Sopenharmony_ci                "urecpe v16.4s, "
3591b8021494Sopenharmony_ci                "v23.4s");
3592b8021494Sopenharmony_ci
3593b8021494Sopenharmony_ci  COMPARE_MACRO(Frsqrte(v2.V2S(), v9.V2S()),
3594b8021494Sopenharmony_ci                "frsqrte v2.2s, "
3595b8021494Sopenharmony_ci                "v9.2s");
3596b8021494Sopenharmony_ci  COMPARE_MACRO(Frsqrte(v16.V4S(), v23.V4S()),
3597b8021494Sopenharmony_ci                "frsqrte v16.4s, "
3598b8021494Sopenharmony_ci                "v23.4s");
3599b8021494Sopenharmony_ci  COMPARE_MACRO(Frsqrte(v2.V2D(), v9.V2D()),
3600b8021494Sopenharmony_ci                "frsqrte v2.2d, "
3601b8021494Sopenharmony_ci                "v9.2d");
3602b8021494Sopenharmony_ci  COMPARE_MACRO(Frsqrte(v0.S(), v1.S()), "frsqrte s0, s1");
3603b8021494Sopenharmony_ci  COMPARE_MACRO(Frsqrte(v0.D(), v1.D()), "frsqrte d0, d1");
3604b8021494Sopenharmony_ci
3605b8021494Sopenharmony_ci  COMPARE_MACRO(Frecpe(v2.V2S(), v9.V2S()),
3606b8021494Sopenharmony_ci                "frecpe v2.2s, "
3607b8021494Sopenharmony_ci                "v9.2s");
3608b8021494Sopenharmony_ci  COMPARE_MACRO(Frecpe(v16.V4S(), v23.V4S()),
3609b8021494Sopenharmony_ci                "frecpe v16.4s, "
3610b8021494Sopenharmony_ci                "v23.4s");
3611b8021494Sopenharmony_ci  COMPARE_MACRO(Frecpe(v2.V2D(), v9.V2D()),
3612b8021494Sopenharmony_ci                "frecpe v2.2d, "
3613b8021494Sopenharmony_ci                "v9.2d");
3614b8021494Sopenharmony_ci  COMPARE_MACRO(Frecpe(v0.S(), v1.S()), "frecpe s0, s1");
3615b8021494Sopenharmony_ci  COMPARE_MACRO(Frecpe(v0.D(), v1.D()), "frecpe d0, d1");
3616b8021494Sopenharmony_ci
3617b8021494Sopenharmony_ci  COMPARE_MACRO(Fabs(v2.V2S(), v9.V2S()),
3618b8021494Sopenharmony_ci                "fabs v2.2s, "
3619b8021494Sopenharmony_ci                "v9.2s");
3620b8021494Sopenharmony_ci  COMPARE_MACRO(Fabs(v16.V4S(), v23.V4S()),
3621b8021494Sopenharmony_ci                "fabs v16.4s, "
3622b8021494Sopenharmony_ci                "v23.4s");
3623b8021494Sopenharmony_ci  COMPARE_MACRO(Fabs(v31.V2D(), v30.V2D()),
3624b8021494Sopenharmony_ci                "fabs v31.2d, "
3625b8021494Sopenharmony_ci                "v30.2d");
3626b8021494Sopenharmony_ci
3627b8021494Sopenharmony_ci  COMPARE_MACRO(Fneg(v2.V2S(), v9.V2S()),
3628b8021494Sopenharmony_ci                "fneg v2.2s, "
3629b8021494Sopenharmony_ci                "v9.2s");
3630b8021494Sopenharmony_ci  COMPARE_MACRO(Fneg(v16.V4S(), v23.V4S()),
3631b8021494Sopenharmony_ci                "fneg v16.4s, "
3632b8021494Sopenharmony_ci                "v23.4s");
3633b8021494Sopenharmony_ci  COMPARE_MACRO(Fneg(v31.V2D(), v30.V2D()),
3634b8021494Sopenharmony_ci                "fneg v31.2d, "
3635b8021494Sopenharmony_ci                "v30.2d");
3636b8021494Sopenharmony_ci
3637b8021494Sopenharmony_ci  COMPARE_MACRO(Frint32x(v2.V2S(), v9.V2S()),
3638b8021494Sopenharmony_ci                "frint32x v2.2s, "
3639b8021494Sopenharmony_ci                "v9.2s");
3640b8021494Sopenharmony_ci  COMPARE_MACRO(Frint32x(v16.V4S(), v23.V4S()),
3641b8021494Sopenharmony_ci                "frint32x v16.4s, "
3642b8021494Sopenharmony_ci                "v23.4s");
3643b8021494Sopenharmony_ci  COMPARE_MACRO(Frint32x(v31.V2D(), v30.V2D()),
3644b8021494Sopenharmony_ci                "frint32x v31.2d, "
3645b8021494Sopenharmony_ci                "v30.2d");
3646b8021494Sopenharmony_ci
3647b8021494Sopenharmony_ci  COMPARE_MACRO(Frint32z(v2.V2S(), v9.V2S()),
3648b8021494Sopenharmony_ci                "frint32z v2.2s, "
3649b8021494Sopenharmony_ci                "v9.2s");
3650b8021494Sopenharmony_ci  COMPARE_MACRO(Frint32z(v16.V4S(), v23.V4S()),
3651b8021494Sopenharmony_ci                "frint32z v16.4s, "
3652b8021494Sopenharmony_ci                "v23.4s");
3653b8021494Sopenharmony_ci  COMPARE_MACRO(Frint32z(v31.V2D(), v30.V2D()),
3654b8021494Sopenharmony_ci                "frint32z v31.2d, "
3655b8021494Sopenharmony_ci                "v30.2d");
3656b8021494Sopenharmony_ci
3657b8021494Sopenharmony_ci  COMPARE_MACRO(Frint64x(v3.V2S(), v10.V2S()),
3658b8021494Sopenharmony_ci                "frint64x v3.2s, "
3659b8021494Sopenharmony_ci                "v10.2s");
3660b8021494Sopenharmony_ci  COMPARE_MACRO(Frint64x(v17.V4S(), v24.V4S()),
3661b8021494Sopenharmony_ci                "frint64x v17.4s, "
3662b8021494Sopenharmony_ci                "v24.4s");
3663b8021494Sopenharmony_ci  COMPARE_MACRO(Frint64x(v30.V2D(), v29.V2D()),
3664b8021494Sopenharmony_ci                "frint64x v30.2d, "
3665b8021494Sopenharmony_ci                "v29.2d");
3666b8021494Sopenharmony_ci
3667b8021494Sopenharmony_ci  COMPARE_MACRO(Frint64z(v4.V2S(), v11.V2S()),
3668b8021494Sopenharmony_ci                "frint64z v4.2s, "
3669b8021494Sopenharmony_ci                "v11.2s");
3670b8021494Sopenharmony_ci  COMPARE_MACRO(Frint64z(v18.V4S(), v25.V4S()),
3671b8021494Sopenharmony_ci                "frint64z v18.4s, "
3672b8021494Sopenharmony_ci                "v25.4s");
3673b8021494Sopenharmony_ci  COMPARE_MACRO(Frint64z(v29.V2D(), v28.V2D()),
3674b8021494Sopenharmony_ci                "frint64z v29.2d, "
3675b8021494Sopenharmony_ci                "v28.2d");
3676b8021494Sopenharmony_ci
3677b8021494Sopenharmony_ci  COMPARE_MACRO(Frintn(v2.V2S(), v9.V2S()),
3678b8021494Sopenharmony_ci                "frintn v2.2s, "
3679b8021494Sopenharmony_ci                "v9.2s");
3680b8021494Sopenharmony_ci  COMPARE_MACRO(Frintn(v16.V4S(), v23.V4S()),
3681b8021494Sopenharmony_ci                "frintn v16.4s, "
3682b8021494Sopenharmony_ci                "v23.4s");
3683b8021494Sopenharmony_ci  COMPARE_MACRO(Frintn(v31.V2D(), v30.V2D()),
3684b8021494Sopenharmony_ci                "frintn v31.2d, "
3685b8021494Sopenharmony_ci                "v30.2d");
3686b8021494Sopenharmony_ci
3687b8021494Sopenharmony_ci  COMPARE_MACRO(Frinta(v2.V2S(), v9.V2S()),
3688b8021494Sopenharmony_ci                "frinta v2.2s, "
3689b8021494Sopenharmony_ci                "v9.2s");
3690b8021494Sopenharmony_ci  COMPARE_MACRO(Frinta(v16.V4S(), v23.V4S()),
3691b8021494Sopenharmony_ci                "frinta v16.4s, "
3692b8021494Sopenharmony_ci                "v23.4s");
3693b8021494Sopenharmony_ci  COMPARE_MACRO(Frinta(v31.V2D(), v30.V2D()),
3694b8021494Sopenharmony_ci                "frinta v31.2d, "
3695b8021494Sopenharmony_ci                "v30.2d");
3696b8021494Sopenharmony_ci
3697b8021494Sopenharmony_ci  COMPARE_MACRO(Frintp(v2.V2S(), v9.V2S()),
3698b8021494Sopenharmony_ci                "frintp v2.2s, "
3699b8021494Sopenharmony_ci                "v9.2s");
3700b8021494Sopenharmony_ci  COMPARE_MACRO(Frintp(v16.V4S(), v23.V4S()),
3701b8021494Sopenharmony_ci                "frintp v16.4s, "
3702b8021494Sopenharmony_ci                "v23.4s");
3703b8021494Sopenharmony_ci  COMPARE_MACRO(Frintp(v31.V2D(), v30.V2D()),
3704b8021494Sopenharmony_ci                "frintp v31.2d, "
3705b8021494Sopenharmony_ci                "v30.2d");
3706b8021494Sopenharmony_ci
3707b8021494Sopenharmony_ci  COMPARE_MACRO(Frintm(v2.V2S(), v9.V2S()),
3708b8021494Sopenharmony_ci                "frintm v2.2s, "
3709b8021494Sopenharmony_ci                "v9.2s");
3710b8021494Sopenharmony_ci  COMPARE_MACRO(Frintm(v16.V4S(), v23.V4S()),
3711b8021494Sopenharmony_ci                "frintm v16.4s, "
3712b8021494Sopenharmony_ci                "v23.4s");
3713b8021494Sopenharmony_ci  COMPARE_MACRO(Frintm(v31.V2D(), v30.V2D()),
3714b8021494Sopenharmony_ci                "frintm v31.2d, "
3715b8021494Sopenharmony_ci                "v30.2d");
3716b8021494Sopenharmony_ci
3717b8021494Sopenharmony_ci  COMPARE_MACRO(Frintx(v2.V2S(), v9.V2S()),
3718b8021494Sopenharmony_ci                "frintx v2.2s, "
3719b8021494Sopenharmony_ci                "v9.2s");
3720b8021494Sopenharmony_ci  COMPARE_MACRO(Frintx(v16.V4S(), v23.V4S()),
3721b8021494Sopenharmony_ci                "frintx v16.4s, "
3722b8021494Sopenharmony_ci                "v23.4s");
3723b8021494Sopenharmony_ci  COMPARE_MACRO(Frintx(v31.V2D(), v30.V2D()),
3724b8021494Sopenharmony_ci                "frintx v31.2d, "
3725b8021494Sopenharmony_ci                "v30.2d");
3726b8021494Sopenharmony_ci
3727b8021494Sopenharmony_ci  COMPARE_MACRO(Frintz(v2.V2S(), v9.V2S()),
3728b8021494Sopenharmony_ci                "frintz v2.2s, "
3729b8021494Sopenharmony_ci                "v9.2s");
3730b8021494Sopenharmony_ci  COMPARE_MACRO(Frintz(v16.V4S(), v23.V4S()),
3731b8021494Sopenharmony_ci                "frintz v16.4s, "
3732b8021494Sopenharmony_ci                "v23.4s");
3733b8021494Sopenharmony_ci  COMPARE_MACRO(Frintz(v31.V2D(), v30.V2D()),
3734b8021494Sopenharmony_ci                "frintz v31.2d, "
3735b8021494Sopenharmony_ci                "v30.2d");
3736b8021494Sopenharmony_ci
3737b8021494Sopenharmony_ci  COMPARE_MACRO(Frinti(v2.V2S(), v9.V2S()),
3738b8021494Sopenharmony_ci                "frinti v2.2s, "
3739b8021494Sopenharmony_ci                "v9.2s");
3740b8021494Sopenharmony_ci  COMPARE_MACRO(Frinti(v16.V4S(), v23.V4S()),
3741b8021494Sopenharmony_ci                "frinti v16.4s, "
3742b8021494Sopenharmony_ci                "v23.4s");
3743b8021494Sopenharmony_ci  COMPARE_MACRO(Frinti(v31.V2D(), v30.V2D()),
3744b8021494Sopenharmony_ci                "frinti v31.2d, "
3745b8021494Sopenharmony_ci                "v30.2d");
3746b8021494Sopenharmony_ci
3747b8021494Sopenharmony_ci  COMPARE_MACRO(Fsqrt(v3.V2S(), v10.V2S()),
3748b8021494Sopenharmony_ci                "fsqrt v3.2s, "
3749b8021494Sopenharmony_ci                "v10.2s");
3750b8021494Sopenharmony_ci  COMPARE_MACRO(Fsqrt(v22.V4S(), v11.V4S()),
3751b8021494Sopenharmony_ci                "fsqrt v22.4s, "
3752b8021494Sopenharmony_ci                "v11.4s");
3753b8021494Sopenharmony_ci  COMPARE_MACRO(Fsqrt(v31.V2D(), v0.V2D()),
3754b8021494Sopenharmony_ci                "fsqrt v31.2d, "
3755b8021494Sopenharmony_ci                "v0.2d");
3756b8021494Sopenharmony_ci
3757b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtns(v4.V2S(), v11.V2S()),
3758b8021494Sopenharmony_ci                "fcvtns v4.2s, "
3759b8021494Sopenharmony_ci                "v11.2s");
3760b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtns(v23.V4S(), v12.V4S()),
3761b8021494Sopenharmony_ci                "fcvtns v23.4s, "
3762b8021494Sopenharmony_ci                "v12.4s");
3763b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtns(v30.V2D(), v1.V2D()),
3764b8021494Sopenharmony_ci                "fcvtns v30.2d, "
3765b8021494Sopenharmony_ci                "v1.2d");
3766b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtnu(v4.V2S(), v11.V2S()),
3767b8021494Sopenharmony_ci                "fcvtnu v4.2s, "
3768b8021494Sopenharmony_ci                "v11.2s");
3769b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtnu(v23.V4S(), v12.V4S()),
3770b8021494Sopenharmony_ci                "fcvtnu v23.4s, "
3771b8021494Sopenharmony_ci                "v12.4s");
3772b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtnu(v30.V2D(), v1.V2D()),
3773b8021494Sopenharmony_ci                "fcvtnu v30.2d, "
3774b8021494Sopenharmony_ci                "v1.2d");
3775b8021494Sopenharmony_ci
3776b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtps(v4.V2S(), v11.V2S()),
3777b8021494Sopenharmony_ci                "fcvtps v4.2s, "
3778b8021494Sopenharmony_ci                "v11.2s");
3779b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtps(v23.V4S(), v12.V4S()),
3780b8021494Sopenharmony_ci                "fcvtps v23.4s, "
3781b8021494Sopenharmony_ci                "v12.4s");
3782b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtps(v30.V2D(), v1.V2D()),
3783b8021494Sopenharmony_ci                "fcvtps v30.2d, "
3784b8021494Sopenharmony_ci                "v1.2d");
3785b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtpu(v4.V2S(), v11.V2S()),
3786b8021494Sopenharmony_ci                "fcvtpu v4.2s, "
3787b8021494Sopenharmony_ci                "v11.2s");
3788b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtpu(v23.V4S(), v12.V4S()),
3789b8021494Sopenharmony_ci                "fcvtpu v23.4s, "
3790b8021494Sopenharmony_ci                "v12.4s");
3791b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtpu(v30.V2D(), v1.V2D()),
3792b8021494Sopenharmony_ci                "fcvtpu v30.2d, "
3793b8021494Sopenharmony_ci                "v1.2d");
3794b8021494Sopenharmony_ci
3795b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtms(v4.V2S(), v11.V2S()),
3796b8021494Sopenharmony_ci                "fcvtms v4.2s, "
3797b8021494Sopenharmony_ci                "v11.2s");
3798b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtms(v23.V4S(), v12.V4S()),
3799b8021494Sopenharmony_ci                "fcvtms v23.4s, "
3800b8021494Sopenharmony_ci                "v12.4s");
3801b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtms(v30.V2D(), v1.V2D()),
3802b8021494Sopenharmony_ci                "fcvtms v30.2d, "
3803b8021494Sopenharmony_ci                "v1.2d");
3804b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtmu(v4.V2S(), v11.V2S()),
3805b8021494Sopenharmony_ci                "fcvtmu v4.2s, "
3806b8021494Sopenharmony_ci                "v11.2s");
3807b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtmu(v23.V4S(), v12.V4S()),
3808b8021494Sopenharmony_ci                "fcvtmu v23.4s, "
3809b8021494Sopenharmony_ci                "v12.4s");
3810b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtmu(v30.V2D(), v1.V2D()),
3811b8021494Sopenharmony_ci                "fcvtmu v30.2d, "
3812b8021494Sopenharmony_ci                "v1.2d");
3813b8021494Sopenharmony_ci
3814b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzs(v4.V2S(), v11.V2S()),
3815b8021494Sopenharmony_ci                "fcvtzs v4.2s, "
3816b8021494Sopenharmony_ci                "v11.2s");
3817b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzs(v23.V4S(), v12.V4S()),
3818b8021494Sopenharmony_ci                "fcvtzs v23.4s, "
3819b8021494Sopenharmony_ci                "v12.4s");
3820b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzs(v30.V2D(), v1.V2D()),
3821b8021494Sopenharmony_ci                "fcvtzs v30.2d, "
3822b8021494Sopenharmony_ci                "v1.2d");
3823b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzu(v4.V2S(), v11.V2S()),
3824b8021494Sopenharmony_ci                "fcvtzu v4.2s, "
3825b8021494Sopenharmony_ci                "v11.2s");
3826b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzu(v23.V4S(), v12.V4S()),
3827b8021494Sopenharmony_ci                "fcvtzu v23.4s, "
3828b8021494Sopenharmony_ci                "v12.4s");
3829b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzu(v30.V2D(), v1.V2D()),
3830b8021494Sopenharmony_ci                "fcvtzu v30.2d, "
3831b8021494Sopenharmony_ci                "v1.2d");
3832b8021494Sopenharmony_ci
3833b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtas(v4.V2S(), v11.V2S()),
3834b8021494Sopenharmony_ci                "fcvtas v4.2s, "
3835b8021494Sopenharmony_ci                "v11.2s");
3836b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtas(v23.V4S(), v12.V4S()),
3837b8021494Sopenharmony_ci                "fcvtas v23.4s, "
3838b8021494Sopenharmony_ci                "v12.4s");
3839b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtas(v30.V2D(), v1.V2D()),
3840b8021494Sopenharmony_ci                "fcvtas v30.2d, "
3841b8021494Sopenharmony_ci                "v1.2d");
3842b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtau(v4.V2S(), v11.V2S()),
3843b8021494Sopenharmony_ci                "fcvtau v4.2s, "
3844b8021494Sopenharmony_ci                "v11.2s");
3845b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtau(v23.V4S(), v12.V4S()),
3846b8021494Sopenharmony_ci                "fcvtau v23.4s, "
3847b8021494Sopenharmony_ci                "v12.4s");
3848b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtau(v30.V2D(), v1.V2D()),
3849b8021494Sopenharmony_ci                "fcvtau v30.2d, "
3850b8021494Sopenharmony_ci                "v1.2d");
3851b8021494Sopenharmony_ci
3852b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtns(s0, s1), "fcvtns s0, s1");
3853b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtns(d2, d3), "fcvtns d2, d3");
3854b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtnu(s4, s5), "fcvtnu s4, s5");
3855b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtnu(d6, d7), "fcvtnu d6, d7");
3856b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtps(s8, s9), "fcvtps s8, s9");
3857b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtps(d10, d11), "fcvtps d10, d11");
3858b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtpu(s12, s13), "fcvtpu s12, s13");
3859b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtpu(d14, d15), "fcvtpu d14, d15");
3860b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtms(s16, s17), "fcvtms s16, s17");
3861b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtms(d18, d19), "fcvtms d18, d19");
3862b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtmu(s20, s21), "fcvtmu s20, s21");
3863b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtmu(d22, d23), "fcvtmu d22, d23");
3864b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzs(s24, s25), "fcvtzs s24, s25");
3865b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzs(d26, d27), "fcvtzs d26, d27");
3866b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzu(s28, s29), "fcvtzu s28, s29");
3867b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzu(d30, d31), "fcvtzu d30, d31");
3868b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtas(s0, s1), "fcvtas s0, s1");
3869b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtas(d2, d3), "fcvtas d2, d3");
3870b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtau(s4, s5), "fcvtau s4, s5");
3871b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtau(d6, d7), "fcvtau d6, d7");
3872b8021494Sopenharmony_ci
3873b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtl(v3.V4S(), v5.V4H()),
3874b8021494Sopenharmony_ci                "fcvtl v3.4s, "
3875b8021494Sopenharmony_ci                "v5.4h");
3876b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtl(v7.V2D(), v11.V2S()),
3877b8021494Sopenharmony_ci                "fcvtl v7.2d, "
3878b8021494Sopenharmony_ci                "v11.2s");
3879b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtl2(v13.V4S(), v17.V8H()),
3880b8021494Sopenharmony_ci                "fcvtl2 v13.4s, "
3881b8021494Sopenharmony_ci                "v17.8h");
3882b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtl2(v23.V2D(), v29.V4S()),
3883b8021494Sopenharmony_ci                "fcvtl2 v23.2d, "
3884b8021494Sopenharmony_ci                "v29.4s");
3885b8021494Sopenharmony_ci
3886b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtn(v3.V4H(), v5.V4S()),
3887b8021494Sopenharmony_ci                "fcvtn v3.4h, "
3888b8021494Sopenharmony_ci                "v5.4s");
3889b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtn(v7.V2S(), v11.V2D()),
3890b8021494Sopenharmony_ci                "fcvtn v7.2s, "
3891b8021494Sopenharmony_ci                "v11.2d");
3892b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtn2(v13.V8H(), v17.V4S()),
3893b8021494Sopenharmony_ci                "fcvtn2 v13.8h, "
3894b8021494Sopenharmony_ci                "v17.4s");
3895b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtn2(v23.V4S(), v29.V2D()),
3896b8021494Sopenharmony_ci                "fcvtn2 v23.4s, "
3897b8021494Sopenharmony_ci                "v29.2d");
3898b8021494Sopenharmony_ci
3899b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtxn(v5.V2S(), v7.V2D()),
3900b8021494Sopenharmony_ci                "fcvtxn v5.2s, "
3901b8021494Sopenharmony_ci                "v7.2d");
3902b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtxn2(v8.V4S(), v13.V2D()),
3903b8021494Sopenharmony_ci                "fcvtxn2 v8.4s, "
3904b8021494Sopenharmony_ci                "v13.2d");
3905b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtxn(s17, d31), "fcvtxn s17, d31");
3906b8021494Sopenharmony_ci
3907b8021494Sopenharmony_ci  COMPARE_MACRO(Frecpx(s0, s1), "frecpx s0, s1");
3908b8021494Sopenharmony_ci  COMPARE_MACRO(Frecpx(s31, s30), "frecpx s31, s30");
3909b8021494Sopenharmony_ci  COMPARE_MACRO(Frecpx(d2, d3), "frecpx d2, d3");
3910b8021494Sopenharmony_ci  COMPARE_MACRO(Frecpx(d31, d30), "frecpx d31, d30");
3911b8021494Sopenharmony_ci
3912b8021494Sopenharmony_ci  COMPARE_MACRO(Scvtf(v5.V2S(), v3.V2S()),
3913b8021494Sopenharmony_ci                "scvtf v5.2s, "
3914b8021494Sopenharmony_ci                "v3.2s");
3915b8021494Sopenharmony_ci  COMPARE_MACRO(Scvtf(v6.V4S(), v4.V4S()),
3916b8021494Sopenharmony_ci                "scvtf v6.4s, "
3917b8021494Sopenharmony_ci                "v4.4s");
3918b8021494Sopenharmony_ci  COMPARE_MACRO(Scvtf(v7.V2D(), v5.V2D()),
3919b8021494Sopenharmony_ci                "scvtf v7.2d, "
3920b8021494Sopenharmony_ci                "v5.2d");
3921b8021494Sopenharmony_ci  COMPARE_MACRO(Scvtf(s8, s6), "scvtf s8, s6");
3922b8021494Sopenharmony_ci  COMPARE_MACRO(Scvtf(d8, d6), "scvtf d8, d6");
3923b8021494Sopenharmony_ci
3924b8021494Sopenharmony_ci  COMPARE_MACRO(Ucvtf(v5.V2S(), v3.V2S()),
3925b8021494Sopenharmony_ci                "ucvtf v5.2s, "
3926b8021494Sopenharmony_ci                "v3.2s");
3927b8021494Sopenharmony_ci  COMPARE_MACRO(Ucvtf(v6.V4S(), v4.V4S()),
3928b8021494Sopenharmony_ci                "ucvtf v6.4s, "
3929b8021494Sopenharmony_ci                "v4.4s");
3930b8021494Sopenharmony_ci  COMPARE_MACRO(Ucvtf(v7.V2D(), v5.V2D()),
3931b8021494Sopenharmony_ci                "ucvtf v7.2d, "
3932b8021494Sopenharmony_ci                "v5.2d");
3933b8021494Sopenharmony_ci  COMPARE_MACRO(Ucvtf(s8, s6), "ucvtf s8, s6");
3934b8021494Sopenharmony_ci  COMPARE_MACRO(Ucvtf(d8, d6), "ucvtf d8, d6");
3935b8021494Sopenharmony_ci
3936b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS) \
3937b8021494Sopenharmony_ci  COMPARE_MACRO(Saddlp(v0.TA, v1.TB), "saddlp v0." TAS ", v1." TBS);
3938b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LP(DISASM_INST)
3939b8021494Sopenharmony_ci#undef DISASM_INST
3940b8021494Sopenharmony_ci
3941b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS) \
3942b8021494Sopenharmony_ci  COMPARE_MACRO(Uaddlp(v0.TA, v1.TB), "uaddlp v0." TAS ", v1." TBS);
3943b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LP(DISASM_INST)
3944b8021494Sopenharmony_ci#undef DISASM_INST
3945b8021494Sopenharmony_ci
3946b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS) \
3947b8021494Sopenharmony_ci  COMPARE_MACRO(Sadalp(v0.TA, v1.TB), "sadalp v0." TAS ", v1." TBS);
3948b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LP(DISASM_INST)
3949b8021494Sopenharmony_ci#undef DISASM_INST
3950b8021494Sopenharmony_ci
3951b8021494Sopenharmony_ci#define DISASM_INST(TA, TAS, TB, TBS) \
3952b8021494Sopenharmony_ci  COMPARE_MACRO(Uadalp(v0.TA, v1.TB), "uadalp v0." TAS ", v1." TBS);
3953b8021494Sopenharmony_ci  NEON_FORMAT_LIST_LP(DISASM_INST)
3954b8021494Sopenharmony_ci#undef DISASM_INST
3955b8021494Sopenharmony_ci
3956b8021494Sopenharmony_ci  CLEANUP();
3957b8021494Sopenharmony_ci}
3958b8021494Sopenharmony_ci
3959b8021494Sopenharmony_ci#define COMPARE_2REGMISC_FP16(A, B)                            \
3960b8021494Sopenharmony_ci  COMPARE_MACRO(A(v2.V4H(), v9.V4H()), B " v2.4h, v9.4h");     \
3961b8021494Sopenharmony_ci  COMPARE_MACRO(A(v16.V8H(), v23.V8H()), B " v16.8h, v23.8h"); \
3962b8021494Sopenharmony_ci  COMPARE_MACRO(A(h5, h17), B " h5, h17")
3963b8021494Sopenharmony_ci
3964b8021494Sopenharmony_ci#define COMPARE_2REGMISC_CMP_FP16(A, B)                                 \
3965b8021494Sopenharmony_ci  COMPARE_MACRO(A(v2.V4H(), v9.V4H(), 0), B " v2.4h, v9.4h, #0.0");     \
3966b8021494Sopenharmony_ci  COMPARE_MACRO(A(v16.V8H(), v23.V8H(), 0), B " v16.8h, v23.8h, #0.0"); \
3967b8021494Sopenharmony_ci  COMPARE_MACRO(A(h5, h17, 0), B " h5, h17, #0.0")
3968b8021494Sopenharmony_ci
3969b8021494Sopenharmony_ciTEST(neon_2regmisc_fp16) {
3970b8021494Sopenharmony_ci  SETUP();
3971b8021494Sopenharmony_ci
3972b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Frintn, "frintn");
3973b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Frinta, "frinta");
3974b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Frintp, "frintp");
3975b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Frintm, "frintm");
3976b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Frintx, "frintx");
3977b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Frintz, "frintz");
3978b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Frinti, "frinti");
3979b8021494Sopenharmony_ci
3980b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Fcvtns, "fcvtns");
3981b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Fcvtnu, "fcvtnu");
3982b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Fcvtps, "fcvtps");
3983b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Fcvtpu, "fcvtpu");
3984b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Fcvtms, "fcvtms");
3985b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Fcvtmu, "fcvtmu");
3986b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Fcvtzs, "fcvtzs");
3987b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Fcvtzu, "fcvtzu");
3988b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Fcvtas, "fcvtas");
3989b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Fcvtau, "fcvtau");
3990b8021494Sopenharmony_ci
3991b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Scvtf, "scvtf");
3992b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Ucvtf, "ucvtf");
3993b8021494Sopenharmony_ci
3994b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Fabs, "fabs");
3995b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Frecpe, "frecpe");
3996b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Fneg, "fneg");
3997b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Frsqrte, "frsqrte");
3998b8021494Sopenharmony_ci  COMPARE_2REGMISC_FP16(Fsqrt, "fsqrt");
3999b8021494Sopenharmony_ci
4000b8021494Sopenharmony_ci  COMPARE_2REGMISC_CMP_FP16(Fcmeq, "fcmeq");
4001b8021494Sopenharmony_ci  COMPARE_2REGMISC_CMP_FP16(Fcmgt, "fcmgt");
4002b8021494Sopenharmony_ci  COMPARE_2REGMISC_CMP_FP16(Fcmge, "fcmge");
4003b8021494Sopenharmony_ci  COMPARE_2REGMISC_CMP_FP16(Fcmlt, "fcmlt");
4004b8021494Sopenharmony_ci  COMPARE_2REGMISC_CMP_FP16(Fcmle, "fcmle");
4005b8021494Sopenharmony_ci
4006b8021494Sopenharmony_ci  COMPARE_MACRO(Frecpx(h5, h17), "frecpx h5, h17");
4007b8021494Sopenharmony_ci
4008b8021494Sopenharmony_ci  CLEANUP();
4009b8021494Sopenharmony_ci}
4010b8021494Sopenharmony_ci
4011b8021494Sopenharmony_ciTEST(neon_acrosslanes) {
4012b8021494Sopenharmony_ci  SETUP();
4013b8021494Sopenharmony_ci
4014b8021494Sopenharmony_ci  COMPARE_MACRO(Smaxv(b4, v5.V8B()), "smaxv b4, v5.8b");
4015b8021494Sopenharmony_ci  COMPARE_MACRO(Smaxv(b4, v5.V16B()), "smaxv b4, v5.16b");
4016b8021494Sopenharmony_ci  COMPARE_MACRO(Smaxv(h4, v5.V4H()), "smaxv h4, v5.4h");
4017b8021494Sopenharmony_ci  COMPARE_MACRO(Smaxv(h4, v5.V8H()), "smaxv h4, v5.8h");
4018b8021494Sopenharmony_ci  COMPARE_MACRO(Smaxv(s4, v5.V4S()), "smaxv s4, v5.4s");
4019b8021494Sopenharmony_ci
4020b8021494Sopenharmony_ci  COMPARE_MACRO(Sminv(b4, v5.V8B()), "sminv b4, v5.8b");
4021b8021494Sopenharmony_ci  COMPARE_MACRO(Sminv(b4, v5.V16B()), "sminv b4, v5.16b");
4022b8021494Sopenharmony_ci  COMPARE_MACRO(Sminv(h4, v5.V4H()), "sminv h4, v5.4h");
4023b8021494Sopenharmony_ci  COMPARE_MACRO(Sminv(h4, v5.V8H()), "sminv h4, v5.8h");
4024b8021494Sopenharmony_ci  COMPARE_MACRO(Sminv(s4, v5.V4S()), "sminv s4, v5.4s");
4025b8021494Sopenharmony_ci
4026b8021494Sopenharmony_ci  COMPARE_MACRO(Umaxv(b4, v5.V8B()), "umaxv b4, v5.8b");
4027b8021494Sopenharmony_ci  COMPARE_MACRO(Umaxv(b4, v5.V16B()), "umaxv b4, v5.16b");
4028b8021494Sopenharmony_ci  COMPARE_MACRO(Umaxv(h4, v5.V4H()), "umaxv h4, v5.4h");
4029b8021494Sopenharmony_ci  COMPARE_MACRO(Umaxv(h4, v5.V8H()), "umaxv h4, v5.8h");
4030b8021494Sopenharmony_ci  COMPARE_MACRO(Umaxv(s4, v5.V4S()), "umaxv s4, v5.4s");
4031b8021494Sopenharmony_ci
4032b8021494Sopenharmony_ci  COMPARE_MACRO(Uminv(b4, v5.V8B()), "uminv b4, v5.8b");
4033b8021494Sopenharmony_ci  COMPARE_MACRO(Uminv(b4, v5.V16B()), "uminv b4, v5.16b");
4034b8021494Sopenharmony_ci  COMPARE_MACRO(Uminv(h4, v5.V4H()), "uminv h4, v5.4h");
4035b8021494Sopenharmony_ci  COMPARE_MACRO(Uminv(h4, v5.V8H()), "uminv h4, v5.8h");
4036b8021494Sopenharmony_ci  COMPARE_MACRO(Uminv(s4, v5.V4S()), "uminv s4, v5.4s");
4037b8021494Sopenharmony_ci
4038b8021494Sopenharmony_ci  COMPARE_MACRO(Addv(b4, v5.V8B()), "addv b4, v5.8b");
4039b8021494Sopenharmony_ci  COMPARE_MACRO(Addv(b4, v5.V16B()), "addv b4, v5.16b");
4040b8021494Sopenharmony_ci  COMPARE_MACRO(Addv(h4, v5.V4H()), "addv h4, v5.4h");
4041b8021494Sopenharmony_ci  COMPARE_MACRO(Addv(h4, v5.V8H()), "addv h4, v5.8h");
4042b8021494Sopenharmony_ci  COMPARE_MACRO(Addv(s4, v5.V4S()), "addv s4, v5.4s");
4043b8021494Sopenharmony_ci
4044b8021494Sopenharmony_ci  COMPARE_MACRO(Saddlv(h4, v5.V8B()), "saddlv h4, v5.8b");
4045b8021494Sopenharmony_ci  COMPARE_MACRO(Saddlv(h4, v5.V16B()), "saddlv h4, v5.16b");
4046b8021494Sopenharmony_ci  COMPARE_MACRO(Saddlv(s4, v5.V4H()), "saddlv s4, v5.4h");
4047b8021494Sopenharmony_ci  COMPARE_MACRO(Saddlv(s4, v5.V8H()), "saddlv s4, v5.8h");
4048b8021494Sopenharmony_ci  COMPARE_MACRO(Saddlv(d4, v5.V4S()), "saddlv d4, v5.4s");
4049b8021494Sopenharmony_ci
4050b8021494Sopenharmony_ci  COMPARE_MACRO(Uaddlv(h4, v5.V8B()), "uaddlv h4, v5.8b");
4051b8021494Sopenharmony_ci  COMPARE_MACRO(Uaddlv(h4, v5.V16B()), "uaddlv h4, v5.16b");
4052b8021494Sopenharmony_ci  COMPARE_MACRO(Uaddlv(s4, v5.V4H()), "uaddlv s4, v5.4h");
4053b8021494Sopenharmony_ci  COMPARE_MACRO(Uaddlv(s4, v5.V8H()), "uaddlv s4, v5.8h");
4054b8021494Sopenharmony_ci  COMPARE_MACRO(Uaddlv(d4, v5.V4S()), "uaddlv d4, v5.4s");
4055b8021494Sopenharmony_ci
4056b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxv(s4, v5.V4S()), "fmaxv s4, v5.4s");
4057b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxv(h4, v5.V4H()), "fmaxv h4, v5.4h");
4058b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxv(h4, v5.V8H()), "fmaxv h4, v5.8h");
4059b8021494Sopenharmony_ci  COMPARE_MACRO(Fminv(s4, v5.V4S()), "fminv s4, v5.4s");
4060b8021494Sopenharmony_ci  COMPARE_MACRO(Fminv(h4, v5.V4H()), "fminv h4, v5.4h");
4061b8021494Sopenharmony_ci  COMPARE_MACRO(Fminv(h4, v5.V8H()), "fminv h4, v5.8h");
4062b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxnmv(s4, v5.V4S()), "fmaxnmv s4, v5.4s");
4063b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxnmv(h4, v5.V4H()), "fmaxnmv h4, v5.4h");
4064b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxnmv(h4, v5.V8H()), "fmaxnmv h4, v5.8h");
4065b8021494Sopenharmony_ci  COMPARE_MACRO(Fminnmv(s4, v5.V4S()), "fminnmv s4, v5.4s");
4066b8021494Sopenharmony_ci  COMPARE_MACRO(Fminnmv(h4, v5.V4H()), "fminnmv h4, v5.4h");
4067b8021494Sopenharmony_ci  COMPARE_MACRO(Fminnmv(h4, v5.V8H()), "fminnmv h4, v5.8h");
4068b8021494Sopenharmony_ci
4069b8021494Sopenharmony_ci  CLEANUP();
4070b8021494Sopenharmony_ci}
4071b8021494Sopenharmony_ci
4072b8021494Sopenharmony_ciTEST(neon_scalar_pairwise) {
4073b8021494Sopenharmony_ci  SETUP();
4074b8021494Sopenharmony_ci
4075b8021494Sopenharmony_ci  COMPARE_MACRO(Addp(d0, v1.V2D()), "addp d0, v1.2d");
4076b8021494Sopenharmony_ci  COMPARE_MACRO(Faddp(h0, v1.V2H()), "faddp h0, v1.2h");
4077b8021494Sopenharmony_ci  COMPARE_MACRO(Faddp(s0, v1.V2S()), "faddp s0, v1.2s");
4078b8021494Sopenharmony_ci  COMPARE_MACRO(Faddp(d2, v3.V2D()), "faddp d2, v3.2d");
4079b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxp(h4, v5.V2H()), "fmaxp h4, v5.2h");
4080b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxp(s4, v5.V2S()), "fmaxp s4, v5.2s");
4081b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxp(d6, v7.V2D()), "fmaxp d6, v7.2d");
4082b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxnmp(h8, v9.V2H()), "fmaxnmp h8, v9.2h");
4083b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxnmp(s8, v9.V2S()), "fmaxnmp s8, v9.2s");
4084b8021494Sopenharmony_ci  COMPARE_MACRO(Fmaxnmp(d10, v11.V2D()), "fmaxnmp d10, v11.2d");
4085b8021494Sopenharmony_ci  COMPARE_MACRO(Fminp(h12, v13.V2H()), "fminp h12, v13.2h");
4086b8021494Sopenharmony_ci  COMPARE_MACRO(Fminp(s12, v13.V2S()), "fminp s12, v13.2s");
4087b8021494Sopenharmony_ci  COMPARE_MACRO(Fminp(d14, v15.V2D()), "fminp d14, v15.2d");
4088b8021494Sopenharmony_ci  COMPARE_MACRO(Fminnmp(h16, v17.V2H()), "fminnmp h16, v17.2h");
4089b8021494Sopenharmony_ci  COMPARE_MACRO(Fminnmp(s16, v17.V2S()), "fminnmp s16, v17.2s");
4090b8021494Sopenharmony_ci  COMPARE_MACRO(Fminnmp(d18, v19.V2D()), "fminnmp d18, v19.2d");
4091b8021494Sopenharmony_ci  CLEANUP();
4092b8021494Sopenharmony_ci}
4093b8021494Sopenharmony_ci
4094b8021494Sopenharmony_ciTEST(neon_shift_immediate) {
4095b8021494Sopenharmony_ci  SETUP();
4096b8021494Sopenharmony_ci
4097b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v0.V8B(), v1.V8B(), 1), "sshr v0.8b, v1.8b, #1");
4098b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v2.V8B(), v3.V8B(), 8), "sshr v2.8b, v3.8b, #8");
4099b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v4.V16B(), v5.V16B(), 1), "sshr v4.16b, v5.16b, #1");
4100b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v6.V16B(), v7.V16B(), 8), "sshr v6.16b, v7.16b, #8");
4101b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v8.V4H(), v9.V4H(), 1), "sshr v8.4h, v9.4h, #1");
4102b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v10.V4H(), v11.V4H(), 16), "sshr v10.4h, v11.4h, #16");
4103b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v12.V8H(), v13.V8H(), 1), "sshr v12.8h, v13.8h, #1");
4104b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v14.V8H(), v15.V8H(), 16), "sshr v14.8h, v15.8h, #16");
4105b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v16.V2S(), v17.V2S(), 1), "sshr v16.2s, v17.2s, #1");
4106b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v18.V2S(), v19.V2S(), 32), "sshr v18.2s, v19.2s, #32");
4107b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v20.V4S(), v21.V4S(), 1), "sshr v20.4s, v21.4s, #1");
4108b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v22.V4S(), v23.V4S(), 32), "sshr v22.4s, v23.4s, #32");
4109b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v28.V2D(), v29.V2D(), 1), "sshr v28.2d, v29.2d, #1");
4110b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(v30.V2D(), v31.V2D(), 64), "sshr v30.2d, v31.2d, #64");
4111b8021494Sopenharmony_ci  COMPARE_MACRO(Sshr(d0, d1, 7), "sshr d0, d1, #7");
4112b8021494Sopenharmony_ci
4113b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v0.V8B(), v1.V8B(), 1), "ushr v0.8b, v1.8b, #1");
4114b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v2.V8B(), v3.V8B(), 8), "ushr v2.8b, v3.8b, #8");
4115b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v4.V16B(), v5.V16B(), 1), "ushr v4.16b, v5.16b, #1");
4116b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v6.V16B(), v7.V16B(), 8), "ushr v6.16b, v7.16b, #8");
4117b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v8.V4H(), v9.V4H(), 1), "ushr v8.4h, v9.4h, #1");
4118b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v10.V4H(), v11.V4H(), 16), "ushr v10.4h, v11.4h, #16");
4119b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v12.V8H(), v13.V8H(), 1), "ushr v12.8h, v13.8h, #1");
4120b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v14.V8H(), v15.V8H(), 16), "ushr v14.8h, v15.8h, #16");
4121b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v16.V2S(), v17.V2S(), 1), "ushr v16.2s, v17.2s, #1");
4122b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v18.V2S(), v19.V2S(), 32), "ushr v18.2s, v19.2s, #32");
4123b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v20.V4S(), v21.V4S(), 1), "ushr v20.4s, v21.4s, #1");
4124b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v22.V4S(), v23.V4S(), 32), "ushr v22.4s, v23.4s, #32");
4125b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v28.V2D(), v29.V2D(), 1), "ushr v28.2d, v29.2d, #1");
4126b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(v30.V2D(), v31.V2D(), 64), "ushr v30.2d, v31.2d, #64");
4127b8021494Sopenharmony_ci  COMPARE_MACRO(Ushr(d0, d1, 7), "ushr d0, d1, #7");
4128b8021494Sopenharmony_ci
4129b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v0.V8B(), v1.V8B(), 1), "srshr v0.8b, v1.8b, #1");
4130b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v2.V8B(), v3.V8B(), 8), "srshr v2.8b, v3.8b, #8");
4131b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v4.V16B(), v5.V16B(), 1), "srshr v4.16b, v5.16b, #1");
4132b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v6.V16B(), v7.V16B(), 8), "srshr v6.16b, v7.16b, #8");
4133b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v8.V4H(), v9.V4H(), 1), "srshr v8.4h, v9.4h, #1");
4134b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v10.V4H(), v11.V4H(), 16), "srshr v10.4h, v11.4h, #16");
4135b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v12.V8H(), v13.V8H(), 1), "srshr v12.8h, v13.8h, #1");
4136b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v14.V8H(), v15.V8H(), 16), "srshr v14.8h, v15.8h, #16");
4137b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v16.V2S(), v17.V2S(), 1), "srshr v16.2s, v17.2s, #1");
4138b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v18.V2S(), v19.V2S(), 32), "srshr v18.2s, v19.2s, #32");
4139b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v20.V4S(), v21.V4S(), 1), "srshr v20.4s, v21.4s, #1");
4140b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v22.V4S(), v23.V4S(), 32), "srshr v22.4s, v23.4s, #32");
4141b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v28.V2D(), v29.V2D(), 1), "srshr v28.2d, v29.2d, #1");
4142b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(v30.V2D(), v31.V2D(), 64), "srshr v30.2d, v31.2d, #64");
4143b8021494Sopenharmony_ci  COMPARE_MACRO(Srshr(d0, d1, 7), "srshr d0, d1, #7");
4144b8021494Sopenharmony_ci
4145b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v0.V8B(), v1.V8B(), 1), "urshr v0.8b, v1.8b, #1");
4146b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v2.V8B(), v3.V8B(), 8), "urshr v2.8b, v3.8b, #8");
4147b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v4.V16B(), v5.V16B(), 1), "urshr v4.16b, v5.16b, #1");
4148b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v6.V16B(), v7.V16B(), 8), "urshr v6.16b, v7.16b, #8");
4149b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v8.V4H(), v9.V4H(), 1), "urshr v8.4h, v9.4h, #1");
4150b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v10.V4H(), v11.V4H(), 16), "urshr v10.4h, v11.4h, #16");
4151b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v12.V8H(), v13.V8H(), 1), "urshr v12.8h, v13.8h, #1");
4152b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v14.V8H(), v15.V8H(), 16), "urshr v14.8h, v15.8h, #16");
4153b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v16.V2S(), v17.V2S(), 1), "urshr v16.2s, v17.2s, #1");
4154b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v18.V2S(), v19.V2S(), 32), "urshr v18.2s, v19.2s, #32");
4155b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v20.V4S(), v21.V4S(), 1), "urshr v20.4s, v21.4s, #1");
4156b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v22.V4S(), v23.V4S(), 32), "urshr v22.4s, v23.4s, #32");
4157b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v28.V2D(), v29.V2D(), 1), "urshr v28.2d, v29.2d, #1");
4158b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(v30.V2D(), v31.V2D(), 64), "urshr v30.2d, v31.2d, #64");
4159b8021494Sopenharmony_ci  COMPARE_MACRO(Urshr(d0, d1, 7), "urshr d0, d1, #7");
4160b8021494Sopenharmony_ci
4161b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v0.V8B(), v1.V8B(), 1), "srsra v0.8b, v1.8b, #1");
4162b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v2.V8B(), v3.V8B(), 8), "srsra v2.8b, v3.8b, #8");
4163b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v4.V16B(), v5.V16B(), 1), "srsra v4.16b, v5.16b, #1");
4164b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v6.V16B(), v7.V16B(), 8), "srsra v6.16b, v7.16b, #8");
4165b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v8.V4H(), v9.V4H(), 1), "srsra v8.4h, v9.4h, #1");
4166b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v10.V4H(), v11.V4H(), 16), "srsra v10.4h, v11.4h, #16");
4167b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v12.V8H(), v13.V8H(), 1), "srsra v12.8h, v13.8h, #1");
4168b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v14.V8H(), v15.V8H(), 16), "srsra v14.8h, v15.8h, #16");
4169b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v16.V2S(), v17.V2S(), 1), "srsra v16.2s, v17.2s, #1");
4170b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v18.V2S(), v19.V2S(), 32), "srsra v18.2s, v19.2s, #32");
4171b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v20.V4S(), v21.V4S(), 1), "srsra v20.4s, v21.4s, #1");
4172b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v22.V4S(), v23.V4S(), 32), "srsra v22.4s, v23.4s, #32");
4173b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v28.V2D(), v29.V2D(), 1), "srsra v28.2d, v29.2d, #1");
4174b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(v30.V2D(), v31.V2D(), 64), "srsra v30.2d, v31.2d, #64");
4175b8021494Sopenharmony_ci  COMPARE_MACRO(Srsra(d0, d1, 7), "srsra d0, d1, #7");
4176b8021494Sopenharmony_ci
4177b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v0.V8B(), v1.V8B(), 1), "ssra v0.8b, v1.8b, #1");
4178b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v2.V8B(), v3.V8B(), 8), "ssra v2.8b, v3.8b, #8");
4179b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v4.V16B(), v5.V16B(), 1), "ssra v4.16b, v5.16b, #1");
4180b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v6.V16B(), v7.V16B(), 8), "ssra v6.16b, v7.16b, #8");
4181b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v8.V4H(), v9.V4H(), 1), "ssra v8.4h, v9.4h, #1");
4182b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v10.V4H(), v11.V4H(), 16), "ssra v10.4h, v11.4h, #16");
4183b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v12.V8H(), v13.V8H(), 1), "ssra v12.8h, v13.8h, #1");
4184b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v14.V8H(), v15.V8H(), 16), "ssra v14.8h, v15.8h, #16");
4185b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v16.V2S(), v17.V2S(), 1), "ssra v16.2s, v17.2s, #1");
4186b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v18.V2S(), v19.V2S(), 32), "ssra v18.2s, v19.2s, #32");
4187b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v20.V4S(), v21.V4S(), 1), "ssra v20.4s, v21.4s, #1");
4188b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v22.V4S(), v23.V4S(), 32), "ssra v22.4s, v23.4s, #32");
4189b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v28.V2D(), v29.V2D(), 1), "ssra v28.2d, v29.2d, #1");
4190b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(v30.V2D(), v31.V2D(), 64), "ssra v30.2d, v31.2d, #64");
4191b8021494Sopenharmony_ci  COMPARE_MACRO(Ssra(d0, d1, 7), "ssra d0, d1, #7");
4192b8021494Sopenharmony_ci
4193b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v0.V8B(), v1.V8B(), 1), "ursra v0.8b, v1.8b, #1");
4194b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v2.V8B(), v3.V8B(), 8), "ursra v2.8b, v3.8b, #8");
4195b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v4.V16B(), v5.V16B(), 1), "ursra v4.16b, v5.16b, #1");
4196b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v6.V16B(), v7.V16B(), 8), "ursra v6.16b, v7.16b, #8");
4197b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v8.V4H(), v9.V4H(), 1), "ursra v8.4h, v9.4h, #1");
4198b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v10.V4H(), v11.V4H(), 16), "ursra v10.4h, v11.4h, #16");
4199b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v12.V8H(), v13.V8H(), 1), "ursra v12.8h, v13.8h, #1");
4200b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v14.V8H(), v15.V8H(), 16), "ursra v14.8h, v15.8h, #16");
4201b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v16.V2S(), v17.V2S(), 1), "ursra v16.2s, v17.2s, #1");
4202b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v18.V2S(), v19.V2S(), 32), "ursra v18.2s, v19.2s, #32");
4203b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v20.V4S(), v21.V4S(), 1), "ursra v20.4s, v21.4s, #1");
4204b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v22.V4S(), v23.V4S(), 32), "ursra v22.4s, v23.4s, #32");
4205b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v28.V2D(), v29.V2D(), 1), "ursra v28.2d, v29.2d, #1");
4206b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(v30.V2D(), v31.V2D(), 64), "ursra v30.2d, v31.2d, #64");
4207b8021494Sopenharmony_ci  COMPARE_MACRO(Ursra(d0, d1, 7), "ursra d0, d1, #7");
4208b8021494Sopenharmony_ci
4209b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v0.V8B(), v1.V8B(), 1), "usra v0.8b, v1.8b, #1");
4210b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v2.V8B(), v3.V8B(), 8), "usra v2.8b, v3.8b, #8");
4211b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v4.V16B(), v5.V16B(), 1), "usra v4.16b, v5.16b, #1");
4212b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v6.V16B(), v7.V16B(), 8), "usra v6.16b, v7.16b, #8");
4213b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v8.V4H(), v9.V4H(), 1), "usra v8.4h, v9.4h, #1");
4214b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v10.V4H(), v11.V4H(), 16), "usra v10.4h, v11.4h, #16");
4215b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v12.V8H(), v13.V8H(), 1), "usra v12.8h, v13.8h, #1");
4216b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v14.V8H(), v15.V8H(), 16), "usra v14.8h, v15.8h, #16");
4217b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v16.V2S(), v17.V2S(), 1), "usra v16.2s, v17.2s, #1");
4218b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v18.V2S(), v19.V2S(), 32), "usra v18.2s, v19.2s, #32");
4219b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v20.V4S(), v21.V4S(), 1), "usra v20.4s, v21.4s, #1");
4220b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v22.V4S(), v23.V4S(), 32), "usra v22.4s, v23.4s, #32");
4221b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v28.V2D(), v29.V2D(), 1), "usra v28.2d, v29.2d, #1");
4222b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(v30.V2D(), v31.V2D(), 64), "usra v30.2d, v31.2d, #64");
4223b8021494Sopenharmony_ci  COMPARE_MACRO(Usra(d0, d1, 7), "usra d0, d1, #7");
4224b8021494Sopenharmony_ci
4225b8021494Sopenharmony_ci  COMPARE_MACRO(Sli(v1.V8B(), v8.V8B(), 1), "sli v1.8b, v8.8b, #1");
4226b8021494Sopenharmony_ci  COMPARE_MACRO(Sli(v2.V16B(), v9.V16B(), 2), "sli v2.16b, v9.16b, #2");
4227b8021494Sopenharmony_ci  COMPARE_MACRO(Sli(v3.V4H(), v1.V4H(), 3), "sli v3.4h, v1.4h, #3");
4228b8021494Sopenharmony_ci  COMPARE_MACRO(Sli(v4.V8H(), v2.V8H(), 4), "sli v4.8h, v2.8h, #4");
4229b8021494Sopenharmony_ci  COMPARE_MACRO(Sli(v5.V2S(), v3.V2S(), 5), "sli v5.2s, v3.2s, #5");
4230b8021494Sopenharmony_ci  COMPARE_MACRO(Sli(v6.V4S(), v4.V4S(), 6), "sli v6.4s, v4.4s, #6");
4231b8021494Sopenharmony_ci  COMPARE_MACRO(Sli(v7.V2D(), v5.V2D(), 7), "sli v7.2d, v5.2d, #7");
4232b8021494Sopenharmony_ci  COMPARE_MACRO(Sli(d8, d6, 8), "sli d8, d6, #8");
4233b8021494Sopenharmony_ci
4234b8021494Sopenharmony_ci  COMPARE_MACRO(Shl(v1.V8B(), v8.V8B(), 1), "shl v1.8b, v8.8b, #1");
4235b8021494Sopenharmony_ci  COMPARE_MACRO(Shl(v2.V16B(), v9.V16B(), 2), "shl v2.16b, v9.16b, #2");
4236b8021494Sopenharmony_ci  COMPARE_MACRO(Shl(v3.V4H(), v1.V4H(), 3), "shl v3.4h, v1.4h, #3");
4237b8021494Sopenharmony_ci  COMPARE_MACRO(Shl(v4.V8H(), v2.V8H(), 4), "shl v4.8h, v2.8h, #4");
4238b8021494Sopenharmony_ci  COMPARE_MACRO(Shl(v5.V2S(), v3.V2S(), 5), "shl v5.2s, v3.2s, #5");
4239b8021494Sopenharmony_ci  COMPARE_MACRO(Shl(v6.V4S(), v4.V4S(), 6), "shl v6.4s, v4.4s, #6");
4240b8021494Sopenharmony_ci  COMPARE_MACRO(Shl(v7.V2D(), v5.V2D(), 7), "shl v7.2d, v5.2d, #7");
4241b8021494Sopenharmony_ci  COMPARE_MACRO(Shl(d8, d6, 8), "shl d8, d6, #8");
4242b8021494Sopenharmony_ci
4243b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshl(v1.V8B(), v8.V8B(), 1), "sqshl v1.8b, v8.8b, #1");
4244b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshl(v2.V16B(), v9.V16B(), 2), "sqshl v2.16b, v9.16b, #2");
4245b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshl(v3.V4H(), v1.V4H(), 3), "sqshl v3.4h, v1.4h, #3");
4246b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshl(v4.V8H(), v2.V8H(), 4), "sqshl v4.8h, v2.8h, #4");
4247b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshl(v5.V2S(), v3.V2S(), 5), "sqshl v5.2s, v3.2s, #5");
4248b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshl(v6.V4S(), v4.V4S(), 6), "sqshl v6.4s, v4.4s, #6");
4249b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshl(v7.V2D(), v5.V2D(), 7), "sqshl v7.2d, v5.2d, #7");
4250b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshl(b8, b7, 1), "sqshl b8, b7, #1");
4251b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshl(h9, h8, 2), "sqshl h9, h8, #2");
4252b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshl(s10, s9, 3), "sqshl s10, s9, #3");
4253b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshl(d11, d10, 4), "sqshl d11, d10, #4");
4254b8021494Sopenharmony_ci
4255b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshlu(v1.V8B(), v8.V8B(), 1), "sqshlu v1.8b, v8.8b, #1");
4256b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshlu(v2.V16B(), v9.V16B(), 2), "sqshlu v2.16b, v9.16b, #2");
4257b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshlu(v3.V4H(), v1.V4H(), 3), "sqshlu v3.4h, v1.4h, #3");
4258b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshlu(v4.V8H(), v2.V8H(), 4), "sqshlu v4.8h, v2.8h, #4");
4259b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshlu(v5.V2S(), v3.V2S(), 5), "sqshlu v5.2s, v3.2s, #5");
4260b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshlu(v6.V4S(), v4.V4S(), 6), "sqshlu v6.4s, v4.4s, #6");
4261b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshlu(v7.V2D(), v5.V2D(), 7), "sqshlu v7.2d, v5.2d, #7");
4262b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshlu(b8, b7, 1), "sqshlu b8, b7, #1");
4263b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshlu(h9, h8, 2), "sqshlu h9, h8, #2");
4264b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshlu(s10, s9, 3), "sqshlu s10, s9, #3");
4265b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshlu(d11, d10, 4), "sqshlu d11, d10, #4");
4266b8021494Sopenharmony_ci
4267b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshl(v1.V8B(), v8.V8B(), 1), "uqshl v1.8b, v8.8b, #1");
4268b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshl(v2.V16B(), v9.V16B(), 2), "uqshl v2.16b, v9.16b, #2");
4269b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshl(v3.V4H(), v1.V4H(), 3), "uqshl v3.4h, v1.4h, #3");
4270b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshl(v4.V8H(), v2.V8H(), 4), "uqshl v4.8h, v2.8h, #4");
4271b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshl(v5.V2S(), v3.V2S(), 5), "uqshl v5.2s, v3.2s, #5");
4272b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshl(v6.V4S(), v4.V4S(), 6), "uqshl v6.4s, v4.4s, #6");
4273b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshl(v7.V2D(), v5.V2D(), 7), "uqshl v7.2d, v5.2d, #7");
4274b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshl(b8, b7, 1), "uqshl b8, b7, #1");
4275b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshl(h9, h8, 2), "uqshl h9, h8, #2");
4276b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshl(s10, s9, 3), "uqshl s10, s9, #3");
4277b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshl(d11, d10, 4), "uqshl d11, d10, #4");
4278b8021494Sopenharmony_ci
4279b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll(v1.V8H(), v8.V8B(), 1), "sshll v1.8h, v8.8b, #1");
4280b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll(v3.V4S(), v1.V4H(), 3), "sshll v3.4s, v1.4h, #3");
4281b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll(v5.V2D(), v3.V2S(), 5), "sshll v5.2d, v3.2s, #5");
4282b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll2(v2.V8H(), v9.V16B(), 2), "sshll2 v2.8h, v9.16b, #2");
4283b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll2(v4.V4S(), v2.V8H(), 4), "sshll2 v4.4s, v2.8h, #4");
4284b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll2(v6.V2D(), v4.V4S(), 6), "sshll2 v6.2d, v4.4s, #6");
4285b8021494Sopenharmony_ci
4286b8021494Sopenharmony_ci  // Translate to shll if shift(immediate) equal to the element size
4287b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll(v1.V8H(), v8.V8B(), 8), "shll v1.8h, v8.8b, #8");
4288b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll(v3.V4S(), v1.V4H(), 16), "shll v3.4s, v1.4h, #16");
4289b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll(v5.V2D(), v3.V2S(), 32), "shll v5.2d, v3.2s, #32");
4290b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll2(v2.V8H(), v9.V16B(), 8), "shll2 v2.8h, v9.16b, #8");
4291b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll2(v4.V4S(), v2.V8H(), 16), "shll2 v4.4s, v2.8h, #16");
4292b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll2(v6.V2D(), v4.V4S(), 32), "shll2 v6.2d, v4.4s, #32");
4293b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll(v3.V8H(), v10.V8B(), 8), "shll v3.8h, v10.8b, #8");
4294b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll(v5.V4S(), v3.V4H(), 16), "shll v5.4s, v3.4h, #16");
4295b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll(v7.V2D(), v5.V2S(), 32), "shll v7.2d, v5.2s, #32");
4296b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll2(v4.V8H(), v9.V16B(), 8), "shll2 v4.8h, v9.16b, #8");
4297b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll2(v6.V4S(), v4.V8H(), 16), "shll2 v6.4s, v4.8h, #16");
4298b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll2(v8.V2D(), v6.V4S(), 32), "shll2 v8.2d, v6.4s, #32");
4299b8021494Sopenharmony_ci
4300b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll(v1.V8H(), v8.V8B(), 0), "sxtl v1.8h, v8.8b");
4301b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll(v3.V4S(), v1.V4H(), 0), "sxtl v3.4s, v1.4h");
4302b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll(v5.V2D(), v3.V2S(), 0), "sxtl v5.2d, v3.2s");
4303b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll2(v2.V8H(), v9.V16B(), 0), "sxtl2 v2.8h, v9.16b");
4304b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll2(v4.V4S(), v2.V8H(), 0), "sxtl2 v4.4s, v2.8h");
4305b8021494Sopenharmony_ci  COMPARE_MACRO(Sshll2(v6.V2D(), v4.V4S(), 0), "sxtl2 v6.2d, v4.4s");
4306b8021494Sopenharmony_ci
4307b8021494Sopenharmony_ci  COMPARE_MACRO(Sxtl(v1.V8H(), v8.V8B()), "sxtl v1.8h, v8.8b");
4308b8021494Sopenharmony_ci  COMPARE_MACRO(Sxtl(v3.V4S(), v1.V4H()), "sxtl v3.4s, v1.4h");
4309b8021494Sopenharmony_ci  COMPARE_MACRO(Sxtl(v5.V2D(), v3.V2S()), "sxtl v5.2d, v3.2s");
4310b8021494Sopenharmony_ci  COMPARE_MACRO(Sxtl2(v2.V8H(), v9.V16B()), "sxtl2 v2.8h, v9.16b");
4311b8021494Sopenharmony_ci  COMPARE_MACRO(Sxtl2(v4.V4S(), v2.V8H()), "sxtl2 v4.4s, v2.8h");
4312b8021494Sopenharmony_ci  COMPARE_MACRO(Sxtl2(v6.V2D(), v4.V4S()), "sxtl2 v6.2d, v4.4s");
4313b8021494Sopenharmony_ci
4314b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll(v1.V8H(), v8.V8B(), 1), "ushll v1.8h, v8.8b, #1");
4315b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll(v3.V4S(), v1.V4H(), 3), "ushll v3.4s, v1.4h, #3");
4316b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll(v5.V2D(), v3.V2S(), 5), "ushll v5.2d, v3.2s, #5");
4317b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll2(v2.V8H(), v9.V16B(), 2), "ushll2 v2.8h, v9.16b, #2");
4318b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll2(v4.V4S(), v2.V8H(), 4), "ushll2 v4.4s, v2.8h, #4");
4319b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll2(v6.V2D(), v4.V4S(), 6), "ushll2 v6.2d, v4.4s, #6");
4320b8021494Sopenharmony_ci
4321b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll(v1.V8H(), v8.V8B(), 0), "uxtl v1.8h, v8.8b");
4322b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll(v3.V4S(), v1.V4H(), 0), "uxtl v3.4s, v1.4h");
4323b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll(v5.V2D(), v3.V2S(), 0), "uxtl v5.2d, v3.2s");
4324b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll2(v2.V8H(), v9.V16B(), 0), "uxtl2 v2.8h, v9.16b");
4325b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll2(v4.V4S(), v2.V8H(), 0), "uxtl2 v4.4s, v2.8h");
4326b8021494Sopenharmony_ci  COMPARE_MACRO(Ushll2(v6.V2D(), v4.V4S(), 0), "uxtl2 v6.2d, v4.4s");
4327b8021494Sopenharmony_ci
4328b8021494Sopenharmony_ci  COMPARE_MACRO(Uxtl(v1.V8H(), v8.V8B()), "uxtl v1.8h, v8.8b");
4329b8021494Sopenharmony_ci  COMPARE_MACRO(Uxtl(v3.V4S(), v1.V4H()), "uxtl v3.4s, v1.4h");
4330b8021494Sopenharmony_ci  COMPARE_MACRO(Uxtl(v5.V2D(), v3.V2S()), "uxtl v5.2d, v3.2s");
4331b8021494Sopenharmony_ci  COMPARE_MACRO(Uxtl2(v2.V8H(), v9.V16B()), "uxtl2 v2.8h, v9.16b");
4332b8021494Sopenharmony_ci  COMPARE_MACRO(Uxtl2(v4.V4S(), v2.V8H()), "uxtl2 v4.4s, v2.8h");
4333b8021494Sopenharmony_ci  COMPARE_MACRO(Uxtl2(v6.V2D(), v4.V4S()), "uxtl2 v6.2d, v4.4s");
4334b8021494Sopenharmony_ci
4335b8021494Sopenharmony_ci  COMPARE_MACRO(Sri(v1.V8B(), v8.V8B(), 1), "sri v1.8b, v8.8b, #1");
4336b8021494Sopenharmony_ci  COMPARE_MACRO(Sri(v2.V16B(), v9.V16B(), 2), "sri v2.16b, v9.16b, #2");
4337b8021494Sopenharmony_ci  COMPARE_MACRO(Sri(v3.V4H(), v1.V4H(), 3), "sri v3.4h, v1.4h, #3");
4338b8021494Sopenharmony_ci  COMPARE_MACRO(Sri(v4.V8H(), v2.V8H(), 4), "sri v4.8h, v2.8h, #4");
4339b8021494Sopenharmony_ci  COMPARE_MACRO(Sri(v5.V2S(), v3.V2S(), 5), "sri v5.2s, v3.2s, #5");
4340b8021494Sopenharmony_ci  COMPARE_MACRO(Sri(v6.V4S(), v4.V4S(), 6), "sri v6.4s, v4.4s, #6");
4341b8021494Sopenharmony_ci  COMPARE_MACRO(Sri(v7.V2D(), v5.V2D(), 7), "sri v7.2d, v5.2d, #7");
4342b8021494Sopenharmony_ci  COMPARE_MACRO(Sri(d8, d6, 8), "sri d8, d6, #8");
4343b8021494Sopenharmony_ci
4344b8021494Sopenharmony_ci  COMPARE_MACRO(Shrn(v0.V8B(), v1.V8H(), 1), "shrn v0.8b, v1.8h, #1");
4345b8021494Sopenharmony_ci  COMPARE_MACRO(Shrn(v1.V4H(), v2.V4S(), 2), "shrn v1.4h, v2.4s, #2");
4346b8021494Sopenharmony_ci  COMPARE_MACRO(Shrn(v2.V2S(), v3.V2D(), 3), "shrn v2.2s, v3.2d, #3");
4347b8021494Sopenharmony_ci  COMPARE_MACRO(Shrn2(v0.V16B(), v1.V8H(), 4), "shrn2 v0.16b, v1.8h, #4");
4348b8021494Sopenharmony_ci  COMPARE_MACRO(Shrn2(v1.V8H(), v2.V4S(), 5), "shrn2 v1.8h, v2.4s, #5");
4349b8021494Sopenharmony_ci  COMPARE_MACRO(Shrn2(v2.V4S(), v3.V2D(), 6), "shrn2 v2.4s, v3.2d, #6");
4350b8021494Sopenharmony_ci
4351b8021494Sopenharmony_ci  COMPARE_MACRO(Rshrn(v0.V8B(), v1.V8H(), 1), "rshrn v0.8b, v1.8h, #1");
4352b8021494Sopenharmony_ci  COMPARE_MACRO(Rshrn(v1.V4H(), v2.V4S(), 2), "rshrn v1.4h, v2.4s, #2");
4353b8021494Sopenharmony_ci  COMPARE_MACRO(Rshrn(v2.V2S(), v3.V2D(), 3), "rshrn v2.2s, v3.2d, #3");
4354b8021494Sopenharmony_ci  COMPARE_MACRO(Rshrn2(v0.V16B(), v1.V8H(), 4), "rshrn2 v0.16b, v1.8h, #4");
4355b8021494Sopenharmony_ci  COMPARE_MACRO(Rshrn2(v1.V8H(), v2.V4S(), 5), "rshrn2 v1.8h, v2.4s, #5");
4356b8021494Sopenharmony_ci  COMPARE_MACRO(Rshrn2(v2.V4S(), v3.V2D(), 6), "rshrn2 v2.4s, v3.2d, #6");
4357b8021494Sopenharmony_ci
4358b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshrn(v0.V8B(), v1.V8H(), 1), "uqshrn v0.8b, v1.8h, #1");
4359b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshrn(v1.V4H(), v2.V4S(), 2), "uqshrn v1.4h, v2.4s, #2");
4360b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshrn(v2.V2S(), v3.V2D(), 3), "uqshrn v2.2s, v3.2d, #3");
4361b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshrn2(v0.V16B(), v1.V8H(), 4), "uqshrn2 v0.16b, v1.8h, #4");
4362b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshrn2(v1.V8H(), v2.V4S(), 5), "uqshrn2 v1.8h, v2.4s, #5");
4363b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshrn2(v2.V4S(), v3.V2D(), 6), "uqshrn2 v2.4s, v3.2d, #6");
4364b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshrn(b0, h1, 1), "uqshrn b0, h1, #1");
4365b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshrn(h1, s2, 2), "uqshrn h1, s2, #2");
4366b8021494Sopenharmony_ci  COMPARE_MACRO(Uqshrn(s2, d3, 3), "uqshrn s2, d3, #3");
4367b8021494Sopenharmony_ci
4368b8021494Sopenharmony_ci  COMPARE_MACRO(Uqrshrn(v0.V8B(), v1.V8H(), 1), "uqrshrn v0.8b, v1.8h, #1");
4369b8021494Sopenharmony_ci  COMPARE_MACRO(Uqrshrn(v1.V4H(), v2.V4S(), 2), "uqrshrn v1.4h, v2.4s, #2");
4370b8021494Sopenharmony_ci  COMPARE_MACRO(Uqrshrn(v2.V2S(), v3.V2D(), 3), "uqrshrn v2.2s, v3.2d, #3");
4371b8021494Sopenharmony_ci  COMPARE_MACRO(Uqrshrn2(v0.V16B(), v1.V8H(), 4), "uqrshrn2 v0.16b, v1.8h, #4");
4372b8021494Sopenharmony_ci  COMPARE_MACRO(Uqrshrn2(v1.V8H(), v2.V4S(), 5), "uqrshrn2 v1.8h, v2.4s, #5");
4373b8021494Sopenharmony_ci  COMPARE_MACRO(Uqrshrn2(v2.V4S(), v3.V2D(), 6), "uqrshrn2 v2.4s, v3.2d, #6");
4374b8021494Sopenharmony_ci  COMPARE_MACRO(Uqrshrn(b0, h1, 1), "uqrshrn b0, h1, #1");
4375b8021494Sopenharmony_ci  COMPARE_MACRO(Uqrshrn(h1, s2, 2), "uqrshrn h1, s2, #2");
4376b8021494Sopenharmony_ci  COMPARE_MACRO(Uqrshrn(s2, d3, 3), "uqrshrn s2, d3, #3");
4377b8021494Sopenharmony_ci
4378b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrn(v0.V8B(), v1.V8H(), 1), "sqshrn v0.8b, v1.8h, #1");
4379b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrn(v1.V4H(), v2.V4S(), 2), "sqshrn v1.4h, v2.4s, #2");
4380b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrn(v2.V2S(), v3.V2D(), 3), "sqshrn v2.2s, v3.2d, #3");
4381b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrn2(v0.V16B(), v1.V8H(), 4), "sqshrn2 v0.16b, v1.8h, #4");
4382b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrn2(v1.V8H(), v2.V4S(), 5), "sqshrn2 v1.8h, v2.4s, #5");
4383b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrn2(v2.V4S(), v3.V2D(), 6), "sqshrn2 v2.4s, v3.2d, #6");
4384b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrn(b0, h1, 1), "sqshrn b0, h1, #1");
4385b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrn(h1, s2, 2), "sqshrn h1, s2, #2");
4386b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrn(s2, d3, 3), "sqshrn s2, d3, #3");
4387b8021494Sopenharmony_ci
4388b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrn(v0.V8B(), v1.V8H(), 1), "sqrshrn v0.8b, v1.8h, #1");
4389b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrn(v1.V4H(), v2.V4S(), 2), "sqrshrn v1.4h, v2.4s, #2");
4390b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrn(v2.V2S(), v3.V2D(), 3), "sqrshrn v2.2s, v3.2d, #3");
4391b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrn2(v0.V16B(), v1.V8H(), 4), "sqrshrn2 v0.16b, v1.8h, #4");
4392b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrn2(v1.V8H(), v2.V4S(), 5), "sqrshrn2 v1.8h, v2.4s, #5");
4393b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrn2(v2.V4S(), v3.V2D(), 6), "sqrshrn2 v2.4s, v3.2d, #6");
4394b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrn(b0, h1, 1), "sqrshrn b0, h1, #1");
4395b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrn(h1, s2, 2), "sqrshrn h1, s2, #2");
4396b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrn(s2, d3, 3), "sqrshrn s2, d3, #3");
4397b8021494Sopenharmony_ci
4398b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrun(v0.V8B(), v1.V8H(), 1), "sqshrun v0.8b, v1.8h, #1");
4399b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrun(v1.V4H(), v2.V4S(), 2), "sqshrun v1.4h, v2.4s, #2");
4400b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrun(v2.V2S(), v3.V2D(), 3), "sqshrun v2.2s, v3.2d, #3");
4401b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrun2(v0.V16B(), v1.V8H(), 4), "sqshrun2 v0.16b, v1.8h, #4");
4402b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrun2(v1.V8H(), v2.V4S(), 5), "sqshrun2 v1.8h, v2.4s, #5");
4403b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrun2(v2.V4S(), v3.V2D(), 6), "sqshrun2 v2.4s, v3.2d, #6");
4404b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrun(b0, h1, 1), "sqshrun b0, h1, #1");
4405b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrun(h1, s2, 2), "sqshrun h1, s2, #2");
4406b8021494Sopenharmony_ci  COMPARE_MACRO(Sqshrun(s2, d3, 3), "sqshrun s2, d3, #3");
4407b8021494Sopenharmony_ci
4408b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrun(v0.V8B(), v1.V8H(), 1), "sqrshrun v0.8b, v1.8h, #1");
4409b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrun(v1.V4H(), v2.V4S(), 2), "sqrshrun v1.4h, v2.4s, #2");
4410b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrun(v2.V2S(), v3.V2D(), 3), "sqrshrun v2.2s, v3.2d, #3");
4411b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrun2(v0.V16B(), v1.V8H(), 4),
4412b8021494Sopenharmony_ci                "sqrshrun2 v0.16b, v1.8h, #4");
4413b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrun2(v1.V8H(), v2.V4S(), 5), "sqrshrun2 v1.8h, v2.4s, #5");
4414b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrun2(v2.V4S(), v3.V2D(), 6), "sqrshrun2 v2.4s, v3.2d, #6");
4415b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrun(b0, h1, 1), "sqrshrun b0, h1, #1");
4416b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrun(h1, s2, 2), "sqrshrun h1, s2, #2");
4417b8021494Sopenharmony_ci  COMPARE_MACRO(Sqrshrun(s2, d3, 3), "sqrshrun s2, d3, #3");
4418b8021494Sopenharmony_ci
4419b8021494Sopenharmony_ci  COMPARE_MACRO(Scvtf(v5.V4H(), v3.V4H(), 11), "scvtf v5.4h, v3.4h, #11");
4420b8021494Sopenharmony_ci  COMPARE_MACRO(Scvtf(v6.V8H(), v4.V8H(), 12), "scvtf v6.8h, v4.8h, #12");
4421b8021494Sopenharmony_ci  COMPARE_MACRO(Scvtf(v5.V2S(), v3.V2S(), 11), "scvtf v5.2s, v3.2s, #11");
4422b8021494Sopenharmony_ci  COMPARE_MACRO(Scvtf(v6.V4S(), v4.V4S(), 12), "scvtf v6.4s, v4.4s, #12");
4423b8021494Sopenharmony_ci  COMPARE_MACRO(Scvtf(v7.V2D(), v5.V2D(), 33), "scvtf v7.2d, v5.2d, #33");
4424b8021494Sopenharmony_ci  COMPARE_MACRO(Scvtf(h8, h6, 13), "scvtf h8, h6, #13");
4425b8021494Sopenharmony_ci  COMPARE_MACRO(Scvtf(s8, s6, 13), "scvtf s8, s6, #13");
4426b8021494Sopenharmony_ci  COMPARE_MACRO(Scvtf(d8, d6, 34), "scvtf d8, d6, #34");
4427b8021494Sopenharmony_ci
4428b8021494Sopenharmony_ci  COMPARE_MACRO(Ucvtf(v5.V4H(), v3.V4H(), 11), "ucvtf v5.4h, v3.4h, #11");
4429b8021494Sopenharmony_ci  COMPARE_MACRO(Ucvtf(v6.V8H(), v4.V8H(), 12), "ucvtf v6.8h, v4.8h, #12");
4430b8021494Sopenharmony_ci  COMPARE_MACRO(Ucvtf(v5.V2S(), v3.V2S(), 11), "ucvtf v5.2s, v3.2s, #11");
4431b8021494Sopenharmony_ci  COMPARE_MACRO(Ucvtf(v6.V4S(), v4.V4S(), 12), "ucvtf v6.4s, v4.4s, #12");
4432b8021494Sopenharmony_ci  COMPARE_MACRO(Ucvtf(v7.V2D(), v5.V2D(), 33), "ucvtf v7.2d, v5.2d, #33");
4433b8021494Sopenharmony_ci  COMPARE_MACRO(Ucvtf(h8, h6, 13), "ucvtf h8, h6, #13");
4434b8021494Sopenharmony_ci  COMPARE_MACRO(Ucvtf(s8, s6, 13), "ucvtf s8, s6, #13");
4435b8021494Sopenharmony_ci  COMPARE_MACRO(Ucvtf(d8, d6, 34), "ucvtf d8, d6, #34");
4436b8021494Sopenharmony_ci
4437b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzs(v3.V4H(), v1.V4H(), 5), "fcvtzs v3.4h, v1.4h, #5");
4438b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzs(v4.V8H(), v2.V8H(), 6), "fcvtzs v4.8h, v2.8h, #6");
4439b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzs(v5.V2S(), v3.V2S(), 11), "fcvtzs v5.2s, v3.2s, #11");
4440b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzs(v6.V4S(), v4.V4S(), 12), "fcvtzs v6.4s, v4.4s, #12");
4441b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzs(v7.V2D(), v5.V2D(), 33), "fcvtzs v7.2d, v5.2d, #33");
4442b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzs(h8, h6, 13), "fcvtzs h8, h6, #13");
4443b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzs(s8, s6, 13), "fcvtzs s8, s6, #13");
4444b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzs(d8, d6, 34), "fcvtzs d8, d6, #34");
4445b8021494Sopenharmony_ci
4446b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzu(v3.V4H(), v1.V4H(), 5), "fcvtzu v3.4h, v1.4h, #5");
4447b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzu(v4.V8H(), v2.V8H(), 6), "fcvtzu v4.8h, v2.8h, #6");
4448b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzu(v5.V2S(), v3.V2S(), 11), "fcvtzu v5.2s, v3.2s, #11");
4449b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzu(v6.V4S(), v4.V4S(), 12), "fcvtzu v6.4s, v4.4s, #12");
4450b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzu(v7.V2D(), v5.V2D(), 33), "fcvtzu v7.2d, v5.2d, #33");
4451b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzu(h8, h6, 13), "fcvtzu h8, h6, #13");
4452b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzu(s8, s6, 13), "fcvtzu s8, s6, #13");
4453b8021494Sopenharmony_ci  COMPARE_MACRO(Fcvtzu(d8, d6, 34), "fcvtzu d8, d6, #34");
4454b8021494Sopenharmony_ci  CLEANUP();
4455b8021494Sopenharmony_ci}
4456b8021494Sopenharmony_ci
4457b8021494Sopenharmony_ciTEST(neon_matmul) {
4458b8021494Sopenharmony_ci  SETUP();
4459b8021494Sopenharmony_ci
4460b8021494Sopenharmony_ci  COMPARE_MACRO(Smmla(v0.V4S(), v1.V16B(), v2.V16B()),
4461b8021494Sopenharmony_ci                "smmla v0.4s, v1.16b, v2.16b");
4462b8021494Sopenharmony_ci  COMPARE_MACRO(Ummla(v20.V4S(), v30.V16B(), v31.V16B()),
4463b8021494Sopenharmony_ci                "ummla v20.4s, v30.16b, v31.16b");
4464b8021494Sopenharmony_ci  COMPARE_MACRO(Usmmla(v3.V4S(), v29.V16B(), v13.V16B()),
4465b8021494Sopenharmony_ci                "usmmla v3.4s, v29.16b, v13.16b");
4466b8021494Sopenharmony_ci
4467b8021494Sopenharmony_ci  CLEANUP();
4468b8021494Sopenharmony_ci}
4469b8021494Sopenharmony_ci
4470b8021494Sopenharmony_ciTEST(neon_unallocated_regression_test) {
4471b8021494Sopenharmony_ci  SETUP();
4472b8021494Sopenharmony_ci
4473b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e20b985), "unallocated");  // abs b, b
4474b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e60b8e3), "unallocated");  // abs h, h
4475b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5ea0b8d1), "unallocated");  // abs s, s
4476b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e318764), "unallocated");  // add b, b, b
4477b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e7f877a), "unallocated");  // add h, h, h
4478b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5eb8842b), "unallocated");  // add s, s, s
4479b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5eb1bbb7), "unallocated");  // addp s, v.s
4480b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ef1b90c), "unallocated");  // addv d, v.d
4481b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0ef1babc), "unallocated");  // addv d, v.und
4482b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ee04a0f), "unallocated");  // cls v.d, v.d
4483b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ee048ef), "unallocated");  // clz v.d, v.d
4484b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e2099b4), "unallocated");  // cmeq b, b, #
4485b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e3a8c75), "unallocated");  // cmeq b, b, b
4486b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e6099a2), "unallocated");  // cmeq h, h, #
4487b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e7e8ce2), "unallocated");  // cmeq h, h, h
4488b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5ea09a20), "unallocated");  // cmeq s, s, #
4489b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7ea98fbd), "unallocated");  // cmeq s, s, s
4490b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e208ad0), "unallocated");  // cmge b, b, #
4491b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e233f3f), "unallocated");  // cmge b, b, b
4492b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e608b4e), "unallocated");  // cmge h, h, #
4493b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e643f87), "unallocated");  // cmge h, h, h
4494b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7ea08b3c), "unallocated");  // cmge s, s, #
4495b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5ea63e20), "unallocated");  // cmge s, s, s
4496b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e208837), "unallocated");  // cmgt b, b, #
4497b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e2f3591), "unallocated");  // cmgt b, b, b
4498b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e608bde), "unallocated");  // cmgt h, h, #
4499b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e7f377b), "unallocated");  // cmgt h, h, h
4500b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5ea08813), "unallocated");  // cmgt s, s, #
4501b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5ead3429), "unallocated");  // cmgt s, s, s
4502b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e23373d), "unallocated");  // cmhi b, b, b
4503b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e7937c1), "unallocated");  // cmhi h, h, h
4504b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7ea6361e), "unallocated");  // cmhi s, s, s
4505b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e3c3e4a), "unallocated");  // cmhs b, b, b
4506b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e653cb8), "unallocated");  // cmhs h, h, h
4507b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7eb03d39), "unallocated");  // cmhs s, s, s
4508b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e209894), "unallocated");  // cmle b, b, #
4509b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e609882), "unallocated");  // cmle h, h, #
4510b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7ea09900), "unallocated");  // cmle s, s, #
4511b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e20a808), "unallocated");  // cmlt b, b, #
4512b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e60ab1f), "unallocated");  // cmlt h, h, #
4513b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5ea0ab0d), "unallocated");  // cmlt s, s, #
4514b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e218cda), "unallocated");  // cmtst b, b, b
4515b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e718ec4), "unallocated");  // cmtst h, h, h
4516b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5eb38ccd), "unallocated");  // cmtst s, s, s
4517b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ee05863), "unallocated");  // cnt v.d, v.d
4518b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4e605887), "unallocated");  // cnt v.h, v.h
4519b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ea05875), "unallocated");  // cnt v.s, v.s
4520b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0ee05a13), "unallocated");  // cnt v.und, v.und
4521b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2e0f419d), "unallocated");  // ext v.b, v.b, v.b, #
4522b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e216950), "unallocated");  // fcvtxn h, s
4523b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6e216950), "unallocated");  // fcvtxn v.h, v.s
4524b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f08fc37), "unallocated");  // fcvtzs b, b, #
4525b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4f0cfcb6), "unallocated");  // fcvtzs v.b, v.b, #
4526b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f08fed0), "unallocated");  // fcvtzu b, b, #
4527b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6f0dfc80), "unallocated");  // fcvtzu v.b, v.b, #
4528b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6e70c813), "unallocated");  // fmaxnmv d, v.d
4529b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2e70ca53), "unallocated");  // fmaxnmv d, v.und
4530b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2e30ca65), "unallocated");  // fmaxnmv s, v.s
4531b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6e70fbfa), "unallocated");  // fmaxv d, v.d
4532b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2e70fa81), "unallocated");  // fmaxv d, v.und
4533b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2e30fb23), "unallocated");  // fmaxv s, v.s
4534b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ef0c87f), "unallocated");  // fminnmv d, v.d
4535b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2ef0ca2f), "unallocated");  // fminnmv d, v.und
4536b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2eb0ca41), "unallocated");  // fminnmv s, v.s
4537b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ef0f8ad), "unallocated");  // fminv d, v.d
4538b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2ef0faed), "unallocated");  // fminv d, v.und
4539b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2eb0faff), "unallocated");  // fminv s, v.s
4540b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0fc61a34), "unallocated");  // fmla v.und, v.und, v.d[]
4541b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0fed5909), "unallocated");  // fmls v.und, v.und, v.d[]
4542b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0fd09a0a), "unallocated");  // fmul v.und, v.und, v.d[]
4543b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2fdf99fc), "unallocated");  // fmulx v.und, v.und, v.d[]
4544b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6f310336), "unallocated");  // mla v.b, v.b, v.b[]
4545b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4efd978f), "unallocated");  // mla v.d, v.d, v.d
4546b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6fe80bb3), "unallocated");  // mla v.d, v.d, v.d[]
4547b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2fda0aa2), "unallocated");  // mla v.und, v.und, v.d[]
4548b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6f0f4035), "unallocated");  // mls v.b, v.b, v.b[]
4549b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6eee95ed), "unallocated");  // mls v.d, v.d, v.d
4550b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ffa43fa), "unallocated");  // mls v.d, v.d, v.d[]
4551b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2ffd4186), "unallocated");  // mls v.und, v.und, v.d[]
4552b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4f2482ac), "unallocated");  // mul v.b, v.b, v.b[]
4553b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4efc9d87), "unallocated");  // mul v.d, v.d, v.d
4554b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4fc58321), "unallocated");  // mul v.d, v.d, v.d[]
4555b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0fef8b9b), "unallocated");  // mul v.und, v.und, v.d[]
4556b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e20b865), "unallocated");  // neg b, b
4557b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e60b853), "unallocated");  // neg h, h
4558b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7ea0bbfa), "unallocated");  // neg s, s
4559b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6eea9c50), "unallocated");  // pmul v.d, v.d, v.d
4560b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2e789e4c), "unallocated");  // pmul v.h, v.h, v.h
4561b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2ea39e8e), "unallocated");  // pmul v.s, v.s, v.s
4562b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2efb9dbd), "unallocated");  // pmul v.und, v.und, v.und
4563b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4eace101), "unallocated");  // pmull v.d, v.s, v.s
4564b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0e6de3ad), "unallocated");  // pmull v.s, v.h, v.h
4565b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ee3e2c0), "unallocated");  // pmull v.und, v.d, v.d
4566b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0eede060), "unallocated");  // pmull v.und, v.und, v.und
4567b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ee00afd), "unallocated");  // rev v.d, v.d
4568b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4e601975), "unallocated");  // rev v.h, v.h
4569b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ea019f3), "unallocated");  // rev v.s, v.s
4570b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2ee00984), "unallocated");  // rev v.und, v.und
4571b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ef07cc9), "unallocated");  // saba v.d, v.d, v.d
4572b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ee57554), "unallocated");  // sabd v.d, v.d, v.d
4573b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0eb03927), "unallocated");  // saddlv d, v.s
4574b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f0de4b1), "unallocated");  // scvtf b, b, #
4575b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4f08e468), "unallocated");  // scvtf v.b, v.b, #
4576b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4eed07a2), "unallocated");  // shadd v.d, v.d, v.d
4577b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f0b54ec), "unallocated");  // shl b, b, #
4578b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f1f56d7), "unallocated");  // shl h, h, #
4579b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f205498), "unallocated");  // shl s, s, #
4580b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ef7256c), "unallocated");  // shsub v.d, v.d, v.d
4581b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f095521), "unallocated");  // sli b, b, #
4582b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f1d579c), "unallocated");  // sli h, h, #
4583b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f21578b), "unallocated");  // sli s, s, #
4584b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4eeb662a), "unallocated");  // smax v.d, v.d, v.d
4585b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ef6a53f), "unallocated");  // smaxp v.d, v.d, v.d
4586b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ef0aa5e), "unallocated");  // smaxv d, v.d
4587b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0eb0ab90), "unallocated");  // smaxv s, v.s
4588b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4eeb6d0c), "unallocated");  // smin v.d, v.d, v.d
4589b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ee4ac0a), "unallocated");  // sminp v.d, v.d, v.d
4590b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ef1aab8), "unallocated");  // sminv d, v.d
4591b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0eb1a951), "unallocated");  // sminv s, v.s
4592b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4fd32bd8), "unallocated");  // smlal v.und, v.d, v.d[]
4593b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0ff32a9e), "unallocated");  // smlal v.und, v.und, v.d[]
4594b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ffa6aad), "unallocated");  // smlsl v.und, v.d, v.d[]
4595b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0ff56af4), "unallocated");  // smlsl v.und, v.und, v.d[]
4596b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0e182f6f), "unallocated");  // smov w, v.d[]
4597b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0e042d84), "unallocated");  // smov w, v.s[]
4598b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4e082c53), "unallocated");  // smov x, v.d[]
4599b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4fcfa8ed), "unallocated");  // smull v.und, v.d, v.d[]
4600b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0fdba861), "unallocated");  // smull v.und, v.und, v.d[]
4601b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e2f93e4), "unallocated");  // sqdmlal h, b, b
4602b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f113b27), "unallocated");  // sqdmlal h, b, v.b[]
4603b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5fff3b58), "unallocated");  // sqdmlal undd, d, v.d[]
4604b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0e2491d8), "unallocated");  // sqdmlal v.h, v.b, v.b
4605b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4fdb3b2a), "unallocated");  // sqdmlal v.und, v.d, v.d[]
4606b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0ffc3a4a),
4607b8021494Sopenharmony_ci                 "unallocated");  // sqdmlal v.und, v.und, v.d[]
4608b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e3eb3a7), "unallocated");  // sqdmlsl h, b, b
4609b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f337121), "unallocated");  // sqdmlsl h, b, v.b[]
4610b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5fd378ae), "unallocated");  // sqdmlsl undd, d, v.d[]
4611b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4e3eb3a7), "unallocated");  // sqdmlsl v.h, v.b, v.b
4612b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4fda78c2), "unallocated");  // sqdmlsl v.und, v.d, v.d[]
4613b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0ff279b3),
4614b8021494Sopenharmony_ci                 "unallocated");  // sqdmlsl v.und, v.und, v.d[]
4615b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e34b7b7), "unallocated");  // sqdmulh b, b, b
4616b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f16c106), "unallocated");  // sqdmulh b, b, v.b[]
4617b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5ef8b447), "unallocated");  // sqdmulh d, d, d
4618b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5fc5c113), "unallocated");  // sqdmulh d, d, v.d[]
4619b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4e33b6cd), "unallocated");  // sqdmulh v.b, v.b, v.b
4620b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4f3bc21e), "unallocated");  // sqdmulh v.b, v.b, v.b[]
4621b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4eefb738), "unallocated");  // sqdmulh v.d, v.d, v.d
4622b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ff2cb2b), "unallocated");  // sqdmulh v.d, v.d, v.d[]
4623b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0feacbdd),
4624b8021494Sopenharmony_ci                 "unallocated");  // sqdmulh v.und, v.und, v.d[]
4625b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e3ed2e8), "unallocated");  // sqdmull h, b, b
4626b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f23b842), "unallocated");  // sqdmull h, b, v.b[]
4627b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5fc8ba56), "unallocated");  // sqdmull undd, d, v.d[]
4628b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4e38d125), "unallocated");  // sqdmull v.h, v.b, v.b
4629b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ff5b8b3), "unallocated");  // sqdmull v.und, v.d, v.d[]
4630b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0fdcbac8),
4631b8021494Sopenharmony_ci                 "unallocated");  // sqdmull v.und, v.und, v.d[]
4632b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7fcdd950), "unallocated");  // sqrdmlah d, d, v.d[]
4633b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6fd6d80f), "unallocated");  // sqrdmlah v.d, v.d, v.d[]
4634b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2fecdae5),
4635b8021494Sopenharmony_ci                 "unallocated");  // sqrdmlah v.und, v.und, v.d[]
4636b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7fe0f992), "unallocated");  // sqrdmlsh d, d, v.d[]
4637b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ff1f9df), "unallocated");  // sqrdmlsh v.d, v.d, v.d[]
4638b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2fcdfad1),
4639b8021494Sopenharmony_ci                 "unallocated");  // sqrdmlsh v.und, v.und, v.d[]
4640b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e23b7fa), "unallocated");  // sqrdmulh b, b, b
4641b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f1ad272), "unallocated");  // sqrdmulh b, b, v.b[]
4642b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7ef8b6e0), "unallocated");  // sqrdmulh d, d, d
4643b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5fd7d2a7), "unallocated");  // sqrdmulh d, d, v.d[]
4644b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6e23b7fa), "unallocated");  // sqrdmulh v.b, v.b, v.b
4645b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4f28d32a), "unallocated");  // sqrdmulh v.b, v.b, v.b[]
4646b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ef0b702), "unallocated");  // sqrdmulh v.d, v.d, v.d
4647b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4feddb3f), "unallocated");  // sqrdmulh v.d, v.d, v.d[]
4648b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x0fdddaf3),
4649b8021494Sopenharmony_ci                 "unallocated");  // sqrdmulh v.und, v.und, v.d[]
4650b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f679d27), "unallocated");  // sqrshrn d, d, #
4651b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f4d9f3b), "unallocated");  // sqrshrn d, h, #
4652b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f569dfa), "unallocated");  // sqrshrn d, s, #
4653b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f449d53), "unallocated");  // sqrshrn d, undn, #
4654b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4f609da3), "unallocated");  // sqrshrn v.d, v.und, #
4655b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f698cee), "unallocated");  // sqrshrun d, d, #
4656b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f498fd8), "unallocated");  // sqrshrun d, h, #
4657b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f5d8e9a), "unallocated");  // sqrshrun d, s, #
4658b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f478e04), "unallocated");  // sqrshrun d, undn, #
4659b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6f568c7d), "unallocated");  // sqrshrun v.d, v.und, #
4660b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f779488), "unallocated");  // sqshrn d, d, #
4661b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f4b9715), "unallocated");  // sqshrn d, h, #
4662b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f579449), "unallocated");  // sqshrn d, s, #
4663b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f4695ac), "unallocated");  // sqshrn d, undn, #
4664b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4f6096c1), "unallocated");  // sqshrn v.d, v.und, #
4665b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f6786d1), "unallocated");  // sqshrun d, d, #
4666b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f4884e3), "unallocated");  // sqshrun d, h, #
4667b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f5886df), "unallocated");  // sqshrun d, s, #
4668b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f448464), "unallocated");  // sqshrun d, undn, #
4669b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6f5b8674), "unallocated");  // sqshrun v.d, v.und, #
4670b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ef2163f), "unallocated");  // srhadd v.d, v.d, v.d
4671b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f09475d), "unallocated");  // sri b, b, #
4672b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f104771), "unallocated");  // sri h, h, #
4673b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f2045b4), "unallocated");  // sri s, s, #
4674b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e2656a3), "unallocated");  // srshl b, b, b
4675b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e605767), "unallocated");  // srshl h, h, h
4676b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5eb654c2), "unallocated");  // srshl s, s, s
4677b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f0827c2), "unallocated");  // srshr b, b, #
4678b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f13249c), "unallocated");  // srshr h, h, #
4679b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f3526af), "unallocated");  // srshr s, s, #
4680b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f0e34b0), "unallocated");  // srsra b, b, #
4681b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f1537ed), "unallocated");  // srsra h, h, #
4682b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f3934f2), "unallocated");  // srsra s, s, #
4683b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e24470b), "unallocated");  // sshl b, b, b
4684b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5e624525), "unallocated");  // sshl h, h, h
4685b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5ea846d6), "unallocated");  // sshl s, s, s
4686b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f0a07bc), "unallocated");  // sshr b, b, #
4687b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f1d0504), "unallocated");  // sshr h, h, #
4688b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f3e059d), "unallocated");  // sshr s, s, #
4689b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f0d17ae), "unallocated");  // ssra b, b, #
4690b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f1417c2), "unallocated");  // ssra h, h, #
4691b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x5f2214c1), "unallocated");  // ssra s, s, #
4692b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e3a8503), "unallocated");  // sub b, b, b
4693b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e748657), "unallocated");  // sub h, h, h
4694b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7eaf844c), "unallocated");  // sub s, s, s
4695b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6efb7c3c), "unallocated");  // uaba v.d, v.d, v.d
4696b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ee2749f), "unallocated");  // uabd v.d, v.d, v.d
4697b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2eb03807), "unallocated");  // uaddlv d, v.s
4698b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f08e671), "unallocated");  // ucvtf b, b, #
4699b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6f0ee59b), "unallocated");  // ucvtf v.b, v.b, #
4700b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6eef052d), "unallocated");  // uhadd v.d, v.d, v.d
4701b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6eef2707), "unallocated");  // uhsub v.d, v.d, v.d
4702b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ee6675a), "unallocated");  // umax v.d, v.d, v.d
4703b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ef2a430), "unallocated");  // umaxp v.d, v.d, v.d
4704b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ef0a8ae), "unallocated");  // umaxv d, v.d
4705b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2eb0aa70), "unallocated");  // umaxv s, v.s
4706b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6efd6d23), "unallocated");  // umin v.d, v.d, v.d
4707b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ee2accf), "unallocated");  // uminp v.d, v.d, v.d
4708b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ef1aa28), "unallocated");  // uminv d, v.d
4709b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2eb1a831), "unallocated");  // uminv s, v.s
4710b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ffa2b0b), "unallocated");  // umlal v.und, v.d, v.d[]
4711b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2fdb2acd), "unallocated");  // umlal v.und, v.und, v.d[]
4712b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6fe76bb5), "unallocated");  // umlsl v.und, v.d, v.d[]
4713b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2ff068fb), "unallocated");  // umlsl v.und, v.und, v.d[]
4714b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6fd0a947), "unallocated");  // umull v.und, v.d, v.d[]
4715b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x2fc0a8fb), "unallocated");  // umull v.und, v.und, v.d[]
4716b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f6e9c1b), "unallocated");  // uqrshrn d, d, #
4717b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f4d9e1b), "unallocated");  // uqrshrn d, h, #
4718b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f5e9d48), "unallocated");  // uqrshrn d, s, #
4719b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f419d2e), "unallocated");  // uqrshrn d, undn, #
4720b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6f779e93), "unallocated");  // uqrshrn v.d, v.und, #
4721b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f649620), "unallocated");  // uqshrn d, d, #
4722b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f4a950b), "unallocated");  // uqshrn d, h, #
4723b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f55950e), "unallocated");  // uqshrn d, s, #
4724b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f4697b5), "unallocated");  // uqshrn d, undn, #
4725b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6f749463), "unallocated");  // uqshrn v.d, v.und, #
4726b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x4ee1c88d), "unallocated");  // urecpe v.d, v.d
4727b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6eed17ff), "unallocated");  // urhadd v.d, v.d, v.d
4728b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e30549c), "unallocated");  // urshl b, b, b
4729b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e6157c1), "unallocated");  // urshl h, h, h
4730b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7eb65432), "unallocated");  // urshl s, s, s
4731b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f0b2637), "unallocated");  // urshr b, b, #
4732b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f13240c), "unallocated");  // urshr h, h, #
4733b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f232578), "unallocated");  // urshr s, s, #
4734b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x6ee1ca96), "unallocated");  // ursqrte v.d, v.d
4735b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f0a375a), "unallocated");  // ursra b, b, #
4736b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f12340f), "unallocated");  // ursra h, h, #
4737b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f2f3549), "unallocated");  // ursra s, s, #
4738b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e2d47d3), "unallocated");  // ushl b, b, b
4739b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7e694742), "unallocated");  // ushl h, h, h
4740b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7eab45db), "unallocated");  // ushl s, s, s
4741b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f0d0631), "unallocated");  // ushr b, b, #
4742b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f1805a4), "unallocated");  // ushr h, h, #
4743b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f2e063a), "unallocated");  // ushr s, s, #
4744b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f0c15a4), "unallocated");  // usra b, b, #
4745b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f1716c7), "unallocated");  // usra h, h, #
4746b8021494Sopenharmony_ci  COMPARE_PREFIX(dci(0x7f261749), "unallocated");  // usra s, s, #
4747b8021494Sopenharmony_ci
4748b8021494Sopenharmony_ci  CLEANUP();
4749b8021494Sopenharmony_ci}
4750b8021494Sopenharmony_ci
4751b8021494Sopenharmony_ci}  // namespace aarch64
4752b8021494Sopenharmony_ci}  // namespace vixl
4753