| Index: src/ia32/lithium-codegen-ia32.cc
|
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc
|
| index eb1f960c0a738d48595287a90429882c4ea9faaa..bba3acaa9a55ac059287d801acc552a7f6f70d69 100644
|
| --- a/src/ia32/lithium-codegen-ia32.cc
|
| +++ b/src/ia32/lithium-codegen-ia32.cc
|
| @@ -103,9 +103,7 @@ void LCodeGen::FinishCode(Handle<Code> code) {
|
| ASSERT(is_done());
|
| code->set_stack_slots(GetStackSlotCount());
|
| code->set_safepoint_table_offset(safepoints_.GetCodeOffset());
|
| - if (FLAG_weak_embedded_maps_in_optimized_code) {
|
| - RegisterDependentCodeForEmbeddedMaps(code);
|
| - }
|
| + RegisterDependentCodeForEmbeddedMaps(code);
|
| PopulateDeoptimizationData(code);
|
| if (!info()->IsStub()) {
|
| Deoptimizer::EnsureRelocSpaceForLazyDeoptimization(code);
|
| @@ -1162,36 +1160,6 @@ void LCodeGen::DeoptimizeIf(Condition cc,
|
| }
|
|
|
|
|
| -void LCodeGen::RegisterDependentCodeForEmbeddedMaps(Handle<Code> code) {
|
| - ZoneList<Handle<Map> > maps(1, zone());
|
| - ZoneList<Handle<JSObject> > objects(1, zone());
|
| - int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT);
|
| - for (RelocIterator it(*code, mode_mask); !it.done(); it.next()) {
|
| - if (Code::IsWeakEmbeddedObject(code->kind(), it.rinfo()->target_object())) {
|
| - if (it.rinfo()->target_object()->IsMap()) {
|
| - Handle<Map> map(Map::cast(it.rinfo()->target_object()));
|
| - maps.Add(map, zone());
|
| - } else if (it.rinfo()->target_object()->IsJSObject()) {
|
| - Handle<JSObject> object(JSObject::cast(it.rinfo()->target_object()));
|
| - objects.Add(object, zone());
|
| - }
|
| - }
|
| - }
|
| -#ifdef VERIFY_HEAP
|
| - // This disables verification of weak embedded objects after full GC.
|
| - // AddDependentCode can cause a GC, which would observe the state where
|
| - // this code is not yet in the depended code lists of the embedded maps.
|
| - NoWeakObjectVerificationScope disable_verification_of_embedded_objects;
|
| -#endif
|
| - for (int i = 0; i < maps.length(); i++) {
|
| - maps.at(i)->AddDependentCode(DependentCode::kWeaklyEmbeddedGroup, code);
|
| - }
|
| - for (int i = 0; i < objects.length(); i++) {
|
| - AddWeakObjectToCodeDependency(isolate()->heap(), objects.at(i), code);
|
| - }
|
| -}
|
| -
|
| -
|
| void LCodeGen::PopulateDeoptimizationData(Handle<Code> code) {
|
| int length = deoptimizations_.length();
|
| if (length == 0) return;
|
| @@ -2356,7 +2324,7 @@ void LCodeGen::DoArithmeticT(LArithmeticT* instr) {
|
| ASSERT(ToRegister(instr->right()).is(eax));
|
| ASSERT(ToRegister(instr->result()).is(eax));
|
|
|
| - BinaryOpStub stub(instr->op(), NO_OVERWRITE);
|
| + BinaryOpICStub stub(instr->op(), NO_OVERWRITE);
|
| CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr);
|
| __ nop(); // Signals no inlined code.
|
| }
|
| @@ -4229,39 +4197,6 @@ void LCodeGen::DoMathExp(LMathExp* instr) {
|
| }
|
|
|
|
|
| -void LCodeGen::DoMathTan(LMathTan* instr) {
|
| - ASSERT(ToDoubleRegister(instr->result()).is(xmm1));
|
| - // Set the context register to a GC-safe fake value. Clobbering it is
|
| - // OK because this instruction is marked as a call.
|
| - __ Set(esi, Immediate(0));
|
| - TranscendentalCacheStub stub(TranscendentalCache::TAN,
|
| - TranscendentalCacheStub::UNTAGGED);
|
| - CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr);
|
| -}
|
| -
|
| -
|
| -void LCodeGen::DoMathCos(LMathCos* instr) {
|
| - ASSERT(ToDoubleRegister(instr->result()).is(xmm1));
|
| - // Set the context register to a GC-safe fake value. Clobbering it is
|
| - // OK because this instruction is marked as a call.
|
| - __ Set(esi, Immediate(0));
|
| - TranscendentalCacheStub stub(TranscendentalCache::COS,
|
| - TranscendentalCacheStub::UNTAGGED);
|
| - CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr);
|
| -}
|
| -
|
| -
|
| -void LCodeGen::DoMathSin(LMathSin* instr) {
|
| - ASSERT(ToDoubleRegister(instr->result()).is(xmm1));
|
| - // Set the context register to a GC-safe fake value. Clobbering it is
|
| - // OK because this instruction is marked as a call.
|
| - __ Set(esi, Immediate(0));
|
| - TranscendentalCacheStub stub(TranscendentalCache::SIN,
|
| - TranscendentalCacheStub::UNTAGGED);
|
| - CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr);
|
| -}
|
| -
|
| -
|
| void LCodeGen::DoInvokeFunction(LInvokeFunction* instr) {
|
| ASSERT(ToRegister(instr->context()).is(esi));
|
| ASSERT(ToRegister(instr->function()).is(edi));
|
| @@ -4426,7 +4361,13 @@ void LCodeGen::DoStoreCodeEntry(LStoreCodeEntry* instr) {
|
| void LCodeGen::DoInnerAllocatedObject(LInnerAllocatedObject* instr) {
|
| Register result = ToRegister(instr->result());
|
| Register base = ToRegister(instr->base_object());
|
| - __ lea(result, Operand(base, instr->offset()));
|
| + if (instr->offset()->IsConstantOperand()) {
|
| + LConstantOperand* offset = LConstantOperand::cast(instr->offset());
|
| + __ lea(result, Operand(base, ToInteger32(offset)));
|
| + } else {
|
| + Register offset = ToRegister(instr->offset());
|
| + __ lea(result, Operand(base, offset, times_1, 0));
|
| + }
|
| }
|
|
|
|
|
| @@ -4845,13 +4786,10 @@ void LCodeGen::DoTransitionElementsKind(LTransitionElementsKind* instr) {
|
| ToRegister(instr->temp()),
|
| kDontSaveFPRegs);
|
| } else {
|
| + ASSERT(ToRegister(instr->context()).is(esi));
|
| PushSafepointRegistersScope scope(this);
|
| if (!object_reg.is(eax)) {
|
| - __ push(object_reg);
|
| - }
|
| - LoadContextFromDeferred(instr->context());
|
| - if (!object_reg.is(eax)) {
|
| - __ pop(eax);
|
| + __ mov(eax, object_reg);
|
| }
|
| __ mov(ebx, to_map);
|
| TransitionElementsKindStub stub(from_kind, to_kind);
|
|
|