Exemplo n.º 1
0
 private Class<?>[] createTargetParameters(ForeignCallDescriptor descriptor) {
   Class<?>[] parameters = descriptor.getArgumentTypes();
   if (prependThread) {
     Class<?>[] newParameters = new Class<?>[parameters.length + 1];
     System.arraycopy(parameters, 0, newParameters, 1, parameters.length);
     newParameters[0] = Word.class;
     return newParameters;
   }
   return parameters;
 }
Exemplo n.º 2
0
 public Signature getSignature() {
   ForeignCallDescriptor d = linkage.getDescriptor();
   MetaAccessProvider metaAccess = providers.getMetaAccess();
   Class<?>[] arguments = d.getArgumentTypes();
   ResolvedJavaType[] parameters = new ResolvedJavaType[arguments.length];
   for (int i = 0; i < arguments.length; i++) {
     parameters[i] = metaAccess.lookupJavaType(arguments[i]);
   }
   return new HotSpotSignature(
       jvmciRuntime, metaAccess.lookupJavaType(d.getResultType()), parameters);
 }
 /** Gets a calling convention for a given descriptor and call type. */
 public static CallingConvention createCallingConvention(
     MetaAccessProvider metaAccess,
     CodeCacheProvider codeCache,
     ForeignCallDescriptor descriptor,
     Type ccType) {
   assert ccType != null;
   Class<?>[] argumentTypes = descriptor.getArgumentTypes();
   JavaType[] parameterTypes = new JavaType[argumentTypes.length];
   for (int i = 0; i < parameterTypes.length; ++i) {
     parameterTypes[i] = asJavaType(argumentTypes[i], metaAccess, codeCache);
   }
   TargetDescription target = codeCache.getTarget();
   JavaType returnType = asJavaType(descriptor.getResultType(), metaAccess, codeCache);
   RegisterConfig regConfig = codeCache.getRegisterConfig();
   return regConfig.getCallingConvention(ccType, returnType, parameterTypes, target);
 }