Index: src/ia32/code-stubs-ia32.cc |
diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc |
index fb8501039497a984572c1bf2894ce679f3fbbb20..7ea71e47eb059b1cf788c2970eddc211e00a5a02 100644 |
--- a/src/ia32/code-stubs-ia32.cc |
+++ b/src/ia32/code-stubs-ia32.cc |
@@ -5748,6 +5748,13 @@ void StringAddStub::Generate(MacroAssembler* masm) { |
// edi: second instance type. |
__ test(ecx, Immediate(kAsciiDataHintMask)); |
__ j(not_zero, &ascii_data); |
+ __ mov(ecx, FieldOperand(eax, HeapObject::kMapOffset)); |
+ __ movzx_b(ecx, FieldOperand(ecx, Map::kInstanceTypeOffset)); |
+ __ xor_(edi, ecx); |
+ STATIC_ASSERT(kOneByteStringTag != 0 && kAsciiDataHintTag != 0); |
+ __ and_(edi, kOneByteStringTag | kAsciiDataHintTag); |
+ __ cmp(edi, kOneByteStringTag | kAsciiDataHintTag); |
+ __ j(equal, &ascii_data); |
// Allocate a two byte cons string. |
__ AllocateTwoByteConsString(ecx, edi, no_reg, &call_runtime); |
__ jmp(&allocated); |