Home | History | Annotate | Download | only in MCTargetDesc
      1 #include "AVRELFStreamer.h"
      2 
      3 #include "llvm/Support/ELF.h"
      4 #include "llvm/Support/FormattedStream.h"
      5 
      6 #include "AVRMCTargetDesc.h"
      7 
      8 namespace llvm {
      9 
     10 static unsigned getEFlagsForFeatureSet(const FeatureBitset &Features) {
     11   unsigned EFlags = 0;
     12 
     13   // Set architecture
     14   if (Features[AVR::ELFArchAVR1])
     15     EFlags |= ELF::EF_AVR_ARCH_AVR1;
     16   else if (Features[AVR::ELFArchAVR2])
     17     EFlags |= ELF::EF_AVR_ARCH_AVR2;
     18   else if (Features[AVR::ELFArchAVR25])
     19     EFlags |= ELF::EF_AVR_ARCH_AVR25;
     20   else if (Features[AVR::ELFArchAVR3])
     21     EFlags |= ELF::EF_AVR_ARCH_AVR3;
     22   else if (Features[AVR::ELFArchAVR31])
     23     EFlags |= ELF::EF_AVR_ARCH_AVR31;
     24   else if (Features[AVR::ELFArchAVR35])
     25     EFlags |= ELF::EF_AVR_ARCH_AVR35;
     26   else if (Features[AVR::ELFArchAVR4])
     27     EFlags |= ELF::EF_AVR_ARCH_AVR4;
     28   else if (Features[AVR::ELFArchAVR5])
     29     EFlags |= ELF::EF_AVR_ARCH_AVR5;
     30   else if (Features[AVR::ELFArchAVR51])
     31     EFlags |= ELF::EF_AVR_ARCH_AVR51;
     32   else if (Features[AVR::ELFArchAVR6])
     33     EFlags |= ELF::EF_AVR_ARCH_AVR6;
     34   else if (Features[AVR::ELFArchAVRTiny])
     35     EFlags |= ELF::EF_AVR_ARCH_AVRTINY;
     36   else if (Features[AVR::ELFArchXMEGA1])
     37     EFlags |= ELF::EF_AVR_ARCH_XMEGA1;
     38   else if (Features[AVR::ELFArchXMEGA2])
     39     EFlags |= ELF::EF_AVR_ARCH_XMEGA2;
     40   else if (Features[AVR::ELFArchXMEGA3])
     41     EFlags |= ELF::EF_AVR_ARCH_XMEGA3;
     42   else if (Features[AVR::ELFArchXMEGA4])
     43     EFlags |= ELF::EF_AVR_ARCH_XMEGA4;
     44   else if (Features[AVR::ELFArchXMEGA5])
     45     EFlags |= ELF::EF_AVR_ARCH_XMEGA5;
     46   else if (Features[AVR::ELFArchXMEGA6])
     47     EFlags |= ELF::EF_AVR_ARCH_XMEGA6;
     48   else if (Features[AVR::ELFArchXMEGA7])
     49     EFlags |= ELF::EF_AVR_ARCH_XMEGA7;
     50 
     51   return EFlags;
     52 }
     53 
     54 AVRELFStreamer::AVRELFStreamer(MCStreamer &S,
     55                                const MCSubtargetInfo &STI)
     56     : AVRTargetStreamer(S) {
     57 
     58   MCAssembler &MCA = getStreamer().getAssembler();
     59   unsigned EFlags = MCA.getELFHeaderEFlags();
     60 
     61   EFlags |= getEFlagsForFeatureSet(STI.getFeatureBits());
     62 
     63   MCA.setELFHeaderEFlags(EFlags);
     64 }
     65 
     66 } // end namespace llvm
     67