| Index: src/ia32/codegen-ia32.cc
|
| diff --git a/src/ia32/codegen-ia32.cc b/src/ia32/codegen-ia32.cc
|
| index d325938eb0cb0a55e38a44280c8e79852b528b10..58eead772b067f9c5f550b0b53b2d18ba9d90f92 100644
|
| --- a/src/ia32/codegen-ia32.cc
|
| +++ b/src/ia32/codegen-ia32.cc
|
| @@ -563,17 +563,15 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm,
|
| __ Assert(zero, "external string expected, but not found");
|
| }
|
| __ mov(result, FieldOperand(string, ExternalString::kResourceDataOffset));
|
| + // Assert that the external string has not been finalized yet.
|
| + __ test(result, result);
|
| + __ j(zero, call_runtime);
|
| Register scratch = string;
|
| __ mov(scratch, FieldOperand(string, HeapObject::kMapOffset));
|
| - __ movzx_b(scratch, FieldOperand(scratch, Map::kInstanceTypeOffset));
|
| - // Rule out short external strings.
|
| - STATIC_CHECK(kShortExternalStringTag != 0);
|
| - __ test_b(scratch, kShortExternalStringMask);
|
| - __ j(not_zero, call_runtime);
|
| - // Check encoding.
|
| - STATIC_ASSERT(kTwoByteStringTag == 0);
|
| - __ test_b(scratch, kStringEncodingMask);
|
| - __ j(not_equal, &ascii_external, Label::kNear);
|
| + __ cmp(scratch, Immediate(factory->external_ascii_string_map()));
|
| + __ j(equal, &ascii_external, Label::kNear);
|
| + __ cmp(scratch, Immediate(factory->external_ascii_symbol_map()));
|
| + __ j(equal, &ascii_external, Label::kNear);
|
| // Two-byte string.
|
| __ movzx_w(result, Operand(result, index, times_2, 0));
|
| __ jmp(&done);
|
|
|