| Index: src/x64/macro-assembler-x64.cc
|
| diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc
|
| index 48dc16ad7f87f93a7c800e09036da691fd832e98..e5b4160084716c54b62c51004e0d82c84c9d62a8 100644
|
| --- a/src/x64/macro-assembler-x64.cc
|
| +++ b/src/x64/macro-assembler-x64.cc
|
| @@ -236,7 +236,7 @@ void MacroAssembler::RememberedSetHelper(Register object, // For debug tests.
|
| // Store pointer to buffer.
|
| movp(Operand(scratch, 0), addr);
|
| // Increment buffer top.
|
| - addq(scratch, Immediate(kPointerSize));
|
| + addp(scratch, Immediate(kPointerSize));
|
| // Write back new top of buffer.
|
| StoreRoot(scratch, Heap::kStoreBufferTopRootIndex);
|
| // Call stub on end of buffer.
|
| @@ -291,7 +291,7 @@ void MacroAssembler::InNewSpace(Register object,
|
| Move(kScratchRegister, reinterpret_cast<Address>(-new_space_start),
|
| Assembler::RelocInfoNone());
|
| if (scratch.is(object)) {
|
| - addq(scratch, kScratchRegister);
|
| + addp(scratch, kScratchRegister);
|
| } else {
|
| lea(scratch, Operand(object, kScratchRegister, times_1, 0));
|
| }
|
| @@ -560,7 +560,7 @@ bool MacroAssembler::AllowThisStubCall(CodeStub* stub) {
|
|
|
| void MacroAssembler::IllegalOperation(int num_arguments) {
|
| if (num_arguments > 0) {
|
| - addq(rsp, Immediate(num_arguments * kPointerSize));
|
| + addp(rsp, Immediate(num_arguments * kPointerSize));
|
| }
|
| LoadRoot(rax, Heap::kUndefinedValueRootIndex);
|
| }
|
| @@ -886,7 +886,7 @@ void MacroAssembler::PushCallerSaved(SaveFPRegsMode fp_mode,
|
| }
|
| // R12 to r15 are callee save on all platforms.
|
| if (fp_mode == kSaveFPRegs) {
|
| - subq(rsp, Immediate(kDoubleSize * XMMRegister::kMaxNumRegisters));
|
| + subp(rsp, Immediate(kDoubleSize * XMMRegister::kMaxNumRegisters));
|
| for (int i = 0; i < XMMRegister::kMaxNumRegisters; i++) {
|
| XMMRegister reg = XMMRegister::from_code(i);
|
| movsd(Operand(rsp, i * kDoubleSize), reg);
|
| @@ -904,7 +904,7 @@ void MacroAssembler::PopCallerSaved(SaveFPRegsMode fp_mode,
|
| XMMRegister reg = XMMRegister::from_code(i);
|
| movsd(reg, Operand(rsp, i * kDoubleSize));
|
| }
|
| - addq(rsp, Immediate(kDoubleSize * XMMRegister::kMaxNumRegisters));
|
| + addp(rsp, Immediate(kDoubleSize * XMMRegister::kMaxNumRegisters));
|
| }
|
| for (int i = kNumberOfSavedRegs - 1; i >= 0; i--) {
|
| Register reg = saved_regs[i];
|
| @@ -1449,7 +1449,7 @@ void MacroAssembler::SmiAddConstant(Register dst, Register src, Smi* constant) {
|
| ASSERT(!dst.is(kScratchRegister));
|
| switch (constant->value()) {
|
| case 1:
|
| - addq(dst, kSmiConstantRegister);
|
| + addp(dst, kSmiConstantRegister);
|
| return;
|
| case 2:
|
| lea(dst, Operand(src, kSmiConstantRegister, times_2, 0));
|
| @@ -1462,7 +1462,7 @@ void MacroAssembler::SmiAddConstant(Register dst, Register src, Smi* constant) {
|
| return;
|
| default:
|
| Register constant_reg = GetSmiConstant(constant);
|
| - addq(dst, constant_reg);
|
| + addp(dst, constant_reg);
|
| return;
|
| }
|
| } else {
|
| @@ -1481,7 +1481,7 @@ void MacroAssembler::SmiAddConstant(Register dst, Register src, Smi* constant) {
|
| return;
|
| default:
|
| LoadSmiConstant(dst, constant);
|
| - addq(dst, src);
|
| + addp(dst, src);
|
| return;
|
| }
|
| }
|
| @@ -1508,16 +1508,16 @@ void MacroAssembler::SmiAddConstant(Register dst,
|
| } else if (dst.is(src)) {
|
| ASSERT(!dst.is(kScratchRegister));
|
| LoadSmiConstant(kScratchRegister, constant);
|
| - addq(dst, kScratchRegister);
|
| + addp(dst, kScratchRegister);
|
| if (mode.Contains(BAILOUT_ON_NO_OVERFLOW)) {
|
| j(no_overflow, bailout_label, near_jump);
|
| ASSERT(mode.Contains(PRESERVE_SOURCE_REGISTER));
|
| - subq(dst, kScratchRegister);
|
| + subp(dst, kScratchRegister);
|
| } else if (mode.Contains(BAILOUT_ON_OVERFLOW)) {
|
| if (mode.Contains(PRESERVE_SOURCE_REGISTER)) {
|
| Label done;
|
| j(no_overflow, &done, Label::kNear);
|
| - subq(dst, kScratchRegister);
|
| + subp(dst, kScratchRegister);
|
| jmp(bailout_label, near_jump);
|
| bind(&done);
|
| } else {
|
| @@ -1531,7 +1531,7 @@ void MacroAssembler::SmiAddConstant(Register dst,
|
| ASSERT(mode.Contains(PRESERVE_SOURCE_REGISTER));
|
| ASSERT(mode.Contains(BAILOUT_ON_OVERFLOW));
|
| LoadSmiConstant(dst, constant);
|
| - addq(dst, src);
|
| + addp(dst, src);
|
| j(overflow, bailout_label, near_jump);
|
| }
|
| }
|
| @@ -1545,17 +1545,17 @@ void MacroAssembler::SmiSubConstant(Register dst, Register src, Smi* constant) {
|
| } else if (dst.is(src)) {
|
| ASSERT(!dst.is(kScratchRegister));
|
| Register constant_reg = GetSmiConstant(constant);
|
| - subq(dst, constant_reg);
|
| + subp(dst, constant_reg);
|
| } else {
|
| if (constant->value() == Smi::kMinValue) {
|
| LoadSmiConstant(dst, constant);
|
| // Adding and subtracting the min-value gives the same result, it only
|
| // differs on the overflow bit, which we don't check here.
|
| - addq(dst, src);
|
| + addp(dst, src);
|
| } else {
|
| // Subtract by adding the negation.
|
| LoadSmiConstant(dst, Smi::FromInt(-constant->value()));
|
| - addq(dst, src);
|
| + addp(dst, src);
|
| }
|
| }
|
| }
|
| @@ -1574,16 +1574,16 @@ void MacroAssembler::SmiSubConstant(Register dst,
|
| } else if (dst.is(src)) {
|
| ASSERT(!dst.is(kScratchRegister));
|
| LoadSmiConstant(kScratchRegister, constant);
|
| - subq(dst, kScratchRegister);
|
| + subp(dst, kScratchRegister);
|
| if (mode.Contains(BAILOUT_ON_NO_OVERFLOW)) {
|
| j(no_overflow, bailout_label, near_jump);
|
| ASSERT(mode.Contains(PRESERVE_SOURCE_REGISTER));
|
| - addq(dst, kScratchRegister);
|
| + addp(dst, kScratchRegister);
|
| } else if (mode.Contains(BAILOUT_ON_OVERFLOW)) {
|
| if (mode.Contains(PRESERVE_SOURCE_REGISTER)) {
|
| Label done;
|
| j(no_overflow, &done, Label::kNear);
|
| - addq(dst, kScratchRegister);
|
| + addp(dst, kScratchRegister);
|
| jmp(bailout_label, near_jump);
|
| bind(&done);
|
| } else {
|
| @@ -1600,12 +1600,12 @@ void MacroAssembler::SmiSubConstant(Register dst,
|
| ASSERT(!dst.is(kScratchRegister));
|
| movp(dst, src);
|
| LoadSmiConstant(kScratchRegister, constant);
|
| - subq(dst, kScratchRegister);
|
| + subp(dst, kScratchRegister);
|
| j(overflow, bailout_label, near_jump);
|
| } else {
|
| // Subtract by adding the negation.
|
| LoadSmiConstant(dst, Smi::FromInt(-(constant->value())));
|
| - addq(dst, src);
|
| + addp(dst, src);
|
| j(overflow, bailout_label, near_jump);
|
| }
|
| }
|
| @@ -1643,15 +1643,15 @@ static void SmiAddHelper(MacroAssembler* masm,
|
| Label::Distance near_jump) {
|
| if (dst.is(src1)) {
|
| Label done;
|
| - masm->addq(dst, src2);
|
| + masm->addp(dst, src2);
|
| masm->j(no_overflow, &done, Label::kNear);
|
| // Restore src1.
|
| - masm->subq(dst, src2);
|
| + masm->subp(dst, src2);
|
| masm->jmp(on_not_smi_result, near_jump);
|
| masm->bind(&done);
|
| } else {
|
| masm->movp(dst, src1);
|
| - masm->addq(dst, src2);
|
| + masm->addp(dst, src2);
|
| masm->j(overflow, on_not_smi_result, near_jump);
|
| }
|
| }
|
| @@ -1687,12 +1687,12 @@ void MacroAssembler::SmiAdd(Register dst,
|
| if (!dst.is(src1)) {
|
| if (emit_debug_code()) {
|
| movp(kScratchRegister, src1);
|
| - addq(kScratchRegister, src2);
|
| + addp(kScratchRegister, src2);
|
| Check(no_overflow, kSmiAdditionOverflow);
|
| }
|
| lea(dst, Operand(src1, src2, times_1, 0));
|
| } else {
|
| - addq(dst, src2);
|
| + addp(dst, src2);
|
| Assert(no_overflow, kSmiAdditionOverflow);
|
| }
|
| }
|
| @@ -1707,15 +1707,15 @@ static void SmiSubHelper(MacroAssembler* masm,
|
| Label::Distance near_jump) {
|
| if (dst.is(src1)) {
|
| Label done;
|
| - masm->subq(dst, src2);
|
| + masm->subp(dst, src2);
|
| masm->j(no_overflow, &done, Label::kNear);
|
| // Restore src1.
|
| - masm->addq(dst, src2);
|
| + masm->addp(dst, src2);
|
| masm->jmp(on_not_smi_result, near_jump);
|
| masm->bind(&done);
|
| } else {
|
| masm->movp(dst, src1);
|
| - masm->subq(dst, src2);
|
| + masm->subp(dst, src2);
|
| masm->j(overflow, on_not_smi_result, near_jump);
|
| }
|
| }
|
| @@ -1753,7 +1753,7 @@ static void SmiSubNoOverflowHelper(MacroAssembler* masm,
|
| if (!dst.is(src1)) {
|
| masm->movp(dst, src1);
|
| }
|
| - masm->subq(dst, src2);
|
| + masm->subp(dst, src2);
|
| masm->Assert(no_overflow, kSmiSubtractionOverflow);
|
| }
|
|
|
| @@ -1785,7 +1785,7 @@ void MacroAssembler::SmiMul(Register dst,
|
| Label failure, zero_correct_result;
|
| movp(kScratchRegister, src1); // Create backup for later testing.
|
| SmiToInteger64(dst, src1);
|
| - imul(dst, src2);
|
| + imulp(dst, src2);
|
| j(overflow, &failure, Label::kNear);
|
|
|
| // Check for negative zero result. If product is zero, and one
|
| @@ -1809,7 +1809,7 @@ void MacroAssembler::SmiMul(Register dst,
|
| bind(&correct_result);
|
| } else {
|
| SmiToInteger64(dst, src1);
|
| - imul(dst, src2);
|
| + imulp(dst, src2);
|
| j(overflow, on_not_smi_result, near_jump);
|
| // Check for negative zero result. If product is zero, and one
|
| // argument is negative, go to slow case.
|
| @@ -2176,7 +2176,7 @@ void MacroAssembler::SelectNonSmi(Register dst,
|
| // Exactly one operand is a smi.
|
| ASSERT_EQ(1, static_cast<int>(kSmiTagMask));
|
| // kScratchRegister still holds src1 & kSmiTag, which is either zero or one.
|
| - subq(kScratchRegister, Immediate(1));
|
| + subp(kScratchRegister, Immediate(1));
|
| // If src1 is a smi, then scratch register all 1s, else it is all 0s.
|
| movp(dst, src1);
|
| xor_(dst, src2);
|
| @@ -2289,7 +2289,7 @@ void MacroAssembler::LookupNumberStringCache(Register object,
|
| SmiToInteger32(
|
| mask, FieldOperand(number_string_cache, FixedArray::kLengthOffset));
|
| shrl(mask, Immediate(1));
|
| - subq(mask, Immediate(1)); // Make mask.
|
| + subp(mask, Immediate(1)); // Make mask.
|
|
|
| // Calculate the entry in the number string cache. The hash value in the
|
| // number string cache for smis is just the smi value, and the hash for
|
| @@ -2567,7 +2567,7 @@ void MacroAssembler::LoadGlobalCell(Register dst, Handle<Cell> cell) {
|
|
|
| void MacroAssembler::Drop(int stack_elements) {
|
| if (stack_elements > 0) {
|
| - addq(rsp, Immediate(stack_elements * kPointerSize));
|
| + addp(rsp, Immediate(stack_elements * kPointerSize));
|
| }
|
| }
|
|
|
| @@ -2644,7 +2644,8 @@ void MacroAssembler::Pop(const Operand& dst) {
|
| leal(rsp, Operand(rsp, 4));
|
| if (scratch.is(kSmiConstantRegister)) {
|
| // Restore kSmiConstantRegister.
|
| - movp(kSmiConstantRegister, Smi::FromInt(kSmiConstantRegisterValue),
|
| + movp(kSmiConstantRegister,
|
| + reinterpret_cast<void*>(Smi::FromInt(kSmiConstantRegisterValue)),
|
| Assembler::RelocInfoNone());
|
| }
|
| }
|
| @@ -2788,7 +2789,7 @@ void MacroAssembler::Popad() {
|
|
|
|
|
| void MacroAssembler::Dropad() {
|
| - addq(rsp, Immediate(kNumSafepointRegisters * kPointerSize));
|
| + addp(rsp, Immediate(kNumSafepointRegisters * kPointerSize));
|
| }
|
|
|
|
|
| @@ -2879,7 +2880,7 @@ void MacroAssembler::PopTryHandler() {
|
| STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
| ExternalReference handler_address(Isolate::kHandlerAddress, isolate());
|
| Pop(ExternalOperand(handler_address));
|
| - addq(rsp, Immediate(StackHandlerConstants::kSize - kPointerSize));
|
| + addp(rsp, Immediate(StackHandlerConstants::kSize - kPointerSize));
|
| }
|
|
|
|
|
| @@ -2993,7 +2994,7 @@ void MacroAssembler::Ret(int bytes_dropped, Register scratch) {
|
| ret(bytes_dropped);
|
| } else {
|
| PopReturnAddressTo(scratch);
|
| - addq(rsp, Immediate(bytes_dropped));
|
| + addp(rsp, Immediate(bytes_dropped));
|
| PushReturnAddressFrom(scratch);
|
| ret(0);
|
| }
|
| @@ -3199,10 +3200,10 @@ void MacroAssembler::TruncateHeapNumberToI(Register result_reg,
|
|
|
| // Slow case.
|
| if (input_reg.is(result_reg)) {
|
| - subq(rsp, Immediate(kDoubleSize));
|
| + subp(rsp, Immediate(kDoubleSize));
|
| movsd(MemOperand(rsp, 0), xmm0);
|
| SlowTruncateToI(result_reg, rsp, 0);
|
| - addq(rsp, Immediate(kDoubleSize));
|
| + addp(rsp, Immediate(kDoubleSize));
|
| } else {
|
| SlowTruncateToI(result_reg, input_reg);
|
| }
|
| @@ -3219,10 +3220,10 @@ void MacroAssembler::TruncateDoubleToI(Register result_reg,
|
| cmpq(result_reg, kScratchRegister);
|
| j(not_equal, &done, Label::kNear);
|
|
|
| - subq(rsp, Immediate(kDoubleSize));
|
| + subp(rsp, Immediate(kDoubleSize));
|
| movsd(MemOperand(rsp, 0), input_reg);
|
| SlowTruncateToI(result_reg, rsp, 0);
|
| - addq(rsp, Immediate(kDoubleSize));
|
| + addp(rsp, Immediate(kDoubleSize));
|
|
|
| bind(&done);
|
| }
|
| @@ -3716,7 +3717,7 @@ void MacroAssembler::InvokePrologue(const ParameterCount& expected,
|
| Handle<Code> adaptor = isolate()->builtins()->ArgumentsAdaptorTrampoline();
|
| if (!code_constant.is_null()) {
|
| Move(rdx, code_constant, RelocInfo::EMBEDDED_OBJECT);
|
| - addq(rdx, Immediate(Code::kHeaderSize - kHeapObjectTag));
|
| + addp(rdx, Immediate(Code::kHeaderSize - kHeapObjectTag));
|
| } else if (!code_register.is(rdx)) {
|
| movp(rdx, code_register);
|
| }
|
| @@ -3824,14 +3825,14 @@ void MacroAssembler::EnterExitFrameEpilogue(int arg_stack_space,
|
| if (save_doubles) {
|
| int space = XMMRegister::kMaxNumAllocatableRegisters * kDoubleSize +
|
| arg_stack_space * kRegisterSize;
|
| - subq(rsp, Immediate(space));
|
| + subp(rsp, Immediate(space));
|
| int offset = -2 * kPointerSize;
|
| for (int i = 0; i < XMMRegister::NumAllocatableRegisters(); i++) {
|
| XMMRegister reg = XMMRegister::FromAllocationIndex(i);
|
| movsd(Operand(rbp, offset - ((i + 1) * kDoubleSize)), reg);
|
| }
|
| } else if (arg_stack_space > 0) {
|
| - subq(rsp, Immediate(arg_stack_space * kRegisterSize));
|
| + subp(rsp, Immediate(arg_stack_space * kRegisterSize));
|
| }
|
|
|
| // Get the required frame alignment for the OS.
|
| @@ -4193,7 +4194,7 @@ void MacroAssembler::Allocate(int object_size,
|
| if (!top_reg.is(result)) {
|
| movp(top_reg, result);
|
| }
|
| - addq(top_reg, Immediate(object_size));
|
| + addp(top_reg, Immediate(object_size));
|
| j(carry, gc_required);
|
| Operand limit_operand = ExternalOperand(allocation_limit);
|
| cmpq(top_reg, limit_operand);
|
| @@ -4205,9 +4206,9 @@ void MacroAssembler::Allocate(int object_size,
|
| bool tag_result = (flags & TAG_OBJECT) != 0;
|
| if (top_reg.is(result)) {
|
| if (tag_result) {
|
| - subq(result, Immediate(object_size - kHeapObjectTag));
|
| + subp(result, Immediate(object_size - kHeapObjectTag));
|
| } else {
|
| - subq(result, Immediate(object_size));
|
| + subp(result, Immediate(object_size));
|
| }
|
| } else if (tag_result) {
|
| // Tag the result if requested.
|
| @@ -4269,7 +4270,7 @@ void MacroAssembler::Allocate(Register object_size,
|
| if (!object_size.is(result_end)) {
|
| movp(result_end, object_size);
|
| }
|
| - addq(result_end, result);
|
| + addp(result_end, result);
|
| j(carry, gc_required);
|
| Operand limit_operand = ExternalOperand(allocation_limit);
|
| cmpq(result_end, limit_operand);
|
| @@ -4280,7 +4281,7 @@ void MacroAssembler::Allocate(Register object_size,
|
|
|
| // Tag the result if requested.
|
| if ((flags & TAG_OBJECT) != 0) {
|
| - addq(result, Immediate(kHeapObjectTag));
|
| + addp(result, Immediate(kHeapObjectTag));
|
| }
|
| }
|
|
|
| @@ -4328,7 +4329,7 @@ void MacroAssembler::AllocateTwoByteString(Register result,
|
| kHeaderAlignment));
|
| and_(scratch1, Immediate(~kObjectAlignmentMask));
|
| if (kHeaderAlignment > 0) {
|
| - subq(scratch1, Immediate(kHeaderAlignment));
|
| + subp(scratch1, Immediate(kHeaderAlignment));
|
| }
|
|
|
| // Allocate two byte string in new space.
|
| @@ -4363,10 +4364,10 @@ void MacroAssembler::AllocateAsciiString(Register result,
|
| kObjectAlignmentMask;
|
| movl(scratch1, length);
|
| ASSERT(kCharSize == 1);
|
| - addq(scratch1, Immediate(kObjectAlignmentMask + kHeaderAlignment));
|
| + addp(scratch1, Immediate(kObjectAlignmentMask + kHeaderAlignment));
|
| and_(scratch1, Immediate(~kObjectAlignmentMask));
|
| if (kHeaderAlignment > 0) {
|
| - subq(scratch1, Immediate(kHeaderAlignment));
|
| + subp(scratch1, Immediate(kHeaderAlignment));
|
| }
|
|
|
| // Allocate ASCII string in new space.
|
| @@ -4517,7 +4518,7 @@ void MacroAssembler::CopyBytes(Register destination,
|
| andl(scratch, Immediate(kPointerSize - 1));
|
| movp(length, Operand(source, scratch, times_1, -kPointerSize));
|
| movp(Operand(destination, scratch, times_1, -kPointerSize), length);
|
| - addq(destination, scratch);
|
| + addp(destination, scratch);
|
|
|
| if (min_length <= kLongStringLimit) {
|
| jmp(&done, Label::kNear);
|
| @@ -4533,7 +4534,7 @@ void MacroAssembler::CopyBytes(Register destination,
|
| // Move remaining bytes of length.
|
| movp(scratch, Operand(source, length, times_1, -kPointerSize));
|
| movp(Operand(destination, length, times_1, -kPointerSize), scratch);
|
| - addq(destination, length);
|
| + addp(destination, length);
|
| jmp(&done, Label::kNear);
|
|
|
| bind(&short_string);
|
| @@ -4562,7 +4563,7 @@ void MacroAssembler::InitializeFieldsWithFiller(Register start_offset,
|
| jmp(&entry);
|
| bind(&loop);
|
| movp(Operand(start_offset, 0), filler);
|
| - addq(start_offset, Immediate(kPointerSize));
|
| + addp(start_offset, Immediate(kPointerSize));
|
| bind(&entry);
|
| cmpq(start_offset, end_offset);
|
| j(less, &loop);
|
| @@ -4716,7 +4717,7 @@ void MacroAssembler::PrepareCallCFunction(int num_arguments) {
|
| ASSERT(IsPowerOf2(frame_alignment));
|
| int argument_slots_on_stack =
|
| ArgumentStackSlotsForCFunctionCall(num_arguments);
|
| - subq(rsp, Immediate((argument_slots_on_stack + 1) * kRegisterSize));
|
| + subp(rsp, Immediate((argument_slots_on_stack + 1) * kRegisterSize));
|
| and_(rsp, Immediate(-frame_alignment));
|
| movp(Operand(rsp, argument_slots_on_stack * kRegisterSize), kScratchRegister);
|
| }
|
| @@ -4874,7 +4875,7 @@ void MacroAssembler::GetMarkBits(Register addr_reg,
|
| Immediate((Page::kPageAlignmentMask >> shift) &
|
| ~(Bitmap::kBytesPerCell - 1)));
|
|
|
| - addq(bitmap_reg, rcx);
|
| + addp(bitmap_reg, rcx);
|
| movp(rcx, addr_reg);
|
| shrl(rcx, Immediate(kPointerSizeLog2));
|
| and_(rcx, Immediate((1 << Bitmap::kBitsPerCellLog2) - 1));
|
| @@ -4910,7 +4911,7 @@ void MacroAssembler::EnsureNotWhite(
|
| Label ok;
|
| Push(mask_scratch);
|
| // shl. May overflow making the check conservative.
|
| - addq(mask_scratch, mask_scratch);
|
| + addp(mask_scratch, mask_scratch);
|
| testq(Operand(bitmap_scratch, MemoryChunk::kHeaderSize), mask_scratch);
|
| j(zero, &ok, Label::kNear);
|
| int3();
|
| @@ -4960,11 +4961,11 @@ void MacroAssembler::EnsureNotWhite(
|
| ASSERT(kOneByteStringTag == 0x04);
|
| and_(length, Immediate(kStringEncodingMask));
|
| xor_(length, Immediate(kStringEncodingMask));
|
| - addq(length, Immediate(0x04));
|
| + addp(length, Immediate(0x04));
|
| // Value now either 4 (if ASCII) or 8 (if UC16), i.e. char-size shifted by 2.
|
| - imul(length, FieldOperand(value, String::kLengthOffset));
|
| + imulp(length, FieldOperand(value, String::kLengthOffset));
|
| shr(length, Immediate(2 + kSmiTagSize + kSmiShiftSize));
|
| - addq(length, Immediate(SeqString::kHeaderSize + kObjectAlignmentMask));
|
| + addp(length, Immediate(SeqString::kHeaderSize + kObjectAlignmentMask));
|
| and_(length, Immediate(~kObjectAlignmentMask));
|
|
|
| bind(&is_data_object);
|
|
|