Index: src/regexp/arm/regexp-macro-assembler-arm.cc |
diff --git a/src/regexp/arm/regexp-macro-assembler-arm.cc b/src/regexp/arm/regexp-macro-assembler-arm.cc |
index 5caaee3bc8b68cae0107a487638c570d94b4ed51..579423ff32e4351d137a7bf17e89fcd7f68cf437 100644 |
--- a/src/regexp/arm/regexp-macro-assembler-arm.cc |
+++ b/src/regexp/arm/regexp-macro-assembler-arm.cc |
@@ -41,13 +41,14 @@ |
* Each call to a public method should retain this convention. |
* |
* The stack will have the following structure: |
- * - fp[52] Isolate* isolate (address of the current isolate) |
- * - fp[48] direct_call (if 1, direct call from JavaScript code, |
+ * - fp[56] Isolate* isolate (address of the current isolate) |
+ * - fp[52] direct_call (if 1, direct call from JavaScript code, |
* if 0, call through the runtime system). |
- * - fp[44] stack_area_base (high end of the memory area to use as |
+ * - fp[48] stack_area_base (high end of the memory area to use as |
* backtracking stack). |
- * - fp[40] capture array size (may fit multiple sets of matches) |
- * - fp[36] int* capture_array (int[num_saved_registers_], for output). |
+ * - fp[44] capture array size (may fit multiple sets of matches) |
+ * - fp[40] int* capture_array (int[num_saved_registers_], for output). |
+ * - fp[36] secondary link/return address used by native call. |
* --- sp when called --- |
* - fp[32] return address (lr). |
* - fp[28] old frame pointer (r11). |
@@ -80,14 +81,17 @@ |
* int start_index, |
* Address start, |
* Address end, |
+ * Address secondary_return_address, // Only used by native call. |
* int* capture_output_array, |
- * int num_capture_registers, |
* byte* stack_area_base, |
- * bool direct_call = false, |
- * Isolate* isolate); |
+ * bool direct_call = false) |
* The call is performed by NativeRegExpMacroAssembler::Execute() |
* (in regexp-macro-assembler.cc) via the CALL_GENERATED_REGEXP_CODE macro |
* in arm/simulator-arm.h. |
+ * When calling as a non-direct call (i.e., from C++ code), the return address |
+ * area is overwritten with the LR register by the RegExp code. When doing a |
+ * direct call from generated code, the return address is placed there by |
+ * the calling code, as in a normal exit frame. |
*/ |
#define __ ACCESS_MASM(masm_) |