/// <summary>Retrieves the canonical name for an architecture sub type</summary> /// <param name="subArchType">Architecture sub type</param> /// <returns>String name for the architecture sub type</returns> public static string GetCanonicalName(TripleSubArchType subArchType) => NativeMethods.TripleGetSubArchTypeName(( LLVMTripleSubArchType )subArchType) ?? string.Empty;
/// <summary>Provides the canonical Architecture form for a given architecture sub architecture pair</summary> /// <param name="archType">Architecture type</param> /// <param name="subArch">Sub Architecture type</param> /// <returns>Canonical <see cref="TripleArchType"/></returns> /// <remarks> /// Some architectures, particularly ARM variants, have multiple sub-architecture types that /// have a canonical form (i.e. Arch=<see cref="TripleArchType.Arm"/>; SubArch=<see cref="TripleSubArchType.ARMSubArch_v7m"/>; /// has the Canonical Arch of <see cref="TripleArchType.Thumb"/>). This method retrieves the canonical Arch /// for a given architecture,SubArchitecture pair. /// </remarks> public static TripleArchType GetCanonicalArchForSubArch(TripleArchType archType, TripleSubArchType subArch) { switch (archType) { case TripleArchType.Kalimba: switch (subArch) { case TripleSubArchType.NoSubArch: case TripleSubArchType.KalimbaSubArch_v3: case TripleSubArchType.KalimbaSubArch_v4: case TripleSubArchType.KalimbaSubArch_v5: return(TripleArchType.Kalimba); default: return(TripleArchType.UnknownArch); } case TripleArchType.Arm: case TripleArchType.Armeb: switch (subArch) { case TripleSubArchType.ARMSubArch_v6m: return(archType == TripleArchType.Armeb ? TripleArchType.Thumbeb : TripleArchType.Thumb); case TripleSubArchType.KalimbaSubArch_v3: case TripleSubArchType.KalimbaSubArch_v4: case TripleSubArchType.KalimbaSubArch_v5: return(TripleArchType.UnknownArch); default: return(archType); } default: return(archType); } }