| //===-- MipsReginfo.cpp - Registerinfo handling --------------------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| // .reginfo |
| // Elf32_Word ri_gprmask |
| // Elf32_Word ri_cprmask[4] |
| // Elf32_Word ri_gp_value |
| // |
| // .MIPS.options - N64 |
| // Elf64_Byte kind (ODK_REGINFO) |
| // Elf64_Byte size (40 bytes) |
| // Elf64_Section section (0) |
| // Elf64_Word info (unused) |
| // Elf64_Word ri_gprmask () |
| // Elf64_Word ri_pad () |
| // Elf64_Word[4] ri_cprmask () |
| // Elf64_Addr ri_gp_value () |
| // |
| // .MIPS.options - N32 |
| // Elf32_Byte kind (ODK_REGINFO) |
| // Elf32_Byte size (36 bytes) |
| // Elf32_Section section (0) |
| // Elf32_Word info (unused) |
| // Elf32_Word ri_gprmask () |
| // Elf32_Word ri_pad () |
| // Elf32_Word[4] ri_cprmask () |
| // Elf32_Addr ri_gp_value () |
| // |
| //===----------------------------------------------------------------------===// |
| #include "MCTargetDesc/MipsReginfo.h" |
| #include "MipsSubtarget.h" |
| #include "MipsTargetObjectFile.h" |
| #include "llvm/MC/MCStreamer.h" |
| |
| using namespace llvm; |
| |
| // Integrated assembler version |
| void |
| MipsReginfo::emitMipsReginfoSectionCG(MCStreamer &OS, |
| const TargetLoweringObjectFile &TLOF, |
| const MipsSubtarget &MST) const |
| { |
| |
| if (OS.hasRawTextSupport()) |
| return; |
| |
| const MipsTargetObjectFile &TLOFELF = |
| static_cast<const MipsTargetObjectFile &>(TLOF); |
| OS.SwitchSection(TLOFELF.getReginfoSection()); |
| |
| // .reginfo |
| if (MST.isABI_O32()) { |
| OS.EmitIntValue(0, 4); // ri_gprmask |
| OS.EmitIntValue(0, 4); // ri_cpr[0]mask |
| OS.EmitIntValue(0, 4); // ri_cpr[1]mask |
| OS.EmitIntValue(0, 4); // ri_cpr[2]mask |
| OS.EmitIntValue(0, 4); // ri_cpr[3]mask |
| OS.EmitIntValue(0, 4); // ri_gp_value |
| } |
| // .MIPS.options |
| else if (MST.isABI_N64()) { |
| OS.EmitIntValue(1, 1); // kind |
| OS.EmitIntValue(40, 1); // size |
| OS.EmitIntValue(0, 2); // section |
| OS.EmitIntValue(0, 4); // info |
| OS.EmitIntValue(0, 4); // ri_gprmask |
| OS.EmitIntValue(0, 4); // pad |
| OS.EmitIntValue(0, 4); // ri_cpr[0]mask |
| OS.EmitIntValue(0, 4); // ri_cpr[1]mask |
| OS.EmitIntValue(0, 4); // ri_cpr[2]mask |
| OS.EmitIntValue(0, 4); // ri_cpr[3]mask |
| OS.EmitIntValue(0, 8); // ri_gp_value |
| } |
| else llvm_unreachable("Unsupported abi for reginfo"); |
| } |
| |