From 92d31132504cd59d5669b251716a5000de766b5c Mon Sep 17 00:00:00 2001 From: "yangguo@chromium.org" Date: Wed, 21 Nov 2012 09:41:34 +0000 Subject: [PATCH] MIPS: Make kAsciiDataHintTag have correct semantics for all both 1 and 2 byte string types. Port r12966 (ec963fe0) BUG= TEST= Review URL: https://chromiumcodereview.appspot.com/11316091 Patch from Akos Palfi . git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13021 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/mips/code-stubs-mips.cc | 6 ------ src/mips/macro-assembler-mips.cc | 8 ++++++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc index bbd5cc0..79ab533 100644 --- a/src/mips/code-stubs-mips.cc +++ b/src/mips/code-stubs-mips.cc @@ -6600,12 +6600,6 @@ void StringAddStub::Generate(MacroAssembler* masm) { __ and_(at, at, t1); __ Branch(&ascii_data, ne, at, Operand(zero_reg)); - __ xor_(t0, t0, t1); - STATIC_ASSERT(kOneByteStringTag != 0 && kAsciiDataHintTag != 0); - __ And(t0, t0, Operand(kOneByteStringTag | kAsciiDataHintTag)); - __ Branch( - &ascii_data, eq, t0, Operand(kOneByteStringTag | kAsciiDataHintTag)); - // Allocate a two byte cons string. __ AllocateTwoByteConsString(v0, t2, t0, t1, &call_runtime); __ Branch(&allocated); diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc index 11c641d..8293a10 100644 --- a/src/mips/macro-assembler-mips.cc +++ b/src/mips/macro-assembler-mips.cc @@ -4896,8 +4896,10 @@ void MacroAssembler::JumpIfBothInstanceTypesAreNotSequentialAscii( Register scratch2, Label* failure) { int kFlatAsciiStringMask = - kIsNotStringMask | kStringEncodingMask | kStringRepresentationMask; + kIsNotStringMask | kStringEncodingMask | kAsciiDataHintMask | + kStringRepresentationMask; int kFlatAsciiStringTag = ASCII_STRING_TYPE; + ASSERT_EQ(ASCII_STRING_TYPE, ASCII_STRING_TYPE & kFlatAsciiStringMask); ASSERT(kFlatAsciiStringTag <= 0xffff); // Ensure this fits 16-bit immed. andi(scratch1, first, kFlatAsciiStringMask); Branch(failure, ne, scratch1, Operand(kFlatAsciiStringTag)); @@ -4910,8 +4912,10 @@ void MacroAssembler::JumpIfInstanceTypeIsNotSequentialAscii(Register type, Register scratch, Label* failure) { int kFlatAsciiStringMask = - kIsNotStringMask | kStringEncodingMask | kStringRepresentationMask; + kIsNotStringMask | kStringEncodingMask | kAsciiDataHintMask | + kStringRepresentationMask; int kFlatAsciiStringTag = ASCII_STRING_TYPE; + ASSERT_EQ(ASCII_STRING_TYPE, ASCII_STRING_TYPE & kFlatAsciiStringMask); And(scratch, type, Operand(kFlatAsciiStringMask)); Branch(failure, ne, scratch, Operand(kFlatAsciiStringTag)); } -- 2.7.4