llir-opt  0.0.1
Low-Level Post-Link Optimiser for OCaml and C
calling_conv.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 <cstdint>
8 
9 #include <llvm/Support/raw_ostream.h>
10 
11 
12 
16 enum class CallingConv : uint8_t {
17  // Generic C calling convention.
18  C,
19  // Generic OCaml calling convention.
20  CAML,
21  // OCaml allocator call.
22  CAML_ALLOC,
23  // OCaml gc trampoline.
24  CAML_GC,
25  // Setjmp convention.
26  SETJMP,
27  // Xen hypervisor call.
28  XEN,
29  // Interrupt handler.
30  INTR,
31  // Multiboot entry.
32  MULTIBOOT,
33  // Windows.
34  WIN64,
35 };
36 
40 llvm::raw_ostream &operator<<(llvm::raw_ostream &os, CallingConv conv);
41 
45 bool IsCamlCall(CallingConv conv);