 Chromium Code Reviews
 Chromium Code Reviews Issue 14451003:
  Pretenure ASCII cons string in high promotion mode.  (Closed) 
  Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
    
  
    Issue 14451003:
  Pretenure ASCII cons string in high promotion mode.  (Closed) 
  Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge| Index: src/ia32/code-stubs-ia32.cc | 
| diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc | 
| index 73f452ac5cdde057eb04d9bb3834d3c8ee11043f..066f9afd05651f6eb7dfb2565022527d23d6a849 100644 | 
| --- a/src/ia32/code-stubs-ia32.cc | 
| +++ b/src/ia32/code-stubs-ia32.cc | 
| @@ -5838,8 +5838,33 @@ void StringAddStub::Generate(MacroAssembler* masm) { | 
| __ mov(FieldOperand(ecx, ConsString::kLengthOffset), ebx); | 
| __ mov(FieldOperand(ecx, ConsString::kHashFieldOffset), | 
| Immediate(String::kEmptyHashField)); | 
| + | 
| + Label skip_write_barrier, after_writing; | 
| + ExternalReference high_promotion_mode = ExternalReference:: | 
| + new_space_high_promotion_mode_active_address(masm->isolate()); | 
| + __ test(Operand::StaticVariable(high_promotion_mode), Immediate(1)); | 
| + __ j(zero, &skip_write_barrier); | 
| + | 
| + __ mov(FieldOperand(ecx, ConsString::kFirstOffset), eax); | 
| + __ RecordWriteField(ecx, | 
| + ConsString::kFirstOffset, | 
| + eax, | 
| + ebx, | 
| + kDontSaveFPRegs); | 
| + __ mov(FieldOperand(ecx, ConsString::kSecondOffset), edx); | 
| + __ RecordWriteField(ecx, | 
| + ConsString::kSecondOffset, | 
| + edx, | 
| + ebx, | 
| + kDontSaveFPRegs); | 
| + __ jmp(&after_writing); | 
| + | 
| + __ bind(&skip_write_barrier); | 
| __ mov(FieldOperand(ecx, ConsString::kFirstOffset), eax); | 
| __ mov(FieldOperand(ecx, ConsString::kSecondOffset), edx); | 
| + | 
| + __ bind(&after_writing); | 
| + | 
| __ mov(eax, ecx); | 
| __ IncrementCounter(counters->string_add_native(), 1); | 
| __ ret(2 * kPointerSize); | 
| @@ -7373,6 +7398,9 @@ static const AheadOfTimeWriteBarrierStubList kAheadOfTime[] = { | 
| { REG(ebx), REG(eax), REG(ecx), EMIT_REMEMBERED_SET}, | 
| // FastNewClosureStub | 
| { REG(ecx), REG(edx), REG(ebx), EMIT_REMEMBERED_SET}, | 
| + // StringAddStub::Generate | 
| + { REG(ecx), REG(eax), REG(ebx), EMIT_REMEMBERED_SET}, | 
| + { REG(ecx), REG(edx), REG(ebx), EMIT_REMEMBERED_SET}, | 
| 
Michael Starzinger
2013/05/03 09:58:21
The ecx/edx/ebx stub seems to be duplicated.
 
Hannes Payer (out of office)
2013/05/03 10:27:32
Done.
 | 
| // Null termination. | 
| { REG(no_reg), REG(no_reg), REG(no_reg), EMIT_REMEMBERED_SET} | 
| }; |