Skip to content

Commit

Permalink
deps: V8: cherry-pick 3cc6919
Browse files Browse the repository at this point in the history
Original commit message:

    PPC: fix Regex addi overflow

    using add insetad of addi when Operand is more than 16 bits long

    Change-Id: I7f9452381ed8b321ec71e68d0d90485508b69885
    Reviewed-on: https://chromium-review.googlesource.com/c/1430619
    Commit-Queue: Junliang Yan <jyan@ca.ibm.com>
    Reviewed-by: Junliang Yan <jyan@ca.ibm.com>
    Cr-Commit-Position: refs/heads/master@{#59049}

Refs: v8/v8@3cc6919

PR-URL: #25874
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Reviewed-By: George Adams <george.adams@uk.ibm.com>
Reviewed-By: Beth Griggs <Bethany.Griggs@uk.ibm.com>
  • Loading branch information
Farazmand authored and BethGriggs committed Mar 21, 2019
1 parent 7573b55 commit 97cc0fc
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 4 deletions.
2 changes: 1 addition & 1 deletion deps/v8/include/v8-version.h
Expand Up @@ -11,7 +11,7 @@
#define V8_MAJOR_VERSION 6
#define V8_MINOR_VERSION 2
#define V8_BUILD_NUMBER 414
#define V8_PATCH_LEVEL 76
#define V8_PATCH_LEVEL 77

// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
Expand Down
16 changes: 13 additions & 3 deletions deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc
Expand Up @@ -142,8 +142,13 @@ int RegExpMacroAssemblerPPC::stack_limit_slack() {

void RegExpMacroAssemblerPPC::AdvanceCurrentPosition(int by) {
if (by != 0) {
__ addi(current_input_offset(), current_input_offset(),
Operand(by * char_size()));
if (is_int16(by * char_size())) {
__ addi(current_input_offset(), current_input_offset(),
Operand(by * char_size()));
} else {
__ mov(r0, Operand(by * char_size()));
__ add(current_input_offset(), r0, current_input_offset());
}
}
}

Expand Down Expand Up @@ -1270,7 +1275,12 @@ void RegExpMacroAssemblerPPC::LoadCurrentCharacterUnchecked(int cp_offset,
Register offset = current_input_offset();
if (cp_offset != 0) {
// r25 is not being used to store the capture start index at this point.
__ addi(r25, current_input_offset(), Operand(cp_offset * char_size()));
if (is_int16(cp_offset * char_size())) {
__ addi(r25, current_input_offset(), Operand(cp_offset * char_size()));
} else {
__ mov(r25, Operand(cp_offset * char_size()));
__ add(r25, r25, current_input_offset());
}
offset = r25;
}
// The lwz, stw, lhz, sth instructions can do unaligned accesses, if the CPU
Expand Down

0 comments on commit 97cc0fc

Please sign in to comment.