xref: /freebsd/contrib/llvm-project/llvm/lib/Support/HexagonAttributeParser.cpp (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1 //===-- HexagonAttributeParser.cpp - Hexagon 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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "llvm/Support/HexagonAttributeParser.h"
10 
11 using namespace llvm;
12 
13 const HexagonAttributeParser::DisplayHandler
14     HexagonAttributeParser::DisplayRoutines[] = {
15         {
16             HexagonAttrs::ARCH,
17             &ELFAttributeParser::integerAttribute,
18         },
19         {
20             HexagonAttrs::HVXARCH,
21             &ELFAttributeParser::integerAttribute,
22         },
23         {
24             HexagonAttrs::HVXIEEEFP,
25             &ELFAttributeParser::integerAttribute,
26         },
27         {
28             HexagonAttrs::HVXQFLOAT,
29             &ELFAttributeParser::integerAttribute,
30         },
31         {
32             HexagonAttrs::ZREG,
33             &ELFAttributeParser::integerAttribute,
34         },
35         {
36             HexagonAttrs::AUDIO,
37             &ELFAttributeParser::integerAttribute,
38         },
39         {
40             HexagonAttrs::CABAC,
41             &ELFAttributeParser::integerAttribute,
42         }};
43 
handler(uint64_t Tag,bool & Handled)44 Error HexagonAttributeParser::handler(uint64_t Tag, bool &Handled) {
45   Handled = false;
46   for (const auto &R : DisplayRoutines) {
47     if (uint64_t(R.Attribute) == Tag) {
48       if (Error E = (this->*R.Routine)(Tag))
49         return E;
50       Handled = true;
51       break;
52     }
53   }
54   return Error::success();
55 }
56