In MacroAssembler::JumpIfNotBothSequentialAsciiStrings a custom mask
helps us decide if we have two ascii strings. We don't care if they are internalized or not. A few days ago we flipped the meaning of the internalized bit in INSTANCE_TYPE, and that broke this custom mask. This CL effects a repair. BUG= R=yangguo@chromium.org Review URL: https://codereview.chromium.org/19514004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15797 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
b43a3c85ad
commit
f59c36589d
@ -3260,9 +3260,10 @@ void MacroAssembler::JumpIfBothInstanceTypesAreNotSequentialAscii(
|
||||
Register scratch1,
|
||||
Register scratch2,
|
||||
Label* failure) {
|
||||
int kFlatAsciiStringMask =
|
||||
const int kFlatAsciiStringMask =
|
||||
kIsNotStringMask | kStringEncodingMask | kStringRepresentationMask;
|
||||
int kFlatAsciiStringTag = ASCII_STRING_TYPE;
|
||||
const int kFlatAsciiStringTag =
|
||||
kStringTag | kOneByteStringTag | kSeqStringTag;
|
||||
and_(scratch1, first, Operand(kFlatAsciiStringMask));
|
||||
and_(scratch2, second, Operand(kFlatAsciiStringMask));
|
||||
cmp(scratch1, Operand(kFlatAsciiStringTag));
|
||||
@ -3275,9 +3276,10 @@ void MacroAssembler::JumpIfBothInstanceTypesAreNotSequentialAscii(
|
||||
void MacroAssembler::JumpIfInstanceTypeIsNotSequentialAscii(Register type,
|
||||
Register scratch,
|
||||
Label* failure) {
|
||||
int kFlatAsciiStringMask =
|
||||
const int kFlatAsciiStringMask =
|
||||
kIsNotStringMask | kStringEncodingMask | kStringRepresentationMask;
|
||||
int kFlatAsciiStringTag = ASCII_STRING_TYPE;
|
||||
const int kFlatAsciiStringTag =
|
||||
kStringTag | kOneByteStringTag | kSeqStringTag;
|
||||
and_(scratch, type, Operand(kFlatAsciiStringMask));
|
||||
cmp(scratch, Operand(kFlatAsciiStringTag));
|
||||
b(ne, failure);
|
||||
|
@ -4045,7 +4045,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ movzx_b(scratch, FieldOperand(scratch, Map::kInstanceTypeOffset));
|
||||
__ and_(scratch, Immediate(
|
||||
kIsNotStringMask | kStringEncodingMask | kStringRepresentationMask));
|
||||
__ cmp(scratch, ASCII_STRING_TYPE);
|
||||
__ cmp(scratch, kStringTag | kOneByteStringTag | kSeqStringTag);
|
||||
__ j(not_equal, &bailout);
|
||||
|
||||
// Add (separator length times array_length) - separator length
|
||||
|
@ -2798,7 +2798,8 @@ void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(Register object1,
|
||||
// Check that both are flat ASCII strings.
|
||||
const int kFlatAsciiStringMask =
|
||||
kIsNotStringMask | kStringRepresentationMask | kStringEncodingMask;
|
||||
const int kFlatAsciiStringTag = ASCII_STRING_TYPE;
|
||||
const int kFlatAsciiStringTag =
|
||||
kStringTag | kOneByteStringTag | kSeqStringTag;
|
||||
// Interleave bits from both instance types and compare them in one check.
|
||||
ASSERT_EQ(0, kFlatAsciiStringMask & (kFlatAsciiStringMask << 3));
|
||||
and_(scratch1, kFlatAsciiStringMask);
|
||||
|
@ -4968,9 +4968,10 @@ void MacroAssembler::JumpIfBothInstanceTypesAreNotSequentialAscii(
|
||||
Register scratch1,
|
||||
Register scratch2,
|
||||
Label* failure) {
|
||||
int kFlatAsciiStringMask =
|
||||
const int kFlatAsciiStringMask =
|
||||
kIsNotStringMask | kStringEncodingMask | kStringRepresentationMask;
|
||||
int kFlatAsciiStringTag = ASCII_STRING_TYPE;
|
||||
const int kFlatAsciiStringTag =
|
||||
kStringTag | kOneByteStringTag | kSeqStringTag;
|
||||
ASSERT(kFlatAsciiStringTag <= 0xffff); // Ensure this fits 16-bit immed.
|
||||
andi(scratch1, first, kFlatAsciiStringMask);
|
||||
Branch(failure, ne, scratch1, Operand(kFlatAsciiStringTag));
|
||||
@ -4982,9 +4983,10 @@ void MacroAssembler::JumpIfBothInstanceTypesAreNotSequentialAscii(
|
||||
void MacroAssembler::JumpIfInstanceTypeIsNotSequentialAscii(Register type,
|
||||
Register scratch,
|
||||
Label* failure) {
|
||||
int kFlatAsciiStringMask =
|
||||
const int kFlatAsciiStringMask =
|
||||
kIsNotStringMask | kStringEncodingMask | kStringRepresentationMask;
|
||||
int kFlatAsciiStringTag = ASCII_STRING_TYPE;
|
||||
const int kFlatAsciiStringTag =
|
||||
kStringTag | kOneByteStringTag | kSeqStringTag;
|
||||
And(scratch, type, Operand(kFlatAsciiStringMask));
|
||||
Branch(failure, ne, scratch, Operand(kFlatAsciiStringTag));
|
||||
}
|
||||
|
@ -2253,7 +2253,8 @@ void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(
|
||||
ASSERT(kNotStringTag != 0);
|
||||
const int kFlatAsciiStringMask =
|
||||
kIsNotStringMask | kStringRepresentationMask | kStringEncodingMask;
|
||||
const int kFlatAsciiStringTag = ASCII_STRING_TYPE;
|
||||
const int kFlatAsciiStringTag =
|
||||
kStringTag | kOneByteStringTag | kSeqStringTag;
|
||||
|
||||
andl(scratch1, Immediate(kFlatAsciiStringMask));
|
||||
andl(scratch2, Immediate(kFlatAsciiStringMask));
|
||||
@ -2299,7 +2300,8 @@ void MacroAssembler::JumpIfBothInstanceTypesAreNotSequentialAscii(
|
||||
ASSERT(kNotStringTag != 0);
|
||||
const int kFlatAsciiStringMask =
|
||||
kIsNotStringMask | kStringRepresentationMask | kStringEncodingMask;
|
||||
const int kFlatAsciiStringTag = ASCII_STRING_TYPE;
|
||||
const int kFlatAsciiStringTag =
|
||||
kStringTag | kOneByteStringTag | kSeqStringTag;
|
||||
|
||||
andl(scratch1, Immediate(kFlatAsciiStringMask));
|
||||
andl(scratch2, Immediate(kFlatAsciiStringMask));
|
||||
|
Loading…
Reference in New Issue
Block a user