Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / env / fnx / clib / report / include / Hash.h
CommitLineData
86530b38
AT
1/*
2* ========== Copyright Header Begin ==========================================
3*
4* OpenSPARC T2 Processor File: Hash.h
5* Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
6* 4150 Network Circle, Santa Clara, California 95054, U.S.A.
7*
8* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9*
10* This program is free software; you can redistribute it and/or modify
11* it under the terms of the GNU General Public License as published by
12* the Free Software Foundation; version 2 of the License.
13*
14* This program is distributed in the hope that it will be useful,
15* but WITHOUT ANY WARRANTY; without even the implied warranty of
16* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17* GNU General Public License for more details.
18*
19* You should have received a copy of the GNU General Public License
20* along with this program; if not, write to the Free Software
21* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22*
23* For the avoidance of doubt, and except that if any non-GPL license
24* choice is available it will apply instead, Sun elects to use only
25* the General Public License version 2 (GPLv2) at this time for any
26* software where a choice of GPL license versions is made
27* available with the language indicating that GPLv2 or any later version
28* may be used, or where a choice of which version of the GPL is applied is
29* otherwise unspecified.
30*
31* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
32* CA 95054 USA or visit www.sun.com if you need additional information or
33* have any questions.
34*
35*
36* ========== Copyright Header End ============================================
37*/
38#ifndef _HASH_H
39#define _HASH_H
40
41//#include "stdio.h"
42
43 /* A page of the Hash class can hold 2*M entries before splitting. */
44 /* .. was 4099 (78653) */
45#define _HASH_SIZE 4099
46
47/* CRC LOOKUP TABLE
48 * ================
49 * The following CRC lookup table was generated automagically
50 * by the Rocksoft^tm Model CRC Algorithm Table Generation
51 * Program V1.0 using the following model parameters:
52 *
53 * Width : 4 bytes.
54 * Poly : 0x04C11DB7L
55 * Reverse : TRUE.
56 */
57static const unsigned long crctab32[256] =
58{
59 0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL,
60 0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L,
61 0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L,
62 0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L, 0x90BF1D91L,
63 0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL,
64 0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L,
65 0x136C9856L, 0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL,
66 0x14015C4FL, 0x63066CD9L, 0xFA0F3D63L, 0x8D080DF5L,
67 0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L, 0xA2677172L,
68 0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL,
69 0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L,
70 0x32D86CE3L, 0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L,
71 0x26D930ACL, 0x51DE003AL, 0xC8D75180L, 0xBFD06116L,
72 0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L, 0xB8BDA50FL,
73 0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L,
74 0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL,
75 0x76DC4190L, 0x01DB7106L, 0x98D220BCL, 0xEFD5102AL,
76 0x71B18589L, 0x06B6B51FL, 0x9FBFE4A5L, 0xE8B8D433L,
77 0x7807C9A2L, 0x0F00F934L, 0x9609A88EL, 0xE10E9818L,
78 0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L,
79 0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL,
80 0x6C0695EDL, 0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L,
81 0x65B0D9C6L, 0x12B7E950L, 0x8BBEB8EAL, 0xFCB9887CL,
82 0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L, 0xFBD44C65L,
83 0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L,
84 0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL,
85 0x4369E96AL, 0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L,
86 0x44042D73L, 0x33031DE5L, 0xAA0A4C5FL, 0xDD0D7CC9L,
87 0x5005713CL, 0x270241AAL, 0xBE0B1010L, 0xC90C2086L,
88 0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL,
89 0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L,
90 0x59B33D17L, 0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL,
91 0xEDB88320L, 0x9ABFB3B6L, 0x03B6E20CL, 0x74B1D29AL,
92 0xEAD54739L, 0x9DD277AFL, 0x04DB2615L, 0x73DC1683L,
93 0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L,
94 0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L,
95 0xF00F9344L, 0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL,
96 0xF762575DL, 0x806567CBL, 0x196C3671L, 0x6E6B06E7L,
97 0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL, 0x67DD4ACCL,
98 0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L,
99 0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L,
100 0xD1BB67F1L, 0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL,
101 0xD80D2BDAL, 0xAF0A1B4CL, 0x36034AF6L, 0x41047A60L,
102 0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL, 0x4669BE79L,
103 0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L,
104 0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL,
105 0xC5BA3BBEL, 0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L,
106 0xC2D7FFA7L, 0xB5D0CF31L, 0x2CD99E8BL, 0x5BDEAE1DL,
107 0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL, 0x026D930AL,
108 0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L,
109 0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L,
110 0x92D28E9BL, 0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L,
111 0x86D3D2D4L, 0xF1D4E242L, 0x68DDB3F8L, 0x1FDA836EL,
112 0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L, 0x18B74777L,
113 0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL,
114 0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L,
115 0xA00AE278L, 0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L,
116 0xA7672661L, 0xD06016F7L, 0x4969474DL, 0x3E6E77DBL,
117 0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L, 0x37D83BF0L,
118 0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L,
119 0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L,
120 0xBAD03605L, 0xCDD70693L, 0x54DE5729L, 0x23D967BFL,
121 0xB3667A2EL, 0xC4614AB8L, 0x5D681B02L, 0x2A6F2B94L,
122 0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL
123};
124
125/*
126 * FUNCTION: unsigned long calc_crc (char *buffer, int len)
127 *
128 * This calculates the CRC of a piece of memory that
129 * starts at the address passed in buffer and continues
130 * for the ammount of memory specified in len.
131 *
132 * The CRC is generated over a range of bytes of data
133 * and is calculated as a 32 bit value.
134 *
135 * The algorithm is a standardd CRC algorithm and is the
136 * same one used for the intial generation that we are
137 * testing against.
138 *
139 *
140 * Parameters:
141 *
142 * buffer - a pointer to the address to start calculations
143 * len - length of memory to perfoem calulations on
144 *
145 * Return:
146 *
147 * The calculated CRC Value
148 *
149 * States Affected: NONE
150 *
151 */
152static unsigned long
153calc_crc (const char *buffer, int len) {
154 unsigned long crc = 0xFFFFFFFF; // Initialize CRC value
155
156 while (len--) { // Recalculate for each address
157 crc = (crc >> 8) ^ crctab32[(crc ^ *buffer++) & 0xFF];
158 }
159
160 crc = crc ^ 0xFFFFFFFF;
161 return (crc);
162}
163
164
165//================================================================
166//
167//
168//
169class HashValueListNode {
170 private:
171 int mipname_len;
172
173 public:
174 ReportType report_type;
175 ReportClass *report_class;
176 char *mip_name;
177 HashValueListNode *next;
178 HashValueListNode *next_overall;
179
180 HashValueListNode() {
181 printf("HashValueListNode::HashValueListNode: In default constructor\n");
182 }
183
184 HashValueListNode(const char* mip_name, ReportType report_type) {
185 mipname_len = strlen(mip_name);
186 this->mip_name = new char[mipname_len+1];
187 strcpy(this->mip_name, mip_name);
188 this->mip_name[mipname_len+1] = '\0';
189 this->report_type = report_type;
190 next = NULL;
191 next_overall = NULL;
192 report_class = NULL;
193 }
194
195 unsigned long Hash() const {
196 return calc_crc(mip_name, mipname_len);
197 }
198
199 ~HashValueListNode() {
200 delete mip_name;
201 }
202
203};
204
205
206//================================================================
207//
208// class HashTable
209//
210class HashTable {
211 private:
212 HashValueListNode *valueNodes[_HASH_SIZE];
213 //HashValueListNode **valueNodes;
214 HashValueListNode *most_recent_inserted; // link the buckets for easy perusal
215 HashValueListNode *next_walk;
216
217 public:
218 HashTable() {
219 //valueNodes = new HashValueListNode* [_HASH_SIZE];
220 for (int i = 0; i < _HASH_SIZE; i++) {
221 valueNodes[i] = NULL;
222 }
223 most_recent_inserted = NULL;
224 next_walk = NULL;
225 }
226 void insert(HashValueListNode *node);
227 const HashValueListNode* lookup(const HashValueListNode& node);
228 void start_walk() { next_walk = most_recent_inserted; }
229 const HashValueListNode* next_element();
230};
231
232#endif // #ifndef _HASH_H
233
234