Lines Matching +full:align +full:- +full:end

1 //===-- X86WinCOFFTargetStreamer.cpp ----------------------------*- C++ -*-===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
24 /// Implements Windows x86-only directives for assembly emission.
41 bool emitFPOStackAlign(unsigned Align, SMLoc L) override;
61 MCSymbol *End = nullptr;
67 /// Implements Windows x86-only directives for object emission.
95 bool emitFPOStackAlign(unsigned Align, SMLoc L) override;
98 } // end namespace
103 ProcSym->print(OS, getStreamer().getContext().getAsmInfo());
121 ProcSym->print(OS, getStreamer().getContext().getAsmInfo());
139 bool X86WinCOFFAsmTargetStreamer::emitFPOStackAlign(unsigned Align, SMLoc L) {
140 OS << "\t.cv_fpo_stackalign\t" << Align << '\n';
152 if (!haveOpenFPOData() || CurFPOData->PrologueEnd) {
175 CurFPOData->Function = ProcSym;
176 CurFPOData->Begin = emitFPOLabel();
177 CurFPOData->ParamsSize = ParamsSize;
186 if (!CurFPOData->PrologueEnd) {
187 // Complain if there were prologue setup instructions but no end prologue.
188 if (!CurFPOData->Instructions.empty()) {
190 CurFPOData->Instructions.clear();
193 // Claim there is a zero-length prologue to make the label math work out
195 CurFPOData->PrologueEnd = CurFPOData->Begin;
198 CurFPOData->End = emitFPOLabel();
199 const MCSymbol *Fn = CurFPOData->Function;
211 CurFPOData->Instructions.push_back(Inst);
222 CurFPOData->Instructions.push_back(Inst);
233 CurFPOData->Instructions.push_back(Inst);
237 bool X86WinCOFFTargetStreamer::emitFPOStackAlign(unsigned Align, SMLoc L) {
240 if (llvm::none_of(CurFPOData->Instructions, [](const FPOInstruction &Inst) {
250 Inst.RegOrOffset = Align;
251 CurFPOData->Instructions.push_back(Inst);
258 CurFPOData->PrologueEnd = emitFPOLabel();
289 } // end namespace
307 OS << '$' << MRI->getCodeViewRegNum(LLVMReg);
315 if (Label == FPO->Begin)
323 "cannot align stack without frame reg");
333 // align the result. While we don't store any CSRs in this area, $T0 is used
336 FuncOS << "$T0 " << CFAVar << ' ' << StackOffsetBeforeAlign << " - "
354 << " - ^ = ";
374 OS.emitAbsoluteSymbolDiff(Label, FPO->Begin, 4); // RvaStart
375 OS.emitAbsoluteSymbolDiff(FPO->End, Label, 4); // CodeSize
377 OS.emitInt32(FPO->ParamsSize);
380 OS.emitAbsoluteSymbolDiff(FPO->PrologueEnd, Label, 2);
391 if (I == AllFPOData.end()) {
393 ProcSym->getName());
396 const FPOData *FPO = I->second.get();
397 assert(FPO->Begin && FPO->End && FPO->PrologueEnd && "missing FPO label");
407 OS.emitValue(MCSymbolRefExpr::create(FPO->Function,
414 FSM.emitFrameDataRecord(OS, FPO->Begin);
415 for (const FPOInstruction &Inst : FPO->Instructions) {
441 OS.emitValueToAlignment(Align(4), 0);