| Index: src/ia32/macro-assembler-ia32.cc
|
| diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc
|
| index 26d0f92d262658654cb4e50063ce6d33e1468d0e..6d4bff61599f2c8e733fe4dd138d8751c9d6a51e 100644
|
| --- a/src/ia32/macro-assembler-ia32.cc
|
| +++ b/src/ia32/macro-assembler-ia32.cc
|
| @@ -2638,15 +2638,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);
|
| }
|
|
|
|
|