Index: src/ia32/lithium-codegen-ia32.cc |
=================================================================== |
--- src/ia32/lithium-codegen-ia32.cc (revision 7028) |
+++ src/ia32/lithium-codegen-ia32.cc (working copy) |
@@ -1653,6 +1653,19 @@ |
} |
+void LCodeGen::DoGetCachedArrayIndex(LGetCachedArrayIndex* instr) { |
+ Register input = ToRegister(instr->InputAt(0)); |
+ Register result = ToRegister(instr->result()); |
+ |
+ if (FLAG_debug_code) { |
+ __ AbortIfNotString(input); |
+ } |
+ |
+ __ mov(result, FieldOperand(input, String::kHashFieldOffset)); |
+ __ IndexFromHash(result, result); |
+} |
+ |
+ |
void LCodeGen::DoHasCachedArrayIndex(LHasCachedArrayIndex* instr) { |
Register input = ToRegister(instr->InputAt(0)); |
Register result = ToRegister(instr->result()); |
@@ -1662,7 +1675,7 @@ |
__ test(FieldOperand(input, String::kHashFieldOffset), |
Immediate(String::kContainsCachedArrayIndexMask)); |
NearLabel done; |
- __ j(not_zero, &done); |
+ __ j(zero, &done); |
__ mov(result, Factory::false_value()); |
__ bind(&done); |
} |
@@ -1677,7 +1690,7 @@ |
__ test(FieldOperand(input, String::kHashFieldOffset), |
Immediate(String::kContainsCachedArrayIndexMask)); |
- EmitBranch(true_block, false_block, not_equal); |
+ EmitBranch(true_block, false_block, equal); |
} |