diff graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java @ 12429:5124eeec1a7b

split HotSpotRuntime into separate provider implementations moved HotSpot specific parts of HSAIL into new com.oracle.graal.hotspot.hsail project
author Doug Simon <doug.simon@oracle.com>
date Tue, 15 Oct 2013 14:14:06 +0200
parents 78e5badf4b8e
children 7080a96be216
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java	Tue Oct 15 13:03:54 2013 +0200
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java	Tue Oct 15 14:14:06 2013 +0200
@@ -58,8 +58,8 @@
 
     private static final Unsafe unsafe = Unsafe.getUnsafe();
 
-    public AMD64HotSpotBackend(HotSpotRuntime runtime, TargetDescription target) {
-        super(runtime, target);
+    public AMD64HotSpotBackend(HotSpotGraalRuntime graalRuntime, HotSpotProviders providers) {
+        super(graalRuntime, providers);
     }
 
     @Override
@@ -69,12 +69,12 @@
 
     @Override
     public FrameMap newFrameMap() {
-        return new AMD64FrameMap(getCodeCache(), target, getCodeCache().getRegisterConfig());
+        return new AMD64FrameMap(getCodeCache());
     }
 
     @Override
     public LIRGenerator newLIRGenerator(StructuredGraph graph, FrameMap frameMap, CallingConvention cc, LIR lir) {
-        return new AMD64HotSpotLIRGenerator(graph, getProviders(), target, frameMap, cc, lir);
+        return new AMD64HotSpotLIRGenerator(graph, getProviders(), getGraalRuntime().getConfig(), frameMap, cc, lir);
     }
 
     /**
@@ -154,7 +154,7 @@
 
     @Override
     protected AbstractAssembler createAssembler(FrameMap frameMap) {
-        return new AMD64MacroAssembler(target, frameMap.registerConfig);
+        return new AMD64MacroAssembler(getTarget(), frameMap.registerConfig);
     }
 
     @Override
@@ -174,7 +174,7 @@
         Stub stub = gen.getStub();
         AbstractAssembler masm = createAssembler(frameMap);
         HotSpotFrameContext frameContext = omitFrame ? null : new HotSpotFrameContext(stub != null);
-        TargetMethodAssembler tasm = new TargetMethodAssembler(target, getCodeCache(), getForeignCalls(), frameMap, masm, frameContext, compilationResult);
+        TargetMethodAssembler tasm = new TargetMethodAssembler(getCodeCache(), getForeignCalls(), frameMap, masm, frameContext, compilationResult);
         tasm.setFrameSize(frameMap.frameSize());
         StackSlot deoptimizationRescueSlot = gen.deoptimizationRescueSlot;
         if (deoptimizationRescueSlot != null && stub == null) {
@@ -235,23 +235,23 @@
         AMD64MacroAssembler asm = (AMD64MacroAssembler) tasm.asm;
         FrameMap frameMap = tasm.frameMap;
         RegisterConfig regConfig = frameMap.registerConfig;
-        HotSpotVMConfig config = getRuntime().config;
+        HotSpotVMConfig config = getGraalRuntime().getConfig();
         Label verifiedStub = new Label();
 
         // Emit the prefix
+        HotSpotProviders providers = getProviders();
         if (installedCodeOwner != null && !isStatic(installedCodeOwner.getModifiers())) {
             tasm.recordMark(Marks.MARK_UNVERIFIED_ENTRY);
-            CallingConvention cc = regConfig.getCallingConvention(JavaCallee, null, new JavaType[]{getRuntime().lookupJavaType(Object.class)}, target, false);
+            CallingConvention cc = regConfig.getCallingConvention(JavaCallee, null, new JavaType[]{providers.getMetaAccess().lookupJavaType(Object.class)}, getTarget(), false);
             Register inlineCacheKlass = rax; // see definition of IC_Klass in
                                              // c1_LIRAssembler_x86.cpp
             Register receiver = asRegister(cc.getArgument(0));
             AMD64Address src = new AMD64Address(receiver, config.hubOffset);
 
-            AMD64HotSpotLIRGenerator gen = (AMD64HotSpotLIRGenerator) lirGen;
-            AMD64HotSpotRuntime hr = ((AMD64HotSpotRuntime) gen.getCodeCache());
-            if (hr.useCompressedKlassPointers()) {
+            if (config.useCompressedClassPointers) {
                 Register register = r10;
-                AMD64HotSpotMove.decodeKlassPointer(asm, register, hr.heapBaseRegister(), src, config.narrowKlassBase, config.narrowOopBase, config.narrowKlassShift, config.logKlassAlignment);
+                AMD64HotSpotMove.decodeKlassPointer(asm, register, providers.getRegisters().getHeapBaseRegister(), src, config.narrowKlassBase, config.narrowOopBase, config.narrowKlassShift,
+                                config.logKlassAlignment);
                 asm.cmpq(inlineCacheKlass, register);
             } else {
                 asm.cmpq(inlineCacheKlass, src);
@@ -269,10 +269,11 @@
 
         HotSpotFrameContext frameContext = (HotSpotFrameContext) tasm.frameContext;
         if (frameContext != null && !frameContext.isStub) {
+            HotSpotForeignCallsProvider foreignCalls = providers.getForeignCalls();
             tasm.recordMark(Marks.MARK_EXCEPTION_HANDLER_ENTRY);
-            AMD64Call.directCall(tasm, asm, getRuntime().lookupForeignCall(EXCEPTION_HANDLER), null, false, null);
+            AMD64Call.directCall(tasm, asm, foreignCalls.lookupForeignCall(EXCEPTION_HANDLER), null, false, null);
             tasm.recordMark(Marks.MARK_DEOPT_HANDLER_ENTRY);
-            AMD64Call.directCall(tasm, asm, getRuntime().lookupForeignCall(DEOPT_HANDLER), null, false, null);
+            AMD64Call.directCall(tasm, asm, foreignCalls.lookupForeignCall(DEOPT_HANDLER), null, false, null);
         } else {
             // No need to emit the stubs for entries back into the method since
             // it has no calls that can cause such "return" entries