int length = end - start;
// If the resulting string is small make a sub string.
- if (end - start <= String::kMinNonFlatLength) {
+ if (length <= String::kMinNonFlatLength) {
return Heap::AllocateSubString(buffer, start, end);
}
// Layout description
#if V8_HOST_ARCH_64_BIT
// Optimizations expect buffer to be located at same offset as a ConsString's
- // first substring. In 64 bit mode we have room for the size before the
- // buffer.
+ // first substring. In 64 bit mode we have room for the start offset before
+ // the buffer.
static const int kStartOffset = String::kSize;
static const int kBufferOffset = kStartOffset + kIntSize;
static const int kSize = kBufferOffset + kPointerSize;
__ and_(rcx, Immediate(kStringSizeMask));
__ cmpq(rcx, Immediate(kShortStringTag));
__ j(not_equal, &true_result); // Empty string is always short.
- __ movq(rdx, FieldOperand(rax, String::kLengthOffset));
+ __ movl(rdx, FieldOperand(rax, String::kLengthOffset));
__ shr(rdx, Immediate(String::kShortLengthShift));
__ j(zero, &false_result);
__ jmp(&true_result);