diff c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotConstantPool.java @ 1434:72cfb36c6bb2

* enabled all jtt tests * added proxy that counts jni calls * honor hotspot stackshadowpages * constant pool caching * monitor enter/exit * arithmetic stubs (frem, drem, ...) * create stack values for debug info * some doc
author Lukas Stadler <lukas.stadler@oracle.com>
date Thu, 30 Sep 2010 17:19:48 -0700
parents 760213a60e8b
children 9e5e83ca2259
line wrap: on
line diff
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotConstantPool.java	Thu Sep 16 19:42:20 2010 -0700
+++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotConstantPool.java	Thu Sep 30 17:19:48 2010 -0700
@@ -17,6 +17,8 @@
  */
 package com.sun.hotspot.c1x;
 
+import java.util.*;
+
 import com.sun.cri.ci.*;
 import com.sun.cri.ri.*;
 
@@ -28,6 +30,7 @@
 public class HotSpotConstantPool implements RiConstantPool, CompilerObject {
 
     long vmId;
+    HashMap<Integer, Object> cache = new HashMap<Integer, Object>();
 
     public HotSpotConstantPool(long vmId) {
         this.vmId = vmId;
@@ -41,27 +44,52 @@
 
     @Override
     public Object lookupConstant(int cpi) {
-        return Compiler.getVMEntries().RiConstantPool_lookupConstant(vmId, cpi);
+        Object value = cache.get(cpi);
+        if (value == null) {
+            value = Compiler.getVMEntries().RiConstantPool_lookupConstant(vmId, cpi);
+            cache.put(cpi, value);
+        }
+        return value;
     }
 
     @Override
     public RiMethod lookupMethod(int cpi, int byteCode) {
-        return Compiler.getVMEntries().RiConstantPool_lookupMethod(vmId, cpi, (byte) byteCode);
+        RiMethod value = (RiMethod) cache.get(cpi);
+        if (value == null) {
+            value = Compiler.getVMEntries().RiConstantPool_lookupMethod(vmId, cpi, (byte) byteCode);
+            cache.put(cpi, value);
+        }
+        return value;
     }
 
     @Override
     public RiSignature lookupSignature(int cpi) {
-        return Compiler.getVMEntries().RiConstantPool_lookupSignature(vmId, cpi);
+        RiSignature value = (RiSignature) cache.get(cpi);
+        if (value == null) {
+            value = Compiler.getVMEntries().RiConstantPool_lookupSignature(vmId, cpi);
+            cache.put(cpi, value);
+        }
+        return value;
     }
 
     @Override
     public RiType lookupType(int cpi, int opcode) {
-        return Compiler.getVMEntries().RiConstantPool_lookupType(vmId, cpi);
+        RiType value = (RiType) cache.get(cpi);
+        if (value == null) {
+            value = Compiler.getVMEntries().RiConstantPool_lookupType(vmId, cpi);
+            cache.put(cpi, value);
+        }
+        return value;
     }
 
     @Override
     public RiField lookupField(int cpi, int opcode) {
-        return Compiler.getVMEntries().RiConstantPool_lookupField(vmId, cpi);
+        RiField value = (RiField) cache.get(cpi);
+        if (value == null) {
+            value = Compiler.getVMEntries().RiConstantPool_lookupField(vmId, cpi);
+            cache.put(cpi, value);
+        }
+        return value;
     }
 
 }