diff jvmci/jdk.internal.jvmci.hotspot.sparc/src/jdk/internal/jvmci/hotspot/sparc/SPARCHotSpotRegisterConfig.java @ 22604:479228019e48

[SPARC] Remove JavaKind dependency
author Stefan Anzinger <stefan.anzinger@oracle.com>
date Wed, 23 Sep 2015 15:43:53 +0200
parents 355c41327aea
children a215c16882e0
line wrap: on
line diff
--- a/jvmci/jdk.internal.jvmci.hotspot.sparc/src/jdk/internal/jvmci/hotspot/sparc/SPARCHotSpotRegisterConfig.java	Tue Sep 22 23:14:18 2015 +0200
+++ b/jvmci/jdk.internal.jvmci.hotspot.sparc/src/jdk/internal/jvmci/hotspot/sparc/SPARCHotSpotRegisterConfig.java	Wed Sep 23 15:43:53 2015 +0200
@@ -22,7 +22,6 @@
  */
 package jdk.internal.jvmci.hotspot.sparc;
 
-import static jdk.internal.jvmci.sparc.SPARC.CPU;
 import static jdk.internal.jvmci.sparc.SPARC.FPUd;
 import static jdk.internal.jvmci.sparc.SPARC.FPUs;
 import static jdk.internal.jvmci.sparc.SPARC.d0;
@@ -129,6 +128,7 @@
 import jdk.internal.jvmci.meta.PlatformKind;
 import jdk.internal.jvmci.meta.Value;
 import jdk.internal.jvmci.sparc.SPARC;
+import jdk.internal.jvmci.sparc.SPARCKind;
 
 public class SPARCHotSpotRegisterConfig implements RegisterConfig {
 
@@ -149,11 +149,11 @@
             if (architecture.canStoreValue(reg.getRegisterCategory(), kind)) {
                 // Special treatment for double precision
                 // TODO: This is wasteful it uses only half of the registers as float.
-                if (kind == JavaKind.Double) {
+                if (kind == SPARCKind.DOUBLE) {
                     if (reg.getRegisterCategory().equals(FPUd)) {
                         list.add(reg);
                     }
-                } else if (kind == JavaKind.Float) {
+                } else if (kind == SPARCKind.SINGLE) {
                     if (reg.getRegisterCategory().equals(FPUs)) {
                         list.add(reg);
                     }
@@ -279,11 +279,21 @@
     }
 
     public Register[] getCallingConventionRegisters(Type type, JavaKind kind) {
-        if (architecture.canStoreValue(FPUs, kind) || architecture.canStoreValue(FPUd, kind)) {
-            return fpuParameterRegisters;
+        switch (kind) {
+            case Boolean:
+            case Byte:
+            case Short:
+            case Char:
+            case Int:
+            case Long:
+            case Object:
+                return type == Type.JavaCallee ? cpuCalleeParameterRegisters : cpuCallerParameterRegisters;
+            case Double:
+            case Float:
+                return fpuParameterRegisters;
+            default:
+                throw JVMCIError.shouldNotReachHere("Unknown JavaKind " + kind);
         }
-        assert architecture.canStoreValue(CPU, kind) : kind;
-        return type == Type.JavaCallee ? cpuCalleeParameterRegisters : cpuCallerParameterRegisters;
     }
 
     private CallingConvention callingConvention(Register[] generalParameterRegisters, JavaType returnType, JavaType[] parameterTypes, Type type, TargetDescription target, boolean stackOnly) {