Mercurial > hg > truffle
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 { |