844 /** |
844 /** |
845 * int updateBytesCRC32(int crc, byte* b, int len) |
845 * int updateBytesCRC32(int crc, byte* b, int len) |
846 */ |
846 */ |
847 const TypeFunc* OptoRuntime::updateBytesCRC32_Type() { |
847 const TypeFunc* OptoRuntime::updateBytesCRC32_Type() { |
848 // create input type (domain) |
848 // create input type (domain) |
849 int num_args = 3; |
849 int num_args = 3; |
850 int argcnt = num_args; |
850 int argcnt = num_args; |
|
851 if (CCallingConventionRequiresIntsAsLongs) { |
|
852 argcnt += 2; |
|
853 } |
851 const Type** fields = TypeTuple::fields(argcnt); |
854 const Type** fields = TypeTuple::fields(argcnt); |
852 int argp = TypeFunc::Parms; |
855 int argp = TypeFunc::Parms; |
853 fields[argp++] = TypeInt::INT; // crc |
856 if (CCallingConventionRequiresIntsAsLongs) { |
854 fields[argp++] = TypePtr::NOTNULL; // src |
857 fields[argp++] = TypeLong::LONG; // crc |
855 fields[argp++] = TypeInt::INT; // len |
858 fields[argp++] = Type::HALF; |
|
859 fields[argp++] = TypePtr::NOTNULL; // src |
|
860 fields[argp++] = TypeLong::LONG; // len |
|
861 fields[argp++] = Type::HALF; |
|
862 } else { |
|
863 fields[argp++] = TypeInt::INT; // crc |
|
864 fields[argp++] = TypePtr::NOTNULL; // src |
|
865 fields[argp++] = TypeInt::INT; // len |
|
866 } |
856 assert(argp == TypeFunc::Parms+argcnt, "correct decoding"); |
867 assert(argp == TypeFunc::Parms+argcnt, "correct decoding"); |
857 const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields); |
868 const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields); |
858 |
869 |
859 // result type needed |
870 // result type needed |
860 fields = TypeTuple::fields(1); |
871 fields = TypeTuple::fields(1); |