1class Architecture<string fname, string aname, list<SubtargetFeature> features> 2 : SubtargetFeature<fname, "ARMArch", aname, 3 !strconcat(aname, " architecture"), features>; 4 5//===----------------------------------------------------------------------===// 6// ARM architectures 7// 8 9def ARMv4 : Architecture<"armv4", "ARMv4", []>; 10 11def ARMv4t : Architecture<"armv4t", "ARMv4t", [HasV4TOps]>; 12 13def ARMv5t : Architecture<"armv5t", "ARMv5t", [HasV5TOps]>; 14 15def ARMv5te : Architecture<"armv5te", "ARMv5te", [HasV5TEOps]>; 16 17def ARMv5tej : Architecture<"armv5tej", "ARMv5tej", [HasV5TEOps]>; 18 19def ARMv6 : Architecture<"armv6", "ARMv6", [HasV6Ops, 20 FeatureDSP]>; 21 22def ARMv6t2 : Architecture<"armv6t2", "ARMv6t2", [HasV6T2Ops, 23 FeatureDSP]>; 24 25def ARMv6k : Architecture<"armv6k", "ARMv6k", [HasV6KOps]>; 26 27def ARMv6kz : Architecture<"armv6kz", "ARMv6kz", [HasV6KOps, 28 FeatureTrustZone]>; 29 30def ARMv6m : Architecture<"armv6-m", "ARMv6m", [HasV6MOps, 31 FeatureNoARM, 32 ModeThumb, 33 FeatureDB, 34 FeatureMClass, 35 FeatureStrictAlign]>; 36 37def ARMv6sm : Architecture<"armv6s-m", "ARMv6sm", [HasV6MOps, 38 FeatureNoARM, 39 ModeThumb, 40 FeatureDB, 41 FeatureMClass, 42 FeatureStrictAlign]>; 43 44def ARMv7a : Architecture<"armv7-a", "ARMv7a", [HasV7Ops, 45 FeatureNEON, 46 FeatureDB, 47 FeatureDSP, 48 FeatureAClass, 49 FeaturePerfMon]>; 50 51def ARMv7ve : Architecture<"armv7ve", "ARMv7ve", [HasV7Ops, 52 FeatureNEON, 53 FeatureDB, 54 FeatureDSP, 55 FeatureTrustZone, 56 FeatureMP, 57 FeatureVirtualization, 58 FeatureAClass, 59 FeaturePerfMon]>; 60 61def ARMv7r : Architecture<"armv7-r", "ARMv7r", [HasV7Ops, 62 FeatureDB, 63 FeatureDSP, 64 FeatureHWDivThumb, 65 FeatureRClass, 66 FeaturePerfMon]>; 67 68def ARMv7m : Architecture<"armv7-m", "ARMv7m", [HasV7Ops, 69 FeatureThumb2, 70 FeatureNoARM, 71 ModeThumb, 72 FeatureDB, 73 FeatureHWDivThumb, 74 FeatureMClass]>; 75 76def ARMv7em : Architecture<"armv7e-m", "ARMv7em", [HasV7Ops, 77 FeatureThumb2, 78 FeatureNoARM, 79 ModeThumb, 80 FeatureDB, 81 FeatureHWDivThumb, 82 FeatureMClass, 83 FeatureDSP]>; 84 85def ARMv8a : Architecture<"armv8-a", "ARMv8a", [HasV8Ops, 86 FeatureAClass, 87 FeatureDB, 88 FeatureFPARMv8, 89 FeatureNEON, 90 FeatureDSP, 91 FeatureTrustZone, 92 FeatureMP, 93 FeatureVirtualization, 94 FeatureCrypto, 95 FeatureCRC]>; 96 97def ARMv81a : Architecture<"armv8.1-a", "ARMv81a", [HasV8_1aOps, 98 FeatureAClass, 99 FeatureDB, 100 FeatureFPARMv8, 101 FeatureNEON, 102 FeatureDSP, 103 FeatureTrustZone, 104 FeatureMP, 105 FeatureVirtualization, 106 FeatureCrypto, 107 FeatureCRC]>; 108 109def ARMv82a : Architecture<"armv8.2-a", "ARMv82a", [HasV8_2aOps, 110 FeatureAClass, 111 FeatureDB, 112 FeatureFPARMv8, 113 FeatureNEON, 114 FeatureDSP, 115 FeatureTrustZone, 116 FeatureMP, 117 FeatureVirtualization, 118 FeatureCrypto, 119 FeatureCRC, 120 FeatureRAS]>; 121 122def ARMv83a : Architecture<"armv8.3-a", "ARMv83a", [HasV8_3aOps, 123 FeatureAClass, 124 FeatureDB, 125 FeatureFPARMv8, 126 FeatureNEON, 127 FeatureDSP, 128 FeatureTrustZone, 129 FeatureMP, 130 FeatureVirtualization, 131 FeatureCrypto, 132 FeatureCRC, 133 FeatureRAS]>; 134 135def ARMv84a : Architecture<"armv8.4-a", "ARMv84a", [HasV8_4aOps, 136 FeatureAClass, 137 FeatureDB, 138 FeatureFPARMv8, 139 FeatureNEON, 140 FeatureDSP, 141 FeatureTrustZone, 142 FeatureMP, 143 FeatureVirtualization, 144 FeatureCrypto, 145 FeatureCRC, 146 FeatureRAS, 147 FeatureDotProd]>; 148 149def ARMv85a : Architecture<"armv8.5-a", "ARMv85a", [HasV8_5aOps, 150 FeatureAClass, 151 FeatureDB, 152 FeatureFPARMv8, 153 FeatureNEON, 154 FeatureDSP, 155 FeatureTrustZone, 156 FeatureMP, 157 FeatureVirtualization, 158 FeatureCrypto, 159 FeatureCRC, 160 FeatureRAS, 161 FeatureDotProd]>; 162def ARMv86a : Architecture<"armv8.6-a", "ARMv86a", [HasV8_6aOps, 163 FeatureAClass, 164 FeatureDB, 165 FeatureFPARMv8, 166 FeatureNEON, 167 FeatureDSP, 168 FeatureTrustZone, 169 FeatureMP, 170 FeatureVirtualization, 171 FeatureCrypto, 172 FeatureCRC, 173 FeatureRAS, 174 FeatureDotProd]>; 175def ARMv87a : Architecture<"armv8.7-a", "ARMv87a", [HasV8_7aOps, 176 FeatureAClass, 177 FeatureDB, 178 FeatureFPARMv8, 179 FeatureNEON, 180 FeatureDSP, 181 FeatureTrustZone, 182 FeatureMP, 183 FeatureVirtualization, 184 FeatureCrypto, 185 FeatureCRC, 186 FeatureRAS, 187 FeatureDotProd]>; 188def ARMv88a : Architecture<"armv8.8-a", "ARMv88a", [HasV8_8aOps, 189 FeatureAClass, 190 FeatureDB, 191 FeatureFPARMv8, 192 FeatureNEON, 193 FeatureDSP, 194 FeatureTrustZone, 195 FeatureMP, 196 FeatureVirtualization, 197 FeatureCrypto, 198 FeatureCRC, 199 FeatureRAS, 200 FeatureDotProd]>; 201def ARMv89a : Architecture<"armv8.9-a", "ARMv89a", [HasV8_9aOps, 202 FeatureAClass, 203 FeatureDB, 204 FeatureFPARMv8, 205 FeatureNEON, 206 FeatureDSP, 207 FeatureTrustZone, 208 FeatureMP, 209 FeatureVirtualization, 210 FeatureCrypto, 211 FeatureCRC, 212 FeatureRAS, 213 FeatureDotProd]>; 214 215def ARMv9a : Architecture<"armv9-a", "ARMv9a", [HasV9_0aOps, 216 FeatureAClass, 217 FeatureDB, 218 FeatureFPARMv8, 219 FeatureNEON, 220 FeatureDSP, 221 FeatureTrustZone, 222 FeatureMP, 223 FeatureVirtualization, 224 FeatureCRC, 225 FeatureRAS, 226 FeatureDotProd]>; 227def ARMv91a : Architecture<"armv9.1-a", "ARMv91a", [HasV9_1aOps, 228 FeatureAClass, 229 FeatureDB, 230 FeatureFPARMv8, 231 FeatureNEON, 232 FeatureDSP, 233 FeatureTrustZone, 234 FeatureMP, 235 FeatureVirtualization, 236 FeatureCRC, 237 FeatureRAS, 238 FeatureDotProd]>; 239def ARMv92a : Architecture<"armv9.2-a", "ARMv92a", [HasV9_2aOps, 240 FeatureAClass, 241 FeatureDB, 242 FeatureFPARMv8, 243 FeatureNEON, 244 FeatureDSP, 245 FeatureTrustZone, 246 FeatureMP, 247 FeatureVirtualization, 248 FeatureCRC, 249 FeatureRAS, 250 FeatureDotProd]>; 251def ARMv93a : Architecture<"armv9.3-a", "ARMv93a", [HasV9_3aOps, 252 FeatureAClass, 253 FeatureDB, 254 FeatureFPARMv8, 255 FeatureNEON, 256 FeatureDSP, 257 FeatureTrustZone, 258 FeatureMP, 259 FeatureVirtualization, 260 FeatureCrypto, 261 FeatureCRC, 262 FeatureRAS, 263 FeatureDotProd]>; 264def ARMv94a : Architecture<"armv9.4-a", "ARMv94a", [HasV9_4aOps, 265 FeatureAClass, 266 FeatureDB, 267 FeatureFPARMv8, 268 FeatureNEON, 269 FeatureDSP, 270 FeatureTrustZone, 271 FeatureMP, 272 FeatureVirtualization, 273 FeatureCRC, 274 FeatureRAS, 275 FeatureDotProd]>; 276def ARMv95a : Architecture<"armv9.5-a", "ARMv95a", [HasV9_5aOps, 277 FeatureAClass, 278 FeatureDB, 279 FeatureFPARMv8, 280 FeatureNEON, 281 FeatureDSP, 282 FeatureTrustZone, 283 FeatureMP, 284 FeatureVirtualization, 285 FeatureCRC, 286 FeatureRAS, 287 FeatureDotProd]>; 288 289def ARMv8r : Architecture<"armv8-r", "ARMv8r", [HasV8Ops, 290 FeatureRClass, 291 FeatureDB, 292 FeatureDFB, 293 FeatureDSP, 294 FeatureCRC, 295 FeatureMP, 296 FeatureFPARMv8_D16_SP, 297 FeatureVirtualization]>; 298 299def ARMv8mBaseline : Architecture<"armv8-m.base", "ARMv8mBaseline", 300 [HasV8MBaselineOps, 301 FeatureNoARM, 302 ModeThumb, 303 FeatureDB, 304 FeatureHWDivThumb, 305 FeatureV7Clrex, 306 Feature8MSecExt, 307 FeatureAcquireRelease, 308 FeatureMClass, 309 FeatureStrictAlign]>; 310 311def ARMv8mMainline : Architecture<"armv8-m.main", "ARMv8mMainline", 312 [HasV8MMainlineOps, 313 FeatureNoARM, 314 ModeThumb, 315 FeatureDB, 316 FeatureHWDivThumb, 317 Feature8MSecExt, 318 FeatureAcquireRelease, 319 FeatureMClass]>; 320 321def ARMv81mMainline : Architecture<"armv8.1-m.main", "ARMv81mMainline", 322 [HasV8_1MMainlineOps, 323 FeatureNoARM, 324 ModeThumb, 325 FeatureDB, 326 FeatureHWDivThumb, 327 Feature8MSecExt, 328 FeatureAcquireRelease, 329 FeatureMClass, 330 FeatureRAS, 331 FeatureLOB]>; 332 333// Aliases 334def IWMMXT : Architecture<"iwmmxt", "ARMv5te", [ARMv5te]>; 335def IWMMXT2 : Architecture<"iwmmxt2", "ARMv5te", [ARMv5te]>; 336def XScale : Architecture<"xscale", "ARMv5te", [ARMv5te]>; 337def ARMv6j : Architecture<"armv6j", "ARMv7a", [ARMv6]>; 338def ARMv7k : Architecture<"armv7k", "ARMv7a", [ARMv7a]>; 339def ARMv7s : Architecture<"armv7s", "ARMv7a", [ARMv7a]>; 340