aboutsummaryrefslogtreecommitdiff
path: root/vm/Hash.cpp
diff options
context:
space:
mode:
authorYou Kim <you.kim72@gmail.com>2012-12-19 14:25:21 +0900
committerYou Kim <you.kim72@gmail.com>2012-12-19 14:35:37 +0900
commitc4119e180f83d8632c8c5647159c3092989eabeb (patch)
tree5a8bc181e78d2e34a9a9551b952e30b8a799db4f /vm/Hash.cpp
parent72d8557fbc8e82ded7d163a476ac5963a91c5128 (diff)
Optimize dvmHash Loops.
pHashTable->tableSize is working as volatile variable & is evaluated on every iteration. Help compiler to define tableSize as local(Register) variable. Change-Id: Iecdea3ecb810319d461ff3924ef21fd6c2d69d1e
Diffstat (limited to 'vm/Hash.cpp')
-rw-r--r--vm/Hash.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/vm/Hash.cpp b/vm/Hash.cpp
index bf57ae1b2..cd4530a5d 100644
--- a/vm/Hash.cpp
+++ b/vm/Hash.cpp
@@ -290,9 +290,11 @@ bool dvmHashTableRemove(HashTable* pHashTable, u4 itemHash, void* item)
*/
int dvmHashForeachRemove(HashTable* pHashTable, HashForeachRemoveFunc func)
{
- int i, val;
+ int i, val, tableSize;
- for (i = 0; i < pHashTable->tableSize; i++) {
+ tableSize = pHashTable->tableSize;
+
+ for (i = 0; i < tableSize; i++) {
HashEntry* pEnt = &pHashTable->pEntries[i];
if (pEnt->data != NULL && pEnt->data != HASH_TOMBSTONE) {
@@ -318,9 +320,11 @@ int dvmHashForeachRemove(HashTable* pHashTable, HashForeachRemoveFunc func)
*/
int dvmHashForeach(HashTable* pHashTable, HashForeachFunc func, void* arg)
{
- int i, val;
+ int i, val, tableSize;
- for (i = 0; i < pHashTable->tableSize; i++) {
+ tableSize = pHashTable->tableSize;
+
+ for (i = 0; i < tableSize; i++) {
HashEntry* pEnt = &pHashTable->pEntries[i];
if (pEnt->data != NULL && pEnt->data != HASH_TOMBSTONE) {