1919#include " MipsMCNaCl.h"
2020#include " MipsTargetStreamer.h"
2121#include " TargetInfo/MipsTargetInfo.h"
22+ #include " llvm/DebugInfo/CodeView/CodeView.h"
2223#include " llvm/MC/MCCodeEmitter.h"
2324#include " llvm/MC/MCELFStreamer.h"
2425#include " llvm/MC/MCInstrAnalysis.h"
@@ -44,6 +45,86 @@ using namespace llvm;
4445#define GET_REGINFO_MC_DESC
4546#include " MipsGenRegisterInfo.inc"
4647
48+ void MIPS_MC::initLLVMToCVRegMapping (MCRegisterInfo *MRI) {
49+ // Mapping from CodeView to MC register id.
50+ static const struct {
51+ codeview::RegisterId CVReg;
52+ MCPhysReg Reg;
53+ } RegMap[] = {
54+ {codeview::RegisterId::MIPS_ZERO, Mips::ZERO},
55+ {codeview::RegisterId::MIPS_AT, Mips::AT},
56+ {codeview::RegisterId::MIPS_V0, Mips::V0},
57+ {codeview::RegisterId::MIPS_V1, Mips::V1},
58+ {codeview::RegisterId::MIPS_A0, Mips::A0},
59+ {codeview::RegisterId::MIPS_A1, Mips::A1},
60+ {codeview::RegisterId::MIPS_A2, Mips::A2},
61+ {codeview::RegisterId::MIPS_A3, Mips::A3},
62+ {codeview::RegisterId::MIPS_T0, Mips::T0},
63+ {codeview::RegisterId::MIPS_T1, Mips::T1},
64+ {codeview::RegisterId::MIPS_T2, Mips::T2},
65+ {codeview::RegisterId::MIPS_T3, Mips::T3},
66+ {codeview::RegisterId::MIPS_T4, Mips::T4},
67+ {codeview::RegisterId::MIPS_T5, Mips::T5},
68+ {codeview::RegisterId::MIPS_T6, Mips::T6},
69+ {codeview::RegisterId::MIPS_T7, Mips::T7},
70+ {codeview::RegisterId::MIPS_S0, Mips::S0},
71+ {codeview::RegisterId::MIPS_S1, Mips::S1},
72+ {codeview::RegisterId::MIPS_S2, Mips::S2},
73+ {codeview::RegisterId::MIPS_S3, Mips::S3},
74+ {codeview::RegisterId::MIPS_S4, Mips::S4},
75+ {codeview::RegisterId::MIPS_S5, Mips::S5},
76+ {codeview::RegisterId::MIPS_S6, Mips::S6},
77+ {codeview::RegisterId::MIPS_S7, Mips::S7},
78+ {codeview::RegisterId::MIPS_T8, Mips::T8},
79+ {codeview::RegisterId::MIPS_T9, Mips::T9},
80+ {codeview::RegisterId::MIPS_K0, Mips::K0},
81+ {codeview::RegisterId::MIPS_K1, Mips::K1},
82+ {codeview::RegisterId::MIPS_GP, Mips::GP},
83+ {codeview::RegisterId::MIPS_SP, Mips::SP},
84+ {codeview::RegisterId::MIPS_S8, Mips::FP},
85+ {codeview::RegisterId::MIPS_RA, Mips::RA},
86+ {codeview::RegisterId::MIPS_LO, Mips::HI0},
87+ {codeview::RegisterId::MIPS_HI, Mips::LO0},
88+ {codeview::RegisterId::MIPS_Fir, Mips::FCR0},
89+ {codeview::RegisterId::MIPS_Psr, Mips::COP012}, // CP0.Status
90+ {codeview::RegisterId::MIPS_F0, Mips::F0},
91+ {codeview::RegisterId::MIPS_F1, Mips::F1},
92+ {codeview::RegisterId::MIPS_F2, Mips::F2},
93+ {codeview::RegisterId::MIPS_F3, Mips::F3},
94+ {codeview::RegisterId::MIPS_F4, Mips::F4},
95+ {codeview::RegisterId::MIPS_F5, Mips::F5},
96+ {codeview::RegisterId::MIPS_F6, Mips::F6},
97+ {codeview::RegisterId::MIPS_F7, Mips::F7},
98+ {codeview::RegisterId::MIPS_F8, Mips::F8},
99+ {codeview::RegisterId::MIPS_F9, Mips::F9},
100+ {codeview::RegisterId::MIPS_F10, Mips::F10},
101+ {codeview::RegisterId::MIPS_F11, Mips::F11},
102+ {codeview::RegisterId::MIPS_F12, Mips::F12},
103+ {codeview::RegisterId::MIPS_F13, Mips::F13},
104+ {codeview::RegisterId::MIPS_F14, Mips::F14},
105+ {codeview::RegisterId::MIPS_F15, Mips::F15},
106+ {codeview::RegisterId::MIPS_F16, Mips::F16},
107+ {codeview::RegisterId::MIPS_F17, Mips::F17},
108+ {codeview::RegisterId::MIPS_F18, Mips::F18},
109+ {codeview::RegisterId::MIPS_F19, Mips::F19},
110+ {codeview::RegisterId::MIPS_F20, Mips::F20},
111+ {codeview::RegisterId::MIPS_F21, Mips::F21},
112+ {codeview::RegisterId::MIPS_F22, Mips::F22},
113+ {codeview::RegisterId::MIPS_F23, Mips::F23},
114+ {codeview::RegisterId::MIPS_F24, Mips::F24},
115+ {codeview::RegisterId::MIPS_F25, Mips::F25},
116+ {codeview::RegisterId::MIPS_F26, Mips::F26},
117+ {codeview::RegisterId::MIPS_F27, Mips::F27},
118+ {codeview::RegisterId::MIPS_F28, Mips::F28},
119+ {codeview::RegisterId::MIPS_F29, Mips::F29},
120+ {codeview::RegisterId::MIPS_F30, Mips::F30},
121+ {codeview::RegisterId::MIPS_F31, Mips::F31},
122+ {codeview::RegisterId::MIPS_Fsr, Mips::FCR31},
123+ };
124+ for (const auto &I : RegMap)
125+ MRI->mapLLVMRegToCVReg (I.Reg , static_cast <int >(I.CVReg ));
126+ }
127+
47128namespace {
48129class MipsWinCOFFTargetStreamer : public MipsTargetStreamer {
49130public:
0 commit comments