1.1 --- a/src/share/vm/opto/library_call.cpp Thu May 29 12:04:14 2008 -0700 1.2 +++ b/src/share/vm/opto/library_call.cpp Thu May 29 16:22:09 2008 -0700 1.3 @@ -163,6 +163,7 @@ 1.4 bool inline_native_newArray(); 1.5 bool inline_native_getLength(); 1.6 bool inline_array_copyOf(bool is_copyOfRange); 1.7 + bool inline_array_equals(); 1.8 bool inline_native_clone(bool is_virtual); 1.9 bool inline_native_Reflection_getCallerClass(); 1.10 bool inline_native_AtomicLong_get(); 1.11 @@ -259,6 +260,7 @@ 1.12 switch (id) { 1.13 case vmIntrinsics::_indexOf: 1.14 case vmIntrinsics::_compareTo: 1.15 + case vmIntrinsics::_equalsC: 1.16 break; // InlineNatives does not control String.compareTo 1.17 default: 1.18 return NULL; 1.19 @@ -272,6 +274,9 @@ 1.20 case vmIntrinsics::_indexOf: 1.21 if (!SpecialStringIndexOf) return NULL; 1.22 break; 1.23 + case vmIntrinsics::_equalsC: 1.24 + if (!SpecialArraysEquals) return NULL; 1.25 + break; 1.26 case vmIntrinsics::_arraycopy: 1.27 if (!InlineArrayCopy) return NULL; 1.28 break; 1.29 @@ -586,6 +591,8 @@ 1.30 return inline_array_copyOf(false); 1.31 case vmIntrinsics::_copyOfRange: 1.32 return inline_array_copyOf(true); 1.33 + case vmIntrinsics::_equalsC: 1.34 + return inline_array_equals(); 1.35 case vmIntrinsics::_clone: 1.36 return inline_native_clone(intrinsic()->is_virtual()); 1.37 1.38 @@ -813,6 +820,22 @@ 1.39 return true; 1.40 } 1.41 1.42 +//------------------------------inline_array_equals---------------------------- 1.43 +bool LibraryCallKit::inline_array_equals() { 1.44 + 1.45 + _sp += 2; 1.46 + Node *argument2 = pop(); 1.47 + Node *argument1 = pop(); 1.48 + 1.49 + Node* equals = 1.50 + _gvn.transform(new (C, 3) AryEqNode(control(), 1.51 + argument1, 1.52 + argument2) 1.53 + ); 1.54 + push(equals); 1.55 + return true; 1.56 +} 1.57 + 1.58 // Java version of String.indexOf(constant string) 1.59 // class StringDecl { 1.60 // StringDecl(char[] ca) {