brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 2933b4b Raw
89 lines · cpp
1//===-- SystemZMCAsmInfo.cpp - SystemZ asm properties ---------------------===//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "SystemZMCAsmInfo.h"10#include "llvm/MC/MCContext.h"11#include "llvm/MC/MCExpr.h"12#include "llvm/MC/MCValue.h"13 14using namespace llvm;15 16const MCAsmInfo::AtSpecifier atSpecifiers[] = {17    {SystemZ::S_DTPOFF, "DTPOFF"}, {SystemZ::S_GOT, "GOT"},18    {SystemZ::S_GOTENT, "GOTENT"}, {SystemZ::S_INDNTPOFF, "INDNTPOFF"},19    {SystemZ::S_NTPOFF, "NTPOFF"}, {SystemZ::S_PLT, "PLT"},20    {SystemZ::S_TLSGD, "TLSGD"},   {SystemZ::S_TLSLD, "TLSLD"},21    {SystemZ::S_TLSLDM, "TLSLDM"},22};23 24SystemZMCAsmInfoELF::SystemZMCAsmInfoELF(const Triple &TT) {25  AssemblerDialect = AD_GNU;26  CalleeSaveStackSlotSize = 8;27  CodePointerSize = 8;28  Data64bitsDirective = "\t.quad\t";29  ExceptionsType = ExceptionHandling::DwarfCFI;30  IsLittleEndian = false;31  MaxInstLength = 6;32  SupportsDebugInformation = true;33  UsesELFSectionDirectiveForBSS = true;34  ZeroDirective = "\t.space\t";35 36  initializeAtSpecifiers(atSpecifiers);37}38 39SystemZMCAsmInfoGOFF::SystemZMCAsmInfoGOFF(const Triple &TT) {40  AllowAdditionalComments = false;41  AllowAtInName = true;42  AllowAtAtStartOfIdentifier = true;43  AllowDollarAtStartOfIdentifier = true;44  AssemblerDialect = AD_HLASM;45  CalleeSaveStackSlotSize = 8;46  CodePointerSize = 8;47  CommentString = "*";48  UsesSetToEquateSymbol = true;49  ExceptionsType = ExceptionHandling::ZOS;50  IsHLASM = true;51  IsLittleEndian = false;52  MaxInstLength = 6;53  SupportsDebugInformation = true;54 55  initializeAtSpecifiers(atSpecifiers);56}57 58bool SystemZMCAsmInfoGOFF::isAcceptableChar(char C) const {59  return MCAsmInfo::isAcceptableChar(C) || C == '#';60}61 62void SystemZMCAsmInfoGOFF::printSpecifierExpr(63    raw_ostream &OS, const MCSpecifierExpr &Expr) const {64  switch (Expr.getSpecifier()) {65  case SystemZ::S_None:66    OS << "A";67    break;68  case SystemZ::S_RCon:69    OS << "R";70    break;71  case SystemZ::S_VCon:72    OS << "V";73    break;74  default:75    llvm_unreachable("Invalid kind");76  }77  OS << '(';78  printExpr(OS, *Expr.getSubExpr());79  OS << ')';80}81 82bool SystemZMCAsmInfoGOFF::evaluateAsRelocatableImpl(83    const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {84  if (!Expr.getSubExpr()->evaluateAsRelocatable(Res, Asm))85    return false;86  Res.setSpecifier(Expr.getSpecifier());87  return true;88}89