@@ -62,13 +62,15 @@ HRESULT Library_nf_system_collections_System_Collections_Hashtable::Clear___VOID
6262 NANOCLR_NOCLEANUP ();
6363}
6464
65- HRESULT Library_nf_system_collections_System_Collections_Hashtable::Contains___BOOLEAN__OBJECT (CLR_RT_StackFrame &stack)
65+ HRESULT Library_nf_system_collections_System_Collections_Hashtable::ContainsNative___BOOLEAN__OBJECT__I4 (
66+ CLR_RT_StackFrame &stack)
6667{
6768 NANOCLR_HEADER ();
6869
6970 int32_t entry = 0 ;
7071 int32_t bucketNumber;
7172 uint32_t hashcode;
73+ int32_t keyHashCode;
7274 uint32_t seed;
7375 uint32_t incr;
7476 int32_t bucketsLength;
@@ -85,10 +87,12 @@ HRESULT Library_nf_system_collections_System_Collections_Hashtable::Contains___B
8587 key = stack.Arg1 ().Dereference ();
8688 FAULT_ON_NULL_ARG (key);
8789
90+ keyHashCode = stack.Arg2 ().NumericByRef ().s4 ;
91+
8892 buckets = pThis[FIELD___buckets].DereferenceArray ();
8993 bucketsLength = buckets->m_numOfElements ;
9094
91- hashcode = InitHash (key , bucketsLength, &seed, &incr);
95+ hashcode = InitHash (keyHashCode , bucketsLength, &seed, &incr);
9296
9397 bucketNumber = (int )(seed % (uint32_t )bucketsLength);
9498
@@ -117,13 +121,15 @@ HRESULT Library_nf_system_collections_System_Collections_Hashtable::Contains___B
117121 NANOCLR_NOCLEANUP ();
118122}
119123
120- HRESULT Library_nf_system_collections_System_Collections_Hashtable::Remove___VOID__OBJECT (CLR_RT_StackFrame &stack)
124+ HRESULT Library_nf_system_collections_System_Collections_Hashtable::RemoveNative___VOID__OBJECT__I4 (
125+ CLR_RT_StackFrame &stack)
121126{
122127 NANOCLR_HEADER ();
123128
124129 int32_t entry = 0 ;
125130 int32_t bucketNumber;
126131 uint32_t hashcode;
132+ int32_t keyHashCode;
127133 uint32_t seed;
128134 uint32_t incr;
129135 int32_t bucketsLength;
@@ -140,10 +146,12 @@ HRESULT Library_nf_system_collections_System_Collections_Hashtable::Remove___VOI
140146 key = stack.Arg1 ().Dereference ();
141147 FAULT_ON_NULL_ARG (key);
142148
149+ keyHashCode = stack.Arg2 ().NumericByRef ().s4 ;
150+
143151 buckets = pThis[FIELD___buckets].DereferenceArray ();
144152 bucketsLength = buckets->m_numOfElements ;
145153
146- hashcode = InitHash (key , bucketsLength, &seed, &incr);
154+ hashcode = InitHash (keyHashCode , bucketsLength, &seed, &incr);
147155
148156 bucketNumber = (int )(seed % (uint32_t )bucketsLength);
149157
@@ -178,7 +186,7 @@ HRESULT Library_nf_system_collections_System_Collections_Hashtable::Remove___VOI
178186 NANOCLR_NOCLEANUP ();
179187}
180188
181- HRESULT Library_nf_system_collections_System_Collections_Hashtable::InsertNative___VOID__OBJECT__OBJECT__BOOLEAN (
189+ HRESULT Library_nf_system_collections_System_Collections_Hashtable::InsertNative___VOID__OBJECT__OBJECT__BOOLEAN__I4 (
182190 CLR_RT_StackFrame &stack)
183191{
184192 NANOCLR_HEADER ();
@@ -187,6 +195,7 @@ HRESULT Library_nf_system_collections_System_Collections_Hashtable::InsertNative
187195 uint32_t entry = 0 ;
188196 int32_t bucketNumber;
189197 uint32_t hashcode;
198+ int32_t keyHashCode;
190199 uint32_t seed;
191200 uint32_t incr;
192201 uint32_t bucketsLength;
@@ -208,6 +217,8 @@ HRESULT Library_nf_system_collections_System_Collections_Hashtable::InsertNative
208217
209218 add = (bool )stack.Arg3 ().NumericByRef ().u1 ;
210219
220+ keyHashCode = stack.Arg4 ().NumericByRef ().s4 ;
221+
211222 if (pThis[FIELD___count].NumericByRef ().s4 >= pThis[FIELD___loadsize].NumericByRef ().s4 )
212223 {
213224 NANOCLR_CHECK_HRESULT (Expand (stack));
@@ -216,7 +227,7 @@ HRESULT Library_nf_system_collections_System_Collections_Hashtable::InsertNative
216227 buckets = pThis[FIELD___buckets].DereferenceArray ();
217228 bucketsLength = buckets->m_numOfElements ;
218229
219- hashcode = InitHash (key , bucketsLength, &seed, &incr);
230+ hashcode = InitHash (keyHashCode , bucketsLength, &seed, &incr);
220231
221232 bucketNumber = (int )(seed % bucketsLength);
222233
@@ -286,13 +297,15 @@ HRESULT Library_nf_system_collections_System_Collections_Hashtable::InsertNative
286297 NANOCLR_NOCLEANUP ();
287298}
288299
289- HRESULT Library_nf_system_collections_System_Collections_Hashtable::GetNative___OBJECT__OBJECT (CLR_RT_StackFrame &stack)
300+ HRESULT Library_nf_system_collections_System_Collections_Hashtable::GetNative___OBJECT__OBJECT__I4 (
301+ CLR_RT_StackFrame &stack)
290302{
291303 NANOCLR_HEADER ();
292304
293305 int32_t entry = 0 ;
294306 int32_t bucketNumber;
295307 uint32_t hashcode;
308+ int32_t keyHashCode;
296309 uint32_t seed;
297310 uint32_t incr;
298311 int32_t bucketsLength;
@@ -309,10 +322,12 @@ HRESULT Library_nf_system_collections_System_Collections_Hashtable::GetNative___
309322 key = stack.Arg1 ().Dereference ();
310323 FAULT_ON_NULL_ARG (key);
311324
325+ keyHashCode = stack.Arg2 ().NumericByRef ().s4 ;
326+
312327 buckets = pThis[FIELD___buckets].DereferenceArray ();
313328 bucketsLength = buckets->m_numOfElements ;
314329
315- hashcode = InitHash (key , bucketsLength, &seed, &incr);
330+ hashcode = InitHash (keyHashCode , bucketsLength, &seed, &incr);
316331
317332 bucketNumber = (int )(seed % (uint32_t )bucketsLength);
318333
@@ -485,15 +500,13 @@ HRESULT Library_nf_system_collections_System_Collections_Hashtable::Expand(CLR_R
485500}
486501
487502uint32_t Library_nf_system_collections_System_Collections_Hashtable::InitHash (
488- CLR_RT_HeapBlock *key ,
503+ const int32_t keyHashCode ,
489504 int32_t hashsize,
490505 uint32_t *seed,
491506 uint32_t *incr)
492507{
493- uint32_t hashcode;
508+ uint32_t hashcode = keyHashCode ;
494509
495- // compute hash code for key
496- hashcode = CLR_RT_HeapBlock::GetHashCode (key, true , 0 );
497510 *seed = hashcode;
498511
499512 // compute and store incr value
0 commit comments