]>
Commit | Line | Data |
---|---|---|
1a4d82fc JJ |
1 | //===-- MipsABIFlagsSection.cpp - Mips ELF ABI Flags Section ---*- C++ -*--===// |
2 | // | |
3 | // The LLVM Compiler Infrastructure | |
4 | // | |
5 | // This file is distributed under the University of Illinois Open Source | |
6 | // License. See LICENSE.TXT for details. | |
7 | // | |
8 | //===----------------------------------------------------------------------===// | |
9 | ||
10 | #include "MipsABIFlagsSection.h" | |
11 | ||
12 | using namespace llvm; | |
13 | ||
14 | uint8_t MipsABIFlagsSection::getFpABIValue() { | |
15 | switch (FpABI) { | |
16 | case FpABIKind::ANY: | |
17 | return Val_GNU_MIPS_ABI_FP_ANY; | |
18 | case FpABIKind::XX: | |
19 | return Val_GNU_MIPS_ABI_FP_XX; | |
20 | case FpABIKind::S32: | |
21 | return Val_GNU_MIPS_ABI_FP_DOUBLE; | |
22 | case FpABIKind::S64: | |
23 | if (Is32BitABI) | |
24 | return OddSPReg ? Val_GNU_MIPS_ABI_FP_64 : Val_GNU_MIPS_ABI_FP_64A; | |
25 | return Val_GNU_MIPS_ABI_FP_DOUBLE; | |
26 | } | |
27 | ||
28 | llvm_unreachable("unexpected fp abi value"); | |
29 | } | |
30 | ||
31 | StringRef MipsABIFlagsSection::getFpABIString(FpABIKind Value) { | |
32 | switch (Value) { | |
33 | case FpABIKind::XX: | |
34 | return "xx"; | |
35 | case FpABIKind::S32: | |
36 | return "32"; | |
37 | case FpABIKind::S64: | |
38 | return "64"; | |
39 | default: | |
40 | llvm_unreachable("unsupported fp abi value"); | |
41 | } | |
42 | } | |
43 | ||
44 | uint8_t MipsABIFlagsSection::getCPR1SizeValue() { | |
45 | if (FpABI == FpABIKind::XX) | |
46 | return (uint8_t)AFL_REG_32; | |
47 | return (uint8_t)CPR1Size; | |
48 | } | |
49 | ||
50 | namespace llvm { | |
51 | MCStreamer &operator<<(MCStreamer &OS, MipsABIFlagsSection &ABIFlagsSection) { | |
52 | // Write out a Elf_Internal_ABIFlags_v0 struct | |
53 | OS.EmitIntValue(ABIFlagsSection.getVersionValue(), 2); // version | |
54 | OS.EmitIntValue(ABIFlagsSection.getISALevelValue(), 1); // isa_level | |
55 | OS.EmitIntValue(ABIFlagsSection.getISARevisionValue(), 1); // isa_rev | |
56 | OS.EmitIntValue(ABIFlagsSection.getGPRSizeValue(), 1); // gpr_size | |
57 | OS.EmitIntValue(ABIFlagsSection.getCPR1SizeValue(), 1); // cpr1_size | |
58 | OS.EmitIntValue(ABIFlagsSection.getCPR2SizeValue(), 1); // cpr2_size | |
59 | OS.EmitIntValue(ABIFlagsSection.getFpABIValue(), 1); // fp_abi | |
60 | OS.EmitIntValue(ABIFlagsSection.getISAExtensionSetValue(), 4); // isa_ext | |
61 | OS.EmitIntValue(ABIFlagsSection.getASESetValue(), 4); // ases | |
62 | OS.EmitIntValue(ABIFlagsSection.getFlags1Value(), 4); // flags1 | |
63 | OS.EmitIntValue(ABIFlagsSection.getFlags2Value(), 4); // flags2 | |
64 | return OS; | |
65 | } | |
66 | } |