| Index: src/arm/regexp-macro-assembler-arm.cc | 
| =================================================================== | 
| --- src/arm/regexp-macro-assembler-arm.cc	(revision 3701) | 
| +++ src/arm/regexp-macro-assembler-arm.cc	(working copy) | 
| @@ -63,8 +63,6 @@ | 
| *                             through the runtime system) | 
| *       - stack_area_base    (High end of the memory area to use as | 
| *                             backtracking stack) | 
| - *       - at_start           (if 1, we are starting at the start of the | 
| - *                             string, otherwise 0) | 
| *       - int* capture_array (int[num_saved_registers_], for output). | 
| *       --- sp when called --- | 
| *       - link address | 
| @@ -76,6 +74,8 @@ | 
| *       - void* input_string (location of a handle containing the string) | 
| *       - Offset of location before start of input (effectively character | 
| *         position -1). Used to initialize capture registers to a non-position. | 
| + *       - At start (if 1, we are starting at the start of the | 
| + *         string, otherwise 0) | 
| *       - register 0         (Only positions must be stored in the first | 
| *       - register 1          num_saved_registers_ registers) | 
| *       - ... | 
| @@ -610,6 +610,7 @@ | 
| // Set frame pointer just above the arguments. | 
| __ add(frame_pointer(), sp, Operand(4 * kPointerSize)); | 
| __ push(r0);  // Make room for "position - 1" constant (value is irrelevant). | 
| +  __ push(r0);  // Make room for "at start" constant (value is irrelevant). | 
|  | 
| // Check if we have space on the stack for registers. | 
| Label stack_limit_hit; | 
| @@ -653,6 +654,15 @@ | 
| // Store this value in a local variable, for use when clearing | 
| // position registers. | 
| __ str(r0, MemOperand(frame_pointer(), kInputStartMinusOne)); | 
| + | 
| +  // Determine whether the start index is zero, that is at the start of the | 
| +  // string, and store that value in a local variable. | 
| +  __ ldr(r1, MemOperand(frame_pointer(), kStartIndex)); | 
| +  __ tst(r1, Operand(r1)); | 
| +  __ mov(r1, Operand(1), LeaveCC, eq); | 
| +  __ mov(r1, Operand(0), LeaveCC, ne); | 
| +  __ str(r1, MemOperand(frame_pointer(), kAtStart)); | 
| + | 
| if (num_saved_registers_ > 0) {  // Always is, if generated from a regexp. | 
| // Fill saved registers with initial value = start offset - 1 | 
|  | 
|  |