1b8021494Sopenharmony_ci// Copyright 2016, 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// Test description for instructions with the following operands:
28b8021494Sopenharmony_ci//   MNEMONIC<c> <rd>, <rn>, <rm>
29b8021494Sopenharmony_ci//
30b8021494Sopenharmony_ci// The instructions covered in this test do not write to the `Q` and `GE` flags,
31b8021494Sopenharmony_ci// these are covered in other description files.
32b8021494Sopenharmony_ci
33b8021494Sopenharmony_ci{
34b8021494Sopenharmony_ci  "mnemonics": [
35b8021494Sopenharmony_ci    "Mul",     // MUL{<c>}{<q>} <Rd>, <Rn>, {<Rm>} ; A1
36b8021494Sopenharmony_ci    "Muls",    // MULS{<c>}{<q>} <Rd>, <Rn>, {<Rm>} ; A1
37b8021494Sopenharmony_ci    "Qadd16",  // QADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
38b8021494Sopenharmony_ci    "Qadd8",   // QADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
39b8021494Sopenharmony_ci    "Qasx",    // QASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
40b8021494Sopenharmony_ci    "Qsax",    // QSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
41b8021494Sopenharmony_ci    "Qsub16",  // QSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
42b8021494Sopenharmony_ci    "Qsub8",   // QSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
43b8021494Sopenharmony_ci    "Sdiv",    // SDIV{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
44b8021494Sopenharmony_ci    "Shadd16", // SHADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
45b8021494Sopenharmony_ci    "Shadd8",  // SHADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
46b8021494Sopenharmony_ci    "Shasx",   // SHASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
47b8021494Sopenharmony_ci    "Shsax",   // SHSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
48b8021494Sopenharmony_ci    "Shsub16", // SHSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
49b8021494Sopenharmony_ci    "Shsub8",  // SHSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
50b8021494Sopenharmony_ci    "Smmul",   // SMMUL{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
51b8021494Sopenharmony_ci    "Smmulr",  // SMMULR{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
52b8021494Sopenharmony_ci    "Smuad",   // SMUAD{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
53b8021494Sopenharmony_ci    "Smuadx",  // SMUADX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
54b8021494Sopenharmony_ci    "Smulbb",  // SMULBB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
55b8021494Sopenharmony_ci    "Smulbt",  // SMULBT{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
56b8021494Sopenharmony_ci    "Smultb",  // SMULTB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
57b8021494Sopenharmony_ci    "Smultt",  // SMULTT{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
58b8021494Sopenharmony_ci    "Smulwb",  // SMULWB{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
59b8021494Sopenharmony_ci    "Smulwt",  // SMULWT{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
60b8021494Sopenharmony_ci    "Smusd",   // SMUSD{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
61b8021494Sopenharmony_ci    "Smusdx",  // SMUSDX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
62b8021494Sopenharmony_ci    "Udiv",    // UDIV{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
63b8021494Sopenharmony_ci    "Uhadd16", // UHADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
64b8021494Sopenharmony_ci    "Uhadd8",  // UHADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
65b8021494Sopenharmony_ci    "Uhasx",   // UHASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
66b8021494Sopenharmony_ci    "Uhsax",   // UHSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
67b8021494Sopenharmony_ci    "Uhsub16", // UHSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
68b8021494Sopenharmony_ci    "Uhsub8",  // UHSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
69b8021494Sopenharmony_ci    "Uqadd16", // UQADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
70b8021494Sopenharmony_ci    "Uqadd8",  // UQADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
71b8021494Sopenharmony_ci    "Uqasx",   // UQASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
72b8021494Sopenharmony_ci    "Uqsax",   // UQSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
73b8021494Sopenharmony_ci    "Uqsub16", // UQSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
74b8021494Sopenharmony_ci    "Uqsub8",  // UQSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
75b8021494Sopenharmony_ci    "Usad8",   // USAD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
76b8021494Sopenharmony_ci
77b8021494Sopenharmony_ci    // Instructions affecting the GE bits.
78b8021494Sopenharmony_ci    "Sadd16", // SADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
79b8021494Sopenharmony_ci    "Sadd8",  // SADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
80b8021494Sopenharmony_ci    "Sasx",   // SASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
81b8021494Sopenharmony_ci    "Sel",    // SEL{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
82b8021494Sopenharmony_ci    "Ssax",   // SSAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
83b8021494Sopenharmony_ci    "Ssub16", // SSUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
84b8021494Sopenharmony_ci    "Ssub8",  // SSUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
85b8021494Sopenharmony_ci    "Uadd16", // UADD16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
86b8021494Sopenharmony_ci    "Uadd8",  // UADD8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
87b8021494Sopenharmony_ci    "Uasx",   // UASX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
88b8021494Sopenharmony_ci    "Usax",   // USAX{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
89b8021494Sopenharmony_ci    "Usub16", // USUB16{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
90b8021494Sopenharmony_ci    "Usub8",  // USUB8{<c>}{<q>} {<Rd>}, <Rn>, <Rm> ; A1
91b8021494Sopenharmony_ci
92b8021494Sopenharmony_ci    // Instructions affecting the Q bit.
93b8021494Sopenharmony_ci    "Qadd",  // QADD{<c>}{<q>} {<Rd>}, <Rm>, <Rn> ; A1
94b8021494Sopenharmony_ci    "Qdadd", // QDADD{<c>}{<q>} {<Rd>}, <Rm>, <Rn> ; A1
95b8021494Sopenharmony_ci    "Qdsub", // QDSUB{<c>}{<q>} {<Rd>}, <Rm>, <Rn> ; A1
96b8021494Sopenharmony_ci    "Qsub"   // QSUB{<c>}{<q>} {<Rd>}, <Rm>, <Rn> ; A1
97b8021494Sopenharmony_ci  ],
98b8021494Sopenharmony_ci  "description": {
99b8021494Sopenharmony_ci    "operands": [
100b8021494Sopenharmony_ci      {
101b8021494Sopenharmony_ci        "name": "cond",
102b8021494Sopenharmony_ci        "type": "Condition"
103b8021494Sopenharmony_ci      },
104b8021494Sopenharmony_ci      {
105b8021494Sopenharmony_ci        "name": "rd",
106b8021494Sopenharmony_ci        "type": "AllRegistersButPC"
107b8021494Sopenharmony_ci      },
108b8021494Sopenharmony_ci      {
109b8021494Sopenharmony_ci        "name": "rn",
110b8021494Sopenharmony_ci        "type": "AllRegistersButPC"
111b8021494Sopenharmony_ci      },
112b8021494Sopenharmony_ci      {
113b8021494Sopenharmony_ci        "name": "rm",
114b8021494Sopenharmony_ci        "type": "AllRegistersButPC"
115b8021494Sopenharmony_ci      }
116b8021494Sopenharmony_ci    ],
117b8021494Sopenharmony_ci    "inputs": [
118b8021494Sopenharmony_ci      {
119b8021494Sopenharmony_ci        "name": "apsr",
120b8021494Sopenharmony_ci        "type": "NZCV"
121b8021494Sopenharmony_ci      },
122b8021494Sopenharmony_ci      {
123b8021494Sopenharmony_ci        "name": "qbit",
124b8021494Sopenharmony_ci        "type": "Q"
125b8021494Sopenharmony_ci      },
126b8021494Sopenharmony_ci      {
127b8021494Sopenharmony_ci        "name": "ge",
128b8021494Sopenharmony_ci        "type": "GE"
129b8021494Sopenharmony_ci      },
130b8021494Sopenharmony_ci      {
131b8021494Sopenharmony_ci        "name": "rd",
132b8021494Sopenharmony_ci        "type": "Register"
133b8021494Sopenharmony_ci      },
134b8021494Sopenharmony_ci      {
135b8021494Sopenharmony_ci        "name": "rn",
136b8021494Sopenharmony_ci        "type": "Register"
137b8021494Sopenharmony_ci      },
138b8021494Sopenharmony_ci      {
139b8021494Sopenharmony_ci        "name": "rm",
140b8021494Sopenharmony_ci        "type": "Register"
141b8021494Sopenharmony_ci      }
142b8021494Sopenharmony_ci    ]
143b8021494Sopenharmony_ci  },
144b8021494Sopenharmony_ci  "test-files": [
145b8021494Sopenharmony_ci    {
146b8021494Sopenharmony_ci      "type": "assembler",
147b8021494Sopenharmony_ci      "test-cases": [
148b8021494Sopenharmony_ci        {
149b8021494Sopenharmony_ci          "name": "Operands",
150b8021494Sopenharmony_ci          "operands": [
151b8021494Sopenharmony_ci            "cond", "rd", "rn", "rm"
152b8021494Sopenharmony_ci          ],
153b8021494Sopenharmony_ci          "operand-limit": 300
154b8021494Sopenharmony_ci        }
155b8021494Sopenharmony_ci      ]
156b8021494Sopenharmony_ci    },
157b8021494Sopenharmony_ci    {
158b8021494Sopenharmony_ci      "type": "simulator",
159b8021494Sopenharmony_ci      "test-cases": [
160b8021494Sopenharmony_ci        {
161b8021494Sopenharmony_ci          "name": "Condition",
162b8021494Sopenharmony_ci          "operands": [
163b8021494Sopenharmony_ci            "cond"
164b8021494Sopenharmony_ci          ],
165b8021494Sopenharmony_ci          "inputs": [
166b8021494Sopenharmony_ci            "apsr"
167b8021494Sopenharmony_ci          ]
168b8021494Sopenharmony_ci        },
169b8021494Sopenharmony_ci        {
170b8021494Sopenharmony_ci          "name": "RdIsRnIsRm",
171b8021494Sopenharmony_ci          "operands": [
172b8021494Sopenharmony_ci            "rd", "rn", "rm"
173b8021494Sopenharmony_ci          ],
174b8021494Sopenharmony_ci          "inputs": [
175b8021494Sopenharmony_ci            "rd", "rn", "rm"
176b8021494Sopenharmony_ci          ],
177b8021494Sopenharmony_ci          "operand-filter": "(rd == rn) and (rd == rm)",
178b8021494Sopenharmony_ci          "input-filter": "(rd == rn) and (rd == rm)"
179b8021494Sopenharmony_ci        },
180b8021494Sopenharmony_ci        {
181b8021494Sopenharmony_ci          "name": "RdIsRn",
182b8021494Sopenharmony_ci          "operands": [
183b8021494Sopenharmony_ci            "rd", "rn", "rm"
184b8021494Sopenharmony_ci          ],
185b8021494Sopenharmony_ci          "inputs": [
186b8021494Sopenharmony_ci            "rd", "rn", "rm"
187b8021494Sopenharmony_ci          ],
188b8021494Sopenharmony_ci          "operand-filter": "(rd == rn) and (rn != rm)",
189b8021494Sopenharmony_ci          "operand-limit": 10,
190b8021494Sopenharmony_ci          "input-filter": "rd == rn",
191b8021494Sopenharmony_ci          "input-limit": 200
192b8021494Sopenharmony_ci        },
193b8021494Sopenharmony_ci        {
194b8021494Sopenharmony_ci          "name": "RdIsRm",
195b8021494Sopenharmony_ci          "operands": [
196b8021494Sopenharmony_ci            "rd", "rn", "rm"
197b8021494Sopenharmony_ci          ],
198b8021494Sopenharmony_ci          "inputs": [
199b8021494Sopenharmony_ci            "rd", "rn", "rm"
200b8021494Sopenharmony_ci          ],
201b8021494Sopenharmony_ci          "operand-filter": "(rd == rm) and (rn != rm)",
202b8021494Sopenharmony_ci          "operand-limit": 10,
203b8021494Sopenharmony_ci          "input-filter": "rd == rm",
204b8021494Sopenharmony_ci          "input-limit": 200
205b8021494Sopenharmony_ci        },
206b8021494Sopenharmony_ci        {
207b8021494Sopenharmony_ci          "name": "RnIsRm",
208b8021494Sopenharmony_ci          "operands": [
209b8021494Sopenharmony_ci            "rd", "rn", "rm"
210b8021494Sopenharmony_ci          ],
211b8021494Sopenharmony_ci          "inputs": [
212b8021494Sopenharmony_ci            "rd", "rn", "rm"
213b8021494Sopenharmony_ci          ],
214b8021494Sopenharmony_ci          "operand-filter": "(rn == rm) and (rm != rd)",
215b8021494Sopenharmony_ci          "operand-limit": 10,
216b8021494Sopenharmony_ci          "input-filter": "rn == rm",
217b8021494Sopenharmony_ci          "input-limit": 200
218b8021494Sopenharmony_ci        },
219b8021494Sopenharmony_ci        {
220b8021494Sopenharmony_ci          "name": "RdIsNotRnIsNotRm",
221b8021494Sopenharmony_ci          "operands": [
222b8021494Sopenharmony_ci            "rd", "rn", "rm"
223b8021494Sopenharmony_ci          ],
224b8021494Sopenharmony_ci          "inputs": [
225b8021494Sopenharmony_ci            "rd", "rn", "rm"
226b8021494Sopenharmony_ci          ],
227b8021494Sopenharmony_ci          "operand-filter": "(rd != rn) and (rd != rm)",
228b8021494Sopenharmony_ci          "operand-limit": 10,
229b8021494Sopenharmony_ci          "input-limit": 200
230b8021494Sopenharmony_ci        }
231b8021494Sopenharmony_ci      ]
232b8021494Sopenharmony_ci    },
233b8021494Sopenharmony_ci    {
234b8021494Sopenharmony_ci      "name": "ge",
235b8021494Sopenharmony_ci      "type": "simulator",
236b8021494Sopenharmony_ci      "mnemonics": [
237b8021494Sopenharmony_ci        "Sadd16",
238b8021494Sopenharmony_ci        "Sadd8",
239b8021494Sopenharmony_ci        "Sasx",
240b8021494Sopenharmony_ci        "Ssax",
241b8021494Sopenharmony_ci        "Ssub16",
242b8021494Sopenharmony_ci        "Ssub8",
243b8021494Sopenharmony_ci        "Uadd16",
244b8021494Sopenharmony_ci        "Uadd8",
245b8021494Sopenharmony_ci        "Uasx",
246b8021494Sopenharmony_ci        "Usax",
247b8021494Sopenharmony_ci        "Usub16",
248b8021494Sopenharmony_ci        "Usub8"
249b8021494Sopenharmony_ci      ],
250b8021494Sopenharmony_ci      "test-cases": [
251b8021494Sopenharmony_ci        {
252b8021494Sopenharmony_ci          "name": "GE",
253b8021494Sopenharmony_ci          "operands": [
254b8021494Sopenharmony_ci            "rd", "rn", "rm"
255b8021494Sopenharmony_ci          ],
256b8021494Sopenharmony_ci          "inputs": [
257b8021494Sopenharmony_ci            "ge", "rn", "rm"
258b8021494Sopenharmony_ci          ],
259b8021494Sopenharmony_ci          "operand-filter": "(rd != rn) and (rn != rm)",
260b8021494Sopenharmony_ci          "operand-limit": 1,
261b8021494Sopenharmony_ci          // Only use "all set" and "all cleared" as inputs.
262b8021494Sopenharmony_ci          "input-filter": "ge == 'NoFlag' or ge == 'GE0123Flag'",
263b8021494Sopenharmony_ci          "input-limit": 200
264b8021494Sopenharmony_ci        }
265b8021494Sopenharmony_ci      ]
266b8021494Sopenharmony_ci    },
267b8021494Sopenharmony_ci    {
268b8021494Sopenharmony_ci      "name": "sel",
269b8021494Sopenharmony_ci      "type": "simulator",
270b8021494Sopenharmony_ci      "mnemonics": [
271b8021494Sopenharmony_ci        "Sel"
272b8021494Sopenharmony_ci      ],
273b8021494Sopenharmony_ci      "test-cases": [
274b8021494Sopenharmony_ci        {
275b8021494Sopenharmony_ci          "name": "GE",
276b8021494Sopenharmony_ci          "operands": [
277b8021494Sopenharmony_ci            "rd", "rn", "rm"
278b8021494Sopenharmony_ci          ],
279b8021494Sopenharmony_ci          "inputs": [
280b8021494Sopenharmony_ci            "ge", "rn", "rm"
281b8021494Sopenharmony_ci          ],
282b8021494Sopenharmony_ci          "operand-filter": "(rd != rn) and (rn != rm)",
283b8021494Sopenharmony_ci          "operand-limit": 1,
284b8021494Sopenharmony_ci          "input-limit": 200
285b8021494Sopenharmony_ci        }
286b8021494Sopenharmony_ci      ]
287b8021494Sopenharmony_ci    },
288b8021494Sopenharmony_ci    {
289b8021494Sopenharmony_ci      "name": "q",
290b8021494Sopenharmony_ci      "type": "simulator",
291b8021494Sopenharmony_ci      "mnemonics": [
292b8021494Sopenharmony_ci        "Qadd",
293b8021494Sopenharmony_ci        "Qdadd",
294b8021494Sopenharmony_ci        "Qdsub",
295b8021494Sopenharmony_ci        "Qsub"
296b8021494Sopenharmony_ci      ],
297b8021494Sopenharmony_ci      "test-cases": [
298b8021494Sopenharmony_ci        {
299b8021494Sopenharmony_ci          "name": "QOutput",
300b8021494Sopenharmony_ci          "operands": [
301b8021494Sopenharmony_ci            "rn", "rm"
302b8021494Sopenharmony_ci          ],
303b8021494Sopenharmony_ci          "inputs": [
304b8021494Sopenharmony_ci            "qbit", "rn", "rm"
305b8021494Sopenharmony_ci          ],
306b8021494Sopenharmony_ci          "operand-limit": 1,
307b8021494Sopenharmony_ci          "operand-filter": "rn != rm",
308b8021494Sopenharmony_ci          "input-limit": 200
309b8021494Sopenharmony_ci        }
310b8021494Sopenharmony_ci      ]
311b8021494Sopenharmony_ci    }
312b8021494Sopenharmony_ci  ]
313b8021494Sopenharmony_ci}
314