From 5965d47b624798343b6a53afd384f2cf88d091de Mon Sep 17 00:00:00 2001 From: Bill Buzbee Date: Sun, 15 Nov 2009 13:37:18 -0800 Subject: [PATCH] Jit: fix for compareTo handler. Note to self: Units tests are much more effective when the test main actually calls them. --- tests/082-inline-execute/src/Main.java | 102 +++++++++++---------- .../template/armv5te/TEMPLATE_STRING_COMPARETO.S | 6 +- .../template/out/CompilerTemplateAsm-armv5te-vfp.S | 6 +- .../template/out/CompilerTemplateAsm-armv5te.S | 6 +- .../template/out/CompilerTemplateAsm-armv7-a.S | 6 +- 5 files changed, 65 insertions(+), 61 deletions(-) diff --git a/tests/082-inline-execute/src/Main.java b/tests/082-inline-execute/src/Main.java index aed334bf0..ac2b94641 100644 --- a/tests/082-inline-execute/src/Main.java +++ b/tests/082-inline-execute/src/Main.java @@ -26,9 +26,12 @@ import junit.framework.Assert; public class Main { public static void main(String args[]) { + int i; stringLengthTest(); stringCharAtTest(); stringIndexOfTest(); + for (i = 0; i < 1000; i++) + stringCompareToTest(); } public static void stringLengthTest() { @@ -127,68 +130,69 @@ public class Main { } - public static void stringCompareTo() { + public static void stringCompareToTest() { String test = "0123456789"; String test1 = new String("0123456789"); // different object String test2 = new String("0123456780"); // different value String offset = new String("xxx0123456789yyy"); String sub = offset.substring(3, 13); + String str32 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; + String str33 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy"; Object blah = new Object(); - int i; - for (i = 0; i < 1000; i++) { - - Assert.assertTrue(test.equals(test)); - Assert.assertTrue(test.equals(test1)); - Assert.assertFalse(test.equals(test2)); - - Assert.assertEquals(test.compareTo(test1), 0); - Assert.assertTrue(test1.compareTo(test2) > 0); - Assert.assertTrue(test2.compareTo(test1) < 0); - - /* compare string with a nonzero offset, in left/right side */ - Assert.assertEquals(test.compareTo(sub), 0); - Assert.assertEquals(sub.compareTo(test), 0); - Assert.assertTrue(test.equals(sub)); - Assert.assertTrue(sub.equals(test)); - /* same base, one is a substring */ - Assert.assertFalse(offset.equals(sub)); - Assert.assertFalse(sub.equals(offset)); - /* wrong class */ - Assert.assertFalse(test.equals(blah)); - - /* null ptr - throw */ - try { - test.compareTo(null); - Assert.fail("didn't get expected npe"); - } catch (NullPointerException npe) { - System.out.println("Got expected npe"); - } - /* null ptr - ok */ - Assert.assertFalse(test.equals(null)); + Assert.assertEquals(str32.compareTo(str33), -1); + Assert.assertEquals(str33.compareTo(str32), 1); + + Assert.assertTrue(test.equals(test)); + Assert.assertTrue(test.equals(test1)); + Assert.assertFalse(test.equals(test2)); + + Assert.assertEquals(test.compareTo(test1), 0); + Assert.assertTrue(test1.compareTo(test2) > 0); + Assert.assertTrue(test2.compareTo(test1) < 0); + + /* compare string with a nonzero offset, in left/right side */ + Assert.assertEquals(test.compareTo(sub), 0); + Assert.assertEquals(sub.compareTo(test), 0); + Assert.assertTrue(test.equals(sub)); + Assert.assertTrue(sub.equals(test)); + /* same base, one is a substring */ + Assert.assertFalse(offset.equals(sub)); + Assert.assertFalse(sub.equals(offset)); + /* wrong class */ + Assert.assertFalse(test.equals(blah)); + + /* null ptr - throw */ + try { + test.compareTo(null); + Assert.fail("didn't get expected npe"); + } catch (NullPointerException npe) { + } + /* null ptr - ok */ + Assert.assertFalse(test.equals(null)); - test = test.substring(1); - Assert.assertTrue(test.equals("123456789")); - Assert.assertFalse(test.equals(test1)); + test = test.substring(1); + Assert.assertTrue(test.equals("123456789")); + Assert.assertFalse(test.equals(test1)); - test = test.substring(1); - Assert.assertTrue(test.equals("23456789")); + test = test.substring(1); + Assert.assertTrue(test.equals("23456789")); - test = test.substring(1); - Assert.assertTrue(test.equals("3456789")); + test = test.substring(1); + Assert.assertTrue(test.equals("3456789")); - test = test.substring(1); - Assert.assertTrue(test.equals("456789")); + test = test.substring(1); + Assert.assertTrue(test.equals("456789")); - test = test.substring(3,5); - Assert.assertTrue(test.equals("78")); + test = test.substring(3,5); + Assert.assertTrue(test.equals("78")); - test = "this/is/a/path"; - String[] strings = test.split("/"); - Assert.assertEquals(4, strings.length); + test = "this/is/a/path"; + String[] strings = test.split("/"); + Assert.assertEquals(4, strings.length); - Assert.assertEquals("this is a path", test.replaceAll("/", " ")); - Assert.assertEquals("this is a path", test.replace("/", " ")); - } + Assert.assertEquals("this is a path", test.replaceAll("/", " ")); + Assert.assertEquals("this is a path", test.replace("/", " ")); } + } diff --git a/vm/compiler/template/armv5te/TEMPLATE_STRING_COMPARETO.S b/vm/compiler/template/armv5te/TEMPLATE_STRING_COMPARETO.S index 85b2a9f8a..8a07f1469 100644 --- a/vm/compiler/template/armv5te/TEMPLATE_STRING_COMPARETO.S +++ b/vm/compiler/template/armv5te/TEMPLATE_STRING_COMPARETO.S @@ -59,7 +59,7 @@ * r3, r4, r7, r8, r9, r12 available for loading string data */ - cmp r10, #3 + sub r10, #3 blt do_remainder loopback_triple: ldrh r3, [r2, #2]! @@ -73,10 +73,10 @@ loopback_triple: subeqs r0, r9, r12 bxne lr subs r10, #3 - bgt loopback_triple + bge loopback_triple do_remainder: - cmp r10, #0 + adds r10, #3 beq returnDiff loopback_single: diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S b/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S index 66047731d..e04af5840 100644 --- a/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S +++ b/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S @@ -1147,7 +1147,7 @@ dvmCompiler_TEMPLATE_STRING_COMPARETO: * r3, r4, r7, r8, r9, r12 available for loading string data */ - cmp r10, #3 + sub r10, #3 blt do_remainder loopback_triple: ldrh r3, [r2, #2]! @@ -1161,10 +1161,10 @@ loopback_triple: subeqs r0, r9, r12 bxne lr subs r10, #3 - bgt loopback_triple + bge loopback_triple do_remainder: - cmp r10, #0 + adds r10, #3 beq returnDiff loopback_single: diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S b/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S index cee118b8b..eff456a96 100644 --- a/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S +++ b/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S @@ -872,7 +872,7 @@ dvmCompiler_TEMPLATE_STRING_COMPARETO: * r3, r4, r7, r8, r9, r12 available for loading string data */ - cmp r10, #3 + sub r10, #3 blt do_remainder loopback_triple: ldrh r3, [r2, #2]! @@ -886,10 +886,10 @@ loopback_triple: subeqs r0, r9, r12 bxne lr subs r10, #3 - bgt loopback_triple + bge loopback_triple do_remainder: - cmp r10, #0 + adds r10, #3 beq returnDiff loopback_single: diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S index aab506790..5e331ff57 100644 --- a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S +++ b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S @@ -1147,7 +1147,7 @@ dvmCompiler_TEMPLATE_STRING_COMPARETO: * r3, r4, r7, r8, r9, r12 available for loading string data */ - cmp r10, #3 + sub r10, #3 blt do_remainder loopback_triple: ldrh r3, [r2, #2]! @@ -1161,10 +1161,10 @@ loopback_triple: subeqs r0, r9, r12 bxne lr subs r10, #3 - bgt loopback_triple + bge loopback_triple do_remainder: - cmp r10, #0 + adds r10, #3 beq returnDiff loopback_single: -- 2.11.0