| Index: src/mips/lithium-codegen-mips.cc
|
| diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc
|
| index 122fd1ef4c29aca625dcdda34e0e6ea7ffc72f5c..f4adfb78d655a5eecf95fe70aa7e6b9796fcd472 100644
|
| --- a/src/mips/lithium-codegen-mips.cc
|
| +++ b/src/mips/lithium-codegen-mips.cc
|
| @@ -2453,6 +2453,8 @@ void LCodeGen::DoLoadElements(LLoadElements* instr) {
|
| Map::kElementsKindBitCount);
|
| __ Branch(&done, eq, scratch,
|
| Operand(FAST_ELEMENTS));
|
| + __ Branch(&done, eq, scratch,
|
| + Operand(FAST_HOLEY_ELEMENTS));
|
| __ Branch(&fail, lt, scratch,
|
| Operand(FIRST_EXTERNAL_ARRAY_ELEMENTS_KIND));
|
| __ Branch(&done, le, scratch,
|
| @@ -3682,20 +3684,21 @@ void LCodeGen::DoTransitionElementsKind(LTransitionElementsKind* instr) {
|
| __ Branch(¬_applicable, ne, scratch, Operand(from_map));
|
|
|
| __ li(new_map_reg, Operand(to_map));
|
| - if (from_kind == FAST_SMI_ONLY_ELEMENTS && to_kind == FAST_ELEMENTS) {
|
| + if (IsFastSmiElementsKind(from_kind) && IsFastObjectElementsKind(to_kind)) {
|
| __ sw(new_map_reg, FieldMemOperand(object_reg, HeapObject::kMapOffset));
|
| // Write barrier.
|
| __ RecordWriteField(object_reg, HeapObject::kMapOffset, new_map_reg,
|
| scratch, kRAHasBeenSaved, kDontSaveFPRegs);
|
| - } else if (from_kind == FAST_SMI_ONLY_ELEMENTS &&
|
| - to_kind == FAST_DOUBLE_ELEMENTS) {
|
| + } else if (IsFastSmiElementsKind(from_kind) &&
|
| + IsFastDoubleElementsKind(to_kind)) {
|
| Register fixed_object_reg = ToRegister(instr->temp_reg());
|
| ASSERT(fixed_object_reg.is(a2));
|
| ASSERT(new_map_reg.is(a3));
|
| __ mov(fixed_object_reg, object_reg);
|
| CallCode(isolate()->builtins()->TransitionElementsSmiToDouble(),
|
| RelocInfo::CODE_TARGET, instr);
|
| - } else if (from_kind == FAST_DOUBLE_ELEMENTS && to_kind == FAST_ELEMENTS) {
|
| + } else if (IsFastDoubleElementsKind(from_kind) &&
|
| + IsFastElementsKind(to_kind)) {
|
| Register fixed_object_reg = ToRegister(instr->temp_reg());
|
| ASSERT(fixed_object_reg.is(a2));
|
| ASSERT(new_map_reg.is(a3));
|
| @@ -4450,8 +4453,8 @@ void LCodeGen::DoArrayLiteral(LArrayLiteral* instr) {
|
|
|
| // Deopt if the array literal boilerplate ElementsKind is of a type different
|
| // than the expected one. The check isn't necessary if the boilerplate has
|
| - // already been converted to FAST_ELEMENTS.
|
| - if (boilerplate_elements_kind != FAST_ELEMENTS) {
|
| + // already been converted to TERMINAL_FAST_ELEMENTS_KIND.
|
| + if (boilerplate_elements_kind != TERMINAL_FAST_ELEMENTS_KIND) {
|
| __ LoadHeapObject(a1, instr->hydrogen()->boilerplate_object());
|
| // Load map into a2.
|
| __ lw(a2, FieldMemOperand(a1, HeapObject::kMapOffset));
|
|
|