Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 931590
Collapse All | Expand All

(-)qtwebengine-5.15.12_p20240122/src/3rdparty/chromium/v8/src/regexp/ppc/regexp-macro-assembler-ppc.h.orig (-2 / +3 lines)
Lines 81-87 Link Here
81
  // returning.
81
  // returning.
82
  // {raw_code} is an Address because this is called via ExternalReference.
82
  // {raw_code} is an Address because this is called via ExternalReference.
83
  static int CheckStackGuardState(Address* return_address, Address raw_code,
83
  static int CheckStackGuardState(Address* return_address, Address raw_code,
84
                                  Address re_frame);
84
                                  Address re_frame, uintptr_t extra_space);
85
85
86
 private:
86
 private:
87
  // Offsets from frame_pointer() of function parameters and stored registers.
87
  // Offsets from frame_pointer() of function parameters and stored registers.
Lines 127-133 Link Here
127
127
128
128
129
  // Generate a call to CheckStackGuardState.
129
  // Generate a call to CheckStackGuardState.
130
  void CallCheckStackGuardState(Register scratch);
130
  void CallCheckStackGuardState(
131
      Register scratch, Operand extra_space_for_variables = Operand::Zero());
131
132
132
  // The ebp-relative location of a regexp register.
133
  // The ebp-relative location of a regexp register.
133
  MemOperand register_location(int register_index);
134
  MemOperand register_location(int register_index);
(-)qtwebengine-5.15.12_p20240122/src/3rdparty/chromium/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc.orig (-9 / +14 lines)
Lines 710-720 Link Here
710
    __ mov(r3, Operand(stack_limit));
710
    __ mov(r3, Operand(stack_limit));
711
    __ LoadP(r3, MemOperand(r3));
711
    __ LoadP(r3, MemOperand(r3));
712
    __ sub(r3, sp, r3, LeaveOE, SetRC);
712
    __ sub(r3, sp, r3, LeaveOE, SetRC);
713
    Operand extra_space_for_variables(num_registers_ * kSystemPointerSize);
714
713
    // Handle it if the stack pointer is already below the stack limit.
715
    // Handle it if the stack pointer is already below the stack limit.
714
    __ ble(&stack_limit_hit, cr0);
716
    __ ble(&stack_limit_hit, cr0);
715
    // Check if there is room for the variable number of registers above
717
    // Check if there is room for the variable number of registers above
716
    // the stack limit.
718
    // the stack limit.
717
    __ Cmpli(r3, Operand(num_registers_ * kSystemPointerSize), r0);
719
    __ Cmpli(r3, extra_space_for_variables, r0);
718
    __ bge(&stack_ok);
720
    __ bge(&stack_ok);
719
    // Exit with OutOfMemory exception. There is not enough space on the stack
721
    // Exit with OutOfMemory exception. There is not enough space on the stack
720
    // for our working registers.
722
    // for our working registers.
Lines 722-728 Link Here
722
    __ b(&return_r3);
724
    __ b(&return_r3);
723
725
724
    __ bind(&stack_limit_hit);
726
    __ bind(&stack_limit_hit);
725
    CallCheckStackGuardState(r3);
727
      CallCheckStackGuardState(r3, extra_space_for_variables);
726
    __ cmpi(r3, Operand::Zero());
728
    __ cmpi(r3, Operand::Zero());
727
    // If returned value is non-zero, we exit with the returned value as result.
729
    // If returned value is non-zero, we exit with the returned value as result.
728
    __ bne(&return_r3);
730
    __ bne(&return_r3);
Lines 1097-1103 Link Here
1097
1099
1098
// Private methods:
1100
// Private methods:
1099
1101
1100
void RegExpMacroAssemblerPPC::CallCheckStackGuardState(Register scratch) {
1102
void RegExpMacroAssemblerPPC::CallCheckStackGuardState(Register scratch,
1103
                                                       Operand extra_space) {
1101
  DCHECK(!isolate()->IsGeneratingEmbeddedBuiltins());
1104
  DCHECK(!isolate()->IsGeneratingEmbeddedBuiltins());
1102
  DCHECK(!masm_->options().isolate_independent_code);
1105
  DCHECK(!masm_->options().isolate_independent_code);
1103
1106
Lines 1128-1137 Link Here
1128
  __ li(r0, Operand::Zero());
1131
  __ li(r0, Operand::Zero());
1129
  __ StorePU(r0, MemOperand(sp, -stack_space * kSystemPointerSize));
1132
  __ StorePU(r0, MemOperand(sp, -stack_space * kSystemPointerSize));
1130
1133
1134
  // Extra space for variables to consider in stack check.
1135
  __ mov(arg_reg_4, extra_space);
1131
  // RegExp code frame pointer.
1136
  // RegExp code frame pointer.
1132
  __ mr(r5, frame_pointer());
1137
  __ mr(arg_reg_3, frame_pointer());
1133
  // Code of self.
1138
  // Code of self.
1134
  __ mov(r4, Operand(masm_->CodeObject()));
1139
  __ mov(arg_reg_2, Operand(masm_->CodeObject()));
1135
  // r3 will point to the return address, placed by DirectCEntry.
1140
  // r3 will point to the return address, placed by DirectCEntry.
1136
  __ addi(r3, sp, Operand(kStackFrameExtraParamSlot * kSystemPointerSize));
1141
  __ addi(r3, sp, Operand(kStackFrameExtraParamSlot * kSystemPointerSize));
1137
1142
Lines 1156-1162 Link Here
1156
  __ mov(code_pointer(), Operand(masm_->CodeObject()));
1161
  __ mov(code_pointer(), Operand(masm_->CodeObject()));
1157
}
1162
}
1158
1163
1159
1160
// Helper function for reading a value out of a stack frame.
1164
// Helper function for reading a value out of a stack frame.
1161
template <typename T>
1165
template <typename T>
1162
static T& frame_entry(Address re_frame, int frame_offset) {
1166
static T& frame_entry(Address re_frame, int frame_offset) {
Lines 1171-1177 Link Here
1171
1175
1172
int RegExpMacroAssemblerPPC::CheckStackGuardState(Address* return_address,
1176
int RegExpMacroAssemblerPPC::CheckStackGuardState(Address* return_address,
1173
                                                  Address raw_code,
1177
                                                  Address raw_code,
1174
                                                  Address re_frame) {
1178
                                                  Address re_frame,
1179
                                                  uintptr_t extra_space) {
1175
  Code re_code = Code::cast(Object(raw_code));
1180
  Code re_code = Code::cast(Object(raw_code));
1176
  return NativeRegExpMacroAssembler::CheckStackGuardState(
1181
  return NativeRegExpMacroAssembler::CheckStackGuardState(
1177
      frame_entry<Isolate*>(re_frame, kIsolate),
1182
      frame_entry<Isolate*>(re_frame, kIsolate),
Lines 1181-1190 Link Here
1181
      return_address, re_code,
1186
      return_address, re_code,
1182
      frame_entry_address<Address>(re_frame, kInputString),
1187
      frame_entry_address<Address>(re_frame, kInputString),
1183
      frame_entry_address<const byte*>(re_frame, kInputStart),
1188
      frame_entry_address<const byte*>(re_frame, kInputStart),
1184
      frame_entry_address<const byte*>(re_frame, kInputEnd));
1189
      frame_entry_address<const byte*>(re_frame, kInputEnd),
1190
      extra_space);
1185
}
1191
}
1186
1192
1187
1188
MemOperand RegExpMacroAssemblerPPC::register_location(int register_index) {
1193
MemOperand RegExpMacroAssemblerPPC::register_location(int register_index) {
1189
  DCHECK(register_index < (1 << 30));
1194
  DCHECK(register_index < (1 << 30));
1190
  if (num_registers_ <= register_index) {
1195
  if (num_registers_ <= register_index) {

Return to bug 931590