| Index: src/x64/macro-assembler-x64.cc
|
| ===================================================================
|
| --- src/x64/macro-assembler-x64.cc (revision 5357)
|
| +++ src/x64/macro-assembler-x64.cc (working copy)
|
| @@ -391,6 +391,25 @@
|
| }
|
|
|
|
|
| +void MacroAssembler::IndexFromHash(Register hash, Register index) {
|
| + // The assert checks that the constants for the maximum number of digits
|
| + // for an array index cached in the hash field and the number of bits
|
| + // reserved for it does not conflict.
|
| + ASSERT(TenToThe(String::kMaxCachedArrayIndexLength) <
|
| + (1 << String::kArrayIndexValueBits));
|
| + // We want the smi-tagged index in key. Even if we subsequently go to
|
| + // the slow case, converting the key to a smi is always valid.
|
| + // key: string key
|
| + // hash: key's hash field, including its array index value.
|
| + and_(hash, Immediate(String::kArrayIndexValueMask));
|
| + shr(hash, Immediate(String::kHashShift));
|
| + // Here we actually clobber the key which will be used if calling into
|
| + // runtime later. However as the new key is the numeric value of a string key
|
| + // there is no difference in using either key.
|
| + Integer32ToSmi(index, hash);
|
| +}
|
| +
|
| +
|
| void MacroAssembler::CallRuntime(Runtime::FunctionId id, int num_arguments) {
|
| CallRuntime(Runtime::FunctionForId(id), num_arguments);
|
| }
|
|
|