109467b48Spatrick //===- MC/MCAsmInfoXCOFF.cpp - XCOFF asm properties ------------ *- C++ -*-===//
209467b48Spatrick //
309467b48Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
409467b48Spatrick // See https://llvm.org/LICENSE.txt for license information.
509467b48Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
609467b48Spatrick //
709467b48Spatrick //===----------------------------------------------------------------------===//
809467b48Spatrick
909467b48Spatrick #include "llvm/MC/MCAsmInfoXCOFF.h"
10097a140dSpatrick #include "llvm/ADT/StringExtras.h"
11*73471bf0Spatrick #include "llvm/Support/CommandLine.h"
1209467b48Spatrick
1309467b48Spatrick using namespace llvm;
1409467b48Spatrick
15*73471bf0Spatrick namespace llvm {
16*73471bf0Spatrick extern cl::opt<cl::boolOrDefault> UseLEB128Directives;
17*73471bf0Spatrick }
18*73471bf0Spatrick
anchor()1909467b48Spatrick void MCAsmInfoXCOFF::anchor() {}
2009467b48Spatrick
MCAsmInfoXCOFF()2109467b48Spatrick MCAsmInfoXCOFF::MCAsmInfoXCOFF() {
2209467b48Spatrick IsLittleEndian = false;
23097a140dSpatrick HasVisibilityOnlyWithLinkage = true;
24*73471bf0Spatrick HasBasenameOnlyForFileDirective = false;
25*73471bf0Spatrick HasFourStringsDotFile = true;
26*73471bf0Spatrick
27*73471bf0Spatrick // For XCOFF, string constant consists of any number of characters enclosed in
28*73471bf0Spatrick // "" (double quotation marks).
29*73471bf0Spatrick HasPairedDoubleQuoteStringConstants = true;
30*73471bf0Spatrick
31097a140dSpatrick PrivateGlobalPrefix = "L..";
32097a140dSpatrick PrivateLabelPrefix = "L..";
33097a140dSpatrick SupportsQuotedNames = false;
3409467b48Spatrick UseDotAlignForAlignment = true;
35*73471bf0Spatrick UsesDwarfFileAndLocDirectives = false;
36*73471bf0Spatrick DwarfSectionSizeRequired = false;
37*73471bf0Spatrick if (UseLEB128Directives == cl::BOU_UNSET)
38*73471bf0Spatrick HasLEB128Directives = false;
39097a140dSpatrick ZeroDirective = "\t.space\t";
40097a140dSpatrick ZeroDirectiveSupportsNonZeroValue = false;
4109467b48Spatrick AsciiDirective = nullptr; // not supported
4209467b48Spatrick AscizDirective = nullptr; // not supported
43*73471bf0Spatrick ByteListDirective = "\t.byte\t";
44*73471bf0Spatrick PlainStringDirective = "\t.string\t";
45*73471bf0Spatrick CharacterLiteralSyntax = ACLS_SingleQuotePrefix;
46097a140dSpatrick
47097a140dSpatrick // Use .vbyte for data definition to avoid directives that apply an implicit
48097a140dSpatrick // alignment.
49097a140dSpatrick Data16bitsDirective = "\t.vbyte\t2, ";
50097a140dSpatrick Data32bitsDirective = "\t.vbyte\t4, ";
51097a140dSpatrick
52097a140dSpatrick COMMDirectiveAlignmentIsInBytes = false;
53097a140dSpatrick LCOMMDirectiveAlignmentType = LCOMM::Log2Alignment;
54097a140dSpatrick HasDotTypeDotSizeDirective = false;
55097a140dSpatrick UseIntegratedAssembler = false;
56*73471bf0Spatrick ParseInlineAsmUsingAsmParser = true;
5709467b48Spatrick NeedsFunctionDescriptors = true;
58*73471bf0Spatrick
59*73471bf0Spatrick ExceptionsType = ExceptionHandling::AIX;
6009467b48Spatrick }
6109467b48Spatrick
isAcceptableChar(char C) const6209467b48Spatrick bool MCAsmInfoXCOFF::isAcceptableChar(char C) const {
6309467b48Spatrick // QualName is allowed for a MCSymbolXCOFF, and
6409467b48Spatrick // QualName contains '[' and ']'.
6509467b48Spatrick if (C == '[' || C == ']')
6609467b48Spatrick return true;
6709467b48Spatrick
68097a140dSpatrick // For AIX assembler, symbols may consist of numeric digits,
69097a140dSpatrick // underscores, periods, uppercase or lowercase letters, or
70097a140dSpatrick // any combination of these.
71097a140dSpatrick return isAlnum(C) || C == '_' || C == '.';
7209467b48Spatrick }
73