#include "AVRELFStreamer.h"

#include "llvm/BinaryFormat/ELF.h"
#include "llvm/MC/MCSubtargetInfo.h"
#include "llvm/MC/SubtargetFeature.h"
#include "llvm/Support/FormattedStream.h"

#include "AVRMCTargetDesc.h"

namespace llvm {

static unsigned getEFlagsForFeatureSet(const FeatureBitset &Features) {
  unsigned EFlags = 0;

  // Set architecture
  if (Features[AVR::ELFArchAVR1])
    EFlags |= ELF::EF_AVR_ARCH_AVR1;
  else if (Features[AVR::ELFArchAVR2])
    EFlags |= ELF::EF_AVR_ARCH_AVR2;
  else if (Features[AVR::ELFArchAVR25])
    EFlags |= ELF::EF_AVR_ARCH_AVR25;
  else if (Features[AVR::ELFArchAVR3])
    EFlags |= ELF::EF_AVR_ARCH_AVR3;
  else if (Features[AVR::ELFArchAVR31])
    EFlags |= ELF::EF_AVR_ARCH_AVR31;
  else if (Features[AVR::ELFArchAVR35])
    EFlags |= ELF::EF_AVR_ARCH_AVR35;
  else if (Features[AVR::ELFArchAVR4])
    EFlags |= ELF::EF_AVR_ARCH_AVR4;
  else if (Features[AVR::ELFArchAVR5])
    EFlags |= ELF::EF_AVR_ARCH_AVR5;
  else if (Features[AVR::ELFArchAVR51])
    EFlags |= ELF::EF_AVR_ARCH_AVR51;
  else if (Features[AVR::ELFArchAVR6])
    EFlags |= ELF::EF_AVR_ARCH_AVR6;
  else if (Features[AVR::ELFArchTiny])
    EFlags |= ELF::EF_AVR_ARCH_AVRTINY;
  else if (Features[AVR::ELFArchXMEGA1])
    EFlags |= ELF::EF_AVR_ARCH_XMEGA1;
  else if (Features[AVR::ELFArchXMEGA2])
    EFlags |= ELF::EF_AVR_ARCH_XMEGA2;
  else if (Features[AVR::ELFArchXMEGA3])
    EFlags |= ELF::EF_AVR_ARCH_XMEGA3;
  else if (Features[AVR::ELFArchXMEGA4])
    EFlags |= ELF::EF_AVR_ARCH_XMEGA4;
  else if (Features[AVR::ELFArchXMEGA5])
    EFlags |= ELF::EF_AVR_ARCH_XMEGA5;
  else if (Features[AVR::ELFArchXMEGA6])
    EFlags |= ELF::EF_AVR_ARCH_XMEGA6;
  else if (Features[AVR::ELFArchXMEGA7])
    EFlags |= ELF::EF_AVR_ARCH_XMEGA7;

  return EFlags;
}

AVRELFStreamer::AVRELFStreamer(MCStreamer &S,
                               const MCSubtargetInfo &STI)
    : AVRTargetStreamer(S) {

  MCAssembler &MCA = getStreamer().getAssembler();
  unsigned EFlags = MCA.getELFHeaderEFlags();

  EFlags |= getEFlagsForFeatureSet(STI.getFeatureBits());

  MCA.setELFHeaderEFlags(EFlags);
}

} // end namespace llvm
