Fix for inline string indexof; added regression tests
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S b/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
index 75388fb..fbfaf86 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
@@ -930,81 +930,94 @@
 
     /*
      * At this point, we have:
-     *    value:  r0
-     *    offset: r7
-     *    count:  r8
+     *    r0: object pointer
+     *    r1: char to match
+     *    r2: starting offset
+     *    r7: offset
+     *    r8: string length
      */
 
+     /* Build pointer to start of string data */
+     add   r0, #16
+     add   r0, r0, r7, lsl #1
+
+     /* Save a copy of starting data in r7 */
+     mov   r7, r0
+
      /* Clamp start to [0..count] */
      cmp   r2, #0
      movlt r2, #0
      cmp   r2, r8
-     movgt r2, r0
+     movgt r2, r8
 
-     /* Fold start & offset, and set data pointer to contents[-1] */
-     add   r2, r7
+     /* Build pointer to start of data to compare and pre-bias */
      add   r0, r0, r2, lsl #1
-     add   r0, #16-2   @ offset to contents[-1]
-     add   r2, r0, #2  @ remember true start of data
+     sub   r0, #2
+
+     /* Compute iteration count */
+     sub   r8, r2
 
      /*
       * At this point we have:
-      *   r0: *next[-1] char to test
-      *   r2: *start
-      *   r1: char to compare
-      *   r8: max count
-      *   r3, r4, r7, r9, r12 available for loading string data
+      *   r0: start of data to test
+      *   r1: chat to compare
+      *   r8: iteration count
+      *   r7: original start of string
+      *   r3, r4, r9, r10, r11, r12 available for loading string data
       */
 
-    /* Unroll x 4 */
+    sub   r8, #4
+    blt   indexof_remainder
 
-    cmp   r8, #4
-    blt   do_rest
-loopback_quad:
+indexof_loop4:
     ldrh  r3, [r0, #2]!
     ldrh  r4, [r0, #2]!
-    ldrh  r7, [r0, #2]!
-    ldrh  r9, [r0, #2]!
+    ldrh  r10, [r0, #2]!
+    ldrh  r11, [r0, #2]!
     cmp   r3, r1
     beq   match_0
     cmp   r4, r1
     beq   match_1
-    cmp   r7, r1
+    cmp   r10, r1
     beq   match_2
-    cmp   r9, r1
+    cmp   r11, r1
     beq   match_3
     subs  r8, #4
-    bgt   loopback_quad
+    bge   indexof_loop4
 
-do_rest:
-    cmp   r8, #0
-    beq   no_match
+indexof_remainder:
+    adds    r8, #4
+    beq     indexof_nomatch
 
-loopback_indexof:
+indexof_loop1:
     ldrh  r3, [r0, #2]!
     cmp   r3, r1
     beq   match_3
     subs  r8, #1
-    bne     loopback_indexof
+    bne   indexof_loop1
 
-no_match:
+indexof_nomatch:
     mov   r0, #-1
     bx    lr
 
 match_0:
     sub   r0, #6
-    sub   r0, r2
+    sub   r0, r7
+    asr   r0, r0, #1
     bx    lr
 match_1:
     sub   r0, #4
-    sub   r0, r2
+    sub   r0, r7
+    asr   r0, r0, #1
     bx    lr
 match_2:
     sub   r0, #2
-    sub   r0, r2
+    sub   r0, r7
+    asr   r0, r0, #1
     bx    lr
 match_3:
-    sub   r0, r2
+    sub   r0, r7
+    asr   r0, r0, #1
     bx    lr