llir-opt  0.0.1
Low-Level Post-Link Optimiser for OCaml and C
ppcruntime_printer.h
1 // This file if part of the llir-opt project.
2 // Licensing information can be found in the LICENSE file.
3 // (C) 2018 Nandor Licker. All rights reserved.
4 
5 #pragma once
6 
7 #include <llvm/Pass.h>
8 #include <llvm/MC/MCObjectFileInfo.h>
9 #include <llvm/MC/MCStreamer.h>
10 #include <llvm/Target/PowerPC/PPCSubtarget.h>
11 
12 #include "emitter/runtime_printer.h"
13 
14 class Prog;
15 class Data;
16 
17 
18 
22 class PPCRuntimePrinter final : public RuntimePrinter {
23 public:
24  static char ID;
25 
28  const Prog &prog,
29  const llvm::TargetMachine &tm,
30  llvm::MCContext &ctx,
31  llvm::MCStreamer &os,
32  const llvm::MCObjectFileInfo &objInfo,
33  bool shared
34  );
35 
36 private:
38  llvm::StringRef getPassName() const override;
39 
40 private:
42  void EmitCamlCallGc(llvm::Function &F) override;
44  void EmitCamlCCall(llvm::Function &F) override;
45 
46 private:
48  llvm::MCSymbol *LowerSymbol(const char *name);
50  void EmitFunctionStart(
51  const char *name,
52  const llvm::PPCSubtarget &sti
53  );
55  void LoadCamlState(llvm::Register state, const llvm::PPCSubtarget &sti);
57  void StoreState(
58  llvm::Register state,
59  llvm::Register val,
60  const char *name,
61  const llvm::PPCSubtarget &sti
62  );
64  void LoadState(
65  llvm::Register state,
66  llvm::Register val,
67  const char *name,
68  const llvm::PPCSubtarget &sti
69  );
70 };
Data
Definition: data.h:47
ID
Definition: id.h:19
Prog
Definition: prog.h:33
PPCRuntimePrinter
Definition: ppcruntime_printer.h:22
RuntimePrinter
Definition: runtime_printer.h:20
PPCRuntimePrinter::PPCRuntimePrinter
PPCRuntimePrinter(const Prog &prog, const llvm::TargetMachine &tm, llvm::MCContext &ctx, llvm::MCStreamer &os, const llvm::MCObjectFileInfo &objInfo, bool shared)
Initialises the pass which prints data sections.
Definition: ppcruntime_printer.cpp:36