Coverage Report

Created: 2024-01-17 10:31

/src/build/lib/Target/Sparc/SparcGenSearchableTables.inc
Line
Count
Source (jump to first uncovered line)
1
#ifdef GET_ASITagsList_DECL
2
const ASITag *lookupASITagByEncoding(uint8_t Encoding);
3
const ASITag *lookupASITagByAltName(StringRef AltName);
4
const ASITag *lookupASITagByName(StringRef Name);
5
#endif
6
7
#ifdef GET_ASITagsList_IMPL
8
constexpr ASITag ASITagsList[] = {
9
  { "ASI_N", "ASI_NUCLEUS", 0x4 }, // 0
10
  { "ASI_N_L", "ASI_NUCLEUS_LITTLE", 0xC }, // 1
11
  { "ASI_AIUP", "ASI_AS_IF_USER_PRIMARY", 0x10 }, // 2
12
  { "ASI_AIUS", "ASI_AS_IF_USER_SECONDARY", 0x11 }, // 3
13
  { "ASI_AIUP_L", "ASI_AS_IF_USER_PRIMARY_LITTLE", 0x18 }, // 4
14
  { "ASI_AIUS_L", "ASI_AS_IF_USER_SECONDARY_LITTLE", 0x19 }, // 5
15
  { "ASI_P", "ASI_PRIMARY", 0x80 }, // 6
16
  { "ASI_S", "ASI_SECONDARY", 0x81 }, // 7
17
  { "ASI_PNF", "ASI_PRIMARY_NOFAULT", 0x82 }, // 8
18
  { "ASI_SNF", "ASI_SECONDARY_NOFAULT", 0x83 }, // 9
19
  { "ASI_P_L", "ASI_PRIMARY_LITTLE", 0x88 }, // 10
20
  { "ASI_S_L", "ASI_SECONDARY_LITTLE", 0x89 }, // 11
21
  { "ASI_PNF_L", "ASI_PRIMARY_NOFAULT_LITTLE", 0x8A }, // 12
22
  { "ASI_SNF_L", "ASI_SECONDARY_NOFAULT_LITTLE", 0x8B }, // 13
23
 };
24
25
0
const ASITag *lookupASITagByEncoding(uint8_t Encoding) {
26
0
  struct KeyType {
27
0
    uint8_t Encoding;
28
0
  };
29
0
  KeyType Key = {Encoding};
30
0
  auto Table = ArrayRef(ASITagsList);
31
0
  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
32
0
    [](const ASITag &LHS, const KeyType &RHS) {
33
0
      if (LHS.Encoding < RHS.Encoding)
34
0
        return true;
35
0
      if (LHS.Encoding > RHS.Encoding)
36
0
        return false;
37
0
      return false;
38
0
    });
39
40
0
  if (Idx == Table.end() ||
41
0
      Key.Encoding != Idx->Encoding)
42
0
    return nullptr;
43
0
  return &*Idx;
44
0
}
45
46
0
const ASITag *lookupASITagByAltName(StringRef AltName) {
47
0
  struct IndexType {
48
0
    const char * AltName;
49
0
    unsigned _index;
50
0
  };
51
0
  static const struct IndexType Index[] = {
52
0
    { "ASI_AS_IF_USER_PRIMARY", 2 },
53
0
    { "ASI_AS_IF_USER_PRIMARY_LITTLE", 4 },
54
0
    { "ASI_AS_IF_USER_SECONDARY", 3 },
55
0
    { "ASI_AS_IF_USER_SECONDARY_LITTLE", 5 },
56
0
    { "ASI_NUCLEUS", 0 },
57
0
    { "ASI_NUCLEUS_LITTLE", 1 },
58
0
    { "ASI_PRIMARY", 6 },
59
0
    { "ASI_PRIMARY_LITTLE", 10 },
60
0
    { "ASI_PRIMARY_NOFAULT", 8 },
61
0
    { "ASI_PRIMARY_NOFAULT_LITTLE", 12 },
62
0
    { "ASI_SECONDARY", 7 },
63
0
    { "ASI_SECONDARY_LITTLE", 11 },
64
0
    { "ASI_SECONDARY_NOFAULT", 9 },
65
0
    { "ASI_SECONDARY_NOFAULT_LITTLE", 13 },
66
0
  };
67
68
0
  struct KeyType {
69
0
    std::string AltName;
70
0
  };
71
0
  KeyType Key = {AltName.upper()};
72
0
  auto Table = ArrayRef(Index);
73
0
  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
74
0
    [](const IndexType &LHS, const KeyType &RHS) {
75
0
      int CmpAltName = StringRef(LHS.AltName).compare(RHS.AltName);
76
0
      if (CmpAltName < 0) return true;
77
0
      if (CmpAltName > 0) return false;
78
0
      return false;
79
0
    });
80
81
0
  if (Idx == Table.end() ||
82
0
      Key.AltName != Idx->AltName)
83
0
    return nullptr;
84
0
  return &ASITagsList[Idx->_index];
85
0
}
86
87
0
const ASITag *lookupASITagByName(StringRef Name) {
88
0
  struct IndexType {
89
0
    const char * Name;
90
0
    unsigned _index;
91
0
  };
92
0
  static const struct IndexType Index[] = {
93
0
    { "ASI_AIUP", 2 },
94
0
    { "ASI_AIUP_L", 4 },
95
0
    { "ASI_AIUS", 3 },
96
0
    { "ASI_AIUS_L", 5 },
97
0
    { "ASI_N", 0 },
98
0
    { "ASI_N_L", 1 },
99
0
    { "ASI_P", 6 },
100
0
    { "ASI_PNF", 8 },
101
0
    { "ASI_PNF_L", 12 },
102
0
    { "ASI_P_L", 10 },
103
0
    { "ASI_S", 7 },
104
0
    { "ASI_SNF", 9 },
105
0
    { "ASI_SNF_L", 13 },
106
0
    { "ASI_S_L", 11 },
107
0
  };
108
109
0
  struct KeyType {
110
0
    std::string Name;
111
0
  };
112
0
  KeyType Key = {Name.upper()};
113
0
  auto Table = ArrayRef(Index);
114
0
  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
115
0
    [](const IndexType &LHS, const KeyType &RHS) {
116
0
      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
117
0
      if (CmpName < 0) return true;
118
0
      if (CmpName > 0) return false;
119
0
      return false;
120
0
    });
121
122
0
  if (Idx == Table.end() ||
123
0
      Key.Name != Idx->Name)
124
0
    return nullptr;
125
0
  return &ASITagsList[Idx->_index];
126
0
}
127
#endif
128
129
#undef GET_ASITagsList_DECL
130
#undef GET_ASITagsList_IMPL