diff options
Diffstat (limited to 'deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc')
-rw-r--r-- | deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc b/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc index 70842f5a2c..531eac10d7 100644 --- a/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc +++ b/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc @@ -10,7 +10,6 @@ #include "src/code-stubs.h" #include "src/log.h" #include "src/macro-assembler.h" -#include "src/profiler/cpu-profiler.h" #include "src/regexp/regexp-macro-assembler.h" #include "src/regexp/regexp-stack.h" #include "src/unicode.h" @@ -1270,11 +1269,6 @@ void RegExpMacroAssemblerPPC::CheckStackLimit() { } -bool RegExpMacroAssemblerPPC::CanReadUnaligned() { - return CpuFeatures::IsSupported(UNALIGNED_ACCESSES) && !slow_safe(); -} - - void RegExpMacroAssemblerPPC::LoadCurrentCharacterUnchecked(int cp_offset, int characters) { Register offset = current_input_offset(); @@ -1288,14 +1282,47 @@ void RegExpMacroAssemblerPPC::LoadCurrentCharacterUnchecked(int cp_offset, // We assume we don't want to do unaligned loads on PPC, so this function // must only be used to load a single character at a time. - DCHECK(characters == 1); __ add(current_character(), end_of_input_address(), offset); +#if V8_TARGET_LITTLE_ENDIAN if (mode_ == LATIN1) { - __ lbz(current_character(), MemOperand(current_character())); + if (characters == 4) { + __ lwz(current_character(), MemOperand(current_character())); + } else if (characters == 2) { + __ lhz(current_character(), MemOperand(current_character())); + } else { + DCHECK(characters == 1); + __ lbz(current_character(), MemOperand(current_character())); + } } else { DCHECK(mode_ == UC16); - __ lhz(current_character(), MemOperand(current_character())); + if (characters == 2) { + __ lwz(current_character(), MemOperand(current_character())); + } else { + DCHECK(characters == 1); + __ lhz(current_character(), MemOperand(current_character())); + } + } +#else + if (mode_ == LATIN1) { + if (characters == 4) { + __ lwbrx(current_character(), MemOperand(r0, current_character())); + } else if (characters == 2) { + __ lhbrx(current_character(), MemOperand(r0, current_character())); + } else { + DCHECK(characters == 1); + __ lbz(current_character(), MemOperand(current_character())); + } + } else { + DCHECK(mode_ == UC16); + if (characters == 2) { + __ lwz(current_character(), MemOperand(current_character())); + __ rlwinm(current_character(), current_character(), 16, 0, 31); + } else { + DCHECK(characters == 1); + __ lhz(current_character(), MemOperand(current_character())); + } } +#endif } |