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