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