Index: src/x64/lithium-codegen-x64.cc |
diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc |
index 79e2b69a4b1041ca007d9912bf741dbd51d5a1da..90a97e62f858ea17fdb5c65903ac76908125b16d 100644 |
--- a/src/x64/lithium-codegen-x64.cc |
+++ b/src/x64/lithium-codegen-x64.cc |
@@ -2445,11 +2445,12 @@ void LCodeGen::DoLoadKeyedFastElement(LLoadKeyedFastElement* instr) { |
} |
-Operand LCodeGen::BuildExternalArrayOperand(LOperand* external_pointer, |
- LOperand* key, |
- ExternalArrayType array_type) { |
+Operand LCodeGen::BuildExternalArrayOperand( |
+ LOperand* external_pointer, |
+ LOperand* key, |
+ JSObject::ElementsKind elements_kind) { |
Register external_pointer_reg = ToRegister(external_pointer); |
- int shift_size = ExternalArrayTypeToShiftSize(array_type); |
+ int shift_size = ElementsKindToShiftSize(elements_kind); |
if (key->IsConstantOperand()) { |
int constant_value = ToInteger32(LConstantOperand::cast(key)); |
if (constant_value & 0xF0000000) { |
@@ -2465,35 +2466,35 @@ Operand LCodeGen::BuildExternalArrayOperand(LOperand* external_pointer, |
void LCodeGen::DoLoadKeyedSpecializedArrayElement( |
LLoadKeyedSpecializedArrayElement* instr) { |
- ExternalArrayType array_type = instr->array_type(); |
+ JSObject::ElementsKind elements_kind = instr->elements_kind(); |
Operand operand(BuildExternalArrayOperand(instr->external_pointer(), |
- instr->key(), array_type)); |
- if (array_type == kExternalFloatArray) { |
+ instr->key(), elements_kind)); |
+ if (elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) { |
XMMRegister result(ToDoubleRegister(instr->result())); |
__ movss(result, operand); |
__ cvtss2sd(result, result); |
- } else if (array_type == kExternalDoubleArray) { |
+ } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) { |
__ movsd(ToDoubleRegister(instr->result()), operand); |
} else { |
Register result(ToRegister(instr->result())); |
- switch (array_type) { |
- case kExternalByteArray: |
+ switch (elements_kind) { |
+ case JSObject::EXTERNAL_BYTE_ELEMENTS: |
__ movsxbq(result, operand); |
break; |
- case kExternalUnsignedByteArray: |
- case kExternalPixelArray: |
+ case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: |
+ case JSObject::EXTERNAL_PIXEL_ELEMENTS: |
__ movzxbq(result, operand); |
break; |
- case kExternalShortArray: |
+ case JSObject::EXTERNAL_SHORT_ELEMENTS: |
__ movsxwq(result, operand); |
break; |
- case kExternalUnsignedShortArray: |
+ case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: |
__ movzxwq(result, operand); |
break; |
- case kExternalIntArray: |
+ case JSObject::EXTERNAL_INT_ELEMENTS: |
__ movsxlq(result, operand); |
break; |
- case kExternalUnsignedIntArray: |
+ case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: |
__ movl(result, operand); |
__ testl(result, result); |
// TODO(danno): we could be more clever here, perhaps having a special |
@@ -2501,8 +2502,11 @@ void LCodeGen::DoLoadKeyedSpecializedArrayElement( |
// happens, and generate code that returns a double rather than int. |
DeoptimizeIf(negative, instr->environment()); |
break; |
- case kExternalFloatArray: |
- case kExternalDoubleArray: |
+ case JSObject::EXTERNAL_FLOAT_ELEMENTS: |
+ case JSObject::EXTERNAL_DOUBLE_ELEMENTS: |
+ case JSObject::FAST_ELEMENTS: |
+ case JSObject::FAST_DOUBLE_ELEMENTS: |
+ case JSObject::DICTIONARY_ELEMENTS: |
UNREACHABLE(); |
break; |
} |
@@ -3189,33 +3193,36 @@ void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) { |
void LCodeGen::DoStoreKeyedSpecializedArrayElement( |
LStoreKeyedSpecializedArrayElement* instr) { |
- ExternalArrayType array_type = instr->array_type(); |
+ JSObject::ElementsKind elements_kind = instr->elements_kind(); |
Operand operand(BuildExternalArrayOperand(instr->external_pointer(), |
- instr->key(), array_type)); |
- if (array_type == kExternalFloatArray) { |
+ instr->key(), elements_kind)); |
+ if (elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) { |
XMMRegister value(ToDoubleRegister(instr->value())); |
__ cvtsd2ss(value, value); |
__ movss(operand, value); |
- } else if (array_type == kExternalDoubleArray) { |
+ } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) { |
__ movsd(operand, ToDoubleRegister(instr->value())); |
} else { |
Register value(ToRegister(instr->value())); |
- switch (array_type) { |
- case kExternalPixelArray: |
- case kExternalByteArray: |
- case kExternalUnsignedByteArray: |
+ switch (elements_kind) { |
+ case JSObject::EXTERNAL_PIXEL_ELEMENTS: |
+ case JSObject::EXTERNAL_BYTE_ELEMENTS: |
+ case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: |
__ movb(operand, value); |
break; |
- case kExternalShortArray: |
- case kExternalUnsignedShortArray: |
+ case JSObject::EXTERNAL_SHORT_ELEMENTS: |
+ case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: |
__ movw(operand, value); |
break; |
- case kExternalIntArray: |
- case kExternalUnsignedIntArray: |
+ case JSObject::EXTERNAL_INT_ELEMENTS: |
+ case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: |
__ movl(operand, value); |
break; |
- case kExternalFloatArray: |
- case kExternalDoubleArray: |
+ case JSObject::EXTERNAL_FLOAT_ELEMENTS: |
+ case JSObject::EXTERNAL_DOUBLE_ELEMENTS: |
+ case JSObject::FAST_ELEMENTS: |
+ case JSObject::FAST_DOUBLE_ELEMENTS: |
+ case JSObject::DICTIONARY_ELEMENTS: |
UNREACHABLE(); |
break; |
} |