//===-- MCTargetDesc/AMDGPUMCAsmInfo.cpp - Assembly Info ------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // /// \file //===----------------------------------------------------------------------===// #include "AMDGPUMCAsmInfo.h" #include "llvm/ADT/Triple.h" #include "llvm/MC/MCSubtargetInfo.h" #include "MCTargetDesc/AMDGPUMCTargetDesc.h" using namespace llvm; AMDGPUMCAsmInfo::AMDGPUMCAsmInfo(const Triple &TT, const MCTargetOptions &Options) : MCAsmInfoELF() { CodePointerSize = (TT.getArch() == Triple::amdgcn) ? 8 : 4; StackGrowsUp = true; HasSingleParameterDotFile = false; //===------------------------------------------------------------------===// MinInstAlignment = 4; // This is the maximum instruction encoded size for gfx10. With a known // subtarget, it can be reduced to 8 bytes. MaxInstLength = (TT.getArch() == Triple::amdgcn) ? 20 : 16; SeparatorString = "\n"; CommentString = ";"; PrivateLabelPrefix = ""; InlineAsmStart = ";#ASMSTART"; InlineAsmEnd = ";#ASMEND"; //===--- Data Emission Directives -------------------------------------===// SunStyleELFSectionSwitchSyntax = true; UsesELFSectionDirectiveForBSS = true; //===--- Global Variable Emission Directives --------------------------===// HasAggressiveSymbolFolding = true; COMMDirectiveAlignmentIsInBytes = false; HasNoDeadStrip = true; //===--- Dwarf Emission Directives -----------------------------------===// SupportsDebugInformation = true; DwarfRegNumForCFI = true; UseIntegratedAssembler = false; } bool AMDGPUMCAsmInfo::shouldOmitSectionDirective(StringRef SectionName) const { return SectionName == ".hsatext" || SectionName == ".hsadata_global_agent" || SectionName == ".hsadata_global_program" || SectionName == ".hsarodata_readonly_agent" || MCAsmInfo::shouldOmitSectionDirective(SectionName); } unsigned AMDGPUMCAsmInfo::getMaxInstLength(const MCSubtargetInfo *STI) const { if (!STI || STI->getTargetTriple().getArch() == Triple::r600) return MaxInstLength; // Maximum for NSA encoded images if (STI->getFeatureBits()[AMDGPU::FeatureNSAEncoding]) return 20; // 64-bit instruction with 32-bit literal. if (STI->getFeatureBits()[AMDGPU::FeatureVOP3Literal]) return 12; return 8; }