aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/x64/lithium-x64.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/x64/lithium-x64.cc')
-rw-r--r--deps/v8/src/x64/lithium-x64.cc43
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);
}