< prev index next >

src/share/vm/opto/runtime.cpp

Print this page
rev 8502 : 8130150: Implement BigInteger.montgomeryMultiply intrinsic
Summary: Add montgomeryMultiply intrinsics
Reviewed-by: kvn


 970   // create input type (domain)
 971   int num_args      = 5;
 972   int argcnt = num_args;
 973   const Type** fields = TypeTuple::fields(argcnt);
 974   int argp = TypeFunc::Parms;
 975   fields[argp++] = TypePtr::NOTNULL;    // out
 976   fields[argp++] = TypePtr::NOTNULL;    // in
 977   fields[argp++] = TypeInt::INT;        // offset
 978   fields[argp++] = TypeInt::INT;        // len
 979   fields[argp++] = TypeInt::INT;        // k
 980   assert(argp == TypeFunc::Parms+argcnt, "correct decoding");
 981   const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields);
 982 
 983   // returning carry (int)
 984   fields = TypeTuple::fields(1);
 985   fields[TypeFunc::Parms+0] = TypeInt::INT;
 986   const TypeTuple* range = TypeTuple::make(TypeFunc::Parms+1, fields);
 987   return TypeFunc::make(domain, range);
 988 }
 989 














































 990 
 991 
 992 //------------- Interpreter state access for on stack replacement
 993 const TypeFunc* OptoRuntime::osr_end_Type() {
 994   // create input type (domain)
 995   const Type **fields = TypeTuple::fields(1);
 996   fields[TypeFunc::Parms+0] = TypeRawPtr::BOTTOM; // OSR temp buf
 997   const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+1, fields);
 998 
 999   // create result type
1000   fields = TypeTuple::fields(1);
1001   // fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; // locked oop
1002   fields[TypeFunc::Parms+0] = NULL; // void
1003   const TypeTuple *range = TypeTuple::make(TypeFunc::Parms, fields);
1004   return TypeFunc::make(domain, range);
1005 }
1006 
1007 //-------------- methodData update helpers
1008 
1009 const TypeFunc* OptoRuntime::profile_receiver_type_Type() {




 970   // create input type (domain)
 971   int num_args      = 5;
 972   int argcnt = num_args;
 973   const Type** fields = TypeTuple::fields(argcnt);
 974   int argp = TypeFunc::Parms;
 975   fields[argp++] = TypePtr::NOTNULL;    // out
 976   fields[argp++] = TypePtr::NOTNULL;    // in
 977   fields[argp++] = TypeInt::INT;        // offset
 978   fields[argp++] = TypeInt::INT;        // len
 979   fields[argp++] = TypeInt::INT;        // k
 980   assert(argp == TypeFunc::Parms+argcnt, "correct decoding");
 981   const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields);
 982 
 983   // returning carry (int)
 984   fields = TypeTuple::fields(1);
 985   fields[TypeFunc::Parms+0] = TypeInt::INT;
 986   const TypeTuple* range = TypeTuple::make(TypeFunc::Parms+1, fields);
 987   return TypeFunc::make(domain, range);
 988 }
 989 
 990 const TypeFunc* OptoRuntime::montgomeryMultiply_Type() {
 991   // create input type (domain)
 992   int num_args      = 7;
 993   int argcnt = num_args;
 994   const Type** fields = TypeTuple::fields(argcnt);
 995   int argp = TypeFunc::Parms;
 996   fields[argp++] = TypePtr::NOTNULL;    // a
 997   fields[argp++] = TypePtr::NOTNULL;    // b
 998   fields[argp++] = TypePtr::NOTNULL;    // n
 999   fields[argp++] = TypeInt::INT;        // len
1000   fields[argp++] = TypeLong::LONG;      // inv
1001   fields[argp++] = Type::HALF;
1002   fields[argp++] = TypePtr::NOTNULL;    // result
1003   assert(argp == TypeFunc::Parms+argcnt, "correct decoding");
1004   const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields);
1005 
1006   // result type needed
1007   fields = TypeTuple::fields(1);
1008   fields[TypeFunc::Parms+0] = TypePtr::NOTNULL;
1009 
1010   const TypeTuple* range = TypeTuple::make(TypeFunc::Parms, fields);
1011   return TypeFunc::make(domain, range);
1012 }
1013 
1014 const TypeFunc* OptoRuntime::montgomerySquare_Type() {
1015   // create input type (domain)
1016   int num_args      = 6;
1017   int argcnt = num_args;
1018   const Type** fields = TypeTuple::fields(argcnt);
1019   int argp = TypeFunc::Parms;
1020   fields[argp++] = TypePtr::NOTNULL;    // a
1021   fields[argp++] = TypePtr::NOTNULL;    // n
1022   fields[argp++] = TypeInt::INT;        // len
1023   fields[argp++] = TypeLong::LONG;      // inv
1024   fields[argp++] = Type::HALF;
1025   fields[argp++] = TypePtr::NOTNULL;    // result
1026   assert(argp == TypeFunc::Parms+argcnt, "correct decoding");
1027   const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields);
1028 
1029   // result type needed
1030   fields = TypeTuple::fields(1);
1031   fields[TypeFunc::Parms+0] = TypePtr::NOTNULL;
1032 
1033   const TypeTuple* range = TypeTuple::make(TypeFunc::Parms, fields);
1034   return TypeFunc::make(domain, range);
1035 }
1036 
1037 
1038 //------------- Interpreter state access for on stack replacement
1039 const TypeFunc* OptoRuntime::osr_end_Type() {
1040   // create input type (domain)
1041   const Type **fields = TypeTuple::fields(1);
1042   fields[TypeFunc::Parms+0] = TypeRawPtr::BOTTOM; // OSR temp buf
1043   const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+1, fields);
1044 
1045   // create result type
1046   fields = TypeTuple::fields(1);
1047   // fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; // locked oop
1048   fields[TypeFunc::Parms+0] = NULL; // void
1049   const TypeTuple *range = TypeTuple::make(TypeFunc::Parms, fields);
1050   return TypeFunc::make(domain, range);
1051 }
1052 
1053 //-------------- methodData update helpers
1054 
1055 const TypeFunc* OptoRuntime::profile_receiver_type_Type() {


< prev index next >