summaryrefslogtreecommitdiff
path: root/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.h')
-rw-r--r--deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.h64
1 files changed, 42 insertions, 22 deletions
diff --git a/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.h b/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.h
index 3801591b64..a5164472b7 100644
--- a/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.h
+++ b/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.h
@@ -98,41 +98,58 @@ class V8_EXPORT_PRIVATE RegExpMacroAssemblerARM64
const byte** input_end);
private:
+ static constexpr int kFramePointerOffset = 0;
+
// Above the frame pointer - Stored registers and stack passed parameters.
- static const int kFramePointer = 0;
- static const int kReturnAddress = kFramePointer + kSystemPointerSize;
+ static constexpr int kReturnAddressOffset =
+ kFramePointerOffset + kSystemPointerSize;
// Callee-saved registers (x19-x28).
- static const int kNumCalleeSavedRegisters = 10;
- static const int kCalleeSavedRegisters = kReturnAddress + kSystemPointerSize;
-
- // Below the frame pointer.
+ static constexpr int kNumCalleeSavedRegisters = 10;
+ static constexpr int kCalleeSavedRegistersOffset =
+ kReturnAddressOffset + kSystemPointerSize;
+
+ // Below the frame pointer - the stack frame type marker and locals.
+ static constexpr int kFrameTypeOffset =
+ kFramePointerOffset - kSystemPointerSize;
+ static_assert(kFrameTypeOffset ==
+ CommonFrameConstants::kContextOrFrameTypeOffset);
+ static constexpr int kPaddingAfterFrameType = kSystemPointerSize;
// Register parameters stored by setup code.
- static const int kIsolate = -kSystemPointerSize;
- static const int kDirectCall = kIsolate - kSystemPointerSize;
- static const int kOutputSize = kDirectCall - kSystemPointerSize;
- static const int kInput = kOutputSize - kSystemPointerSize;
+ static constexpr int kIsolateOffset =
+ kFrameTypeOffset - kPaddingAfterFrameType - kSystemPointerSize;
+ static constexpr int kDirectCallOffset = kIsolateOffset - kSystemPointerSize;
+ // For the case of global regular expression, we have room to store at least
+ // one set of capture results. For the case of non-global regexp, we ignore
+ // this value.
+ static constexpr int kNumOutputRegistersOffset =
+ kDirectCallOffset - kSystemPointerSize;
+ static constexpr int kInputStringOffset =
+ kNumOutputRegistersOffset - kSystemPointerSize;
// When adding local variables remember to push space for them in
// the frame in GetCode.
- static const int kSuccessCounter = kInput - kSystemPointerSize;
- static const int kBacktrackCount = kSuccessCounter - kSystemPointerSize;
+ static constexpr int kSuccessfulCapturesOffset =
+ kInputStringOffset - kSystemPointerSize;
+ static constexpr int kBacktrackCountOffset =
+ kSuccessfulCapturesOffset - kSystemPointerSize;
// Stores the initial value of the regexp stack pointer in a
// position-independent representation (in case the regexp stack grows and
// thus moves).
- static const int kRegExpStackBasePointer =
- kBacktrackCount - kSystemPointerSize;
+ static constexpr int kRegExpStackBasePointerOffset =
+ kBacktrackCountOffset - kSystemPointerSize;
// A padding slot to preserve alignment.
- static const int kStackLocalPadding =
- kRegExpStackBasePointer - kSystemPointerSize;
+ static constexpr int kStackLocalPadding =
+ kRegExpStackBasePointerOffset - kSystemPointerSize;
static constexpr int kNumberOfStackLocals = 4;
// First position register address on the stack. Following positions are
// below it. A position is a 32 bit value.
- static const int kFirstRegisterOnStack = kStackLocalPadding - kWRegSize;
+ static constexpr int kFirstRegisterOnStackOffset =
+ kStackLocalPadding - kWRegSize;
// A capture is a 64 bit value holding two position.
- static const int kFirstCaptureOnStack = kStackLocalPadding - kXRegSize;
+ static constexpr int kFirstCaptureOnStackOffset =
+ kStackLocalPadding - kXRegSize;
- // Initial size of code buffer.
- static const int kRegExpCodeSize = 1024;
+ static constexpr int kInitialBufferSize = 1024;
// Registers x0 to x7 are used to store the first captures, they need to be
// retained over calls to C++ code.
@@ -141,12 +158,15 @@ class V8_EXPORT_PRIVATE RegExpMacroAssemblerARM64
// When initializing registers to a non-position value we can unroll
// the loop. Set the limit of registers to unroll.
- static const int kNumRegistersToUnroll = 16;
+ static constexpr int kNumRegistersToUnroll = 16;
// We are using x0 to x7 as a register cache. Each hardware register must
// contain one capture, that is two 32 bit registers. We can cache at most
// 16 registers.
- static const int kNumCachedRegisters = 16;
+ static constexpr int kNumCachedRegisters = 16;
+
+ void CallCFunctionFromIrregexpCode(ExternalReference function,
+ int num_arguments);
// Check whether preemption has been requested.
void CheckPreemption();