1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by gen_builtin_symbols.py using data from builtin_variables.json and
3 // builtin_function_declarations.txt.
4 //
5 // Copyright 2020 The ANGLE Project Authors. All rights reserved.
6 // Use of this source code is governed by a BSD-style license that can be
7 // found in the LICENSE file.
8 //
9 // ImmutableString_ESSL_autogen.cpp: Wrapper for static or pool allocated char arrays, that are
10 // guaranteed to be valid and unchanged for the duration of the compilation. Implements
11 // mangledNameHash using perfect hash function from gen_builtin_symbols.py
12
13 #include "compiler/translator/ImmutableString.h"
14
operator <<(std::ostream & os,const sh::ImmutableString & str)15 std::ostream &operator<<(std::ostream &os, const sh::ImmutableString &str)
16 {
17 return os.write(str.data(), str.length());
18 }
19
20 #if defined(_MSC_VER)
21 # pragma warning(disable : 4309) // truncation of constant value
22 #endif
23
24 namespace
25 {
26
27 constexpr int mangledkT1[] = {1687, 1918, 1635, 89, 1810, 832, 422, 1932, 1379, 706,
28 1114, 534, 457, 343, 605, 691, 62, 1004, 626, 1437,
29 1528, 643, 320, 761, 1619, 653, 1176, 1843, 1558, 646,
30 1281, 751, 996, 1673, 6, 389, 1399};
31 constexpr int mangledkT2[] = {24, 908, 260, 250, 1791, 819, 1942, 1246, 344, 255,
32 830, 1865, 1511, 411, 312, 236, 326, 828, 951, 441,
33 1520, 422, 1792, 1138, 106, 1636, 763, 1503, 287, 149,
34 856, 1312, 1508, 1052, 251, 1939, 897};
35 constexpr int mangledkG[] = {
36 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 1354,
37 0, 0, 0, 0, 0, 0, 1121, 0, 1738, 0, 1207, 0, 0, 0, 0, 1720,
38 0, 0, 1097, 0, 0, 0, 0, 0, 0, 0, 1859, 0, 0, 0, 0, 0,
39 0, 0, 0, 1604, 0, 0, 0, 215, 0, 1963, 0, 0, 1397, 0, 52, 0,
40 0, 0, 0, 0, 0, 1606, 0, 0, 0, 0, 350, 0, 1235, 212, 0, 0,
41 0, 0, 0, 0, 1595, 0, 0, 602, 16, 0, 713, 1126, 0, 0, 0, 0,
42 0, 1739, 0, 0, 474, 0, 0, 1520, 0, 1856, 0, 0, 0, 0, 0, 0,
43 1572, 0, 0, 0, 0, 1368, 0, 119, 0, 1818, 0, 797, 0, 0, 0, 0,
44 0, 0, 0, 824, 0, 0, 0, 0, 0, 0, 1667, 0, 0, 1956, 0, 149,
45 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423,
46 0, 0, 1315, 1801, 0, 0, 969, 0, 0, 0, 0, 229, 0, 831, 0, 190,
47 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 1928, 59, 720, 897, 0,
48 0, 0, 552, 0, 0, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0,
49 0, 0, 922, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 1044, 1407, 0,
50 0, 54, 0, 0, 697, 0, 630, 980, 300, 0, 450, 693, 0, 0, 0, 0,
51 0, 0, 769, 0, 11, 0, 1728, 0, 0, 1591, 723, 0, 1508, 1928, 0, 0,
52 154, 0, 1088, 0, 1573, 0, 0, 0, 0, 98, 0, 708, 0, 0, 207, 1198,
53 0, 0, 0, 1649, 404, 0, 0, 0, 0, 0, 267, 0, 242, 130, 0, 0,
54 99, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 949,
55 0, 0, 112, 959, 536, 695, 1237, 0, 0, 179, 1911, 0, 0, 0, 0, 1812,
56 0, 0, 0, 0, 0, 816, 532, 624, 0, 0, 0, 0, 0, 0, 810, 0,
57 0, 973, 1068, 0, 0, 0, 127, 0, 0, 1201, 0, 1866, 0, 0, 0, 0,
58 628, 0, 0, 0, 0, 1910, 0, 1976, 835, 0, 405, 0, 0, 1220, 0, 1923,
59 305, 0, 0, 0, 955, 851, 0, 0, 0, 997, 0, 0, 0, 0, 1680, 395,
60 2, 0, 969, 668, 1411, 1876, 951, 0, 0, 0, 0, 0, 0, 0, 0, 0,
61 0, 873, 0, 0, 701, 0, 0, 525, 998, 1713, 0, 0, 537, 0, 0, 0,
62 0, 0, 0, 0, 1571, 0, 327, 0, 0, 1409, 1757, 0, 647, 1681, 0, 1861,
63 0, 0, 78, 0, 306, 523, 23, 1412, 1225, 223, 0, 0, 75, 0, 948, 0,
64 167, 1394, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 332, 1156, 130, 0,
65 0, 370, 282, 0, 0, 420, 0, 297, 553, 0, 0, 0, 777, 0, 0, 9,
66 192, 537, 1909, 1153, 67, 0, 1881, 823, 0, 0, 10, 0, 603, 0, 187, 0,
67 0, 1604, 798, 827, 1474, 1302, 0, 1349, 893, 0, 1700, 1194, 0, 1444, 0, 0,
68 458, 680, 973, 0, 0, 0, 1195, 0, 0, 0, 220, 1053, 100, 731, 1797, 0,
69 0, 0, 680, 0, 215, 0, 1580, 470, 0, 0, 177, 685, 0, 0, 52, 0,
70 1783, 1547, 11, 446, 0, 523, 0, 0, 0, 1650, 787, 0, 1965, 0, 744, 0,
71 0, 0, 126, 0, 30, 0, 0, 0, 0, 1364, 0, 156, 1580, 1320, 0, 333,
72 0, 0, 0, 0, 0, 0, 699, 0, 990, 368, 1812, 0, 105, 0, 0, 148,
73 0, 0, 0, 759, 0, 310, 0, 0, 0, 0, 0, 0, 0, 1894, 697, 137,
74 211, 913, 328, 861, 1462, 0, 0, 885, 0, 0, 438, 0, 739, 1328, 647, 1898,
75 0, 268, 0, 0, 0, 731, 0, 1349, 1872, 0, 0, 0, 205, 0, 0, 0,
76 0, 0, 1030, 562, 0, 297, 0, 629, 835, 921, 0, 0, 344, 1740, 0, 0,
77 495, 0, 371, 0, 283, 457, 908, 361, 0, 1806, 1411, 863, 0, 0, 796, 146,
78 0, 0, 1590, 0, 0, 0, 1832, 0, 0, 0, 904, 901, 81, 938, 0, 896,
79 903, 1408, 17, 918, 0, 1827, 0, 1737, 0, 0, 1190, 0, 0, 0, 0, 0,
80 0, 1744, 0, 514, 666, 674, 0, 0, 881, 90, 1423, 515, 473, 910, 0, 0,
81 1134, 0, 425, 0, 609, 189, 682, 0, 1699, 0, 628, 156, 0, 0, 0, 0,
82 1124, 0, 0, 0, 1895, 419, 0, 0, 1767, 0, 101, 0, 0, 0, 425, 749,
83 127, 1690, 0, 1900, 0, 533, 1100, 0, 1879, 0, 0, 655, 0, 116, 0, 1734,
84 1051, 0, 521, 0, 0, 1730, 0, 1449, 0, 0, 0, 0, 1903, 0, 0, 311,
85 1006, 0, 0, 1576, 551, 142, 0, 677, 1364, 1515, 0, 0, 0, 0, 0, 1725,
86 1469, 0, 0, 351, 0, 0, 0, 793, 0, 0, 541, 1934, 636, 1010, 0, 1370,
87 0, 0, 0, 618, 1334, 1839, 0, 1002, 0, 431, 1440, 635, 0, 920, 0, 0,
88 0, 403, 0, 1945, 0, 74, 0, 0, 0, 1466, 1095, 0, 981, 0, 0, 0,
89 262, 0, 0, 1495, 0, 0, 0, 0, 1534, 1933, 0, 46, 0, 0, 0, 1393,
90 398, 1105, 0, 735, 371, 115, 39, 613, 255, 0, 1906, 0, 0, 0, 1844, 946,
91 242, 0, 0, 129, 0, 1856, 1145, 1186, 0, 939, 1693, 0, 1581, 0, 1961, 0,
92 65, 139, 984, 1401, 0, 0, 1576, 142, 1937, 0, 0, 987, 130, 889, 0, 347,
93 975, 1463, 0, 456, 1825, 1232, 103, 647, 1609, 0, 0, 0, 123, 267, 642, 0,
94 718, 0, 893, 0, 0, 1198, 602, 285, 1670, 105, 0, 0, 1247, 0, 872, 0,
95 113, 236, 0, 1227, 1217, 0, 0, 391, 0, 1959, 729, 700, 0, 1011, 0, 0,
96 0, 315, 283, 1897, 238, 0, 598, 687, 0, 0, 857, 0, 0, 637, 139, 0,
97 0, 0, 980, 695, 106, 0, 373, 269, 0, 774, 757, 0, 0, 1022, 0, 746,
98 1802, 2, 509, 0, 454, 0, 0, 934, 1615, 0, 0, 77, 0, 355, 0, 1518,
99 1138, 1333, 0, 0, 0, 0, 0, 0, 471, 441, 0, 396, 0, 682, 246, 894,
100 0, 1784, 1647, 677, 0, 847, 0, 0, 0, 0, 0, 0, 327, 0, 203, 1171,
101 266, 1459, 919, 1091, 1126, 515, 0, 1656, 469, 183, 0, 1797, 0, 809, 0, 1523,
102 71, 0, 1387, 0, 347, 0, 539, 301, 56, 110, 21, 1776, 0, 0, 0, 0,
103 0, 0, 0, 0, 0, 274, 0, 298, 1875, 0, 1362, 448, 0, 1052, 1964, 0,
104 0, 678, 0, 0, 501, 0, 0, 765, 923, 0, 539, 410, 885, 0, 261, 1240,
105 0, 446, 339, 876, 0, 616, 1186, 0, 1454, 0, 0, 876, 653, 87, 78, 406,
106 938, 1335, 0, 0, 6, 0, 0, 0, 1594, 0, 1072, 83, 0, 0, 0, 0,
107 0, 1152, 0, 995, 0, 346, 0, 366, 305, 1274, 0, 163, 0, 0, 1756, 0,
108 363, 234, 0, 280, 0, 0, 1660, 897, 0, 125, 1548, 312, 1290, 907, 0, 80,
109 0, 714, 161, 0, 0, 264, 0, 0, 0, 534, 0, 216, 0, 0, 0, 638,
110 0, 49, 0, 803, 0, 1441, 0, 475, 0, 0, 137, 1965, 1181, 0, 883, 0,
111 501, 13, 1693, 0, 924, 0, 0, 0, 536, 248, 0, 672, 0, 0, 513, 908,
112 1045, 0, 142, 374, 128, 0, 210, 1580, 833, 1602, 278, 660, 0, 0, 303, 0,
113 1569, 0, 0, 200, 0, 0, 1085, 0, 0, 0, 1896, 0, 1929, 0, 0, 451,
114 791, 0, 147, 412, 1221, 0, 970, 410, 0, 50, 13, 939, 93, 0, 774, 90,
115 0, 0, 820, 71, 987, 948, 0, 1779, 0, 1318, 475, 1759, 0, 0, 0, 104,
116 0, 0, 467, 12, 1410, 0, 909, 723, 143, 1853, 1481, 0, 773, 0, 107, 0,
117 491, 656, 0, 0, 0, 1778, 1468, 630, 0, 316, 0, 1866, 0, 1139, 919, 1848,
118 0, 1296, 4, 0, 0, 0, 633, 987, 0, 0, 0, 683, 133, 0, 728, 997,
119 190, 230, 1861, 0, 585, 634, 0, 1326, 895, 1335, 0, 0, 0, 422, 667, 221,
120 79, 1937, 0, 0, 457, 845, 1736, 500, 903, 498, 370, 1635, 1409, 9, 15, 0,
121 0, 522, 0, 518, 118, 841, 417, 0, 929, 827, 802, 0, 0, 0, 184, 1639,
122 0, 0, 1731, 261, 0, 0, 0, 886, 454, 0, 1742, 3, 0, 0, 111, 0,
123 0, 0, 552, 0, 0, 376, 966, 0, 0, 516, 254, 900, 0, 0, 0, 0,
124 499, 0, 0, 0, 889, 705, 0, 0, 255, 0, 0, 1907, 0, 1898, 0, 814,
125 0, 605, 0, 412, 222, 790, 335, 0, 0, 142, 794, 0, 0, 972, 0, 0,
126 628, 0, 109, 1553, 1153, 335, 748, 1512, 892, 1355, 1943, 801, 115, 0, 934, 228,
127 428, 0, 0, 0, 255, 0, 1865, 1531, 0, 0, 0, 0, 962, 979, 1268, 237,
128 108, 673, 0, 1560, 0, 0, 712, 1749, 0, 651, 289, 0, 108, 0, 157, 1623,
129 0, 120, 77, 990, 1706, 350, 567, 1837, 1488, 0, 169, 1498, 0, 630, 217, 200,
130 0, 0, 1818, 0, 0, 0, 0, 0, 0, 270, 1599, 632, 1505, 172, 963, 546,
131 0, 613, 929, 0, 0, 214, 1539, 0, 82, 1768, 482, 0, 0, 1957, 0, 96,
132 970, 398, 797, 688, 0, 723, 1379, 952, 661, 0, 1897, 0, 1675, 348, 0, 0,
133 0, 1027, 0, 0, 0, 0, 865, 1550, 1452, 0, 537, 0, 64, 0, 965, 408,
134 1303, 1236, 871, 0, 0, 27, 0, 0, 436, 493, 1723, 577, 1555, 0, 1868, 0,
135 400, 0, 0, 0, 0, 0, 0, 597, 303, 745, 790, 629, 1482, 1010, 737, 0,
136 0, 0, 0, 0, 0, 0, 949, 63, 1460, 753, 0, 0, 0, 435, 326, 0,
137 130, 0, 82, 703, 0, 1759, 826, 0, 0, 0, 0, 1889, 0, 114, 607, 390,
138 506, 0, 557, 1799, 921, 560, 5, 1109, 0, 430, 529, 0, 350, 573, 1399, 0,
139 1050, 592, 0, 0, 118, 446, 830, 1365, 501, 1289, 376, 232, 0, 90, 1956, 0,
140 723, 123, 0, 166, 609, 744, 0, 0, 0, 0, 956, 62, 0, 302, 530, 288,
141 0, 727, 0, 1023, 0, 1388, 1335, 0, 0, 880, 496, 315, 1521, 478, 667, 898,
142 86, 1735, 0, 1683, 178, 566, 1495, 27, 0, 0, 0, 0, 245, 266, 394, 73,
143 0, 780, 280, 577, 0, 1902, 631, 0, 1922, 60, 358, 0, 0, 836, 0, 937,
144 0, 75, 0, 526, 698, 0, 742, 1253, 0, 302, 1938, 506, 0, 862, 41, 0,
145 0, 0, 746, 102, 696, 0, 0, 473, 159, 161, 1885, 0, 15, 1035, 0, 275,
146 0, 301, 19, 0, 762, 0, 563, 286, 1117, 0, 1944, 184, 0, 1175, 760, 0,
147 0, 1737, 0, 86, 1429, 1594, 1868, 440, 560, 1114, 0, 521, 0, 599, 808, 0,
148 0, 1229, 331, 0, 316, 649, 492, 514, 425, 0, 563, 870, 479, 684, 549, 0,
149 1736, 976, 595, 786, 0, 0, 63, 0, 929, 664, 0, 0, 98, 0, 819, 590,
150 0, 1612, 0, 1444, 0, 0, 184, 297, 882, 1322, 702, 219, 1053, 247, 0, 393,
151 1705, 41, 874, 231, 0, 55, 236, 0, 411, 0, 0, 539, 0, 0, 0, 620,
152 878, 942, 329, 1729, 0, 782, 558, 0, 87, 0, 1844, 719, 0, 0, 0, 1261,
153 0, 0, 0, 234, 0, 0, 109, 351, 0, 0, 187, 0, 0, 1944, 852, 0,
154 1703, 68, 958, 5, 296, 0, 1809, 0, 427, 0, 1731, 1757, 0, 357, 1876, 697,
155 174, 0, 51, 0, 0, 0, 30, 0, 0, 0, 0, 415, 824, 1251, 0, 1648,
156 675, 389, 0, 597, 0, 724, 0, 0, 0, 0, 252, 923, 408, 0, 296, 1143,
157 0, 148, 1573, 0, 384, 893, 0, 772, 1843, 0, 375, 232, 882, 0, 619, 0,
158 690, 0, 1374, 516, 356, 0, 1889, 0, 2, 0, 0, 0, 0, 492, 86, 3,
159 0, 953, 1190, 0, 307, 433, 0, 0, 1104};
160
MangledHashG(const char * key,const int * T)161 int MangledHashG(const char *key, const int *T)
162 {
163 int sum = 0;
164
165 for (int i = 0; key[i] != '\0'; i++)
166 {
167 sum += T[i] * key[i];
168 sum %= 1977;
169 }
170 return mangledkG[sum];
171 }
172
MangledPerfectHash(const char * key)173 int MangledPerfectHash(const char *key)
174 {
175 if (strlen(key) > 37)
176 return 0;
177
178 return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 1977;
179 }
180
181 constexpr int unmangledkT1[] = {163, 200, 23, 188, 228, 164, 235, 223, 155, 227, 190, 135, 61,
182 36, 102, 226, 161, 44, 69, 138, 105, 177, 44, 180, 41, 256};
183 constexpr int unmangledkT2[] = {185, 17, 279, 66, 39, 191, 246, 40, 267, 239, 253, 57, 237,
184 78, 238, 45, 82, 49, 8, 23, 206, 264, 108, 23, 272, 147};
185 constexpr int unmangledkG[] = {
186 0, 0, 0, 0, 0, 88, 0, 159, 0, 0, 56, 0, 142, 0, 0, 0, 80, 0, 0,
187 0, 24, 0, 0, 24, 64, 178, 0, 0, 0, 0, 0, 0, 31, 16, 129, 0, 0, 0,
188 0, 267, 0, 120, 0, 0, 84, 0, 270, 263, 101, 0, 77, 149, 0, 0, 0, 0, 0,
189 0, 0, 0, 0, 0, 0, 87, 82, 0, 113, 0, 0, 255, 92, 0, 155, 136, 0, 25,
190 52, 0, 95, 0, 91, 0, 0, 0, 169, 253, 9, 16, 104, 6, 0, 0, 0, 229, 0,
191 102, 254, 40, 0, 75, 6, 117, 253, 0, 0, 138, 0, 147, 0, 0, 0, 0, 0, 0,
192 0, 0, 47, 0, 0, 72, 0, 149, 0, 272, 62, 128, 0, 71, 169, 106, 0, 121, 57,
193 279, 0, 0, 0, 0, 98, 0, 0, 251, 55, 0, 12, 0, 143, 0, 201, 243, 58, 207,
194 0, 160, 52, 0, 0, 0, 0, 3, 0, 190, 0, 22, 0, 0, 67, 10, 56, 0, 268,
195 259, 151, 112, 0, 52, 145, 19, 104, 0, 99, 0, 0, 255, 118, 61, 0, 16, 83, 0,
196 0, 54, 16, 15, 141, 21, 0, 259, 145, 186, 92, 253, 1, 254, 97, 0, 15, 0, 212,
197 111, 18, 215, 50, 0, 0, 27, 36, 59, 157, 256, 272, 0, 267, 180, 0, 31, 0, 13,
198 0, 208, 109, 0, 0, 279, 13, 0, 0, 67, 0, 65, 84, 0, 215, 0, 0, 176, 131,
199 0, 136, 0, 273, 235, 0, 251, 43, 35, 251, 118, 49, 39, 66, 0, 180, 87, 0, 62,
200 191, 0, 8, 158, 203, 196, 58, 185, 136, 139, 126, 0, 0, 0, 0};
201
UnmangledHashG(const char * key,const int * T)202 int UnmangledHashG(const char *key, const int *T)
203 {
204 int sum = 0;
205
206 for (int i = 0; key[i] != '\0'; i++)
207 {
208 sum += T[i] * key[i];
209 sum %= 281;
210 }
211 return unmangledkG[sum];
212 }
213
UnmangledPerfectHash(const char * key)214 int UnmangledPerfectHash(const char *key)
215 {
216 if (strlen(key) > 26)
217 return 0;
218
219 return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 281;
220 }
221
222 } // namespace
223
224 namespace sh
225 {
226
227 template <>
228 const size_t ImmutableString::FowlerNollVoHash<4>::kFnvPrime = 16777619u;
229
230 template <>
231 const size_t ImmutableString::FowlerNollVoHash<4>::kFnvOffsetBasis = 0x811c9dc5u;
232
233 template <>
234 const size_t ImmutableString::FowlerNollVoHash<8>::kFnvPrime =
235 static_cast<size_t>(1099511628211ull);
236
237 template <>
238 const size_t ImmutableString::FowlerNollVoHash<8>::kFnvOffsetBasis =
239 static_cast<size_t>(0xcbf29ce484222325ull);
240
mangledNameHash() const241 uint32_t ImmutableString::mangledNameHash() const
242 {
243 return MangledPerfectHash(data());
244 }
245
unmangledNameHash() const246 uint32_t ImmutableString::unmangledNameHash() const
247 {
248 return UnmangledPerfectHash(data());
249 }
250
251 } // namespace sh
252