LLVM  3.7.0
MCWin64EH.h
Go to the documentation of this file.
1 //===- MCWin64EH.h - Machine Code Win64 EH support --------------*- C++ -*-===//
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 //===----------------------------------------------------------------------===//
9 //
10 // This file contains declarations to support the Win64 Exception Handling
11 // scheme in MC.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_MC_MCWIN64EH_H
16 #define LLVM_MC_MCWIN64EH_H
17 
18 #include "llvm/MC/MCWinEH.h"
19 #include "llvm/Support/Win64EH.h"
20 #include <vector>
21 
22 namespace llvm {
23 class MCStreamer;
24 class MCSymbol;
25 
26 namespace Win64EH {
27 struct Instruction {
28  static WinEH::Instruction PushNonVol(MCSymbol *L, unsigned Reg) {
29  return WinEH::Instruction(Win64EH::UOP_PushNonVol, L, Reg, -1);
30  }
31  static WinEH::Instruction Alloc(MCSymbol *L, unsigned Size) {
32  return WinEH::Instruction(Size > 128 ? UOP_AllocLarge : UOP_AllocSmall, L,
33  -1, Size);
34  }
35  static WinEH::Instruction PushMachFrame(MCSymbol *L, bool Code) {
36  return WinEH::Instruction(UOP_PushMachFrame, L, -1, Code ? 1 : 0);
37  }
39  unsigned Offset) {
40  return WinEH::Instruction(Offset > 512 * 1024 - 8 ? UOP_SaveNonVolBig
42  L, Reg, Offset);
43  }
44  static WinEH::Instruction SaveXMM(MCSymbol *L, unsigned Reg,
45  unsigned Offset) {
46  return WinEH::Instruction(Offset > 512 * 1024 - 8 ? UOP_SaveXMM128Big
48  L, Reg, Offset);
49  }
50  static WinEH::Instruction SetFPReg(MCSymbol *L, unsigned Reg, unsigned Off) {
51  return WinEH::Instruction(UOP_SetFPReg, L, Reg, Off);
52  }
53 };
54 
56 public:
57  void Emit(MCStreamer &Streamer) const override;
58  void EmitUnwindInfo(MCStreamer &Streamer, WinEH::FrameInfo *FI) const override;
59 };
60 }
61 } // end namespace llvm
62 
63 #endif
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:39
static WinEH::Instruction SaveNonVol(MCSymbol *L, unsigned Reg, unsigned Offset)
Definition: MCWin64EH.h:38
Reg
All possible values of the reg field in the ModR/M byte.
static WinEH::Instruction PushNonVol(MCSymbol *L, unsigned Reg)
Definition: MCWin64EH.h:28
Streaming machine code generation interface.
Definition: MCStreamer.h:157
static WinEH::Instruction PushMachFrame(MCSymbol *L, bool Code)
Definition: MCWin64EH.h:35
void EmitUnwindInfo(MCStreamer &Streamer, WinEH::FrameInfo *FI) const override
Definition: MCWin64EH.cpp:240
static WinEH::Instruction SetFPReg(MCSymbol *L, unsigned Reg, unsigned Off)
Definition: MCWin64EH.h:50
static WinEH::Instruction SaveXMM(MCSymbol *L, unsigned Reg, unsigned Offset)
Definition: MCWin64EH.h:44
static WinEH::Instruction Alloc(MCSymbol *L, unsigned Size)
Definition: MCWin64EH.h:31
void Emit(MCStreamer &Streamer) const override
Definition: MCWin64EH.cpp:222