]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsReginfo.cpp
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / lib / Target / Mips / MCTargetDesc / MipsReginfo.cpp
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