985 fields[TypeFunc::Parms+0] = TypeInt::INT; |
985 fields[TypeFunc::Parms+0] = TypeInt::INT; |
986 const TypeTuple* range = TypeTuple::make(TypeFunc::Parms+1, fields); |
986 const TypeTuple* range = TypeTuple::make(TypeFunc::Parms+1, fields); |
987 return TypeFunc::make(domain, range); |
987 return TypeFunc::make(domain, range); |
988 } |
988 } |
989 |
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 } |
990 |
1036 |
991 |
1037 |
992 //------------- Interpreter state access for on stack replacement |
1038 //------------- Interpreter state access for on stack replacement |
993 const TypeFunc* OptoRuntime::osr_end_Type() { |
1039 const TypeFunc* OptoRuntime::osr_end_Type() { |
994 // create input type (domain) |
1040 // create input type (domain) |