src/share/vm/opto/library_call.cpp

changeset 604
9148c65abefc
parent 599
c436414a719e
child 609
510f98a80563
     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) {

mercurial