Chromium Code Reviews| Index: src/x64/lithium-codegen-x64.cc |
| diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc |
| index ce6a9105f23abac7e1edf923ed559227e7692041..a2b551a0e5250690112447ef279292f79181224a 100644 |
| --- a/src/x64/lithium-codegen-x64.cc |
| +++ b/src/x64/lithium-codegen-x64.cc |
| @@ -2306,15 +2306,19 @@ void LCodeGen::DoAccessArgumentsAt(LAccessArgumentsAt* instr) { |
| void LCodeGen::DoLoadKeyedFastElement(LLoadKeyedFastElement* instr) { |
| Register elements = ToRegister(instr->elements()); |
| - Register key = ToRegister(instr->key()); |
| Register result = ToRegister(instr->result()); |
| - ASSERT(result.is(elements)); |
| // Load the result. |
| - __ movq(result, FieldOperand(elements, |
| - key, |
| - times_pointer_size, |
| - FixedArray::kHeaderSize)); |
| + if (instr->key()->IsConstantOperand()) { |
| + int key = ToInteger32(LConstantOperand::cast(instr->key())); |
|
danno
2011/08/10 11:03:46
Move into a "GetOperanXXXX" function. Or can you e
Jakob Kummerow
2011/08/10 12:22:48
Done.
|
| + __ movq(result, FieldOperand( |
| + elements, (key << times_pointer_size) + FixedArray::kHeaderSize)); |
| + } else { |
| + __ movq(result, FieldOperand(elements, |
| + ToRegister(instr->key()), |
| + times_pointer_size, |
| + FixedArray::kHeaderSize)); |
| + } |
| // Check for the hole value. |
| if (instr->hydrogen()->RequiresHoleCheck()) { |
| @@ -3137,12 +3141,22 @@ void LCodeGen::DoStoreKeyedSpecializedArrayElement( |
| void LCodeGen::DoBoundsCheck(LBoundsCheck* instr) { |
| - if (instr->length()->IsRegister()) { |
| - __ cmpq(ToRegister(instr->index()), ToRegister(instr->length())); |
| + if (instr->index()->IsConstantOperand()) { |
| + if (instr->length()->IsRegister()) { |
| + __ cmpq(ToRegister(instr->length()), |
| + Immediate(ToInteger32(LConstantOperand::cast(instr->index())))); |
| + } else { |
| + __ cmpq(ToOperand(instr->length()), |
| + Immediate(ToInteger32(LConstantOperand::cast(instr->index())))); |
| + } |
| } else { |
| - __ cmpq(ToRegister(instr->index()), ToOperand(instr->length())); |
| + if (instr->length()->IsRegister()) { |
| + __ cmpq(ToRegister(instr->length()), ToRegister(instr->index())); |
| + } else { |
| + __ cmpq(ToOperand(instr->length()), ToRegister(instr->index())); |
| + } |
| } |
| - DeoptimizeIf(above_equal, instr->environment()); |
| + DeoptimizeIf(below_equal, instr->environment()); |
| } |