brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 41c4885 Raw
79 lines · cpp
1//===-- RISCVAttributeParser.cpp - RISCV Attribute Parser -----------------===//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 "llvm/Support/RISCVAttributeParser.h"10#include "llvm/ADT/StringExtras.h"11 12using namespace llvm;13 14const RISCVAttributeParser::DisplayHandler15    RISCVAttributeParser::displayRoutines[] = {16        {17            RISCVAttrs::ARCH,18            &ELFCompactAttrParser::stringAttribute,19        },20        {21            RISCVAttrs::PRIV_SPEC,22            &ELFCompactAttrParser::integerAttribute,23        },24        {25            RISCVAttrs::PRIV_SPEC_MINOR,26            &ELFCompactAttrParser::integerAttribute,27        },28        {29            RISCVAttrs::PRIV_SPEC_REVISION,30            &ELFCompactAttrParser::integerAttribute,31        },32        {33            RISCVAttrs::STACK_ALIGN,34            &RISCVAttributeParser::stackAlign,35        },36        {37            RISCVAttrs::UNALIGNED_ACCESS,38            &RISCVAttributeParser::unalignedAccess,39        },40        {41            RISCVAttrs::ATOMIC_ABI,42            &RISCVAttributeParser::atomicAbi,43        },44};45 46Error RISCVAttributeParser::atomicAbi(unsigned Tag) {47  uint64_t Value = de.getULEB128(cursor);48  printAttribute(Tag, Value, "Atomic ABI is " + utostr(Value));49  return Error::success();50}51 52Error RISCVAttributeParser::unalignedAccess(unsigned tag) {53  static const char *const strings[] = {"No unaligned access",54                                        "Unaligned access"};55  return parseStringAttribute("Unaligned_access", tag, ArrayRef(strings));56}57 58Error RISCVAttributeParser::stackAlign(unsigned tag) {59  uint64_t value = de.getULEB128(cursor);60  std::string description =61      "Stack alignment is " + utostr(value) + std::string("-bytes");62  printAttribute(tag, value, description);63  return Error::success();64}65 66Error RISCVAttributeParser::handler(uint64_t tag, bool &handled) {67  handled = false;68  for (const auto &AH : displayRoutines) {69    if (uint64_t(AH.attribute) == tag) {70      if (Error e = (this->*AH.routine)(tag))71        return e;72      handled = true;73      break;74    }75  }76 77  return Error::success();78}79