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