Commit 3cc69194 authored by Farazmand's avatar Farazmand Committed by Commit Bot

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: 's avatarJunliang Yan <jyan@ca.ibm.com>
Cr-Commit-Position: refs/heads/master@{#59049}
parent 40b0be49
......@@ -143,8 +143,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());
}
}
}
......@@ -1275,7 +1280,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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment