| Index: src/regexp/ppc/regexp-macro-assembler-ppc.cc
 | 
| diff --git a/src/regexp/ppc/regexp-macro-assembler-ppc.cc b/src/regexp/ppc/regexp-macro-assembler-ppc.cc
 | 
| index a7418dde53fe0bbd61cf5a09f3ce52624b7fb088..531eac10d74b7c8b897654cdac9a3d376ab8e14a 100644
 | 
| --- a/src/regexp/ppc/regexp-macro-assembler-ppc.cc
 | 
| +++ b/src/regexp/ppc/regexp-macro-assembler-ppc.cc
 | 
| @@ -1269,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();
 | 
| @@ -1287,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
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |