comparison src/share/vm/opto/library_call.cpp @ 169:9148c65abefc

6695049: (coll) Create an x86 intrinsic for Arrays.equals Summary: Intrinsify java/util/Arrays.equals(char[], char[]) Reviewed-by: kvn, never
author rasbold
date Thu, 29 May 2008 16:22:09 -0700
parents c436414a719e
children 510f98a80563
comparison
equal deleted inserted replaced
168:7793bd37a336 169:9148c65abefc
161 bool inline_native_subtype_check(); 161 bool inline_native_subtype_check();
162 162
163 bool inline_native_newArray(); 163 bool inline_native_newArray();
164 bool inline_native_getLength(); 164 bool inline_native_getLength();
165 bool inline_array_copyOf(bool is_copyOfRange); 165 bool inline_array_copyOf(bool is_copyOfRange);
166 bool inline_array_equals();
166 bool inline_native_clone(bool is_virtual); 167 bool inline_native_clone(bool is_virtual);
167 bool inline_native_Reflection_getCallerClass(); 168 bool inline_native_Reflection_getCallerClass();
168 bool inline_native_AtomicLong_get(); 169 bool inline_native_AtomicLong_get();
169 bool inline_native_AtomicLong_attemptUpdate(); 170 bool inline_native_AtomicLong_attemptUpdate();
170 bool is_method_invoke_or_aux_frame(JVMState* jvms); 171 bool is_method_invoke_or_aux_frame(JVMState* jvms);
257 // -XX:-InlineNatives disables nearly all intrinsics: 258 // -XX:-InlineNatives disables nearly all intrinsics:
258 if (!InlineNatives) { 259 if (!InlineNatives) {
259 switch (id) { 260 switch (id) {
260 case vmIntrinsics::_indexOf: 261 case vmIntrinsics::_indexOf:
261 case vmIntrinsics::_compareTo: 262 case vmIntrinsics::_compareTo:
263 case vmIntrinsics::_equalsC:
262 break; // InlineNatives does not control String.compareTo 264 break; // InlineNatives does not control String.compareTo
263 default: 265 default:
264 return NULL; 266 return NULL;
265 } 267 }
266 } 268 }
269 case vmIntrinsics::_compareTo: 271 case vmIntrinsics::_compareTo:
270 if (!SpecialStringCompareTo) return NULL; 272 if (!SpecialStringCompareTo) return NULL;
271 break; 273 break;
272 case vmIntrinsics::_indexOf: 274 case vmIntrinsics::_indexOf:
273 if (!SpecialStringIndexOf) return NULL; 275 if (!SpecialStringIndexOf) return NULL;
276 break;
277 case vmIntrinsics::_equalsC:
278 if (!SpecialArraysEquals) return NULL;
274 break; 279 break;
275 case vmIntrinsics::_arraycopy: 280 case vmIntrinsics::_arraycopy:
276 if (!InlineArrayCopy) return NULL; 281 if (!InlineArrayCopy) return NULL;
277 break; 282 break;
278 case vmIntrinsics::_copyMemory: 283 case vmIntrinsics::_copyMemory:
584 return inline_native_getLength(); 589 return inline_native_getLength();
585 case vmIntrinsics::_copyOf: 590 case vmIntrinsics::_copyOf:
586 return inline_array_copyOf(false); 591 return inline_array_copyOf(false);
587 case vmIntrinsics::_copyOfRange: 592 case vmIntrinsics::_copyOfRange:
588 return inline_array_copyOf(true); 593 return inline_array_copyOf(true);
594 case vmIntrinsics::_equalsC:
595 return inline_array_equals();
589 case vmIntrinsics::_clone: 596 case vmIntrinsics::_clone:
590 return inline_native_clone(intrinsic()->is_virtual()); 597 return inline_native_clone(intrinsic()->is_virtual());
591 598
592 case vmIntrinsics::_isAssignableFrom: 599 case vmIntrinsics::_isAssignableFrom:
593 return inline_native_subtype_check(); 600 return inline_native_subtype_check();
808 memory(string_type->add_offset(count_offset)), 815 memory(string_type->add_offset(count_offset)),
809 memory(string_type->add_offset(offset_offset)), 816 memory(string_type->add_offset(offset_offset)),
810 receiver, 817 receiver,
811 argument)); 818 argument));
812 push(compare); 819 push(compare);
820 return true;
821 }
822
823 //------------------------------inline_array_equals----------------------------
824 bool LibraryCallKit::inline_array_equals() {
825
826 _sp += 2;
827 Node *argument2 = pop();
828 Node *argument1 = pop();
829
830 Node* equals =
831 _gvn.transform(new (C, 3) AryEqNode(control(),
832 argument1,
833 argument2)
834 );
835 push(equals);
813 return true; 836 return true;
814 } 837 }
815 838
816 // Java version of String.indexOf(constant string) 839 // Java version of String.indexOf(constant string)
817 // class StringDecl { 840 // class StringDecl {