LLVM 23.0.0git
MCWin64EH.h
Go to the documentation of this file.
1//===- MCWin64EH.h - Machine Code Win64 EH support --------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file contains declarations to support the Win64 Exception Handling
10// scheme in MC.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_MC_MCWIN64EH_H
15#define LLVM_MC_MCWIN64EH_H
16
17#include "llvm/MC/MCWinEH.h"
19
20namespace llvm {
21class MCStreamer;
22class MCSymbol;
23
24namespace Win64EH {
29 static WinEH::Instruction Push2(MCSymbol *L, unsigned Reg1, unsigned Reg2) {
30 return WinEH::Instruction(Win64EH::UOP_Push2, L, Reg1, Reg2, -1);
31 }
32 static WinEH::Instruction Alloc(MCSymbol *L, unsigned Size) {
34 -1, Size);
35 }
37 return WinEH::Instruction(UOP_PushMachFrame, L, -1, Code ? 1 : 0);
38 }
40 unsigned Offset) {
41 return WinEH::Instruction(Offset > 512 * 1024 - 8 ? UOP_SaveNonVolBig
43 L, Reg, Offset);
44 }
46 unsigned Offset) {
47 return WinEH::Instruction(Offset > 512 * 1024 - 8 ? UOP_SaveXMM128Big
49 L, Reg, Offset);
50 }
51 static WinEH::Instruction SetFPReg(MCSymbol *L, unsigned Reg, unsigned Off) {
52 return WinEH::Instruction(UOP_SetFPReg, L, Reg, Off);
53 }
54};
55
57public:
58 void Emit(MCStreamer &Streamer) const override;
59 void EmitUnwindInfo(MCStreamer &Streamer, WinEH::FrameInfo *FI,
60 bool HandlerData) const override;
61};
62
64public:
65 void Emit(MCStreamer &Streamer) const override;
66 void EmitUnwindInfo(MCStreamer &Streamer, WinEH::FrameInfo *FI,
67 bool HandlerData) const override;
68};
69
71public:
72 void Emit(MCStreamer &Streamer) const override;
73 void EmitUnwindInfo(MCStreamer &Streamer, WinEH::FrameInfo *FI,
74 bool HandlerData) const override;
75};
76/// Encode a single WinEH::Instruction as V3 WOD bytes.
77/// Appends encoded bytes to Out.
79} // namespace Win64EH
80} // namespace llvm
81
82#endif
Register Reg
Streaming machine code generation interface.
Definition MCStreamer.h:222
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition MCSymbol.h:42
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
void EmitUnwindInfo(MCStreamer &Streamer, WinEH::FrameInfo *FI, bool HandlerData) const override
void Emit(MCStreamer &Streamer) const override
This emits the unwind info sections (.pdata and .xdata in PE/COFF).
void Emit(MCStreamer &Streamer) const override
This emits the unwind info sections (.pdata and .xdata in PE/COFF).
void EmitUnwindInfo(MCStreamer &Streamer, WinEH::FrameInfo *FI, bool HandlerData) const override
void Emit(MCStreamer &Streamer) const override
This emits the unwind info sections (.pdata and .xdata in PE/COFF).
void EmitUnwindInfo(MCStreamer &Streamer, WinEH::FrameInfo *FI, bool HandlerData) const override
@ UOP_SaveNonVolBig
Definition Win64EH.h:39
@ UOP_SaveXMM128Big
Definition Win64EH.h:43
@ UOP_PushMachFrame
Definition Win64EH.h:44
void EncodeWOD(const WinEH::Instruction &Inst, SmallVectorImpl< uint8_t > &Out)
Encode a single WinEH::Instruction as V3 WOD bytes.
This is an optimization pass for GlobalISel generic memory operations.
@ Offset
Definition DWP.cpp:558
static WinEH::Instruction SaveXMM(MCSymbol *L, unsigned Reg, unsigned Offset)
Definition MCWin64EH.h:45
static WinEH::Instruction PushNonVol(MCSymbol *L, unsigned Reg)
Definition MCWin64EH.h:26
static WinEH::Instruction PushMachFrame(MCSymbol *L, bool Code)
Definition MCWin64EH.h:36
static WinEH::Instruction SaveNonVol(MCSymbol *L, unsigned Reg, unsigned Offset)
Definition MCWin64EH.h:39
static WinEH::Instruction Alloc(MCSymbol *L, unsigned Size)
Definition MCWin64EH.h:32
static WinEH::Instruction SetFPReg(MCSymbol *L, unsigned Reg, unsigned Off)
Definition MCWin64EH.h:51
static WinEH::Instruction Push2(MCSymbol *L, unsigned Reg1, unsigned Reg2)
Definition MCWin64EH.h:29