Chromium Code Reviews| Index: src/ia32/codegen-ia32.cc |
| diff --git a/src/ia32/codegen-ia32.cc b/src/ia32/codegen-ia32.cc |
| index 022c117198eaccdcc4c02c3121235f891f6572e2..730229a32431a354bb5c87159c2046840b2212c5 100644 |
| --- a/src/ia32/codegen-ia32.cc |
| +++ b/src/ia32/codegen-ia32.cc |
| @@ -7686,15 +7686,17 @@ void CodeGenerator::GenerateSwapElements(ZoneList<Expression*>* args) { |
| __ mov(Operand(index2.reg(), 0), object.reg()); |
| __ mov(Operand(index1.reg(), 0), tmp2.reg()); |
| - Label done; |
| - __ InNewSpace(tmp1.reg(), tmp2.reg(), equal, &done); |
| - // Possible optimization: do a check that both values are Smis |
| - // (or them and test against Smi mask.) |
| + if (!FLAG_new_gc) { |
| + Label done; |
| + __ InNewSpace(tmp1.reg(), tmp2.reg(), equal, &done); |
| + // Possible optimization: do a check that both values are Smis |
| + // (or them and test against Smi mask.) |
| - __ mov(tmp2.reg(), tmp1.reg()); |
| - __ RecordWriteHelper(tmp2.reg(), index1.reg(), object.reg()); |
| - __ RecordWriteHelper(tmp1.reg(), index2.reg(), object.reg()); |
| - __ bind(&done); |
| + __ mov(tmp2.reg(), tmp1.reg()); |
| + __ RecordWriteHelper(tmp2.reg(), index1.reg(), object.reg()); |
| + __ RecordWriteHelper(tmp1.reg(), index2.reg(), object.reg()); |
| + __ bind(&done); |
| + } |
| deferred->BindExit(); |
| frame_->Push(Factory::undefined_value()); |
| @@ -9632,17 +9634,21 @@ Result CodeGenerator::EmitNamedStore(Handle<String> name, bool is_contextual) { |
| // Update the write barrier. To save instructions in the inlined |
| // version we do not filter smis. |
| - Label skip_write_barrier; |
| - __ InNewSpace(receiver.reg(), value.reg(), equal, &skip_write_barrier); |
| - int delta_to_record_write = masm_->SizeOfCodeGeneratedSince(&patch_site); |
| - __ lea(scratch.reg(), Operand(receiver.reg(), offset)); |
| - __ RecordWriteHelper(receiver.reg(), scratch.reg(), value.reg()); |
| - if (FLAG_debug_code) { |
| - __ mov(receiver.reg(), Immediate(BitCast<int32_t>(kZapValue))); |
| - __ mov(value.reg(), Immediate(BitCast<int32_t>(kZapValue))); |
| - __ mov(scratch.reg(), Immediate(BitCast<int32_t>(kZapValue))); |
| + int delta_to_record_write = 0x0001; |
|
Erik Corry
2010/12/13 19:58:28
Why is this suddenly an unnamed constant?
|
| + if (!FLAG_new_gc) { |
| + Label skip_write_barrier; |
| + __ InNewSpace(receiver.reg(), value.reg(), equal, &skip_write_barrier); |
| + delta_to_record_write = masm_->SizeOfCodeGeneratedSince(&patch_site); |
| + __ lea(scratch.reg(), Operand(receiver.reg(), offset)); |
| + __ RecordWriteHelper(receiver.reg(), scratch.reg(), value.reg()); |
| + if (FLAG_debug_code) { |
| + __ mov(receiver.reg(), Immediate(BitCast<int32_t>(kZapValue))); |
| + __ mov(value.reg(), Immediate(BitCast<int32_t>(kZapValue))); |
| + __ mov(scratch.reg(), Immediate(BitCast<int32_t>(kZapValue))); |
| + } |
| + __ bind(&skip_write_barrier); |
| } |
| - __ bind(&skip_write_barrier); |
| + |
| value.Unuse(); |
| scratch.Unuse(); |
| receiver.Unuse(); |