Index: src/code-stub-assembler.cc |
diff --git a/src/code-stub-assembler.cc b/src/code-stub-assembler.cc |
index 8615c2b9c8ecf329b578dc62f679e8edf22bcc3e..c715471a39f449def3dfa84a5af68f37e07f6807 100644 |
--- a/src/code-stub-assembler.cc |
+++ b/src/code-stub-assembler.cc |
@@ -1033,7 +1033,8 @@ Node* CodeStubAssembler::LoadMapPrototype(Node* map) { |
} |
Node* CodeStubAssembler::LoadMapInstanceSize(Node* map) { |
- return LoadObjectField(map, Map::kInstanceSizeOffset, MachineType::Uint8()); |
+ return ChangeUint32ToWord( |
+ LoadObjectField(map, Map::kInstanceSizeOffset, MachineType::Uint8())); |
} |
Node* CodeStubAssembler::LoadMapInobjectProperties(Node* map) { |
@@ -1041,9 +1042,19 @@ Node* CodeStubAssembler::LoadMapInobjectProperties(Node* map) { |
STATIC_ASSERT(LAST_JS_OBJECT_TYPE == LAST_TYPE); |
Assert(Int32GreaterThanOrEqual(LoadMapInstanceType(map), |
Int32Constant(FIRST_JS_OBJECT_TYPE))); |
- return LoadObjectField( |
+ return ChangeUint32ToWord(LoadObjectField( |
map, Map::kInObjectPropertiesOrConstructorFunctionIndexOffset, |
- MachineType::Uint8()); |
+ MachineType::Uint8())); |
+} |
+ |
+Node* CodeStubAssembler::LoadMapConstructorFunctionIndex(Node* map) { |
+ // See Map::GetConstructorFunctionIndex() for details. |
+ STATIC_ASSERT(FIRST_PRIMITIVE_TYPE == FIRST_TYPE); |
+ Assert(Int32LessThanOrEqual(LoadMapInstanceType(map), |
+ Int32Constant(LAST_PRIMITIVE_TYPE))); |
+ return ChangeUint32ToWord(LoadObjectField( |
+ map, Map::kInObjectPropertiesOrConstructorFunctionIndexOffset, |
+ MachineType::Uint8())); |
} |
Node* CodeStubAssembler::LoadMapConstructor(Node* map) { |
@@ -1138,13 +1149,13 @@ Node* CodeStubAssembler::LoadFixedDoubleArrayElement( |
Node* CodeStubAssembler::LoadNativeContext(Node* context) { |
return LoadFixedArrayElement(context, |
- Int32Constant(Context::NATIVE_CONTEXT_INDEX)); |
+ IntPtrConstant(Context::NATIVE_CONTEXT_INDEX)); |
} |
Node* CodeStubAssembler::LoadJSArrayElementsMap(ElementsKind kind, |
Node* native_context) { |
return LoadFixedArrayElement(native_context, |
- Int32Constant(Context::ArrayMapIndex(kind))); |
+ IntPtrConstant(Context::ArrayMapIndex(kind))); |
} |
Node* CodeStubAssembler::StoreHeapNumberValue(Node* object, Node* value) { |
@@ -1411,8 +1422,9 @@ void CodeStubAssembler::FillFixedArrayWithValue( |
if (constant_to && constant_from && |
(to - from) <= kElementLoopUnrollThreshold) { |
for (int i = from; i < to; ++i) { |
+ Node* index = IntPtrConstant(i); |
if (is_double) { |
- Node* offset = ElementOffsetFromIndex(Int32Constant(i), kind, mode, |
+ Node* offset = ElementOffsetFromIndex(index, kind, INTPTR_PARAMETERS, |
first_element_offset); |
// Don't use doubles to store the hole double, since manipulating the |
// signaling NaN used for the hole in C++, e.g. with bit_cast, will |
@@ -1428,14 +1440,14 @@ void CodeStubAssembler::FillFixedArrayWithValue( |
} else { |
StoreNoWriteBarrier(MachineRepresentation::kWord32, array, offset, |
double_hole); |
- offset = ElementOffsetFromIndex(Int32Constant(i), kind, mode, |
+ offset = ElementOffsetFromIndex(index, kind, INTPTR_PARAMETERS, |
first_element_offset + kPointerSize); |
StoreNoWriteBarrier(MachineRepresentation::kWord32, array, offset, |
double_hole); |
} |
} else { |
- StoreFixedArrayElement(array, Int32Constant(i), value, |
- SKIP_WRITE_BARRIER); |
+ StoreFixedArrayElement(array, index, value, SKIP_WRITE_BARRIER, |
+ INTPTR_PARAMETERS); |
} |
} |
} else { |
@@ -1452,8 +1464,8 @@ void CodeStubAssembler::FillFixedArrayWithValue( |
Bind(&decrement); |
current.Bind(IntPtrSub( |
current.value(), |
- Int32Constant(IsFastDoubleElementsKind(kind) ? kDoubleSize |
- : kPointerSize))); |
+ IntPtrConstant(IsFastDoubleElementsKind(kind) ? kDoubleSize |
+ : kPointerSize))); |
if (is_double) { |
// Don't use doubles to store the hole double, since manipulating the |
// signaling NaN used for the hole in C++, e.g. with bit_cast, will |
@@ -1495,8 +1507,9 @@ void CodeStubAssembler::CopyFixedArrayElements(ElementsKind kind, |
bool double_elements = IsFastDoubleElementsKind(kind); |
bool needs_write_barrier = |
barrier_mode == UPDATE_WRITE_BARRIER && !IsFastObjectElementsKind(kind); |
- Node* limit_offset = ElementOffsetFromIndex( |
- IntPtrConstant(0), kind, mode, FixedArray::kHeaderSize - kHeapObjectTag); |
+ Node* limit_offset = |
+ ElementOffsetFromIndex(IntPtrOrSmiConstant(0, mode), kind, mode, |
+ FixedArray::kHeaderSize - kHeapObjectTag); |
Variable current_offset(this, MachineType::PointerRepresentation()); |
current_offset.Bind(ElementOffsetFromIndex( |
element_count, kind, mode, FixedArray::kHeaderSize - kHeapObjectTag)); |
@@ -2603,7 +2616,7 @@ void CodeStubAssembler::LoadPropertyFromFastObject(Node* object, Node* map, |
Bind(&if_in_field); |
{ |
Node* field_index = |
- BitFieldDecode<PropertyDetails::FieldIndexField>(details); |
+ BitFieldDecodeWord<PropertyDetails::FieldIndexField>(details); |
Node* representation = |
BitFieldDecode<PropertyDetails::RepresentationField>(details); |
@@ -2612,15 +2625,15 @@ void CodeStubAssembler::LoadPropertyFromFastObject(Node* object, Node* map, |
Label if_inobject(this), if_backing_store(this); |
Variable var_double_value(this, MachineRepresentation::kFloat64); |
Label rebox_double(this, &var_double_value); |
- BranchIfInt32LessThan(field_index, inobject_properties, &if_inobject, |
- &if_backing_store); |
+ BranchIfUintPtrLessThan(field_index, inobject_properties, &if_inobject, |
+ &if_backing_store); |
Bind(&if_inobject); |
{ |
Comment("if_inobject"); |
- Node* field_offset = ChangeInt32ToIntPtr( |
- Int32Mul(Int32Sub(LoadMapInstanceSize(map), |
- Int32Sub(inobject_properties, field_index)), |
- Int32Constant(kPointerSize))); |
+ Node* field_offset = |
+ IntPtrMul(IntPtrSub(LoadMapInstanceSize(map), |
+ IntPtrSub(inobject_properties, field_index)), |
+ IntPtrConstant(kPointerSize)); |
Label if_double(this), if_tagged(this); |
BranchIfWord32NotEqual(representation, |
@@ -2647,7 +2660,7 @@ void CodeStubAssembler::LoadPropertyFromFastObject(Node* object, Node* map, |
{ |
Comment("if_backing_store"); |
Node* properties = LoadProperties(object); |
- field_index = Int32Sub(field_index, inobject_properties); |
+ field_index = IntPtrSub(field_index, inobject_properties); |
Node* value = LoadFixedArrayElement(properties, field_index); |
Label if_double(this), if_tagged(this); |
@@ -4101,7 +4114,8 @@ void CodeStubAssembler::LoadGlobalIC(const LoadICParameters* p) { |
LoadWithVectorDescriptor descriptor(isolate()); |
Node* native_context = LoadNativeContext(p->context); |
Node* receiver = LoadFixedArrayElement( |
- native_context, Int32Constant(Context::EXTENSION_INDEX)); |
+ native_context, IntPtrConstant(Context::EXTENSION_INDEX), 0, |
+ INTPTR_PARAMETERS); |
Node* fake_name = IntPtrConstant(0); |
TailCallStub(descriptor, handler, p->context, receiver, fake_name, p->slot, |
p->vector); |