920 fields[TypeFunc::Parms+0] = TypeInt::INT; // ofs |
920 fields[TypeFunc::Parms+0] = TypeInt::INT; // ofs |
921 const TypeTuple* range = TypeTuple::make(TypeFunc::Parms+1, fields); |
921 const TypeTuple* range = TypeTuple::make(TypeFunc::Parms+1, fields); |
922 return TypeFunc::make(domain, range); |
922 return TypeFunc::make(domain, range); |
923 } |
923 } |
924 |
924 |
|
925 const TypeFunc* OptoRuntime::multiplyToLen_Type() { |
|
926 // create input type (domain) |
|
927 int num_args = 6; |
|
928 int argcnt = num_args; |
|
929 const Type** fields = TypeTuple::fields(argcnt); |
|
930 int argp = TypeFunc::Parms; |
|
931 fields[argp++] = TypePtr::NOTNULL; // x |
|
932 fields[argp++] = TypeInt::INT; // xlen |
|
933 fields[argp++] = TypePtr::NOTNULL; // y |
|
934 fields[argp++] = TypeInt::INT; // ylen |
|
935 fields[argp++] = TypePtr::NOTNULL; // z |
|
936 fields[argp++] = TypeInt::INT; // zlen |
|
937 assert(argp == TypeFunc::Parms+argcnt, "correct decoding"); |
|
938 const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields); |
|
939 |
|
940 // no result type needed |
|
941 fields = TypeTuple::fields(1); |
|
942 fields[TypeFunc::Parms+0] = NULL; |
|
943 const TypeTuple* range = TypeTuple::make(TypeFunc::Parms, fields); |
|
944 return TypeFunc::make(domain, range); |
|
945 } |
|
946 |
|
947 |
|
948 |
925 //------------- Interpreter state access for on stack replacement |
949 //------------- Interpreter state access for on stack replacement |
926 const TypeFunc* OptoRuntime::osr_end_Type() { |
950 const TypeFunc* OptoRuntime::osr_end_Type() { |
927 // create input type (domain) |
951 // create input type (domain) |
928 const Type **fields = TypeTuple::fields(1); |
952 const Type **fields = TypeTuple::fields(1); |
929 fields[TypeFunc::Parms+0] = TypeRawPtr::BOTTOM; // OSR temp buf |
953 fields[TypeFunc::Parms+0] = TypeRawPtr::BOTTOM; // OSR temp buf |