Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.jruby.ext.ffi.jffi;
  
  
 
     private static final int MAX_PARAMETERS = getMaximumFastLongParameters();
 
     private static final String[] signatures = buildSignatures(long.class);
 
     private static final String[] methodNames = {
         "invokeL0""invokeL1""invokeL2""invokeL3""invokeL4""invokeL5""invokeL6"
     };
 
     String getInvokerMethodName(JITSignature signature) {
 
         final int parameterCount = signature.getParameterCount();
 
         if (parameterCount <=  && parameterCount <= .) {
             return [parameterCount];
 
         } else {
             throw new IllegalArgumentException("invalid fast-long parameter count: " + parameterCount);
         }
     }
 
     String getInvokerSignature(int parameterCount) {
         if (parameterCount <=  && parameterCount <= .) {
             return [parameterCount];
         }
         throw new IllegalArgumentException("invalid fast-long parameter count: " + parameterCount);
     }
 
     final Class getInvokerIntType() {
         return long.class;
     }
 
     public boolean isSupported(JITSignature signature) {
         final int parameterCount = signature.getParameterCount();
 
         if (!signature.getCallingConvention().equals(.) || parameterCount > ) {
             return false;
         }
 
         final Platform platform = Platform.getPlatform();
 
         if (platform.getOS().equals(..)) {
             return false;
         }
 
         // Only supported on amd64 arches
         if (!platform.getCPU().equals(..)) {
             return false;
         }
 
         for (int i = 0; i < parameterCounti++) {
             if (!isFastLongParameter(platformsignature.getParameterType(i))) {
                 return false;
             }
         }
 
         return isFastLongResult(platformsignature.getResultType());
     }
 
 
     final static int getMaximumFastLongParameters() {
         try {
             com.kenai.jffi.Invoker.class.getDeclaredMethod("invokeL6"CallContext.classlong.class,
                     long.classlong.classlong.classlong.classlong.classlong.class);
             return 6;
         } catch (Throwable t) {
             return -1;
         }
     }
 
 
     private static boolean isFastLongType(Platform platformNativeType type) {
         switch (type) {
             case :
             case :
             case :
             case :
             case :
             case :
             case :
             case :
             case :
             case :
             case :
             case :
                 return true;
 
             default:
                return false;
        }
    }
    static boolean isFastLongResult(Platform platformNativeType type) {
        switch (type) {
            case :
                return true;
                
            case :
            case :
            case :
                return platform.addressSize() == 64;
            default:
                return isFastLongType(platformtype);
        }
    }
    static boolean isFastLongParameter(Platform platformNativeType type) {
        switch (type) {
            case :
            case :
            case :
            case :
            case :
            case :
                return platform.addressSize() == 64;
            
            default:
                return isFastLongType(platformtype);
        }
    }
New to GrepCode? Check out our FAQ X