Index: src/ia32/lithium-ia32.cc |
diff --git a/src/ia32/lithium-ia32.cc b/src/ia32/lithium-ia32.cc |
index a673c451206c76938b2045edfbea795a74c7abd9..199a80ae5b8119ac9634674fbe21d691129c225e 100644 |
--- a/src/ia32/lithium-ia32.cc |
+++ b/src/ia32/lithium-ia32.cc |
@@ -1905,7 +1905,6 @@ LInstruction* LChunkBuilder::DoStoreKeyedSpecializedArrayElement( |
ASSERT(instr->key()->representation().IsInteger32()); |
LOperand* external_pointer = UseRegister(instr->external_pointer()); |
- LOperand* val = UseRegister(instr->value()); |
LOperand* key = UseRegister(instr->key()); |
LOperand* temp = NULL; |
@@ -1916,6 +1915,15 @@ LInstruction* LChunkBuilder::DoStoreKeyedSpecializedArrayElement( |
temp = FixedTemp(eax); |
} |
+ LOperand* val = NULL; |
+ if (array_type == kExternalByteArray || |
+ array_type == kExternalUnsignedByteArray) { |
+ // We need a byte register in this case for the value. |
+ val = UseFixed(instr->value(), eax); |
+ } else { |
+ val = UseRegister(instr->value()); |
+ } |
+ |
return new LStoreKeyedSpecializedArrayElement(external_pointer, |
key, |
val, |