778 }
779
780 const TypeFunc* OptoRuntime::checkcast_arraycopy_Type() {
781 // An extension of fast_arraycopy_Type which adds type checking.
782 return make_arraycopy_Type(ac_checkcast);
783 }
784
785 const TypeFunc* OptoRuntime::slow_arraycopy_Type() {
786 // This signature is exactly the same as System.arraycopy.
787 // There are no intptr_t (int/long) arguments.
788 return make_arraycopy_Type(ac_slow);
789 }
790
791 const TypeFunc* OptoRuntime::generic_arraycopy_Type() {
792 // This signature is like System.arraycopy, except that it returns status.
793 return make_arraycopy_Type(ac_generic);
794 }
795
796
797 const TypeFunc* OptoRuntime::array_fill_Type() {
798 // create input type (domain): pointer, int, size_t
799 const Type** fields = TypeTuple::fields(3 LP64_ONLY( + 1));
800 int argp = TypeFunc::Parms;
801 fields[argp++] = TypePtr::NOTNULL;
802 fields[argp++] = TypeInt::INT;
803 fields[argp++] = TypeX_X; // size in whatevers (size_t)
804 LP64_ONLY(fields[argp++] = Type::HALF); // other half of long length
805 const TypeTuple *domain = TypeTuple::make(argp, fields);
806
807 // create result type
808 fields = TypeTuple::fields(1);
809 fields[TypeFunc::Parms+0] = NULL; // void
810 const TypeTuple *range = TypeTuple::make(TypeFunc::Parms, fields);
811
812 return TypeFunc::make(domain, range);
813 }
814
815 // for aescrypt encrypt/decrypt operations, just three pointers returning void (length is constant)
816 const TypeFunc* OptoRuntime::aescrypt_block_Type() {
817 // create input type (domain)
818 int num_args = 3;
819 int argcnt = num_args;
820 const Type** fields = TypeTuple::fields(argcnt);
821 int argp = TypeFunc::Parms;
822 fields[argp++] = TypePtr::NOTNULL; // src
|
778 }
779
780 const TypeFunc* OptoRuntime::checkcast_arraycopy_Type() {
781 // An extension of fast_arraycopy_Type which adds type checking.
782 return make_arraycopy_Type(ac_checkcast);
783 }
784
785 const TypeFunc* OptoRuntime::slow_arraycopy_Type() {
786 // This signature is exactly the same as System.arraycopy.
787 // There are no intptr_t (int/long) arguments.
788 return make_arraycopy_Type(ac_slow);
789 }
790
791 const TypeFunc* OptoRuntime::generic_arraycopy_Type() {
792 // This signature is like System.arraycopy, except that it returns status.
793 return make_arraycopy_Type(ac_generic);
794 }
795
796
797 const TypeFunc* OptoRuntime::array_fill_Type() {
798 const Type** fields;
799 int argp = TypeFunc::Parms;
800 if (SharedRuntime::c_calling_convention_requires_ints_as_longs()) {
801 // create input type (domain): pointer, int, size_t
802 fields = TypeTuple::fields(3 LP64_ONLY( + 2));
803 fields[argp++] = TypePtr::NOTNULL;
804 fields[argp++] = TypeLong::LONG;
805 fields[argp++] = Type::HALF;
806 } else {
807 // create input type (domain): pointer, int, size_t
808 fields = TypeTuple::fields(3 LP64_ONLY( + 1));
809 fields[argp++] = TypePtr::NOTNULL;
810 fields[argp++] = TypeInt::INT;
811 }
812 fields[argp++] = TypeX_X; // size in whatevers (size_t)
813 LP64_ONLY(fields[argp++] = Type::HALF); // other half of long length
814 const TypeTuple *domain = TypeTuple::make(argp, fields);
815
816 // create result type
817 fields = TypeTuple::fields(1);
818 fields[TypeFunc::Parms+0] = NULL; // void
819 const TypeTuple *range = TypeTuple::make(TypeFunc::Parms, fields);
820
821 return TypeFunc::make(domain, range);
822 }
823
824 // for aescrypt encrypt/decrypt operations, just three pointers returning void (length is constant)
825 const TypeFunc* OptoRuntime::aescrypt_block_Type() {
826 // create input type (domain)
827 int num_args = 3;
828 int argcnt = num_args;
829 const Type** fields = TypeTuple::fields(argcnt);
830 int argp = TypeFunc::Parms;
831 fields[argp++] = TypePtr::NOTNULL; // src
|