File indexing completed on 2026-05-10 08:44:15
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef LLVM_MC_MCWIN64EH_H
0015 #define LLVM_MC_MCWIN64EH_H
0016
0017 #include "llvm/MC/MCWinEH.h"
0018 #include "llvm/Support/Win64EH.h"
0019
0020 namespace llvm {
0021 class MCStreamer;
0022 class MCSymbol;
0023
0024 namespace Win64EH {
0025 struct Instruction {
0026 static WinEH::Instruction PushNonVol(MCSymbol *L, unsigned Reg) {
0027 return WinEH::Instruction(Win64EH::UOP_PushNonVol, L, Reg, -1);
0028 }
0029 static WinEH::Instruction Alloc(MCSymbol *L, unsigned Size) {
0030 return WinEH::Instruction(Size > 128 ? UOP_AllocLarge : UOP_AllocSmall, L,
0031 -1, Size);
0032 }
0033 static WinEH::Instruction PushMachFrame(MCSymbol *L, bool Code) {
0034 return WinEH::Instruction(UOP_PushMachFrame, L, -1, Code ? 1 : 0);
0035 }
0036 static WinEH::Instruction SaveNonVol(MCSymbol *L, unsigned Reg,
0037 unsigned Offset) {
0038 return WinEH::Instruction(Offset > 512 * 1024 - 8 ? UOP_SaveNonVolBig
0039 : UOP_SaveNonVol,
0040 L, Reg, Offset);
0041 }
0042 static WinEH::Instruction SaveXMM(MCSymbol *L, unsigned Reg,
0043 unsigned Offset) {
0044 return WinEH::Instruction(Offset > 512 * 1024 - 8 ? UOP_SaveXMM128Big
0045 : UOP_SaveXMM128,
0046 L, Reg, Offset);
0047 }
0048 static WinEH::Instruction SetFPReg(MCSymbol *L, unsigned Reg, unsigned Off) {
0049 return WinEH::Instruction(UOP_SetFPReg, L, Reg, Off);
0050 }
0051 };
0052
0053 class UnwindEmitter : public WinEH::UnwindEmitter {
0054 public:
0055 void Emit(MCStreamer &Streamer) const override;
0056 void EmitUnwindInfo(MCStreamer &Streamer, WinEH::FrameInfo *FI,
0057 bool HandlerData) const override;
0058 };
0059
0060 class ARMUnwindEmitter : public WinEH::UnwindEmitter {
0061 public:
0062 void Emit(MCStreamer &Streamer) const override;
0063 void EmitUnwindInfo(MCStreamer &Streamer, WinEH::FrameInfo *FI,
0064 bool HandlerData) const override;
0065 };
0066
0067 class ARM64UnwindEmitter : public WinEH::UnwindEmitter {
0068 public:
0069 void Emit(MCStreamer &Streamer) const override;
0070 void EmitUnwindInfo(MCStreamer &Streamer, WinEH::FrameInfo *FI,
0071 bool HandlerData) const override;
0072 };
0073 }
0074 }
0075
0076 #endif