summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/arch/x86/quick_entrypoints_x86.S2
-rw-r--r--test/021-string2/src/Main.java4
2 files changed, 6 insertions, 0 deletions
diff --git a/runtime/arch/x86/quick_entrypoints_x86.S b/runtime/arch/x86/quick_entrypoints_x86.S
index b1f227516e..8683a56855 100644
--- a/runtime/arch/x86/quick_entrypoints_x86.S
+++ b/runtime/arch/x86/quick_entrypoints_x86.S
@@ -1307,8 +1307,10 @@ DEFINE_FUNCTION art_quick_string_compareto
* esi: pointer to this string data
* edi: pointer to comp string data
*/
+ jecxz .Lkeep_length
repe cmpsw // find nonmatching chars in [%esi] and [%edi], up to length %ecx
jne .Lnot_equal
+.Lkeep_length:
POP edi // pop callee save reg
POP esi // pop callee save reg
ret
diff --git a/test/021-string2/src/Main.java b/test/021-string2/src/Main.java
index 87e4baf651..0239a3c626 100644
--- a/test/021-string2/src/Main.java
+++ b/test/021-string2/src/Main.java
@@ -36,6 +36,10 @@ public class Main {
Assert.assertTrue(test1.compareTo(test2) > 0);
Assert.assertTrue(test2.compareTo(test1) < 0);
+ Assert.assertEquals("".compareTo(""), 0);
+ Assert.assertTrue(test.compareTo("") > 0);
+ Assert.assertTrue("".compareTo(test) < 0);
+
/* compare string with a nonzero offset, in left/right side */
Assert.assertEquals(test.compareTo(sub), 0);
Assert.assertEquals(sub.compareTo(test), 0);