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); |
} |