From: haitao.feng@intel.com Date: Thu, 29 Aug 2013 11:41:14 +0000 (+0000) Subject: Consolidate SMI functions into one area for X64 X-Git-Tag: upstream/4.7.83~12754 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=94621761b8c55f7c599c3bce494af5b54583d5c8;p=platform%2Fupstream%2Fv8.git Consolidate SMI functions into one area for X64 R=jkummerow@chromium.org Review URL: https://codereview.chromium.org/23665002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16418 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc index 0938007..0c605d8 100644 --- a/src/x64/macro-assembler-x64.cc +++ b/src/x64/macro-assembler-x64.cc @@ -958,7 +958,10 @@ void MacroAssembler::Set(const Operand& dst, int64_t x) { } -bool MacroAssembler::IsUnsafeInt(const int x) { +// ---------------------------------------------------------------------------- +// Smi tagging, untagging and tag detection. + +bool MacroAssembler::IsUnsafeInt(const int32_t x) { static const int kMaxBits = 17; return !is_intn(x, kMaxBits); } @@ -989,9 +992,6 @@ void MacroAssembler::SafePush(Smi* src) { } -// ---------------------------------------------------------------------------- -// Smi tagging, untagging and tag detection. - Register MacroAssembler::GetSmiConstant(Smi* source) { int value = source->value(); if (value == 0) { @@ -2196,6 +2196,17 @@ void MacroAssembler::AddSmiField(Register dst, const Operand& src) { } +void MacroAssembler::Push(Smi* source) { + intptr_t smi = reinterpret_cast(source); + if (is_int32(smi)) { + push(Immediate(static_cast(smi))); + } else { + Register constant = GetSmiConstant(source); + push(constant); + } +} + + void MacroAssembler::PushInt64AsTwoSmis(Register src, Register scratch) { movq(scratch, src); // High bits. @@ -2220,6 +2231,14 @@ void MacroAssembler::PopInt64AsTwoSmis(Register dst, Register scratch) { } +void MacroAssembler::Test(const Operand& src, Smi* source) { + testl(Operand(src, kIntSize), Immediate(source->value())); +} + + +// ---------------------------------------------------------------------------- + + void MacroAssembler::JumpIfNotString(Register object, Register object_map, Label* not_string, @@ -2459,17 +2478,6 @@ void MacroAssembler::LoadGlobalCell(Register dst, Handle cell) { } -void MacroAssembler::Push(Smi* source) { - intptr_t smi = reinterpret_cast(source); - if (is_int32(smi)) { - push(Immediate(static_cast(smi))); - } else { - Register constant = GetSmiConstant(source); - push(constant); - } -} - - void MacroAssembler::Drop(int stack_elements) { if (stack_elements > 0) { addq(rsp, Immediate(stack_elements * kPointerSize)); @@ -2477,11 +2485,6 @@ void MacroAssembler::Drop(int stack_elements) { } -void MacroAssembler::Test(const Operand& src, Smi* source) { - testl(Operand(src, kIntSize), Immediate(source->value())); -} - - void MacroAssembler::TestBit(const Operand& src, int bits) { int byte_offset = bits / kBitsPerByte; int bit_in_byte = bits & (kBitsPerByte - 1); diff --git a/src/x64/macro-assembler-x64.h b/src/x64/macro-assembler-x64.h index d9fb373..8e30981 100644 --- a/src/x64/macro-assembler-x64.h +++ b/src/x64/macro-assembler-x64.h @@ -375,6 +375,11 @@ class MacroAssembler: public Assembler { // --------------------------------------------------------------------------- // Smi tagging, untagging and operations on tagged smis. + // Support for constant splitting. + bool IsUnsafeInt(const int32_t x); + void SafeMove(Register dst, Smi* src); + void SafePush(Smi* src); + void InitializeSmiConstantRegister() { movq(kSmiConstantRegister, reinterpret_cast(Smi::FromInt(kSmiConstantRegisterValue)), @@ -782,11 +787,6 @@ class MacroAssembler: public Assembler { // Move if the registers are not identical. void Move(Register target, Register source); - // Support for constant splitting. - bool IsUnsafeInt(const int x); - void SafeMove(Register dst, Smi* src); - void SafePush(Smi* src); - // Bit-field support. void TestBit(const Operand& dst, int bit_index);