Index: src/ia32/lithium-codegen-ia32.cc |
diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc |
index c0f4e71caa4a42cd0f2bb7033204762997275960..93299250ae85d51c742653c6145b35fbf4aaaf34 100644 |
--- a/src/ia32/lithium-codegen-ia32.cc |
+++ b/src/ia32/lithium-codegen-ia32.cc |
@@ -2303,15 +2303,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. |
- __ mov(result, FieldOperand(elements, |
- key, |
- times_pointer_size, |
- FixedArray::kHeaderSize)); |
+ if (instr->key()->IsConstantOperand()) { |
+ int key = ToInteger32(LConstantOperand::cast(instr->key())); |
+ __ mov(result, FieldOperand( |
+ elements, (key << times_pointer_size) + FixedArray::kHeaderSize)); |
danno
2011/08/10 11:03:46
overflow check in the spirit of lithium-codegen-ia
Jakob Kummerow
2011/08/10 12:22:48
Done (by using BuildFastArrayOperand).
|
+ } else { |
+ __ mov(result, FieldOperand(elements, |
+ ToRegister(instr->key()), |
+ times_pointer_size, |
+ FixedArray::kHeaderSize)); |
+ } |
// Check for the hole value. |
if (instr->hydrogen()->RequiresHoleCheck()) { |
@@ -3108,8 +3112,14 @@ void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) { |
void LCodeGen::DoBoundsCheck(LBoundsCheck* instr) { |
- __ cmp(ToRegister(instr->index()), ToOperand(instr->length())); |
- DeoptimizeIf(above_equal, instr->environment()); |
+ if (instr->index()->IsConstantOperand()) { |
+ __ cmp(ToOperand(instr->length()), |
+ ToImmediate(LConstantOperand::cast(instr->index()))); |
+ DeoptimizeIf(below_equal, instr->environment()); |
danno
2011/08/10 11:03:46
overflow check in the spirit of lithium-codegen-ia
Jakob Kummerow
2011/08/10 12:22:48
As discussed offline, nothing to overflow-check he
|
+ } else { |
+ __ cmp(ToRegister(instr->index()), ToOperand(instr->length())); |
+ DeoptimizeIf(above_equal, instr->environment()); |
+ } |
} |