diff options
Diffstat (limited to 'deps/v8/src/x64/lithium-x64.cc')
-rw-r--r-- | deps/v8/src/x64/lithium-x64.cc | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/deps/v8/src/x64/lithium-x64.cc b/deps/v8/src/x64/lithium-x64.cc index 9e6a65526b..54aed57b89 100644 --- a/deps/v8/src/x64/lithium-x64.cc +++ b/deps/v8/src/x64/lithium-x64.cc @@ -1133,17 +1133,10 @@ LInstruction* LChunkBuilder::DoTailCallThroughMegamorphicCache( UseFixed(instr->receiver(), LoadDescriptor::ReceiverRegister()); LOperand* name_register = UseFixed(instr->name(), LoadDescriptor::NameRegister()); - LOperand* slot = NULL; - LOperand* vector = NULL; - if (FLAG_vector_ics) { - slot = UseFixed(instr->slot(), VectorLoadICDescriptor::SlotRegister()); - vector = - UseFixed(instr->vector(), VectorLoadICDescriptor::VectorRegister()); - } // Not marked as call. It can't deoptimize, and it never returns. return new (zone()) LTailCallThroughMegamorphicCache( - context, receiver_register, name_register, slot, vector); + context, receiver_register, name_register); } @@ -1998,6 +1991,15 @@ LInstruction* LChunkBuilder::DoCheckSmi(HCheckSmi* instr) { } +LInstruction* LChunkBuilder::DoCheckArrayBufferNotNeutered( + HCheckArrayBufferNotNeutered* instr) { + LOperand* view = UseRegisterAtStart(instr->value()); + LCheckArrayBufferNotNeutered* result = + new (zone()) LCheckArrayBufferNotNeutered(view); + return AssignEnvironment(result); +} + + LInstruction* LChunkBuilder::DoCheckInstanceType(HCheckInstanceType* instr) { LOperand* value = UseRegisterAtStart(instr->value()); LCheckInstanceType* result = new(zone()) LCheckInstanceType(value); @@ -2224,14 +2226,21 @@ LInstruction* LChunkBuilder::DoLoadKeyed(HLoadKeyed* instr) { result = DefineAsRegister(new(zone()) LLoadKeyed(backing_store, key)); } - if ((instr->is_external() || instr->is_fixed_typed_array()) ? - // see LCodeGen::DoLoadKeyedExternalArray - ((elements_kind == EXTERNAL_UINT32_ELEMENTS || - elements_kind == UINT32_ELEMENTS) && - !instr->CheckFlag(HInstruction::kUint32)) : - // see LCodeGen::DoLoadKeyedFixedDoubleArray and - // LCodeGen::DoLoadKeyedFixedArray - instr->RequiresHoleCheck()) { + bool needs_environment; + if (instr->is_external() || instr->is_fixed_typed_array()) { + // see LCodeGen::DoLoadKeyedExternalArray + needs_environment = (elements_kind == EXTERNAL_UINT32_ELEMENTS || + elements_kind == UINT32_ELEMENTS) && + !instr->CheckFlag(HInstruction::kUint32); + } else { + // see LCodeGen::DoLoadKeyedFixedDoubleArray and + // LCodeGen::DoLoadKeyedFixedArray + needs_environment = + instr->RequiresHoleCheck() || + (instr->hole_mode() == CONVERT_HOLE_TO_UNDEFINED && info()->IsStub()); + } + + if (needs_environment) { result = AssignEnvironment(result); } return result; @@ -2573,7 +2582,7 @@ LInstruction* LChunkBuilder::DoToFastProperties(HToFastProperties* instr) { LInstruction* LChunkBuilder::DoTypeof(HTypeof* instr) { LOperand* context = UseFixed(instr->context(), rsi); - LOperand* value = UseAtStart(instr->value()); + LOperand* value = UseFixed(instr->value(), rbx); LTypeof* result = new(zone()) LTypeof(context, value); return MarkAsCall(DefineFixed(result, rax), instr); } |