1 //===-- MipsABIFlagsSection.cpp - Mips ELF ABI Flags Section ---*- C++ -*--===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "MipsABIFlagsSection.h"
14 uint8_t MipsABIFlagsSection::getFpABIValue() {
17 return Val_GNU_MIPS_ABI_FP_ANY
;
19 return Val_GNU_MIPS_ABI_FP_XX
;
21 return Val_GNU_MIPS_ABI_FP_DOUBLE
;
24 return OddSPReg
? Val_GNU_MIPS_ABI_FP_64
: Val_GNU_MIPS_ABI_FP_64A
;
25 return Val_GNU_MIPS_ABI_FP_DOUBLE
;
28 llvm_unreachable("unexpected fp abi value");
31 StringRef
MipsABIFlagsSection::getFpABIString(FpABIKind Value
) {
40 llvm_unreachable("unsupported fp abi value");
44 uint8_t MipsABIFlagsSection::getCPR1SizeValue() {
45 if (FpABI
== FpABIKind::XX
)
46 return (uint8_t)AFL_REG_32
;
47 return (uint8_t)CPR1Size
;
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