3141 }
3142 if (flags & LIR_OpArrayCopy::dst_pos_positive_check) {
3143 __ testl(dst_pos, dst_pos);
3144 __ jcc(Assembler::less, *stub->entry());
3145 }
3146
3147 if (flags & LIR_OpArrayCopy::src_range_check) {
3148 __ lea(tmp, Address(src_pos, length, Address::times_1, 0));
3149 __ cmpl(tmp, src_length_addr);
3150 __ jcc(Assembler::above, *stub->entry());
3151 }
3152 if (flags & LIR_OpArrayCopy::dst_range_check) {
3153 __ lea(tmp, Address(dst_pos, length, Address::times_1, 0));
3154 __ cmpl(tmp, dst_length_addr);
3155 __ jcc(Assembler::above, *stub->entry());
3156 }
3157
3158 if (flags & LIR_OpArrayCopy::length_positive_check) {
3159 __ testl(length, length);
3160 __ jcc(Assembler::less, *stub->entry());
3161 __ jcc(Assembler::zero, *stub->continuation());
3162 }
3163
3164 #ifdef _LP64
3165 __ movl2ptr(src_pos, src_pos); //higher 32bits must be null
3166 __ movl2ptr(dst_pos, dst_pos); //higher 32bits must be null
3167 #endif
3168
3169 if (flags & LIR_OpArrayCopy::type_check) {
3170 // We don't know the array types are compatible
3171 if (basic_type != T_OBJECT) {
3172 // Simple test for basic type arrays
3173 if (UseCompressedClassPointers) {
3174 __ movl(tmp, src_klass_addr);
3175 __ cmpl(tmp, dst_klass_addr);
3176 } else {
3177 __ movptr(tmp, src_klass_addr);
3178 __ cmpptr(tmp, dst_klass_addr);
3179 }
3180 __ jcc(Assembler::notEqual, *stub->entry());
3181 } else {
|
3141 }
3142 if (flags & LIR_OpArrayCopy::dst_pos_positive_check) {
3143 __ testl(dst_pos, dst_pos);
3144 __ jcc(Assembler::less, *stub->entry());
3145 }
3146
3147 if (flags & LIR_OpArrayCopy::src_range_check) {
3148 __ lea(tmp, Address(src_pos, length, Address::times_1, 0));
3149 __ cmpl(tmp, src_length_addr);
3150 __ jcc(Assembler::above, *stub->entry());
3151 }
3152 if (flags & LIR_OpArrayCopy::dst_range_check) {
3153 __ lea(tmp, Address(dst_pos, length, Address::times_1, 0));
3154 __ cmpl(tmp, dst_length_addr);
3155 __ jcc(Assembler::above, *stub->entry());
3156 }
3157
3158 if (flags & LIR_OpArrayCopy::length_positive_check) {
3159 __ testl(length, length);
3160 __ jcc(Assembler::less, *stub->entry());
3161 }
3162
3163 #ifdef _LP64
3164 __ movl2ptr(src_pos, src_pos); //higher 32bits must be null
3165 __ movl2ptr(dst_pos, dst_pos); //higher 32bits must be null
3166 #endif
3167
3168 if (flags & LIR_OpArrayCopy::type_check) {
3169 // We don't know the array types are compatible
3170 if (basic_type != T_OBJECT) {
3171 // Simple test for basic type arrays
3172 if (UseCompressedClassPointers) {
3173 __ movl(tmp, src_klass_addr);
3174 __ cmpl(tmp, dst_klass_addr);
3175 } else {
3176 __ movptr(tmp, src_klass_addr);
3177 __ cmpptr(tmp, dst_klass_addr);
3178 }
3179 __ jcc(Assembler::notEqual, *stub->entry());
3180 } else {
|