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