| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #if V8_TARGET_ARCH_PPC | 5 #if V8_TARGET_ARCH_PPC |
| 6 | 6 |
| 7 #include "src/regexp/ppc/regexp-macro-assembler-ppc.h" | 7 #include "src/regexp/ppc/regexp-macro-assembler-ppc.h" |
| 8 | 8 |
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
| 10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 * - r30: End of input (points to byte after last character in input). | 31 * - r30: End of input (points to byte after last character in input). |
| 32 * - r31: Frame pointer. Used to access arguments, local variables and | 32 * - r31: Frame pointer. Used to access arguments, local variables and |
| 33 * RegExp registers. | 33 * RegExp registers. |
| 34 * - r12: IP register, used by assembler. Very volatile. | 34 * - r12: IP register, used by assembler. Very volatile. |
| 35 * - r1/sp : Points to tip of C stack. | 35 * - r1/sp : Points to tip of C stack. |
| 36 * | 36 * |
| 37 * The remaining registers are free for computations. | 37 * The remaining registers are free for computations. |
| 38 * Each call to a public method should retain this convention. | 38 * Each call to a public method should retain this convention. |
| 39 * | 39 * |
| 40 * The stack will have the following structure: | 40 * The stack will have the following structure: |
| 41 * - fp[40] Isolate* isolate (address of the current isolate) | 41 * - fp[44] Isolate* isolate (address of the current isolate) |
| 42 * - fp[40] secondary link/return address used by native call. |
| 42 * - fp[36] lr save area (currently unused) | 43 * - fp[36] lr save area (currently unused) |
| 43 * - fp[32] backchain (currently unused) | 44 * - fp[32] backchain (currently unused) |
| 44 * --- sp when called --- | 45 * --- sp when called --- |
| 45 * - fp[28] return address (lr). | 46 * - fp[28] return address (lr). |
| 46 * - fp[24] old frame pointer (r31). | 47 * - fp[24] old frame pointer (r31). |
| 47 * - fp[0..20] backup of registers r25..r30 | 48 * - fp[0..20] backup of registers r25..r30 |
| 48 * --- frame pointer ---- | 49 * --- frame pointer ---- |
| 49 * - fp[-4] direct_call (if 1, direct call from JavaScript code, | 50 * - fp[-4] direct_call (if 1, direct call from JavaScript code, |
| 50 * if 0, call through the runtime system). | 51 * if 0, call through the runtime system). |
| 51 * - fp[-8] stack_area_base (high end of the memory area to use as | 52 * - fp[-8] stack_area_base (high end of the memory area to use as |
| (...skipping 21 matching lines...) Expand all Loading... |
| 73 * character of the string). The remaining registers start out as garbage. | 74 * character of the string). The remaining registers start out as garbage. |
| 74 * | 75 * |
| 75 * The data up to the return address must be placed there by the calling | 76 * The data up to the return address must be placed there by the calling |
| 76 * code and the remaining arguments are passed in registers, e.g. by calling the | 77 * code and the remaining arguments are passed in registers, e.g. by calling the |
| 77 * code entry as cast to a function with the signature: | 78 * code entry as cast to a function with the signature: |
| 78 * int (*match)(String* input_string, | 79 * int (*match)(String* input_string, |
| 79 * int start_index, | 80 * int start_index, |
| 80 * Address start, | 81 * Address start, |
| 81 * Address end, | 82 * Address end, |
| 82 * int* capture_output_array, | 83 * int* capture_output_array, |
| 83 * int num_capture_registers, | |
| 84 * byte* stack_area_base, | 84 * byte* stack_area_base, |
| 85 * bool direct_call = false, | 85 * Address secondary_return_address, // Only used by native call. |
| 86 * Isolate* isolate); | 86 * bool direct_call = false) |
| 87 * The call is performed by NativeRegExpMacroAssembler::Execute() | 87 * The call is performed by NativeRegExpMacroAssembler::Execute() |
| 88 * (in regexp-macro-assembler.cc) via the CALL_GENERATED_REGEXP_CODE macro | 88 * (in regexp-macro-assembler.cc) via the CALL_GENERATED_REGEXP_CODE macro |
| 89 * in ppc/simulator-ppc.h. | 89 * in ppc/simulator-ppc.h. |
| 90 * When calling as a non-direct call (i.e., from C++ code), the return address |
| 91 * area is overwritten with the LR register by the RegExp code. When doing a |
| 92 * direct call from generated code, the return address is placed there by |
| 93 * the calling code, as in a normal exit frame. |
| 90 */ | 94 */ |
| 91 | 95 |
| 92 #define __ ACCESS_MASM(masm_) | 96 #define __ ACCESS_MASM(masm_) |
| 93 | 97 |
| 94 RegExpMacroAssemblerPPC::RegExpMacroAssemblerPPC(Isolate* isolate, Zone* zone, | 98 RegExpMacroAssemblerPPC::RegExpMacroAssemblerPPC(Isolate* isolate, Zone* zone, |
| 95 Mode mode, | 99 Mode mode, |
| 96 int registers_to_save) | 100 int registers_to_save) |
| 97 : NativeRegExpMacroAssembler(isolate, zone), | 101 : NativeRegExpMacroAssembler(isolate, zone), |
| 98 masm_(new MacroAssembler(isolate, NULL, kRegExpCodeSize, | 102 masm_(new MacroAssembler(isolate, NULL, kRegExpCodeSize, |
| 99 CodeObjectRequired::kYes)), | 103 CodeObjectRequired::kYes)), |
| (...skipping 1222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1322 } | 1326 } |
| 1323 | 1327 |
| 1324 | 1328 |
| 1325 #undef __ | 1329 #undef __ |
| 1326 | 1330 |
| 1327 #endif // V8_INTERPRETED_REGEXP | 1331 #endif // V8_INTERPRETED_REGEXP |
| 1328 } // namespace internal | 1332 } // namespace internal |
| 1329 } // namespace v8 | 1333 } // namespace v8 |
| 1330 | 1334 |
| 1331 #endif // V8_TARGET_ARCH_PPC | 1335 #endif // V8_TARGET_ARCH_PPC |
| OLD | NEW |