| Index: src/a64/lithium-codegen-a64.cc
|
| diff --git a/src/a64/lithium-codegen-a64.cc b/src/a64/lithium-codegen-a64.cc
|
| index af06bf5b751b789ed0d0a53737749e2f5bda9137..e986b8318a2a315a35bd0903b5769a5699144353 100644
|
| --- a/src/a64/lithium-codegen-a64.cc
|
| +++ b/src/a64/lithium-codegen-a64.cc
|
| @@ -2680,6 +2680,19 @@ void LCodeGen::DoForInPrepareMap(LForInPrepareMap* instr) {
|
| }
|
|
|
|
|
| +void LCodeGen::DoGetCachedArrayIndex(LGetCachedArrayIndex* instr) {
|
| + Register input = ToRegister(instr->value());
|
| + Register result = ToRegister(instr->result());
|
| +
|
| + __ AssertString(input);
|
| +
|
| + // Assert that we can use a W register load to get the hash.
|
| + ASSERT((String::kHashShift + String::kArrayIndexValueBits) < kWRegSize);
|
| + __ Ldr(result.W(), FieldMemOperand(input, String::kHashFieldOffset));
|
| + __ IndexFromHash(result, result);
|
| +}
|
| +
|
| +
|
| void LCodeGen::DoGlobalObject(LGlobalObject* instr) {
|
| Register result = ToRegister(instr->result());
|
| __ Ldr(result, GlobalObjectMemOperand());
|
| @@ -2714,6 +2727,19 @@ void LCodeGen::DoGoto(LGoto* instr) {
|
| }
|
|
|
|
|
| +void LCodeGen::DoHasCachedArrayIndexAndBranch(
|
| + LHasCachedArrayIndexAndBranch* instr) {
|
| + Register input = ToRegister(instr->value());
|
| + Register temp = ToRegister32(instr->temp());
|
| +
|
| + // Assert that the cache status bits fit in a W register.
|
| + ASSERT(is_uint32(String::kContainsCachedArrayIndexMask));
|
| + __ Ldr(temp, FieldMemOperand(input, String::kHashFieldOffset));
|
| + __ Tst(temp, String::kContainsCachedArrayIndexMask);
|
| + EmitBranch(instr, eq);
|
| +}
|
| +
|
| +
|
| // HHasInstanceTypeAndBranch instruction is built with an interval of type
|
| // to test but is only used in very restricted ways. The only possible kinds
|
| // of intervals are:
|
|
|