17ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens//===-- ARMBuildAttributes.h - ARM Build Attributes -------------*- C++ -*-===// 27ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// 37ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// The LLVM Compiler Infrastructure 47ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// 57ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// This file is distributed under the University of Illinois Open Source 67ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// License. See LICENSE.TXT for details. 77ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// 87ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens//===----------------------------------------------------------------------===// 97ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// 107ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// This file contains enumerations and support routines for ARM build attributes 117ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// as defined in ARM ABI addenda document (ABI release 2.08). 127ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// 137ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// ELF for the ARM Architecture r2.09 - November 30, 2012 147ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// 157ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044e/IHI0044E_aaelf.pdf 167ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// 177ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens//===----------------------------------------------------------------------===// 187ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 197ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens#ifndef LLVM_SUPPORT_ARMBUILDATTRIBUTES_H 207ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens#define LLVM_SUPPORT_ARMBUILDATTRIBUTES_H 217ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 227ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensnamespace llvm { 237ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensclass StringRef; 247ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 257ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensnamespace ARMBuildAttrs { 267ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 277ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensenum SpecialAttr { 287ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // This is for the .cpu asm attr. It translates into one or more 297ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // AttrType (below) entries in the .ARM.attributes section in the ELF. 307ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens SEL_CPU 317ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens}; 327ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 337ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensenum AttrType { 347ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Rest correspond to ELF/.ARM.attributes 357ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens File = 1, 367ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens CPU_raw_name = 4, 377ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens CPU_name = 5, 387ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens CPU_arch = 6, 397ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens CPU_arch_profile = 7, 407ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ARM_ISA_use = 8, 417ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens THUMB_ISA_use = 9, 427ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens FP_arch = 10, 437ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens WMMX_arch = 11, 447ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens Advanced_SIMD_arch = 12, 457ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens PCS_config = 13, 467ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_PCS_R9_use = 14, 477ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_PCS_RW_data = 15, 487ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_PCS_RO_data = 16, 497ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_PCS_GOT_use = 17, 507ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_PCS_wchar_t = 18, 517ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_FP_rounding = 19, 527ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_FP_denormal = 20, 537ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_FP_exceptions = 21, 547ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_FP_user_exceptions = 22, 557ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_FP_number_model = 23, 567ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_align_needed = 24, 577ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_align_preserved = 25, 587ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_enum_size = 26, 597ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_HardFP_use = 27, 607ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_VFP_args = 28, 617ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_WMMX_args = 29, 627ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_optimization_goals = 30, 637ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_FP_optimization_goals = 31, 647ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens compatibility = 32, 657ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens CPU_unaligned_access = 34, 667ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens FP_HP_extension = 36, 677ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_FP_16bit_format = 38, 687ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens MPextension_use = 42, // recoded from 70 (ABI r2.08) 697ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens DIV_use = 44, 707ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens DSP_extension = 46, 717ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens also_compatible_with = 65, 727ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens conformance = 67, 737ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens Virtualization_use = 68, 747ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 757ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens /// Legacy Tags 767ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens Section = 2, // deprecated (ABI r2.09) 777ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens Symbol = 3, // deprecated (ABI r2.09) 787ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_align8_needed = 24, // renamed to ABI_align_needed (ABI r2.09) 797ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ABI_align8_preserved = 25, // renamed to ABI_align_preserved (ABI r2.09) 807ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens nodefaults = 64, // deprecated (ABI r2.09) 817ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens T2EE_use = 66, // deprecated (ABI r2.09) 827ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens MPextension_use_old = 70 // recoded to MPextension_use (ABI r2.08) 837ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens}; 847ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 857ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas CapensStringRef AttrTypeAsString(unsigned Attr, bool HasTagPrefix = true); 867ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas CapensStringRef AttrTypeAsString(AttrType Attr, bool HasTagPrefix = true); 877ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensint AttrTypeFromString(StringRef Tag); 887ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 897ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// Magic numbers for .ARM.attributes 907ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensenum AttrMagic { 917ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens Format_Version = 0x41 927ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens}; 937ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 947ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// Legal Values for CPU_arch, (=6), uleb128 957ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensenum CPUArch { 967ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens Pre_v4 = 0, 977ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v4 = 1, // e.g. SA110 987ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v4T = 2, // e.g. ARM7TDMI 997ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v5T = 3, // e.g. ARM9TDMI 1007ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v5TE = 4, // e.g. ARM946E_S 1017ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v5TEJ = 5, // e.g. ARM926EJ_S 1027ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v6 = 6, // e.g. ARM1136J_S 1037ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v6KZ = 7, // e.g. ARM1176JZ_S 1047ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v6T2 = 8, // e.g. ARM1156T2_S 1057ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v6K = 9, // e.g. ARM1176JZ_S 1067ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v7 = 10, // e.g. Cortex A8, Cortex M3 1077ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v6_M = 11, // e.g. Cortex M1 1087ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v6S_M = 12, // v6_M with the System extensions 1097ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v7E_M = 13, // v7_M with DSP extensions 1107ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v8_A = 14, // v8_A AArch32 1112df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens v8_R = 15, // e.g. Cortex R52 1127ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v8_M_Base= 16, // v8_M_Base AArch32 1137ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens v8_M_Main= 17, // v8_M_Main AArch32 1147ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens}; 1157ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1167ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensenum CPUArchProfile { // (=7), uleb128 1177ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens Not_Applicable = 0, // pre v7, or cross-profile code 1187ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens ApplicationProfile = (0x41), // 'A' (e.g. for Cortex A8) 1197ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens RealTimeProfile = (0x52), // 'R' (e.g. for Cortex R4) 1207ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens MicroControllerProfile = (0x4D), // 'M' (e.g. for Cortex M3) 1217ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens SystemProfile = (0x53) // 'S' Application or real-time profile 1227ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens}; 1237ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1247ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// The following have a lot of common use cases 1257ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensenum { 1267ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens Not_Allowed = 0, 1277ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens Allowed = 1, 1287ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1297ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_ARM_ISA_use (=8), uleb128 1307ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1317ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_THUMB_ISA_use, (=9), uleb128 1327ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowThumb32 = 2, // 32-bit Thumb (implies 16-bit instructions) 1337ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowThumbDerived = 3, // Thumb allowed, derived from arch/profile 1347ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1357ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_FP_arch (=10), uleb128 (formerly Tag_VFP_arch = 10) 1367ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowFPv2 = 2, // v2 FP ISA permitted (implies use of the v1 FP ISA) 1377ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowFPv3A = 3, // v3 FP ISA permitted (implies use of the v2 FP ISA) 1387ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowFPv3B = 4, // v3 FP ISA permitted, but only D0-D15, S0-S31 1397ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowFPv4A = 5, // v4 FP ISA permitted (implies use of v3 FP ISA) 1407ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowFPv4B = 6, // v4 FP ISA was permitted, but only D0-D15, S0-S31 1417ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowFPARMv8A = 7, // Use of the ARM v8-A FP ISA was permitted 1427ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowFPARMv8B = 8, // Use of the ARM v8-A FP ISA was permitted, but only 1437ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // D0-D15, S0-S31 1447ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1457ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_WMMX_arch, (=11), uleb128 1467ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowWMMXv1 = 1, // The user permitted this entity to use WMMX v1 1477ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowWMMXv2 = 2, // The user permitted this entity to use WMMX v2 1487ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1497ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_Advanced_SIMD_arch, (=12), uleb128 1507ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowNeon = 1, // SIMDv1 was permitted 1517ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowNeon2 = 2, // SIMDv2 was permitted (Half-precision FP, MAC operations) 1527ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowNeonARMv8 = 3, // ARM v8-A SIMD was permitted 1537ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowNeonARMv8_1a = 4,// ARM v8.1-A SIMD was permitted (RDMA) 1547ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1557ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_ABI_PCS_R9_use, (=14), uleb128 1567ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens R9IsGPR = 0, // R9 used as v6 (just another callee-saved register) 1577ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens R9IsSB = 1, // R9 used as a global static base rgister 1587ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens R9IsTLSPointer = 2, // R9 used as a thread local storage pointer 1597ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens R9Reserved = 3, // R9 not used by code associated with attributed entity 1607ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1617ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_ABI_PCS_RW_data, (=15), uleb128 1627ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AddressRWPCRel = 1, // Address RW static data PC-relative 1637ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AddressRWSBRel = 2, // Address RW static data SB-relative 1647ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AddressRWNone = 3, // No RW static data permitted 1657ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1667ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_ABI_PCS_RO_data, (=14), uleb128 1677ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AddressROPCRel = 1, // Address RO static data PC-relative 1687ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AddressRONone = 2, // No RO static data permitted 1697ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1707ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_ABI_PCS_GOT_use, (=17), uleb128 1717ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AddressDirect = 1, // Address imported data directly 1727ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AddressGOT = 2, // Address imported data indirectly (via GOT) 1737ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1747ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_ABI_PCS_wchar_t, (=18), uleb128 1757ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens WCharProhibited = 0, // wchar_t is not used 1767ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens WCharWidth2Bytes = 2, // sizeof(wchar_t) == 2 1777ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens WCharWidth4Bytes = 4, // sizeof(wchar_t) == 4 1787ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1797ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_ABI_FP_denormal, (=20), uleb128 1807ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens PositiveZero = 0, 1817ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens IEEEDenormals = 1, 1827ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens PreserveFPSign = 2, // sign when flushed-to-zero is preserved 1837ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1847ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_ABI_FP_number_model, (=23), uleb128 1857ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowRTABI = 2, // numbers, infinities, and one quiet NaN (see [RTABI]) 1867ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowIEE754 = 3, // this code to use all the IEEE 754-defined FP encodings 1877ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1887ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_ABI_enum_size, (=26), uleb128 1897ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens EnumProhibited = 0, // The user prohibited the use of enums when building 1907ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // this entity. 1917ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens EnumSmallest = 1, // Enum is smallest container big enough to hold all 1927ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // values. 1937ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens Enum32Bit = 2, // Enum is at least 32 bits. 1947ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens Enum32BitABI = 3, // Every enumeration visible across an ABI-complying 1957ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // interface contains a value needing 32 bits to encode 1967ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // it; other enums can be containerized. 1977ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 1987ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_ABI_HardFP_use, (=27), uleb128 1997ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens HardFPImplied = 0, // FP use should be implied by Tag_FP_arch 2007ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens HardFPSinglePrecision = 1, // Single-precision only 2017ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 2027ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_ABI_VFP_args, (=28), uleb128 2037ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens BaseAAPCS = 0, 2047ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens HardFPAAPCS = 1, 2057ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 2067ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_FP_HP_extension, (=36), uleb128 2077ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowHPFP = 1, // Allow use of Half Precision FP 2087ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 2097ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_FP_16bit_format, (=38), uleb128 2107ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens FP16FormatIEEE = 1, 2117ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 2127ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_MPextension_use, (=42), uleb128 2137ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowMP = 1, // Allow use of MP extensions 2147ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 2157ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_DIV_use, (=44), uleb128 2167ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Note: AllowDIVExt must be emitted if and only if the permission to use 2177ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // hardware divide cannot be conveyed using AllowDIVIfExists or DisallowDIV 2187ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowDIVIfExists = 0, // Allow hardware divide if available in arch, or no 2197ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // info exists. 2207ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens DisallowDIV = 1, // Hardware divide explicitly disallowed. 2217ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowDIVExt = 2, // Allow hardware divide as optional architecture 2227ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // extension above the base arch specified by 2237ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_CPU_arch and Tag_CPU_arch_profile. 2247ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 2257ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens // Tag_Virtualization_use, (=68), uleb128 2267ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowTZ = 1, 2277ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowVirtualization = 2, 2287ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens AllowTZVirtualization = 3 2297ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens}; 2307ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 2317ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens} // namespace ARMBuildAttrs 2327ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens} // namespace llvm 2337ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens 2347ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens#endif 235