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}
This commit is contained in:
parent
40b0be4988
commit
3cc69194b5
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user