/src/capstonenext/arch/AArch64/AArch64BaseInfo.h
Line  | Count  | Source  | 
1  |  | /* Capstone Disassembly Engine, http://www.capstone-engine.org */  | 
2  |  | /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2022, */  | 
3  |  | /*    Rot127 <unisono@quyllur.org> 2022-2023 */  | 
4  |  | /* Automatically translated source file from LLVM. */  | 
5  |  |  | 
6  |  | /* LLVM-commit: <commit> */  | 
7  |  | /* LLVM-tag: <tag> */  | 
8  |  |  | 
9  |  | /* Only small edits allowed. */  | 
10  |  | /* For multiple similar edits, please create a Patch for the translator. */  | 
11  |  |  | 
12  |  | /* Capstone's C++ file translator: */  | 
13  |  | /* https://github.com/capstone-engine/capstone/tree/next/suite/auto-sync */  | 
14  |  |  | 
15  |  | //===-- AArch64BaseInfo.h - Top level definitions for AArch64 ---*- C++ -*-===//  | 
16  |  | //  | 
17  |  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.  | 
18  |  | // See https://llvm.org/LICENSE.txt for license information.  | 
19  |  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception  | 
20  |  | //  | 
21  |  | //===----------------------------------------------------------------------===//  | 
22  |  | //  | 
23  |  | // This file contains small standalone helper functions and enum definitions for  | 
24  |  | // the AArch64 target useful for the compiler back-end and the MC libraries.  | 
25  |  | // As such, it deliberately does not include references to LLVM core  | 
26  |  | // code gen types, passes, etc..  | 
27  |  | //  | 
28  |  | //===----------------------------------------------------------------------===//  | 
29  |  |  | 
30  |  | #ifndef LLVM_LIB_TARGET_AARCH64_UTILS_AARCH64BASEINFO_H  | 
31  |  | #define LLVM_LIB_TARGET_AARCH64_UTILS_AARCH64BASEINFO_H  | 
32  |  |  | 
33  |  | // FIXME: Is it easiest to fix this layering violation by moving the .inc  | 
34  |  | // #includes from AArch64MCTargetDesc.h to here?  | 
35  |  | #include <capstone/platform.h>  | 
36  |  | #include <stdio.h>  | 
37  |  | #include <stdlib.h>  | 
38  |  | #include <string.h>  | 
39  |  |  | 
40  |  | #include "../../MCInstPrinter.h"  | 
41  |  |  | 
42  |  | #include "../../utils.h"  | 
43  |  | #include "capstone/aarch64.h"  | 
44  |  |  | 
45  |  | #define GET_SUBTARGETINFO_ENUM  | 
46  |  | #include "AArch64GenSubtargetInfo.inc"  | 
47  |  |  | 
48  |  | #define GET_REGINFO_ENUM  | 
49  |  | #define GET_REGINFO_MC_DESC  | 
50  |  | #include "AArch64GenRegisterInfo.inc"  | 
51  |  |  | 
52  |  | #define GET_INSTRINFO_ENUM  | 
53  |  | #include "AArch64GenInstrInfo.inc"  | 
54  |  |  | 
55  |  | #define CONCAT(a, b) CONCAT_(a, b)  | 
56  |  | #define CONCAT_(a, b) a##_##b  | 
57  |  |  | 
58  |  | static inline unsigned getWRegFromXReg(unsigned Reg)  | 
59  | 24.3k  | { | 
60  | 24.3k  |   switch (Reg) { | 
61  | 792  |   case AArch64_X0:  | 
62  | 792  |     return AArch64_W0;  | 
63  | 96  |   case AArch64_X1:  | 
64  | 96  |     return AArch64_W1;  | 
65  | 166  |   case AArch64_X2:  | 
66  | 166  |     return AArch64_W2;  | 
67  | 182  |   case AArch64_X3:  | 
68  | 182  |     return AArch64_W3;  | 
69  | 902  |   case AArch64_X4:  | 
70  | 902  |     return AArch64_W4;  | 
71  | 366  |   case AArch64_X5:  | 
72  | 366  |     return AArch64_W5;  | 
73  | 146  |   case AArch64_X6:  | 
74  | 146  |     return AArch64_W6;  | 
75  | 42  |   case AArch64_X7:  | 
76  | 42  |     return AArch64_W7;  | 
77  | 1.37k  |   case AArch64_X8:  | 
78  | 1.37k  |     return AArch64_W8;  | 
79  | 470  |   case AArch64_X9:  | 
80  | 470  |     return AArch64_W9;  | 
81  | 274  |   case AArch64_X10:  | 
82  | 274  |     return AArch64_W10;  | 
83  | 864  |   case AArch64_X11:  | 
84  | 864  |     return AArch64_W11;  | 
85  | 3.76k  |   case AArch64_X12:  | 
86  | 3.76k  |     return AArch64_W12;  | 
87  | 888  |   case AArch64_X13:  | 
88  | 888  |     return AArch64_W13;  | 
89  | 1.09k  |   case AArch64_X14:  | 
90  | 1.09k  |     return AArch64_W14;  | 
91  | 196  |   case AArch64_X15:  | 
92  | 196  |     return AArch64_W15;  | 
93  | 346  |   case AArch64_X16:  | 
94  | 346  |     return AArch64_W16;  | 
95  | 242  |   case AArch64_X17:  | 
96  | 242  |     return AArch64_W17;  | 
97  | 2.63k  |   case AArch64_X18:  | 
98  | 2.63k  |     return AArch64_W18;  | 
99  | 426  |   case AArch64_X19:  | 
100  | 426  |     return AArch64_W19;  | 
101  | 312  |   case AArch64_X20:  | 
102  | 312  |     return AArch64_W20;  | 
103  | 1.55k  |   case AArch64_X21:  | 
104  | 1.55k  |     return AArch64_W21;  | 
105  | 878  |   case AArch64_X22:  | 
106  | 878  |     return AArch64_W22;  | 
107  | 504  |   case AArch64_X23:  | 
108  | 504  |     return AArch64_W23;  | 
109  | 1.22k  |   case AArch64_X24:  | 
110  | 1.22k  |     return AArch64_W24;  | 
111  | 144  |   case AArch64_X25:  | 
112  | 144  |     return AArch64_W25;  | 
113  | 388  |   case AArch64_X26:  | 
114  | 388  |     return AArch64_W26;  | 
115  | 60  |   case AArch64_X27:  | 
116  | 60  |     return AArch64_W27;  | 
117  | 1.64k  |   case AArch64_X28:  | 
118  | 1.64k  |     return AArch64_W28;  | 
119  | 1.06k  |   case AArch64_FP:  | 
120  | 1.06k  |     return AArch64_W29;  | 
121  | 176  |   case AArch64_LR:  | 
122  | 176  |     return AArch64_W30;  | 
123  | 0  |   case AArch64_SP:  | 
124  | 0  |     return AArch64_WSP;  | 
125  | 204  |   case AArch64_XZR:  | 
126  | 204  |     return AArch64_WZR;  | 
127  | 24.3k  |   }  | 
128  |  |   // For anything else, return it unchanged.  | 
129  | 894  |   return Reg;  | 
130  | 24.3k  | } AArch64Mapping.c:getWRegFromXReg Line  | Count  | Source  |  59  | 10.0k  | { |  60  | 10.0k  |   switch (Reg) { |  61  | 396  |   case AArch64_X0:  |  62  | 396  |     return AArch64_W0;  |  63  | 35  |   case AArch64_X1:  |  64  | 35  |     return AArch64_W1;  |  65  | 79  |   case AArch64_X2:  |  66  | 79  |     return AArch64_W2;  |  67  | 89  |   case AArch64_X3:  |  68  | 89  |     return AArch64_W3;  |  69  | 448  |   case AArch64_X4:  |  70  | 448  |     return AArch64_W4;  |  71  | 159  |   case AArch64_X5:  |  72  | 159  |     return AArch64_W5;  |  73  | 72  |   case AArch64_X6:  |  74  | 72  |     return AArch64_W6;  |  75  | 21  |   case AArch64_X7:  |  76  | 21  |     return AArch64_W7;  |  77  | 680  |   case AArch64_X8:  |  78  | 680  |     return AArch64_W8;  |  79  | 232  |   case AArch64_X9:  |  80  | 232  |     return AArch64_W9;  |  81  | 74  |   case AArch64_X10:  |  82  | 74  |     return AArch64_W10;  |  83  | 244  |   case AArch64_X11:  |  84  | 244  |     return AArch64_W11;  |  85  | 1.88k  |   case AArch64_X12:  |  86  | 1.88k  |     return AArch64_W12;  |  87  | 213  |   case AArch64_X13:  |  88  | 213  |     return AArch64_W13;  |  89  | 547  |   case AArch64_X14:  |  90  | 547  |     return AArch64_W14;  |  91  | 95  |   case AArch64_X15:  |  92  | 95  |     return AArch64_W15;  |  93  | 70  |   case AArch64_X16:  |  94  | 70  |     return AArch64_W16;  |  95  | 20  |   case AArch64_X17:  |  96  | 20  |     return AArch64_W17;  |  97  | 1.31k  |   case AArch64_X18:  |  98  | 1.31k  |     return AArch64_W18;  |  99  | 206  |   case AArch64_X19:  |  100  | 206  |     return AArch64_W19;  |  101  | 119  |   case AArch64_X20:  |  102  | 119  |     return AArch64_W20;  |  103  | 333  |   case AArch64_X21:  |  104  | 333  |     return AArch64_W21;  |  105  | 433  |   case AArch64_X22:  |  106  | 433  |     return AArch64_W22;  |  107  | 35  |   case AArch64_X23:  |  108  | 35  |     return AArch64_W23;  |  109  | 539  |   case AArch64_X24:  |  110  | 539  |     return AArch64_W24;  |  111  | 71  |   case AArch64_X25:  |  112  | 71  |     return AArch64_W25;  |  113  | 83  |   case AArch64_X26:  |  114  | 83  |     return AArch64_W26;  |  115  | 27  |   case AArch64_X27:  |  116  | 27  |     return AArch64_W27;  |  117  | 815  |   case AArch64_X28:  |  118  | 815  |     return AArch64_W28;  |  119  | 516  |   case AArch64_FP:  |  120  | 516  |     return AArch64_W29;  |  121  | 83  |   case AArch64_LR:  |  122  | 83  |     return AArch64_W30;  |  123  | 0  |   case AArch64_SP:  |  124  | 0  |     return AArch64_WSP;  |  125  | 97  |   case AArch64_XZR:  |  126  | 97  |     return AArch64_WZR;  |  127  | 10.0k  |   }  |  128  |  |   // For anything else, return it unchanged.  |  129  | 0  |   return Reg;  |  130  | 10.0k  | }  |  
 Unexecuted instantiation: AArch64BaseInfo.c:getWRegFromXReg Unexecuted instantiation: AArch64Disassembler.c:getWRegFromXReg Unexecuted instantiation: AArch64DisassemblerExtension.c:getWRegFromXReg AArch64InstPrinter.c:getWRegFromXReg Line  | Count  | Source  |  59  | 14.2k  | { |  60  | 14.2k  |   switch (Reg) { |  61  | 396  |   case AArch64_X0:  |  62  | 396  |     return AArch64_W0;  |  63  | 61  |   case AArch64_X1:  |  64  | 61  |     return AArch64_W1;  |  65  | 87  |   case AArch64_X2:  |  66  | 87  |     return AArch64_W2;  |  67  | 93  |   case AArch64_X3:  |  68  | 93  |     return AArch64_W3;  |  69  | 454  |   case AArch64_X4:  |  70  | 454  |     return AArch64_W4;  |  71  | 207  |   case AArch64_X5:  |  72  | 207  |     return AArch64_W5;  |  73  | 74  |   case AArch64_X6:  |  74  | 74  |     return AArch64_W6;  |  75  | 21  |   case AArch64_X7:  |  76  | 21  |     return AArch64_W7;  |  77  | 694  |   case AArch64_X8:  |  78  | 694  |     return AArch64_W8;  |  79  | 238  |   case AArch64_X9:  |  80  | 238  |     return AArch64_W9;  |  81  | 200  |   case AArch64_X10:  |  82  | 200  |     return AArch64_W10;  |  83  | 620  |   case AArch64_X11:  |  84  | 620  |     return AArch64_W11;  |  85  | 1.88k  |   case AArch64_X12:  |  86  | 1.88k  |     return AArch64_W12;  |  87  | 675  |   case AArch64_X13:  |  88  | 675  |     return AArch64_W13;  |  89  | 549  |   case AArch64_X14:  |  90  | 549  |     return AArch64_W14;  |  91  | 101  |   case AArch64_X15:  |  92  | 101  |     return AArch64_W15;  |  93  | 276  |   case AArch64_X16:  |  94  | 276  |     return AArch64_W16;  |  95  | 222  |   case AArch64_X17:  |  96  | 222  |     return AArch64_W17;  |  97  | 1.32k  |   case AArch64_X18:  |  98  | 1.32k  |     return AArch64_W18;  |  99  | 220  |   case AArch64_X19:  |  100  | 220  |     return AArch64_W19;  |  101  | 193  |   case AArch64_X20:  |  102  | 193  |     return AArch64_W20;  |  103  | 1.22k  |   case AArch64_X21:  |  104  | 1.22k  |     return AArch64_W21;  |  105  | 445  |   case AArch64_X22:  |  106  | 445  |     return AArch64_W22;  |  107  | 469  |   case AArch64_X23:  |  108  | 469  |     return AArch64_W23;  |  109  | 687  |   case AArch64_X24:  |  110  | 687  |     return AArch64_W24;  |  111  | 73  |   case AArch64_X25:  |  112  | 73  |     return AArch64_W25;  |  113  | 305  |   case AArch64_X26:  |  114  | 305  |     return AArch64_W26;  |  115  | 33  |   case AArch64_X27:  |  116  | 33  |     return AArch64_W27;  |  117  | 825  |   case AArch64_X28:  |  118  | 825  |     return AArch64_W28;  |  119  | 552  |   case AArch64_FP:  |  120  | 552  |     return AArch64_W29;  |  121  | 93  |   case AArch64_LR:  |  122  | 93  |     return AArch64_W30;  |  123  | 0  |   case AArch64_SP:  |  124  | 0  |     return AArch64_WSP;  |  125  | 107  |   case AArch64_XZR:  |  126  | 107  |     return AArch64_WZR;  |  127  | 14.2k  |   }  |  128  |  |   // For anything else, return it unchanged.  |  129  | 894  |   return Reg;  |  130  | 14.2k  | }  |  
  | 
131  |  |  | 
132  |  | static inline unsigned getXRegFromWReg(unsigned Reg)  | 
133  | 0  | { | 
134  | 0  |   switch (Reg) { | 
135  | 0  |   case AArch64_W0:  | 
136  | 0  |     return AArch64_X0;  | 
137  | 0  |   case AArch64_W1:  | 
138  | 0  |     return AArch64_X1;  | 
139  | 0  |   case AArch64_W2:  | 
140  | 0  |     return AArch64_X2;  | 
141  | 0  |   case AArch64_W3:  | 
142  | 0  |     return AArch64_X3;  | 
143  | 0  |   case AArch64_W4:  | 
144  | 0  |     return AArch64_X4;  | 
145  | 0  |   case AArch64_W5:  | 
146  | 0  |     return AArch64_X5;  | 
147  | 0  |   case AArch64_W6:  | 
148  | 0  |     return AArch64_X6;  | 
149  | 0  |   case AArch64_W7:  | 
150  | 0  |     return AArch64_X7;  | 
151  | 0  |   case AArch64_W8:  | 
152  | 0  |     return AArch64_X8;  | 
153  | 0  |   case AArch64_W9:  | 
154  | 0  |     return AArch64_X9;  | 
155  | 0  |   case AArch64_W10:  | 
156  | 0  |     return AArch64_X10;  | 
157  | 0  |   case AArch64_W11:  | 
158  | 0  |     return AArch64_X11;  | 
159  | 0  |   case AArch64_W12:  | 
160  | 0  |     return AArch64_X12;  | 
161  | 0  |   case AArch64_W13:  | 
162  | 0  |     return AArch64_X13;  | 
163  | 0  |   case AArch64_W14:  | 
164  | 0  |     return AArch64_X14;  | 
165  | 0  |   case AArch64_W15:  | 
166  | 0  |     return AArch64_X15;  | 
167  | 0  |   case AArch64_W16:  | 
168  | 0  |     return AArch64_X16;  | 
169  | 0  |   case AArch64_W17:  | 
170  | 0  |     return AArch64_X17;  | 
171  | 0  |   case AArch64_W18:  | 
172  | 0  |     return AArch64_X18;  | 
173  | 0  |   case AArch64_W19:  | 
174  | 0  |     return AArch64_X19;  | 
175  | 0  |   case AArch64_W20:  | 
176  | 0  |     return AArch64_X20;  | 
177  | 0  |   case AArch64_W21:  | 
178  | 0  |     return AArch64_X21;  | 
179  | 0  |   case AArch64_W22:  | 
180  | 0  |     return AArch64_X22;  | 
181  | 0  |   case AArch64_W23:  | 
182  | 0  |     return AArch64_X23;  | 
183  | 0  |   case AArch64_W24:  | 
184  | 0  |     return AArch64_X24;  | 
185  | 0  |   case AArch64_W25:  | 
186  | 0  |     return AArch64_X25;  | 
187  | 0  |   case AArch64_W26:  | 
188  | 0  |     return AArch64_X26;  | 
189  | 0  |   case AArch64_W27:  | 
190  | 0  |     return AArch64_X27;  | 
191  | 0  |   case AArch64_W28:  | 
192  | 0  |     return AArch64_X28;  | 
193  | 0  |   case AArch64_W29:  | 
194  | 0  |     return AArch64_FP;  | 
195  | 0  |   case AArch64_W30:  | 
196  | 0  |     return AArch64_LR;  | 
197  | 0  |   case AArch64_WSP:  | 
198  | 0  |     return AArch64_SP;  | 
199  | 0  |   case AArch64_WZR:  | 
200  | 0  |     return AArch64_XZR;  | 
201  | 0  |   }  | 
202  | 0  |   // For anything else, return it unchanged.  | 
203  | 0  |   return Reg;  | 
204  | 0  | } Unexecuted instantiation: AArch64Mapping.c:getXRegFromWReg Unexecuted instantiation: AArch64BaseInfo.c:getXRegFromWReg Unexecuted instantiation: AArch64Disassembler.c:getXRegFromWReg Unexecuted instantiation: AArch64DisassemblerExtension.c:getXRegFromWReg Unexecuted instantiation: AArch64InstPrinter.c:getXRegFromWReg  | 
205  |  |  | 
206  |  | static inline unsigned getXRegFromXRegTuple(unsigned RegTuple)  | 
207  | 0  | { | 
208  | 0  |   switch (RegTuple) { | 
209  | 0  |   case AArch64_X0_X1_X2_X3_X4_X5_X6_X7:  | 
210  | 0  |     return AArch64_X0;  | 
211  | 0  |   case AArch64_X2_X3_X4_X5_X6_X7_X8_X9:  | 
212  | 0  |     return AArch64_X2;  | 
213  | 0  |   case AArch64_X4_X5_X6_X7_X8_X9_X10_X11:  | 
214  | 0  |     return AArch64_X4;  | 
215  | 0  |   case AArch64_X6_X7_X8_X9_X10_X11_X12_X13:  | 
216  | 0  |     return AArch64_X6;  | 
217  | 0  |   case AArch64_X8_X9_X10_X11_X12_X13_X14_X15:  | 
218  | 0  |     return AArch64_X8;  | 
219  | 0  |   case AArch64_X10_X11_X12_X13_X14_X15_X16_X17:  | 
220  | 0  |     return AArch64_X10;  | 
221  | 0  |   case AArch64_X12_X13_X14_X15_X16_X17_X18_X19:  | 
222  | 0  |     return AArch64_X12;  | 
223  | 0  |   case AArch64_X14_X15_X16_X17_X18_X19_X20_X21:  | 
224  | 0  |     return AArch64_X14;  | 
225  | 0  |   case AArch64_X16_X17_X18_X19_X20_X21_X22_X23:  | 
226  | 0  |     return AArch64_X16;  | 
227  | 0  |   case AArch64_X18_X19_X20_X21_X22_X23_X24_X25:  | 
228  | 0  |     return AArch64_X18;  | 
229  | 0  |   case AArch64_X20_X21_X22_X23_X24_X25_X26_X27:  | 
230  | 0  |     return AArch64_X20;  | 
231  | 0  |   case AArch64_X22_X23_X24_X25_X26_X27_X28_FP:  | 
232  | 0  |     return AArch64_X22;  | 
233  | 0  |   }  | 
234  | 0  |   // For anything else, return it unchanged.  | 
235  | 0  |   return RegTuple;  | 
236  | 0  | } Unexecuted instantiation: AArch64Mapping.c:getXRegFromXRegTuple Unexecuted instantiation: AArch64BaseInfo.c:getXRegFromXRegTuple Unexecuted instantiation: AArch64Disassembler.c:getXRegFromXRegTuple Unexecuted instantiation: AArch64DisassemblerExtension.c:getXRegFromXRegTuple Unexecuted instantiation: AArch64InstPrinter.c:getXRegFromXRegTuple  | 
237  |  |  | 
238  |  | static inline unsigned getBRegFromDReg(unsigned Reg)  | 
239  | 0  | { | 
240  | 0  |   switch (Reg) { | 
241  | 0  |   case AArch64_D0:  | 
242  | 0  |     return AArch64_B0;  | 
243  | 0  |   case AArch64_D1:  | 
244  | 0  |     return AArch64_B1;  | 
245  | 0  |   case AArch64_D2:  | 
246  | 0  |     return AArch64_B2;  | 
247  | 0  |   case AArch64_D3:  | 
248  | 0  |     return AArch64_B3;  | 
249  | 0  |   case AArch64_D4:  | 
250  | 0  |     return AArch64_B4;  | 
251  | 0  |   case AArch64_D5:  | 
252  | 0  |     return AArch64_B5;  | 
253  | 0  |   case AArch64_D6:  | 
254  | 0  |     return AArch64_B6;  | 
255  | 0  |   case AArch64_D7:  | 
256  | 0  |     return AArch64_B7;  | 
257  | 0  |   case AArch64_D8:  | 
258  | 0  |     return AArch64_B8;  | 
259  | 0  |   case AArch64_D9:  | 
260  | 0  |     return AArch64_B9;  | 
261  | 0  |   case AArch64_D10:  | 
262  | 0  |     return AArch64_B10;  | 
263  | 0  |   case AArch64_D11:  | 
264  | 0  |     return AArch64_B11;  | 
265  | 0  |   case AArch64_D12:  | 
266  | 0  |     return AArch64_B12;  | 
267  | 0  |   case AArch64_D13:  | 
268  | 0  |     return AArch64_B13;  | 
269  | 0  |   case AArch64_D14:  | 
270  | 0  |     return AArch64_B14;  | 
271  | 0  |   case AArch64_D15:  | 
272  | 0  |     return AArch64_B15;  | 
273  | 0  |   case AArch64_D16:  | 
274  | 0  |     return AArch64_B16;  | 
275  | 0  |   case AArch64_D17:  | 
276  | 0  |     return AArch64_B17;  | 
277  | 0  |   case AArch64_D18:  | 
278  | 0  |     return AArch64_B18;  | 
279  | 0  |   case AArch64_D19:  | 
280  | 0  |     return AArch64_B19;  | 
281  | 0  |   case AArch64_D20:  | 
282  | 0  |     return AArch64_B20;  | 
283  | 0  |   case AArch64_D21:  | 
284  | 0  |     return AArch64_B21;  | 
285  | 0  |   case AArch64_D22:  | 
286  | 0  |     return AArch64_B22;  | 
287  | 0  |   case AArch64_D23:  | 
288  | 0  |     return AArch64_B23;  | 
289  | 0  |   case AArch64_D24:  | 
290  | 0  |     return AArch64_B24;  | 
291  | 0  |   case AArch64_D25:  | 
292  | 0  |     return AArch64_B25;  | 
293  | 0  |   case AArch64_D26:  | 
294  | 0  |     return AArch64_B26;  | 
295  | 0  |   case AArch64_D27:  | 
296  | 0  |     return AArch64_B27;  | 
297  | 0  |   case AArch64_D28:  | 
298  | 0  |     return AArch64_B28;  | 
299  | 0  |   case AArch64_D29:  | 
300  | 0  |     return AArch64_B29;  | 
301  | 0  |   case AArch64_D30:  | 
302  | 0  |     return AArch64_B30;  | 
303  | 0  |   case AArch64_D31:  | 
304  | 0  |     return AArch64_B31;  | 
305  | 0  |   }  | 
306  | 0  |   // For anything else, return it unchanged.  | 
307  | 0  |   return Reg;  | 
308  | 0  | } Unexecuted instantiation: AArch64Mapping.c:getBRegFromDReg Unexecuted instantiation: AArch64BaseInfo.c:getBRegFromDReg Unexecuted instantiation: AArch64Disassembler.c:getBRegFromDReg Unexecuted instantiation: AArch64DisassemblerExtension.c:getBRegFromDReg Unexecuted instantiation: AArch64InstPrinter.c:getBRegFromDReg  | 
309  |  |  | 
310  |  | static inline unsigned getDRegFromBReg(unsigned Reg)  | 
311  | 0  | { | 
312  | 0  |   switch (Reg) { | 
313  | 0  |   case AArch64_B0:  | 
314  | 0  |     return AArch64_D0;  | 
315  | 0  |   case AArch64_B1:  | 
316  | 0  |     return AArch64_D1;  | 
317  | 0  |   case AArch64_B2:  | 
318  | 0  |     return AArch64_D2;  | 
319  | 0  |   case AArch64_B3:  | 
320  | 0  |     return AArch64_D3;  | 
321  | 0  |   case AArch64_B4:  | 
322  | 0  |     return AArch64_D4;  | 
323  | 0  |   case AArch64_B5:  | 
324  | 0  |     return AArch64_D5;  | 
325  | 0  |   case AArch64_B6:  | 
326  | 0  |     return AArch64_D6;  | 
327  | 0  |   case AArch64_B7:  | 
328  | 0  |     return AArch64_D7;  | 
329  | 0  |   case AArch64_B8:  | 
330  | 0  |     return AArch64_D8;  | 
331  | 0  |   case AArch64_B9:  | 
332  | 0  |     return AArch64_D9;  | 
333  | 0  |   case AArch64_B10:  | 
334  | 0  |     return AArch64_D10;  | 
335  | 0  |   case AArch64_B11:  | 
336  | 0  |     return AArch64_D11;  | 
337  | 0  |   case AArch64_B12:  | 
338  | 0  |     return AArch64_D12;  | 
339  | 0  |   case AArch64_B13:  | 
340  | 0  |     return AArch64_D13;  | 
341  | 0  |   case AArch64_B14:  | 
342  | 0  |     return AArch64_D14;  | 
343  | 0  |   case AArch64_B15:  | 
344  | 0  |     return AArch64_D15;  | 
345  | 0  |   case AArch64_B16:  | 
346  | 0  |     return AArch64_D16;  | 
347  | 0  |   case AArch64_B17:  | 
348  | 0  |     return AArch64_D17;  | 
349  | 0  |   case AArch64_B18:  | 
350  | 0  |     return AArch64_D18;  | 
351  | 0  |   case AArch64_B19:  | 
352  | 0  |     return AArch64_D19;  | 
353  | 0  |   case AArch64_B20:  | 
354  | 0  |     return AArch64_D20;  | 
355  | 0  |   case AArch64_B21:  | 
356  | 0  |     return AArch64_D21;  | 
357  | 0  |   case AArch64_B22:  | 
358  | 0  |     return AArch64_D22;  | 
359  | 0  |   case AArch64_B23:  | 
360  | 0  |     return AArch64_D23;  | 
361  | 0  |   case AArch64_B24:  | 
362  | 0  |     return AArch64_D24;  | 
363  | 0  |   case AArch64_B25:  | 
364  | 0  |     return AArch64_D25;  | 
365  | 0  |   case AArch64_B26:  | 
366  | 0  |     return AArch64_D26;  | 
367  | 0  |   case AArch64_B27:  | 
368  | 0  |     return AArch64_D27;  | 
369  | 0  |   case AArch64_B28:  | 
370  | 0  |     return AArch64_D28;  | 
371  | 0  |   case AArch64_B29:  | 
372  | 0  |     return AArch64_D29;  | 
373  | 0  |   case AArch64_B30:  | 
374  | 0  |     return AArch64_D30;  | 
375  | 0  |   case AArch64_B31:  | 
376  | 0  |     return AArch64_D31;  | 
377  | 0  |   }  | 
378  | 0  |   // For anything else, return it unchanged.  | 
379  | 0  |   return Reg;  | 
380  | 0  | } Unexecuted instantiation: AArch64Mapping.c:getDRegFromBReg Unexecuted instantiation: AArch64BaseInfo.c:getDRegFromBReg Unexecuted instantiation: AArch64Disassembler.c:getDRegFromBReg Unexecuted instantiation: AArch64DisassemblerExtension.c:getDRegFromBReg Unexecuted instantiation: AArch64InstPrinter.c:getDRegFromBReg  | 
381  |  |  | 
382  |  | static inline bool atomicBarrierDroppedOnZero(unsigned Opcode)  | 
383  | 0  | { | 
384  | 0  |   switch (Opcode) { | 
385  | 0  |   case AArch64_LDADDAB:  | 
386  | 0  |   case AArch64_LDADDAH:  | 
387  | 0  |   case AArch64_LDADDAW:  | 
388  | 0  |   case AArch64_LDADDAX:  | 
389  | 0  |   case AArch64_LDADDALB:  | 
390  | 0  |   case AArch64_LDADDALH:  | 
391  | 0  |   case AArch64_LDADDALW:  | 
392  | 0  |   case AArch64_LDADDALX:  | 
393  | 0  |   case AArch64_LDCLRAB:  | 
394  | 0  |   case AArch64_LDCLRAH:  | 
395  | 0  |   case AArch64_LDCLRAW:  | 
396  | 0  |   case AArch64_LDCLRAX:  | 
397  | 0  |   case AArch64_LDCLRALB:  | 
398  | 0  |   case AArch64_LDCLRALH:  | 
399  | 0  |   case AArch64_LDCLRALW:  | 
400  | 0  |   case AArch64_LDCLRALX:  | 
401  | 0  |   case AArch64_LDEORAB:  | 
402  | 0  |   case AArch64_LDEORAH:  | 
403  | 0  |   case AArch64_LDEORAW:  | 
404  | 0  |   case AArch64_LDEORAX:  | 
405  | 0  |   case AArch64_LDEORALB:  | 
406  | 0  |   case AArch64_LDEORALH:  | 
407  | 0  |   case AArch64_LDEORALW:  | 
408  | 0  |   case AArch64_LDEORALX:  | 
409  | 0  |   case AArch64_LDSETAB:  | 
410  | 0  |   case AArch64_LDSETAH:  | 
411  | 0  |   case AArch64_LDSETAW:  | 
412  | 0  |   case AArch64_LDSETAX:  | 
413  | 0  |   case AArch64_LDSETALB:  | 
414  | 0  |   case AArch64_LDSETALH:  | 
415  | 0  |   case AArch64_LDSETALW:  | 
416  | 0  |   case AArch64_LDSETALX:  | 
417  | 0  |   case AArch64_LDSMAXAB:  | 
418  | 0  |   case AArch64_LDSMAXAH:  | 
419  | 0  |   case AArch64_LDSMAXAW:  | 
420  | 0  |   case AArch64_LDSMAXAX:  | 
421  | 0  |   case AArch64_LDSMAXALB:  | 
422  | 0  |   case AArch64_LDSMAXALH:  | 
423  | 0  |   case AArch64_LDSMAXALW:  | 
424  | 0  |   case AArch64_LDSMAXALX:  | 
425  | 0  |   case AArch64_LDSMINAB:  | 
426  | 0  |   case AArch64_LDSMINAH:  | 
427  | 0  |   case AArch64_LDSMINAW:  | 
428  | 0  |   case AArch64_LDSMINAX:  | 
429  | 0  |   case AArch64_LDSMINALB:  | 
430  | 0  |   case AArch64_LDSMINALH:  | 
431  | 0  |   case AArch64_LDSMINALW:  | 
432  | 0  |   case AArch64_LDSMINALX:  | 
433  | 0  |   case AArch64_LDUMAXAB:  | 
434  | 0  |   case AArch64_LDUMAXAH:  | 
435  | 0  |   case AArch64_LDUMAXAW:  | 
436  | 0  |   case AArch64_LDUMAXAX:  | 
437  | 0  |   case AArch64_LDUMAXALB:  | 
438  | 0  |   case AArch64_LDUMAXALH:  | 
439  | 0  |   case AArch64_LDUMAXALW:  | 
440  | 0  |   case AArch64_LDUMAXALX:  | 
441  | 0  |   case AArch64_LDUMINAB:  | 
442  | 0  |   case AArch64_LDUMINAH:  | 
443  | 0  |   case AArch64_LDUMINAW:  | 
444  | 0  |   case AArch64_LDUMINAX:  | 
445  | 0  |   case AArch64_LDUMINALB:  | 
446  | 0  |   case AArch64_LDUMINALH:  | 
447  | 0  |   case AArch64_LDUMINALW:  | 
448  | 0  |   case AArch64_LDUMINALX:  | 
449  | 0  |   case AArch64_SWPAB:  | 
450  | 0  |   case AArch64_SWPAH:  | 
451  | 0  |   case AArch64_SWPAW:  | 
452  | 0  |   case AArch64_SWPAX:  | 
453  | 0  |   case AArch64_SWPALB:  | 
454  | 0  |   case AArch64_SWPALH:  | 
455  | 0  |   case AArch64_SWPALW:  | 
456  | 0  |   case AArch64_SWPALX:  | 
457  | 0  |     return true;  | 
458  | 0  |   }  | 
459  | 0  |   return false;  | 
460  | 0  | } Unexecuted instantiation: AArch64Mapping.c:atomicBarrierDroppedOnZero Unexecuted instantiation: AArch64BaseInfo.c:atomicBarrierDroppedOnZero Unexecuted instantiation: AArch64Disassembler.c:atomicBarrierDroppedOnZero Unexecuted instantiation: AArch64DisassemblerExtension.c:atomicBarrierDroppedOnZero Unexecuted instantiation: AArch64InstPrinter.c:atomicBarrierDroppedOnZero  | 
461  |  |  | 
462  |  | // MOVE-NOTICE: AArch64CC_CondCode : moved to aarch64.h  | 
463  |  | // MOVE-NOTICE: AArch64CC_getCondCodeName : moved to aarch64.h  | 
464  |  | // MOVE-NOTICE: AArch64CC_getInvertedCondCode : moved to aarch64.h  | 
465  |  | // MOVE-NOTICE: AArch64CC_getNZCVToSatisfyCondCode : moved to aarch64.h  | 
466  |  |  | 
467  |  | typedef struct SysAlias { | 
468  |  |   const char *Name;  | 
469  |  |   aarch64_sysop_alias SysAlias;  | 
470  |  |   uint16_t Encoding;  | 
471  |  |   aarch64_insn_group FeaturesRequired[3];  | 
472  |  | } SysAlias;  | 
473  |  |  | 
474  |  | typedef struct SysAliasReg { | 
475  |  |   const char *Name;  | 
476  |  |   aarch64_sysop_reg SysReg;  | 
477  |  |   uint16_t Encoding;  | 
478  |  |   bool NeedsReg;  | 
479  |  |   aarch64_insn_group FeaturesRequired[3];  | 
480  |  | } SysAliasReg;  | 
481  |  |  | 
482  |  | typedef struct SysAliasImm { | 
483  |  |   const char *Name;  | 
484  |  |   aarch64_sysop_imm SysImm;  | 
485  |  |   uint16_t ImmValue;  | 
486  |  |   uint16_t Encoding;  | 
487  |  |   aarch64_insn_group FeaturesRequired[3];  | 
488  |  | } SysAliasImm;  | 
489  |  |  | 
490  |  | // CS namespace begin: AArch64SVCR  | 
491  |  |  | 
492  |  | #define AArch64SVCR_SVCR SysAlias  | 
493  |  |  | 
494  |  | #define GET_SVCR_DECL  | 
495  |  |  | 
496  |  | #include "AArch64GenSystemOperands.inc"  | 
497  |  |  | 
498  |  | // CS namespace end: AArch64SVCR  | 
499  |  |  | 
500  |  | // CS namespace begin: AArch64AT  | 
501  |  |  | 
502  |  | #define AArch64AT_AT SysAlias  | 
503  |  |  | 
504  |  | #define GET_AT_DECL  | 
505  |  |  | 
506  |  | #include "AArch64GenSystemOperands.inc"  | 
507  |  |  | 
508  |  | // CS namespace end: AArch64AT  | 
509  |  |  | 
510  |  | // CS namespace begin: AArch64DB  | 
511  |  |  | 
512  |  | #define AArch64DB_DB SysAlias  | 
513  |  |  | 
514  |  | #define GET_DB_DECL  | 
515  |  |  | 
516  |  | #include "AArch64GenSystemOperands.inc"  | 
517  |  |  | 
518  |  | // CS namespace end: AArch64DB  | 
519  |  |  | 
520  |  | // CS namespace begin: AArch64DBnXS  | 
521  |  |  | 
522  |  | #define AArch64DBnXS_DBnXS SysAliasImm  | 
523  |  |  | 
524  |  | #define GET_DBNXS_DECL  | 
525  |  |  | 
526  |  | #include "AArch64GenSystemOperands.inc"  | 
527  |  |  | 
528  |  | // CS namespace end: AArch64DBnXS  | 
529  |  |  | 
530  |  | // CS namespace begin: AArch64DC  | 
531  |  |  | 
532  |  | #define AArch64DC_DC SysAlias  | 
533  |  |  | 
534  |  | #define GET_DC_DECL  | 
535  |  |  | 
536  |  | #include "AArch64GenSystemOperands.inc"  | 
537  |  |  | 
538  |  | // CS namespace end: AArch64DC  | 
539  |  |  | 
540  |  | // CS namespace begin: AArch64IC  | 
541  |  |  | 
542  |  | #define AArch64IC_IC SysAliasReg  | 
543  |  |  | 
544  |  | #define GET_IC_DECL  | 
545  |  |  | 
546  |  | #include "AArch64GenSystemOperands.inc"  | 
547  |  |  | 
548  |  | // CS namespace end: AArch64IC  | 
549  |  |  | 
550  |  | // CS namespace begin: AArch64ISB  | 
551  |  |  | 
552  |  | #define AArch64ISB_ISB SysAlias  | 
553  |  |  | 
554  |  | #define GET_ISB_DECL  | 
555  |  |  | 
556  |  | #include "AArch64GenSystemOperands.inc"  | 
557  |  |  | 
558  |  | // CS namespace end: AArch64ISB  | 
559  |  |  | 
560  |  | // CS namespace begin: AArch64TSB  | 
561  |  |  | 
562  |  | #define AArch64TSB_TSB SysAlias  | 
563  |  |  | 
564  |  | #define GET_TSB_DECL  | 
565  |  |  | 
566  |  | #include "AArch64GenSystemOperands.inc"  | 
567  |  |  | 
568  |  | // CS namespace end: AArch64TSB  | 
569  |  |  | 
570  |  | // CS namespace begin: AArch64PRFM  | 
571  |  |  | 
572  |  | #define AArch64PRFM_PRFM SysAlias  | 
573  |  |  | 
574  |  | #define GET_PRFM_DECL  | 
575  |  |  | 
576  |  | #include "AArch64GenSystemOperands.inc"  | 
577  |  |  | 
578  |  | // CS namespace end: AArch64PRFM  | 
579  |  |  | 
580  |  | // CS namespace begin: AArch64SVEPRFM  | 
581  |  |  | 
582  |  | #define AArch64SVEPRFM_SVEPRFM SysAlias  | 
583  |  |  | 
584  |  | #define GET_SVEPRFM_DECL  | 
585  |  |  | 
586  |  | #include "AArch64GenSystemOperands.inc"  | 
587  |  |  | 
588  |  | // CS namespace end: AArch64SVEPRFM  | 
589  |  |  | 
590  |  | // CS namespace begin: AArch64RPRFM  | 
591  |  |  | 
592  |  | #define AArch64RPRFM_RPRFM SysAlias  | 
593  |  |  | 
594  |  | #define GET_RPRFM_DECL  | 
595  |  |  | 
596  |  | #include "AArch64GenSystemOperands.inc"  | 
597  |  |  | 
598  |  | // CS namespace end: AArch64RPRFM  | 
599  |  |  | 
600  |  | // CS namespace begin: AArch64SVEPredPattern  | 
601  |  |  | 
602  |  | typedef struct SVEPREDPAT { | 
603  |  |   const char *Name;  | 
604  |  |   aarch64_sysop_alias SysAlias;  | 
605  |  |   uint16_t Encoding;  | 
606  |  | } AArch64SVEPredPattern_SVEPREDPAT;  | 
607  |  |  | 
608  |  | #define GET_SVEPREDPAT_DECL  | 
609  |  |  | 
610  |  | #include "AArch64GenSystemOperands.inc"  | 
611  |  |  | 
612  |  | // CS namespace end: AArch64SVEPredPattern  | 
613  |  |  | 
614  |  | // CS namespace begin: AArch64SVEVecLenSpecifier  | 
615  |  |  | 
616  |  | typedef struct SVEVECLENSPECIFIER { | 
617  |  |   const char *Name;  | 
618  |  |   aarch64_sysop_alias SysAlias;  | 
619  |  |   uint16_t Encoding;  | 
620  |  | } AArch64SVEVecLenSpecifier_SVEVECLENSPECIFIER;  | 
621  |  |  | 
622  |  | #define GET_SVEVECLENSPECIFIER_DECL  | 
623  |  |  | 
624  |  | #include "AArch64GenSystemOperands.inc"  | 
625  |  |  | 
626  |  | // CS namespace end: AArch64SVEVecLenSpecifier  | 
627  |  |  | 
628  |  | // namespace AArch64SVEVecLenSpecifier  | 
629  |  |  | 
630  |  | /// Return the number of active elements for VL1 to VL256 predicate pattern,  | 
631  |  | /// zero for all other patterns.  | 
632  |  | static inline unsigned getNumElementsFromSVEPredPattern(unsigned Pattern)  | 
633  | 0  | { | 
634  | 0  |   switch (Pattern) { | 
635  | 0  |   default:  | 
636  | 0  |     return 0;  | 
637  | 0  |   case AARCH64_SVEPREDPAT_VL1:  | 
638  | 0  |   case AARCH64_SVEPREDPAT_VL2:  | 
639  | 0  |   case AARCH64_SVEPREDPAT_VL3:  | 
640  | 0  |   case AARCH64_SVEPREDPAT_VL4:  | 
641  | 0  |   case AARCH64_SVEPREDPAT_VL5:  | 
642  | 0  |   case AARCH64_SVEPREDPAT_VL6:  | 
643  | 0  |   case AARCH64_SVEPREDPAT_VL7:  | 
644  | 0  |   case AARCH64_SVEPREDPAT_VL8:  | 
645  | 0  |     return Pattern;  | 
646  | 0  |   case AARCH64_SVEPREDPAT_VL16:  | 
647  | 0  |     return 16;  | 
648  | 0  |   case AARCH64_SVEPREDPAT_VL32:  | 
649  | 0  |     return 32;  | 
650  | 0  |   case AARCH64_SVEPREDPAT_VL64:  | 
651  | 0  |     return 64;  | 
652  | 0  |   case AARCH64_SVEPREDPAT_VL128:  | 
653  | 0  |     return 128;  | 
654  | 0  |   case AARCH64_SVEPREDPAT_VL256:  | 
655  | 0  |     return 256;  | 
656  | 0  |   }  | 
657  | 0  | } Unexecuted instantiation: AArch64Mapping.c:getNumElementsFromSVEPredPattern Unexecuted instantiation: AArch64BaseInfo.c:getNumElementsFromSVEPredPattern Unexecuted instantiation: AArch64Disassembler.c:getNumElementsFromSVEPredPattern Unexecuted instantiation: AArch64DisassemblerExtension.c:getNumElementsFromSVEPredPattern Unexecuted instantiation: AArch64InstPrinter.c:getNumElementsFromSVEPredPattern  | 
658  |  |  | 
659  |  | /// Return specific VL predicate pattern based on the number of elements.  | 
660  |  | static inline unsigned getSVEPredPatternFromNumElements(unsigned MinNumElts)  | 
661  | 0  | { | 
662  | 0  |   switch (MinNumElts) { | 
663  | 0  |   default:  | 
664  | 0  |     return 0;  | 
665  | 0  |   case 1:  | 
666  | 0  |   case 2:  | 
667  | 0  |   case 3:  | 
668  | 0  |   case 4:  | 
669  | 0  |   case 5:  | 
670  | 0  |   case 6:  | 
671  | 0  |   case 7:  | 
672  | 0  |   case 8:  | 
673  | 0  |     return MinNumElts;  | 
674  | 0  |   case 16:  | 
675  | 0  |     return AARCH64_SVEPREDPAT_VL16;  | 
676  | 0  |   case 32:  | 
677  | 0  |     return AARCH64_SVEPREDPAT_VL32;  | 
678  | 0  |   case 64:  | 
679  | 0  |     return AARCH64_SVEPREDPAT_VL64;  | 
680  | 0  |   case 128:  | 
681  | 0  |     return AARCH64_SVEPREDPAT_VL128;  | 
682  | 0  |   case 256:  | 
683  | 0  |     return AARCH64_SVEPREDPAT_VL256;  | 
684  | 0  |   }  | 
685  | 0  | } Unexecuted instantiation: AArch64Mapping.c:getSVEPredPatternFromNumElements Unexecuted instantiation: AArch64BaseInfo.c:getSVEPredPatternFromNumElements Unexecuted instantiation: AArch64Disassembler.c:getSVEPredPatternFromNumElements Unexecuted instantiation: AArch64DisassemblerExtension.c:getSVEPredPatternFromNumElements Unexecuted instantiation: AArch64InstPrinter.c:getSVEPredPatternFromNumElements  | 
686  |  |  | 
687  |  | // CS namespace begin: AArch64ExactFPImm  | 
688  |  |  | 
689  |  | typedef struct ExactFPImm { | 
690  |  |   const char *Name;  | 
691  |  |   aarch64_sysop_imm SysImm;  | 
692  |  |   int Enum;  | 
693  |  |   const char *Repr;  | 
694  |  | } AArch64ExactFPImm_ExactFPImm;  | 
695  |  |  | 
696  |  | enum { | 
697  |  |   AArch64ExactFPImm_half = 1,  | 
698  |  |   AArch64ExactFPImm_one = 2,  | 
699  |  |   AArch64ExactFPImm_two = 3,  | 
700  |  |   AArch64ExactFPImm_zero = 0,  | 
701  |  | };  | 
702  |  |  | 
703  |  | #define GET_EXACTFPIMM_DECL  | 
704  |  |  | 
705  |  | #include "AArch64GenSystemOperands.inc"  | 
706  |  |  | 
707  |  | // CS namespace end: AArch64ExactFPImm  | 
708  |  |  | 
709  |  | // CS namespace begin: AArch64PState  | 
710  |  |  | 
711  |  | #define AArch64PState_PStateImm0_15 SysAlias  | 
712  |  |  | 
713  |  | #define GET_PSTATEIMM0_15_DECL  | 
714  |  |  | 
715  |  | #include "AArch64GenSystemOperands.inc"  | 
716  |  |  | 
717  |  | #define AArch64PState_PStateImm0_1 SysAlias  | 
718  |  |  | 
719  |  | #define GET_PSTATEIMM0_1_DECL  | 
720  |  |  | 
721  |  | #include "AArch64GenSystemOperands.inc"  | 
722  |  |  | 
723  |  | // CS namespace end: AArch64PState  | 
724  |  |  | 
725  |  | // CS namespace begin: AArch64PSBHint  | 
726  |  |  | 
727  |  | #define AArch64PSBHint_PSB SysAlias  | 
728  |  |  | 
729  |  | #define GET_PSB_DECL  | 
730  |  |  | 
731  |  | #include "AArch64GenSystemOperands.inc"  | 
732  |  |  | 
733  |  | // CS namespace end: AArch64PSBHint  | 
734  |  |  | 
735  |  | // CS namespace begin: AArch64BTIHint  | 
736  |  |  | 
737  |  | #define AArch64BTIHint_BTI SysAlias  | 
738  |  |  | 
739  |  | #define GET_BTI_DECL  | 
740  |  |  | 
741  |  | #include "AArch64GenSystemOperands.inc"  | 
742  |  |  | 
743  |  | // CS namespace end: AArch64BTIHint  | 
744  |  |  | 
745  |  | // CS namespace begin: AArch64SE  | 
746  |  |  | 
747  |  | typedef enum ShiftExtSpecifiers { | 
748  |  |   AArch64SE_Invalid = -1,  | 
749  |  |   AArch64SE_LSL,  | 
750  |  |   AArch64SE_MSL,  | 
751  |  |   AArch64SE_LSR,  | 
752  |  |   AArch64SE_ASR,  | 
753  |  |   AArch64SE_ROR,  | 
754  |  |  | 
755  |  |   AArch64SE_UXTB,  | 
756  |  |   AArch64SE_UXTH,  | 
757  |  |   AArch64SE_UXTW,  | 
758  |  |   AArch64SE_UXTX,  | 
759  |  |  | 
760  |  |   AArch64SE_SXTB,  | 
761  |  |   AArch64SE_SXTH,  | 
762  |  |   AArch64SE_SXTW,  | 
763  |  |   AArch64SE_SXTX  | 
764  |  | } AArch64SE_ShiftExtSpecifiers;  | 
765  |  |  | 
766  |  | // CS namespace end: AArch64SE  | 
767  |  |  | 
768  |  | // CS namespace begin: AArch64Layout  | 
769  |  |  | 
770  |  | // MOVE_NOTICE: AArch64Layout_VectorLayout - move to aarch64.h  | 
771  |  | // MOVE_NOTICE: AArch64VectorLayoutToString - move to aarch64.h  | 
772  |  | // MOVE_NOTICE: AArch64StringToVectorLayout - move to aarch64.h  | 
773  |  |  | 
774  |  | // CS namespace end: AArch64Layout  | 
775  |  |  | 
776  |  | // CS namespace begin: AArch64SysReg  | 
777  |  |  | 
778  |  | typedef struct SysReg { | 
779  |  |   const char *Name;  | 
780  |  |   aarch64_sysop_reg SysReg;  | 
781  |  |   const char *AltName;  | 
782  |  |   aarch64_sysop_reg AliasReg;  | 
783  |  |   unsigned Encoding;  | 
784  |  |   bool Readable;  | 
785  |  |   bool Writeable;  | 
786  |  |   aarch64_insn_group FeaturesRequired[3];  | 
787  |  | } AArch64SysReg_SysReg;  | 
788  |  |  | 
789  |  | #define GET_SYSREG_DECL  | 
790  |  |  | 
791  |  | #include "AArch64GenSystemOperands.inc"  | 
792  |  |  | 
793  |  | const AArch64SysReg_SysReg *AArch64SysReg_lookupSysRegByName(const char *Name);  | 
794  |  | const AArch64SysReg_SysReg *  | 
795  |  | AArch64SysReg_lookupSysRegByEncoding(uint16_t Encoding);  | 
796  | 8.35k  | #define AARCH64_GRS_LEN 128  | 
797  |  | void AArch64SysReg_genericRegisterString(uint32_t Bits, char *result);  | 
798  |  |  | 
799  |  | // CS namespace end: AArch64SysReg  | 
800  |  |  | 
801  |  | // CS namespace begin: AArch64TLBI  | 
802  |  |  | 
803  |  | #define AArch64TLBI_TLBI SysAliasReg  | 
804  |  |  | 
805  |  | #define GET_TLBITable_DECL  | 
806  |  |  | 
807  |  | #include "AArch64GenSystemOperands.inc"  | 
808  |  |  | 
809  |  | // CS namespace end: AArch64TLBI  | 
810  |  |  | 
811  |  | // CS namespace begin: AArch64PRCTX  | 
812  |  |  | 
813  |  | #define AArch64PRCTX_PRCTX SysAliasReg  | 
814  |  |  | 
815  |  | #define GET_PRCTX_DECL  | 
816  |  |  | 
817  |  | #include "AArch64GenSystemOperands.inc"  | 
818  |  |  | 
819  |  | // CS namespace end: AArch64PRCTX  | 
820  |  |  | 
821  |  | // CS namespace begin: AArch64II  | 
822  |  |  | 
823  |  | /// Target Operand Flag enum.  | 
824  |  | typedef enum TOF { | 
825  |  |   //===------------------------------------------------------------------===//  | 
826  |  |   // AArch64 Specific MachineOperand flags.  | 
827  |  |  | 
828  |  |   AArch64II_MO_NO_FLAG,  | 
829  |  |  | 
830  |  |   AArch64II_MO_FRAGMENT = 0x7,  | 
831  |  |  | 
832  |  |   /// MO_PAGE - A symbol operand with this flag represents the pc-relative  | 
833  |  |   /// offset of the 4K page containing the symbol.  This is used with the  | 
834  |  |   /// ADRP instruction.  | 
835  |  |   AArch64II_MO_PAGE = 1,  | 
836  |  |  | 
837  |  |   /// MO_PAGEOFF - A symbol operand with this flag represents the offset of  | 
838  |  |   /// that symbol within a 4K page.  This offset is added to the page address  | 
839  |  |   /// to produce the complete address.  | 
840  |  |   AArch64II_MO_PAGEOFF = 2,  | 
841  |  |  | 
842  |  |   /// MO_G3 - A symbol operand with this flag (granule 3) represents the high  | 
843  |  |   /// 16-bits of a 64-bit address, used in a MOVZ or MOVK instruction  | 
844  |  |   AArch64II_MO_G3 = 3,  | 
845  |  |  | 
846  |  |   /// MO_G2 - A symbol operand with this flag (granule 2) represents the bits  | 
847  |  |   /// 32-47 of a 64-bit address, used in a MOVZ or MOVK instruction  | 
848  |  |   AArch64II_MO_G2 = 4,  | 
849  |  |  | 
850  |  |   /// MO_G1 - A symbol operand with this flag (granule 1) represents the bits  | 
851  |  |   /// 16-31 of a 64-bit address, used in a MOVZ or MOVK instruction  | 
852  |  |   AArch64II_MO_G1 = 5,  | 
853  |  |  | 
854  |  |   /// MO_G0 - A symbol operand with this flag (granule 0) represents the bits  | 
855  |  |   /// 0-15 of a 64-bit address, used in a MOVZ or MOVK instruction  | 
856  |  |   AArch64II_MO_G0 = 6,  | 
857  |  |  | 
858  |  |   /// MO_HI12 - This flag indicates that a symbol operand represents the bits  | 
859  |  |   /// 13-24 of a 64-bit address, used in a arithmetic immediate-shifted-left-  | 
860  |  |   /// by-12-bits instruction.  | 
861  |  |   AArch64II_MO_HI12 = 7,  | 
862  |  |  | 
863  |  |   /// MO_COFFSTUB - On a symbol operand "FOO", this indicates that the  | 
864  |  |   /// reference is actually to the ".refptr.FOO" symbol.  This is used for  | 
865  |  |   /// stub symbols on windows.  | 
866  |  |   AArch64II_MO_COFFSTUB = 0x8,  | 
867  |  |  | 
868  |  |   /// MO_GOT - This flag indicates that a symbol operand represents the  | 
869  |  |   /// address of the GOT entry for the symbol, rather than the address of  | 
870  |  |   /// the symbol itself.  | 
871  |  |   AArch64II_MO_GOT = 0x10,  | 
872  |  |  | 
873  |  |   /// MO_NC - Indicates whether the linker is expected to check the symbol  | 
874  |  |   /// reference for overflow. For example in an ADRP/ADD pair of relocations  | 
875  |  |   /// the ADRP usually does check, but not the ADD.  | 
876  |  |   AArch64II_MO_NC = 0x20,  | 
877  |  |  | 
878  |  |   /// MO_TLS - Indicates that the operand being accessed is some kind of  | 
879  |  |   /// thread-local symbol. On Darwin, only one type of thread-local access  | 
880  |  |   /// exists (pre linker-relaxation), but on ELF the TLSModel used for the  | 
881  |  |   /// referee will affect interpretation.  | 
882  |  |   AArch64II_MO_TLS = 0x40,  | 
883  |  |  | 
884  |  |   /// MO_DLLIMPORT - On a symbol operand, this represents that the reference  | 
885  |  |   /// to the symbol is for an import stub.  This is used for DLL import  | 
886  |  |   /// storage class indication on Windows.  | 
887  |  |   AArch64II_MO_DLLIMPORT = 0x80,  | 
888  |  |  | 
889  |  |   /// MO_S - Indicates that the bits of the symbol operand represented by  | 
890  |  |   /// MO_G0 etc are signed.  | 
891  |  |   AArch64II_MO_S = 0x100,  | 
892  |  |  | 
893  |  |   /// MO_PREL - Indicates that the bits of the symbol operand represented by  | 
894  |  |   /// MO_G0 etc are PC relative.  | 
895  |  |   AArch64II_MO_PREL = 0x200,  | 
896  |  |  | 
897  |  |   /// MO_TAGGED - With MO_PAGE, indicates that the page includes a memory tag  | 
898  |  |   /// in bits 56-63.  | 
899  |  |   /// On a FrameIndex operand, indicates that the underlying memory is tagged  | 
900  |  |   /// with an unknown tag value (MTE); this needs to be lowered either to an  | 
901  |  |   /// SP-relative load or store instruction (which do not check tags), or to  | 
902  |  |   /// an LDG instruction to obtain the tag value.  | 
903  |  |   AArch64II_MO_TAGGED = 0x400,  | 
904  |  |  | 
905  |  |   /// MO_ARM64EC_CALLMANGLE - Operand refers to the Arm64EC-mangled version  | 
906  |  |   /// of a symbol, not the original. For dllimport symbols, this means it  | 
907  |  |   /// uses "__imp_aux".  For other symbols, this means it uses the mangled  | 
908  |  |   /// ("#" prefix for C) name. | 
909  |  |   AArch64II_MO_ARM64EC_CALLMANGLE = 0x800,  | 
910  |  | } AArch64II_TOF;  | 
911  |  |  | 
912  |  | // CS namespace end: AArch64II  | 
913  |  |  | 
914  |  | // end namespace AArch64II  | 
915  |  |  | 
916  |  | //===----------------------------------------------------------------------===//  | 
917  |  | // v8.3a Pointer Authentication  | 
918  |  | //  | 
919  |  |  | 
920  |  | // CS namespace begin: AArch64PACKey  | 
921  |  |  | 
922  |  | typedef enum ID { | 
923  |  |   AArch64PACKey_IA = 0,  | 
924  |  |   AArch64PACKey_IB = 1,  | 
925  |  |   AArch64PACKey_DA = 2,  | 
926  |  |   AArch64PACKey_DB = 3,  | 
927  |  |   AArch64PACKey_LAST = AArch64PACKey_DB,  | 
928  |  |   AArch64PACKey_INVALID,  | 
929  |  | } AArch64PACKey_ID;  | 
930  |  |  | 
931  |  | // CS namespace end: AArch64PACKey  | 
932  |  |  | 
933  |  | // namespace AArch64PACKey  | 
934  |  |  | 
935  |  | /// Return 2-letter identifier string for numeric key ID.  | 
936  |  | static inline const char *AArch64PACKeyIDToString(AArch64PACKey_ID KeyID)  | 
937  | 0  | { | 
938  | 0  |   switch (KeyID) { | 
939  | 0  |   default:  | 
940  | 0  |     break;  | 
941  | 0  |   case AArch64PACKey_IA:  | 
942  | 0  |     return "ia";  | 
943  | 0  |   case AArch64PACKey_IB:  | 
944  | 0  |     return "ib";  | 
945  | 0  |   case AArch64PACKey_DA:  | 
946  | 0  |     return "da";  | 
947  | 0  |   case AArch64PACKey_DB:  | 
948  | 0  |     return "db";  | 
949  | 0  |   }  | 
950  | 0  |   return NULL;  | 
951  | 0  | } Unexecuted instantiation: AArch64Mapping.c:AArch64PACKeyIDToString Unexecuted instantiation: AArch64BaseInfo.c:AArch64PACKeyIDToString Unexecuted instantiation: AArch64Disassembler.c:AArch64PACKeyIDToString Unexecuted instantiation: AArch64DisassemblerExtension.c:AArch64PACKeyIDToString Unexecuted instantiation: AArch64InstPrinter.c:AArch64PACKeyIDToString  | 
952  |  |  | 
953  |  | /// Return numeric key ID for 2-letter identifier string.  | 
954  |  | static inline AArch64PACKey_ID AArch64StringToPACKeyID(const char *Name)  | 
955  | 0  | { | 
956  | 0  |   if (strcmp(Name, "ia") == 0)  | 
957  | 0  |     return AArch64PACKey_IA;  | 
958  | 0  |   if (strcmp(Name, "ib") == 0)  | 
959  | 0  |     return AArch64PACKey_IB;  | 
960  | 0  |   if (strcmp(Name, "da") == 0)  | 
961  | 0  |     return AArch64PACKey_DA;  | 
962  | 0  |   if (strcmp(Name, "db") == 0)  | 
963  | 0  |     return AArch64PACKey_DB;  | 
964  | 0  |   CS_ASSERT_RET_VAL(0 && "Invalid PAC key", AArch64PACKey_INVALID);  | 
965  | 0  |   return AArch64PACKey_LAST;  | 
966  | 0  | } Unexecuted instantiation: AArch64Mapping.c:AArch64StringToPACKeyID Unexecuted instantiation: AArch64BaseInfo.c:AArch64StringToPACKeyID Unexecuted instantiation: AArch64Disassembler.c:AArch64StringToPACKeyID Unexecuted instantiation: AArch64DisassemblerExtension.c:AArch64StringToPACKeyID Unexecuted instantiation: AArch64InstPrinter.c:AArch64StringToPACKeyID  | 
967  |  |  | 
968  |  | // CS namespace begin: AArch64  | 
969  |  |  | 
970  |  | // The number of bits in a SVE register is architecturally defined  | 
971  |  | // to be a multiple of this value.  If <M x t> has this number of bits,  | 
972  |  | // a <n x M x t> vector can be stored in a SVE register without any  | 
973  |  | // redundant bits.  If <M x t> has this number of bits divided by P,  | 
974  |  | // a <n x M x t> vector is stored in a SVE register by placing index i  | 
975  |  | // in index i*P of a <n x (M*P) x t> vector.  The other elements of the  | 
976  |  | // <n x (M*P) x t> vector (such as index 1) are undefined.  | 
977  |  | static const unsigned SVEBitsPerBlock = 128;  | 
978  |  |  | 
979  |  | static const unsigned SVEMaxBitsPerVector = 2048;  | 
980  |  |  | 
981  |  | // CS namespace end: AArch64  | 
982  |  |  | 
983  |  | // end namespace AArch64  | 
984  |  | // end namespace llvm  | 
985  |  |  | 
986  |  | #endif  |