| Index: src/ia32/macro-assembler-ia32.cc
|
| diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc
|
| index cebfb13727d54033e58f8c927aeea3c5f895c2f6..d5013d7582addde1aaf74116551c5396837137d9 100644
|
| --- a/src/ia32/macro-assembler-ia32.cc
|
| +++ b/src/ia32/macro-assembler-ia32.cc
|
| @@ -2706,15 +2706,17 @@ void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(Register object1,
|
| movzx_b(scratch2, FieldOperand(scratch2, Map::kInstanceTypeOffset));
|
|
|
| // Check that both are flat ASCII strings.
|
| - const int kFlatAsciiStringMask =
|
| - kIsNotStringMask | kStringRepresentationMask | kStringEncodingMask;
|
| + const int kFlatAsciiStringMask = kIsNotStringMask | kStringRepresentationMask
|
| + | kStringEncodingMask | kAsciiDataHintTag;
|
| const int kFlatAsciiStringTag = ASCII_STRING_TYPE;
|
| // Interleave bits from both instance types and compare them in one check.
|
| - ASSERT_EQ(0, kFlatAsciiStringMask & (kFlatAsciiStringMask << 3));
|
| + ASSERT_EQ(0, kFlatAsciiStringMask & (kFlatAsciiStringMask << 8));
|
| + ASSERT_EQ(ASCII_STRING_TYPE, ASCII_STRING_TYPE & kFlatAsciiStringMask);
|
| and_(scratch1, kFlatAsciiStringMask);
|
| and_(scratch2, kFlatAsciiStringMask);
|
| - lea(scratch1, Operand(scratch1, scratch2, times_8, 0));
|
| - cmp(scratch1, kFlatAsciiStringTag | (kFlatAsciiStringTag << 3));
|
| + shl(scratch1, 8);
|
| + or_(scratch1, scratch2);
|
| + cmp(scratch1, kFlatAsciiStringTag | (kFlatAsciiStringTag << 8));
|
| j(not_equal, failure);
|
| }
|
|
|
|
|