diff options
author | 2019-02-05 14:19:51 +0000 | |
---|---|---|
committer | 2019-02-05 14:19:51 +0000 | |
commit | 2860c19944b64c581a8af63339805409c0584d2f (patch) | |
tree | 838afe42daa933ffc03b96873c67673e14b4da9f /compiler/optimizing/intrinsics_mips64.cc | |
parent | 7909e1e4cc741b38b25328e2f9077beb7ecd018b (diff) | |
parent | 1d775d2ecfe847395e67310d588626962744c2d0 (diff) |
Merge "Check that the String class is not movable in String.equals intrinsics."
Diffstat (limited to 'compiler/optimizing/intrinsics_mips64.cc')
-rw-r--r-- | compiler/optimizing/intrinsics_mips64.cc | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/compiler/optimizing/intrinsics_mips64.cc b/compiler/optimizing/intrinsics_mips64.cc index afaa4ca4c8..3e687652d3 100644 --- a/compiler/optimizing/intrinsics_mips64.cc +++ b/compiler/optimizing/intrinsics_mips64.cc @@ -1429,8 +1429,16 @@ void IntrinsicCodeGeneratorMIPS64::VisitStringEquals(HInvoke* invoke) { // All string objects must have the same type since String cannot be subclassed. // Receiver must be a string object, so its class field is equal to all strings' class fields. // If the argument is a string object, its class field must be equal to receiver's class field. + // + // As the String class is expected to be non-movable, we can read the class + // field from String.equals' arguments without read barriers. + AssertNonMovableStringClass(); + // /* HeapReference<Class> */ temp1 = str->klass_ __ Lw(temp1, str, class_offset); + // /* HeapReference<Class> */ temp2 = arg->klass_ __ Lw(temp2, arg, class_offset); + // Also, because we use the previously loaded class references only in the + // following comparison, we don't need to unpoison them. __ Bnec(temp1, temp2, &return_false); } |