1 //===-- MipsReginfo.cpp - Registerinfo handling --------------------------===// 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 // .reginfo 9 // Elf32_Word ri_gprmask 10 // Elf32_Word ri_cprmask[4] 11 // Elf32_Word ri_gp_value 12 // 13 // .MIPS.options - N64 14 // Elf64_Byte kind (ODK_REGINFO) 15 // Elf64_Byte size (40 bytes) 16 // Elf64_Section section (0) 17 // Elf64_Word info (unused) 18 // Elf64_Word ri_gprmask () 19 // Elf64_Word ri_pad () 20 // Elf64_Word[4] ri_cprmask () 21 // Elf64_Addr ri_gp_value () 22 // 23 // .MIPS.options - N32 24 // Elf32_Byte kind (ODK_REGINFO) 25 // Elf32_Byte size (36 bytes) 26 // Elf32_Section section (0) 27 // Elf32_Word info (unused) 28 // Elf32_Word ri_gprmask () 29 // Elf32_Word ri_pad () 30 // Elf32_Word[4] ri_cprmask () 31 // Elf32_Addr ri_gp_value () 32 // 33 //===----------------------------------------------------------------------===// 34 #include "MCTargetDesc/MipsReginfo.h" 35 #include "MipsSubtarget.h" 36 #include "MipsTargetObjectFile.h" 37 #include "llvm/MC/MCStreamer.h" 38 39 using namespace llvm; 40 41 // Integrated assembler version 42 void 43 MipsReginfo::emitMipsReginfoSectionCG(MCStreamer &OS, 44 const TargetLoweringObjectFile &TLOF, 45 const MipsSubtarget &MST) const 46 { 47 48 if (OS.hasRawTextSupport()) 49 return; 50 51 const MipsTargetObjectFile &TLOFELF = 52 static_cast<const MipsTargetObjectFile &>(TLOF); 53 OS.SwitchSection(TLOFELF.getReginfoSection()); 54 55 // .reginfo 56 if (MST.isABI_O32()) { 57 OS.EmitIntValue(0, 4); // ri_gprmask 58 OS.EmitIntValue(0, 4); // ri_cpr[0]mask 59 OS.EmitIntValue(0, 4); // ri_cpr[1]mask 60 OS.EmitIntValue(0, 4); // ri_cpr[2]mask 61 OS.EmitIntValue(0, 4); // ri_cpr[3]mask 62 OS.EmitIntValue(0, 4); // ri_gp_value 63 } 64 // .MIPS.options 65 else if (MST.isABI_N64()) { 66 OS.EmitIntValue(1, 1); // kind 67 OS.EmitIntValue(40, 1); // size 68 OS.EmitIntValue(0, 2); // section 69 OS.EmitIntValue(0, 4); // info 70 OS.EmitIntValue(0, 4); // ri_gprmask 71 OS.EmitIntValue(0, 4); // pad 72 OS.EmitIntValue(0, 4); // ri_cpr[0]mask 73 OS.EmitIntValue(0, 4); // ri_cpr[1]mask 74 OS.EmitIntValue(0, 4); // ri_cpr[2]mask 75 OS.EmitIntValue(0, 4); // ri_cpr[3]mask 76 OS.EmitIntValue(0, 8); // ri_gp_value 77 } 78 else llvm_unreachable("Unsupported abi for reginfo"); 79 } 80 81