#include "llvm/Support/ARMAttributeParser.h"
#include "llvm/Support/ARMBuildAttributes.h"
#include "llvm/Support/ELFAttributes.h"
#include "gtest/gtest.h"
#include <string>

using namespace llvm;

struct AttributeSection {
  unsigned Tag;
  unsigned Value;

  AttributeSection(unsigned tag, unsigned value) : Tag(tag), Value(value) { }

  void write(raw_ostream &OS) {
    OS.flush();
    // length = length + "aeabi\0" + TagFile + ByteSize + Tag + Value;
    // length = 17 bytes

    OS << 'A' << (uint8_t)17 << (uint8_t)0 << (uint8_t)0 << (uint8_t)0;
    OS << "aeabi" << '\0';
    OS << (uint8_t)1 << (uint8_t)7 << (uint8_t)0 << (uint8_t)0 << (uint8_t)0;
    OS << (uint8_t)Tag << (uint8_t)Value;

  }
};

bool testBuildAttr(unsigned Tag, unsigned Value,
                   unsigned ExpectedTag, unsigned ExpectedValue) {
  std::string buffer;
  raw_string_ostream OS(buffer);
  AttributeSection Section(Tag, Value);
  Section.write(OS);
  ArrayRef<uint8_t> Bytes(
    reinterpret_cast<const uint8_t*>(OS.str().c_str()), OS.str().size());

  ARMAttributeParser Parser;
  cantFail(Parser.parse(Bytes, support::little));

  Optional<unsigned> Attr = Parser.getAttributeValue(ExpectedTag);
  return Attr.hasValue() && Attr.getValue() == ExpectedValue;
}

void testParseError(ArrayRef<uint8_t> bytes, const char *msg) {
  ARMAttributeParser parser;
  Error e = parser.parse(bytes, support::little);
  EXPECT_STREQ(toString(std::move(e)).c_str(), msg);
}

bool testTagString(unsigned Tag, const char *name) {
  return ELFAttrs::attrTypeAsString(Tag, ARMBuildAttrs::ARMAttributeTags)
             .str() == name;
}

TEST(ARMAttributeParser, UnknownCPU_arch) {
  static const uint8_t bytes[] = {'A', 15, 0, 0, 0, 'a', 'e', 'a', 'b',
                                  'i', 0,  1, 7, 0, 0,   0,   6,   22};
  testParseError(bytes, "unknown CPU_arch value: 22");
}

TEST(CPUArchBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(6, "Tag_CPU_arch"));

  EXPECT_TRUE(testBuildAttr(6, 0, ARMBuildAttrs::CPU_arch,
                            ARMBuildAttrs::Pre_v4));
  EXPECT_TRUE(testBuildAttr(6, 1, ARMBuildAttrs::CPU_arch,
                            ARMBuildAttrs::v4));
  EXPECT_TRUE(testBuildAttr(6, 2, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v4T));
  EXPECT_TRUE(testBuildAttr(6, 3, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v5T));
  EXPECT_TRUE(testBuildAttr(6, 4, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v5TE));
  EXPECT_TRUE(testBuildAttr(6, 5, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v5TEJ));
  EXPECT_TRUE(testBuildAttr(6, 6, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v6));
  EXPECT_TRUE(testBuildAttr(6, 7, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v6KZ));
  EXPECT_TRUE(testBuildAttr(6, 8, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v6T2));
  EXPECT_TRUE(testBuildAttr(6, 9, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v6K));
  EXPECT_TRUE(testBuildAttr(6, 10, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v7));
  EXPECT_TRUE(testBuildAttr(6, 11, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v6_M));
  EXPECT_TRUE(testBuildAttr(6, 12, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v6S_M));
  EXPECT_TRUE(testBuildAttr(6, 13, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v7E_M));
  EXPECT_TRUE(testBuildAttr(6, 14, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v8_A));
  EXPECT_TRUE(testBuildAttr(6, 15, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v8_R));
  EXPECT_TRUE(testBuildAttr(6, 16, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v8_M_Base));
  EXPECT_TRUE(testBuildAttr(6, 17, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v8_M_Main));
  EXPECT_TRUE(testBuildAttr(6, 21, ARMBuildAttrs::CPU_arch,
                               ARMBuildAttrs::v8_1_M_Main));
}

TEST(CPUArchProfileBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(7, "Tag_CPU_arch_profile"));
  EXPECT_TRUE(testBuildAttr(7, 'A', ARMBuildAttrs::CPU_arch_profile,
                               ARMBuildAttrs::ApplicationProfile));
  EXPECT_TRUE(testBuildAttr(7, 'R', ARMBuildAttrs::CPU_arch_profile,
                               ARMBuildAttrs::RealTimeProfile));
  EXPECT_TRUE(testBuildAttr(7, 'M', ARMBuildAttrs::CPU_arch_profile,
                               ARMBuildAttrs::MicroControllerProfile));
  EXPECT_TRUE(testBuildAttr(7, 'S', ARMBuildAttrs::CPU_arch_profile,
                               ARMBuildAttrs::SystemProfile));
}

TEST(ARMISABuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(8, "Tag_ARM_ISA_use"));
  EXPECT_TRUE(testBuildAttr(8, 0, ARMBuildAttrs::ARM_ISA_use,
                               ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(8, 1, ARMBuildAttrs::ARM_ISA_use,
                               ARMBuildAttrs::Allowed));
}

TEST(ThumbISABuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(9, "Tag_THUMB_ISA_use"));
  EXPECT_TRUE(testBuildAttr(9, 0, ARMBuildAttrs::THUMB_ISA_use,
                               ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(9, 1, ARMBuildAttrs::THUMB_ISA_use,
                               ARMBuildAttrs::Allowed));
  EXPECT_TRUE(testBuildAttr(9, 2, ARMBuildAttrs::THUMB_ISA_use,
                               ARMBuildAttrs::AllowThumb32));
  EXPECT_TRUE(testBuildAttr(9, 3, ARMBuildAttrs::THUMB_ISA_use,
                               ARMBuildAttrs::AllowThumbDerived));
}

TEST(FPArchBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(10, "Tag_FP_arch"));
  EXPECT_TRUE(testBuildAttr(10, 0, ARMBuildAttrs::FP_arch,
                               ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(10, 1, ARMBuildAttrs::FP_arch,
                               ARMBuildAttrs::Allowed));
  EXPECT_TRUE(testBuildAttr(10, 2, ARMBuildAttrs::FP_arch,
                               ARMBuildAttrs::AllowFPv2));
  EXPECT_TRUE(testBuildAttr(10, 3, ARMBuildAttrs::FP_arch,
                               ARMBuildAttrs::AllowFPv3A));
  EXPECT_TRUE(testBuildAttr(10, 4, ARMBuildAttrs::FP_arch,
                               ARMBuildAttrs::AllowFPv3B));
  EXPECT_TRUE(testBuildAttr(10, 5, ARMBuildAttrs::FP_arch,
                               ARMBuildAttrs::AllowFPv4A));
  EXPECT_TRUE(testBuildAttr(10, 6, ARMBuildAttrs::FP_arch,
                               ARMBuildAttrs::AllowFPv4B));
  EXPECT_TRUE(testBuildAttr(10, 7, ARMBuildAttrs::FP_arch,
                               ARMBuildAttrs::AllowFPARMv8A));
  EXPECT_TRUE(testBuildAttr(10, 8, ARMBuildAttrs::FP_arch,
                               ARMBuildAttrs::AllowFPARMv8B));
}

TEST(WMMXBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(11, "Tag_WMMX_arch"));
  EXPECT_TRUE(testBuildAttr(11, 0, ARMBuildAttrs::WMMX_arch,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(11, 1, ARMBuildAttrs::WMMX_arch,
                            ARMBuildAttrs::AllowWMMXv1));
  EXPECT_TRUE(testBuildAttr(11, 2, ARMBuildAttrs::WMMX_arch,
                            ARMBuildAttrs::AllowWMMXv2));
}

TEST(SIMDBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(12, "Tag_Advanced_SIMD_arch"));
  EXPECT_TRUE(testBuildAttr(12, 0, ARMBuildAttrs::Advanced_SIMD_arch,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(12, 1, ARMBuildAttrs::Advanced_SIMD_arch,
                            ARMBuildAttrs::AllowNeon));
  EXPECT_TRUE(testBuildAttr(12, 2, ARMBuildAttrs::Advanced_SIMD_arch,
                            ARMBuildAttrs::AllowNeon2));
  EXPECT_TRUE(testBuildAttr(12, 3, ARMBuildAttrs::Advanced_SIMD_arch,
                            ARMBuildAttrs::AllowNeonARMv8));
  EXPECT_TRUE(testBuildAttr(12, 4, ARMBuildAttrs::Advanced_SIMD_arch,
                            ARMBuildAttrs::AllowNeonARMv8_1a));
}

TEST(FPHPBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(36, "Tag_FP_HP_extension"));
  EXPECT_TRUE(testBuildAttr(36, 0, ARMBuildAttrs::FP_HP_extension,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(36, 1, ARMBuildAttrs::FP_HP_extension,
                            ARMBuildAttrs::AllowHPFP));
}

TEST(MVEBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(48, "Tag_MVE_arch"));
  EXPECT_TRUE(testBuildAttr(48, 0, ARMBuildAttrs::MVE_arch,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(48, 1, ARMBuildAttrs::MVE_arch,
                            ARMBuildAttrs::AllowMVEInteger));
  EXPECT_TRUE(testBuildAttr(48, 2, ARMBuildAttrs::MVE_arch,
                            ARMBuildAttrs::AllowMVEIntegerAndFloat));
}

TEST(CPUAlignBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(34, "Tag_CPU_unaligned_access"));
  EXPECT_TRUE(testBuildAttr(34, 0, ARMBuildAttrs::CPU_unaligned_access,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(34, 1, ARMBuildAttrs::CPU_unaligned_access,
                            ARMBuildAttrs::Allowed));
}

TEST(T2EEBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(66, "Tag_T2EE_use"));
  EXPECT_TRUE(testBuildAttr(66, 0, ARMBuildAttrs::T2EE_use,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(66, 1, ARMBuildAttrs::T2EE_use,
                            ARMBuildAttrs::Allowed));
}

TEST(VirtualizationBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(68, "Tag_Virtualization_use"));
  EXPECT_TRUE(testBuildAttr(68, 0, ARMBuildAttrs::Virtualization_use,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(68, 1, ARMBuildAttrs::Virtualization_use,
                            ARMBuildAttrs::AllowTZ));
  EXPECT_TRUE(testBuildAttr(68, 2, ARMBuildAttrs::Virtualization_use,
                            ARMBuildAttrs::AllowVirtualization));
  EXPECT_TRUE(testBuildAttr(68, 3, ARMBuildAttrs::Virtualization_use,
                            ARMBuildAttrs::AllowTZVirtualization));
}

TEST(MPBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(42, "Tag_MPextension_use"));
  EXPECT_TRUE(testBuildAttr(42, 0, ARMBuildAttrs::MPextension_use,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(42, 1, ARMBuildAttrs::MPextension_use,
                            ARMBuildAttrs::AllowMP));
}

TEST(DivBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(44, "Tag_DIV_use"));
  EXPECT_TRUE(testBuildAttr(44, 0, ARMBuildAttrs::DIV_use,
                            ARMBuildAttrs::AllowDIVIfExists));
  EXPECT_TRUE(testBuildAttr(44, 1, ARMBuildAttrs::DIV_use,
                            ARMBuildAttrs::DisallowDIV));
  EXPECT_TRUE(testBuildAttr(44, 2, ARMBuildAttrs::DIV_use,
                            ARMBuildAttrs::AllowDIVExt));
}

TEST(PCS_ConfigBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(13, "Tag_PCS_config"));
  EXPECT_TRUE(testBuildAttr(13, 0, ARMBuildAttrs::PCS_config, 0));
  EXPECT_TRUE(testBuildAttr(13, 1, ARMBuildAttrs::PCS_config, 1));
  EXPECT_TRUE(testBuildAttr(13, 2, ARMBuildAttrs::PCS_config, 2));
  EXPECT_TRUE(testBuildAttr(13, 3, ARMBuildAttrs::PCS_config, 3));
  EXPECT_TRUE(testBuildAttr(13, 4, ARMBuildAttrs::PCS_config, 4));
  EXPECT_TRUE(testBuildAttr(13, 5, ARMBuildAttrs::PCS_config, 5));
  EXPECT_TRUE(testBuildAttr(13, 6, ARMBuildAttrs::PCS_config, 6));
  EXPECT_TRUE(testBuildAttr(13, 7, ARMBuildAttrs::PCS_config, 7));
}

TEST(PCS_R9BuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(14, "Tag_ABI_PCS_R9_use"));
  EXPECT_TRUE(testBuildAttr(14, 0, ARMBuildAttrs::ABI_PCS_R9_use,
                            ARMBuildAttrs::R9IsGPR));
  EXPECT_TRUE(testBuildAttr(14, 1, ARMBuildAttrs::ABI_PCS_R9_use,
                            ARMBuildAttrs::R9IsSB));
  EXPECT_TRUE(testBuildAttr(14, 2, ARMBuildAttrs::ABI_PCS_R9_use,
                            ARMBuildAttrs::R9IsTLSPointer));
  EXPECT_TRUE(testBuildAttr(14, 3, ARMBuildAttrs::ABI_PCS_R9_use,
                            ARMBuildAttrs::R9Reserved));
}

TEST(PCS_RWBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(15, "Tag_ABI_PCS_RW_data"));
  EXPECT_TRUE(testBuildAttr(15, 0, ARMBuildAttrs::ABI_PCS_RW_data,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(15, 1, ARMBuildAttrs::ABI_PCS_RW_data,
                            ARMBuildAttrs::AddressRWPCRel));
  EXPECT_TRUE(testBuildAttr(15, 2, ARMBuildAttrs::ABI_PCS_RW_data,
                            ARMBuildAttrs::AddressRWSBRel));
  EXPECT_TRUE(testBuildAttr(15, 3, ARMBuildAttrs::ABI_PCS_RW_data,
                            ARMBuildAttrs::AddressRWNone));
}

TEST(PCS_ROBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(16, "Tag_ABI_PCS_RO_data"));
  EXPECT_TRUE(testBuildAttr(16, 0, ARMBuildAttrs::ABI_PCS_RO_data,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(16, 1, ARMBuildAttrs::ABI_PCS_RO_data,
                            ARMBuildAttrs::AddressROPCRel));
  EXPECT_TRUE(testBuildAttr(16, 2, ARMBuildAttrs::ABI_PCS_RO_data,
                            ARMBuildAttrs::AddressRONone));
}

TEST(PCS_GOTBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(17, "Tag_ABI_PCS_GOT_use"));
  EXPECT_TRUE(testBuildAttr(17, 0, ARMBuildAttrs::ABI_PCS_GOT_use,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(17, 1, ARMBuildAttrs::ABI_PCS_GOT_use,
                            ARMBuildAttrs::AddressDirect));
  EXPECT_TRUE(testBuildAttr(17, 2, ARMBuildAttrs::ABI_PCS_GOT_use,
                            ARMBuildAttrs::AddressGOT));
}

TEST(PCS_WCharBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(18, "Tag_ABI_PCS_wchar_t"));
  EXPECT_TRUE(testBuildAttr(18, 0, ARMBuildAttrs::ABI_PCS_wchar_t,
                            ARMBuildAttrs::WCharProhibited));
  EXPECT_TRUE(testBuildAttr(18, 2, ARMBuildAttrs::ABI_PCS_wchar_t,
                            ARMBuildAttrs::WCharWidth2Bytes));
  EXPECT_TRUE(testBuildAttr(18, 4, ARMBuildAttrs::ABI_PCS_wchar_t,
                            ARMBuildAttrs::WCharWidth4Bytes));
}

TEST(EnumSizeBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(26, "Tag_ABI_enum_size"));
  EXPECT_TRUE(testBuildAttr(26, 0, ARMBuildAttrs::ABI_enum_size,
                            ARMBuildAttrs::EnumProhibited));
  EXPECT_TRUE(testBuildAttr(26, 1, ARMBuildAttrs::ABI_enum_size,
                            ARMBuildAttrs::EnumSmallest));
  EXPECT_TRUE(testBuildAttr(26, 2, ARMBuildAttrs::ABI_enum_size,
                            ARMBuildAttrs::Enum32Bit));
  EXPECT_TRUE(testBuildAttr(26, 3, ARMBuildAttrs::ABI_enum_size,
                            ARMBuildAttrs::Enum32BitABI));
}

TEST(AlignNeededBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(24, "Tag_ABI_align_needed"));
  EXPECT_TRUE(testBuildAttr(24, 0, ARMBuildAttrs::ABI_align_needed,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(24, 1, ARMBuildAttrs::ABI_align_needed,
                            ARMBuildAttrs::Align8Byte));
  EXPECT_TRUE(testBuildAttr(24, 2, ARMBuildAttrs::ABI_align_needed,
                            ARMBuildAttrs::Align4Byte));
  EXPECT_TRUE(testBuildAttr(24, 3, ARMBuildAttrs::ABI_align_needed,
                            ARMBuildAttrs::AlignReserved));
}

TEST(AlignPreservedBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(25, "Tag_ABI_align_preserved"));
  EXPECT_TRUE(testBuildAttr(25, 0, ARMBuildAttrs::ABI_align_preserved,
                            ARMBuildAttrs::AlignNotPreserved));
  EXPECT_TRUE(testBuildAttr(25, 1, ARMBuildAttrs::ABI_align_preserved,
                            ARMBuildAttrs::AlignPreserve8Byte));
  EXPECT_TRUE(testBuildAttr(25, 2, ARMBuildAttrs::ABI_align_preserved,
                            ARMBuildAttrs::AlignPreserveAll));
  EXPECT_TRUE(testBuildAttr(25, 3, ARMBuildAttrs::ABI_align_preserved,
                            ARMBuildAttrs::AlignReserved));
}

TEST(FPRoundingBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(19, "Tag_ABI_FP_rounding"));
  EXPECT_TRUE(testBuildAttr(19, 0, ARMBuildAttrs::ABI_FP_rounding, 0));
  EXPECT_TRUE(testBuildAttr(19, 1, ARMBuildAttrs::ABI_FP_rounding, 1));
}

TEST(FPDenormalBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(20, "Tag_ABI_FP_denormal"));
  EXPECT_TRUE(testBuildAttr(20, 0, ARMBuildAttrs::ABI_FP_denormal,
                            ARMBuildAttrs::PositiveZero));
  EXPECT_TRUE(testBuildAttr(20, 1, ARMBuildAttrs::ABI_FP_denormal,
                            ARMBuildAttrs::IEEEDenormals));
  EXPECT_TRUE(testBuildAttr(20, 2, ARMBuildAttrs::ABI_FP_denormal,
                            ARMBuildAttrs::PreserveFPSign));
}

TEST(FPExceptionsBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(21, "Tag_ABI_FP_exceptions"));
  EXPECT_TRUE(testBuildAttr(21, 0, ARMBuildAttrs::ABI_FP_exceptions, 0));
  EXPECT_TRUE(testBuildAttr(21, 1, ARMBuildAttrs::ABI_FP_exceptions, 1));
}

TEST(FPUserExceptionsBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(22, "Tag_ABI_FP_user_exceptions"));
  EXPECT_TRUE(testBuildAttr(22, 0, ARMBuildAttrs::ABI_FP_user_exceptions, 0));
  EXPECT_TRUE(testBuildAttr(22, 1, ARMBuildAttrs::ABI_FP_user_exceptions, 1));
}

TEST(FPNumberModelBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(23, "Tag_ABI_FP_number_model"));
  EXPECT_TRUE(testBuildAttr(23, 0, ARMBuildAttrs::ABI_FP_number_model,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(23, 1, ARMBuildAttrs::ABI_FP_number_model,
                            ARMBuildAttrs::AllowIEEENormal));
  EXPECT_TRUE(testBuildAttr(23, 2, ARMBuildAttrs::ABI_FP_number_model,
                            ARMBuildAttrs::AllowRTABI));
  EXPECT_TRUE(testBuildAttr(23, 3, ARMBuildAttrs::ABI_FP_number_model,
                            ARMBuildAttrs::AllowIEEE754));
}

TEST(FP16BuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(38, "Tag_ABI_FP_16bit_format"));
  EXPECT_TRUE(testBuildAttr(38, 0, ARMBuildAttrs::ABI_FP_16bit_format,
                            ARMBuildAttrs::Not_Allowed));
  EXPECT_TRUE(testBuildAttr(38, 1, ARMBuildAttrs::ABI_FP_16bit_format,
                            ARMBuildAttrs::FP16FormatIEEE));
  EXPECT_TRUE(testBuildAttr(38, 2, ARMBuildAttrs::ABI_FP_16bit_format,
                            ARMBuildAttrs::FP16VFP3));
}

TEST(HardFPBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(27, "Tag_ABI_HardFP_use"));
  EXPECT_TRUE(testBuildAttr(27, 0, ARMBuildAttrs::ABI_HardFP_use,
                            ARMBuildAttrs::HardFPImplied));
  EXPECT_TRUE(testBuildAttr(27, 1, ARMBuildAttrs::ABI_HardFP_use,
                            ARMBuildAttrs::HardFPSinglePrecision));
  EXPECT_TRUE(testBuildAttr(27, 2, ARMBuildAttrs::ABI_HardFP_use, 2));
}

TEST(VFPArgsBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(28, "Tag_ABI_VFP_args"));
  EXPECT_TRUE(testBuildAttr(28, 0, ARMBuildAttrs::ABI_VFP_args,
                            ARMBuildAttrs::BaseAAPCS));
  EXPECT_TRUE(testBuildAttr(28, 1, ARMBuildAttrs::ABI_VFP_args,
                            ARMBuildAttrs::HardFPAAPCS));
  EXPECT_TRUE(testBuildAttr(28, 2, ARMBuildAttrs::ABI_VFP_args, 2));
  EXPECT_TRUE(testBuildAttr(28, 3, ARMBuildAttrs::ABI_VFP_args, 3));
}

TEST(WMMXArgsBuildAttr, testBuildAttr) {
  EXPECT_TRUE(testTagString(29, "Tag_ABI_WMMX_args"));
  EXPECT_TRUE(testBuildAttr(29, 0, ARMBuildAttrs::ABI_WMMX_args, 0));
  EXPECT_TRUE(testBuildAttr(29, 1, ARMBuildAttrs::ABI_WMMX_args, 1));
  EXPECT_TRUE(testBuildAttr(29, 2, ARMBuildAttrs::ABI_WMMX_args, 2));
}
