llir-opt  0.0.1
Low-Level Post-Link Optimiser for OCaml and C
aarch64runtime_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/AArch64/AArch64Subtarget.h>
11 
12 #include "emitter/runtime_printer.h"
13 
14 class Prog;
15 class Data;
16 
17 
18 
22 class AArch64RuntimePrinter 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 LoadCamlState(
51  llvm::Register state,
52  const llvm::AArch64Subtarget &sti
53  );
55  void StoreState(
56  llvm::Register state,
57  llvm::Register val,
58  const char *name,
59  const llvm::AArch64Subtarget &sti
60  );
62  void LoadState(
63  llvm::Register state,
64  llvm::Register val,
65  const char *name,
66  const llvm::AArch64Subtarget &sti
67  );
68 };
Data
Definition: data.h:47
ID
Definition: id.h:19
Prog
Definition: prog.h:33
AArch64RuntimePrinter
Definition: aarch64runtime_printer.h:22
AArch64RuntimePrinter::AArch64RuntimePrinter
AArch64RuntimePrinter(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: aarch64runtime_printer.cpp:35
RuntimePrinter
Definition: runtime_printer.h:20