xref: /llvm-project/llvm/lib/Support/HexagonAttributeParser.cpp (revision 31f4b329c8234fab9afa59494d7f8bdaeaefeaad)
1*31f4b329Squic-areg //===-- HexagonAttributeParser.cpp - Hexagon Attribute Parser -------------===//
2*31f4b329Squic-areg //
3*31f4b329Squic-areg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*31f4b329Squic-areg // See https://llvm.org/LICENSE.txt for license information.
5*31f4b329Squic-areg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*31f4b329Squic-areg //
7*31f4b329Squic-areg //===----------------------------------------------------------------------===//
8*31f4b329Squic-areg 
9*31f4b329Squic-areg #include "llvm/Support/HexagonAttributeParser.h"
10*31f4b329Squic-areg 
11*31f4b329Squic-areg using namespace llvm;
12*31f4b329Squic-areg 
13*31f4b329Squic-areg const HexagonAttributeParser::DisplayHandler
14*31f4b329Squic-areg     HexagonAttributeParser::DisplayRoutines[] = {
15*31f4b329Squic-areg         {
16*31f4b329Squic-areg             HexagonAttrs::ARCH,
17*31f4b329Squic-areg             &ELFAttributeParser::integerAttribute,
18*31f4b329Squic-areg         },
19*31f4b329Squic-areg         {
20*31f4b329Squic-areg             HexagonAttrs::HVXARCH,
21*31f4b329Squic-areg             &ELFAttributeParser::integerAttribute,
22*31f4b329Squic-areg         },
23*31f4b329Squic-areg         {
24*31f4b329Squic-areg             HexagonAttrs::HVXIEEEFP,
25*31f4b329Squic-areg             &ELFAttributeParser::integerAttribute,
26*31f4b329Squic-areg         },
27*31f4b329Squic-areg         {
28*31f4b329Squic-areg             HexagonAttrs::HVXQFLOAT,
29*31f4b329Squic-areg             &ELFAttributeParser::integerAttribute,
30*31f4b329Squic-areg         },
31*31f4b329Squic-areg         {
32*31f4b329Squic-areg             HexagonAttrs::ZREG,
33*31f4b329Squic-areg             &ELFAttributeParser::integerAttribute,
34*31f4b329Squic-areg         },
35*31f4b329Squic-areg         {
36*31f4b329Squic-areg             HexagonAttrs::AUDIO,
37*31f4b329Squic-areg             &ELFAttributeParser::integerAttribute,
38*31f4b329Squic-areg         },
39*31f4b329Squic-areg         {
40*31f4b329Squic-areg             HexagonAttrs::CABAC,
41*31f4b329Squic-areg             &ELFAttributeParser::integerAttribute,
42*31f4b329Squic-areg         }};
43*31f4b329Squic-areg 
handler(uint64_t Tag,bool & Handled)44*31f4b329Squic-areg Error HexagonAttributeParser::handler(uint64_t Tag, bool &Handled) {
45*31f4b329Squic-areg   Handled = false;
46*31f4b329Squic-areg   for (const auto &R : DisplayRoutines) {
47*31f4b329Squic-areg     if (uint64_t(R.Attribute) == Tag) {
48*31f4b329Squic-areg       if (Error E = (this->*R.Routine)(Tag))
49*31f4b329Squic-areg         return E;
50*31f4b329Squic-areg       Handled = true;
51*31f4b329Squic-areg       break;
52*31f4b329Squic-areg     }
53*31f4b329Squic-areg   }
54*31f4b329Squic-areg   return Error::success();
55*31f4b329Squic-areg }
56