OSDN Git Service

Jit: fix for compareTo handler.
authorBill Buzbee <buzbee@google.com>
Sun, 15 Nov 2009 21:37:18 +0000 (13:37 -0800)
committerBill Buzbee <buzbee@google.com>
Sun, 15 Nov 2009 21:44:10 +0000 (13:44 -0800)
Note to self: Units tests are much more effective when the test main actually
calls them.

tests/082-inline-execute/src/Main.java
vm/compiler/template/armv5te/TEMPLATE_STRING_COMPARETO.S
vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S
vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S

index aed334b..ac2b946 100644 (file)
@@ -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("/", " "));
     }
+
 }
index 85b2a9f..8a07f14 100644 (file)
@@ -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:
index 6604773..e04af58 100644 (file)
@@ -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:
index cee118b..eff456a 100644 (file)
@@ -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:
index aab5067..5e331ff 100644 (file)
@@ -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: