X87: Minor-key-ify remaining code stubs

port r23643.

original commit message:

  Minor-key-ify remaining code stubs

BUG=
R=weiliang.lin@intel.com

Review URL: https://codereview.chromium.org/542043002

Patch from Jing Bao <jing.bao@intel.com>.

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23711 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
weiliang.lin@intel.com 2014-09-05 06:41:24 +00:00
parent 276c2a0dec
commit 48c61115ec
2 changed files with 61 additions and 60 deletions

View File

@ -3517,9 +3517,9 @@ void NameDictionaryLookupStub::Generate(MacroAssembler* masm) {
Label in_dictionary, maybe_in_dictionary, not_in_dictionary; Label in_dictionary, maybe_in_dictionary, not_in_dictionary;
Register scratch = result_; Register scratch = result();
__ mov(scratch, FieldOperand(dictionary_, kCapacityOffset)); __ mov(scratch, FieldOperand(dictionary(), kCapacityOffset));
__ dec(scratch); __ dec(scratch);
__ SmiUntag(scratch); __ SmiUntag(scratch);
__ push(scratch); __ push(scratch);
@ -3539,13 +3539,11 @@ void NameDictionaryLookupStub::Generate(MacroAssembler* masm) {
// Scale the index by multiplying by the entry size. // Scale the index by multiplying by the entry size.
DCHECK(NameDictionary::kEntrySize == 3); DCHECK(NameDictionary::kEntrySize == 3);
__ lea(index_, Operand(scratch, scratch, times_2, 0)); // index *= 3. __ lea(index(), Operand(scratch, scratch, times_2, 0)); // index *= 3.
// Having undefined at this place means the name is not contained. // Having undefined at this place means the name is not contained.
DCHECK_EQ(kSmiTagSize, 1); DCHECK_EQ(kSmiTagSize, 1);
__ mov(scratch, Operand(dictionary_, __ mov(scratch, Operand(dictionary(), index(), times_pointer_size,
index_,
times_pointer_size,
kElementsStartOffset - kHeapObjectTag)); kElementsStartOffset - kHeapObjectTag));
__ cmp(scratch, isolate()->factory()->undefined_value()); __ cmp(scratch, isolate()->factory()->undefined_value());
__ j(equal, &not_in_dictionary); __ j(equal, &not_in_dictionary);
@ -3554,7 +3552,7 @@ void NameDictionaryLookupStub::Generate(MacroAssembler* masm) {
__ cmp(scratch, Operand(esp, 3 * kPointerSize)); __ cmp(scratch, Operand(esp, 3 * kPointerSize));
__ j(equal, &in_dictionary); __ j(equal, &in_dictionary);
if (i != kTotalProbes - 1 && mode_ == NEGATIVE_LOOKUP) { if (i != kTotalProbes - 1 && mode() == NEGATIVE_LOOKUP) {
// If we hit a key that is not a unique name during negative // If we hit a key that is not a unique name during negative
// lookup we have to bailout as this key might be equal to the // lookup we have to bailout as this key might be equal to the
// key we are looking for. // key we are looking for.
@ -3570,19 +3568,19 @@ void NameDictionaryLookupStub::Generate(MacroAssembler* masm) {
// If we are doing negative lookup then probing failure should be // If we are doing negative lookup then probing failure should be
// treated as a lookup success. For positive lookup probing failure // treated as a lookup success. For positive lookup probing failure
// should be treated as lookup failure. // should be treated as lookup failure.
if (mode_ == POSITIVE_LOOKUP) { if (mode() == POSITIVE_LOOKUP) {
__ mov(result_, Immediate(0)); __ mov(result(), Immediate(0));
__ Drop(1); __ Drop(1);
__ ret(2 * kPointerSize); __ ret(2 * kPointerSize);
} }
__ bind(&in_dictionary); __ bind(&in_dictionary);
__ mov(result_, Immediate(1)); __ mov(result(), Immediate(1));
__ Drop(1); __ Drop(1);
__ ret(2 * kPointerSize); __ ret(2 * kPointerSize);
__ bind(&not_in_dictionary); __ bind(&not_in_dictionary);
__ mov(result_, Immediate(0)); __ mov(result(), Immediate(0));
__ Drop(1); __ Drop(1);
__ ret(2 * kPointerSize); __ ret(2 * kPointerSize);
} }
@ -3610,10 +3608,8 @@ void RecordWriteStub::Generate(MacroAssembler* masm) {
__ jmp(&skip_to_incremental_noncompacting, Label::kNear); __ jmp(&skip_to_incremental_noncompacting, Label::kNear);
__ jmp(&skip_to_incremental_compacting, Label::kFar); __ jmp(&skip_to_incremental_compacting, Label::kFar);
if (remembered_set_action_ == EMIT_REMEMBERED_SET) { if (remembered_set_action() == EMIT_REMEMBERED_SET) {
__ RememberedSetHelper(object_, __ RememberedSetHelper(object(), address(), value(),
address_,
value_,
MacroAssembler::kReturnAtEnd); MacroAssembler::kReturnAtEnd);
} else { } else {
__ ret(0); __ ret(0);
@ -3635,7 +3631,7 @@ void RecordWriteStub::Generate(MacroAssembler* masm) {
void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) { void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
regs_.Save(masm); regs_.Save(masm);
if (remembered_set_action_ == EMIT_REMEMBERED_SET) { if (remembered_set_action() == EMIT_REMEMBERED_SET) {
Label dont_need_remembered_set; Label dont_need_remembered_set;
__ mov(regs_.scratch0(), Operand(regs_.address(), 0)); __ mov(regs_.scratch0(), Operand(regs_.address(), 0));
@ -3657,9 +3653,7 @@ void RecordWriteStub::GenerateIncremental(MacroAssembler* masm, Mode mode) {
mode); mode);
InformIncrementalMarker(masm); InformIncrementalMarker(masm);
regs_.Restore(masm); regs_.Restore(masm);
__ RememberedSetHelper(object_, __ RememberedSetHelper(object(), address(), value(),
address_,
value_,
MacroAssembler::kReturnAtEnd); MacroAssembler::kReturnAtEnd);
__ bind(&dont_need_remembered_set); __ bind(&dont_need_remembered_set);
@ -3720,9 +3714,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object_, __ RememberedSetHelper(object(), address(), value(),
address_,
value_,
MacroAssembler::kReturnAtEnd); MacroAssembler::kReturnAtEnd);
} else { } else {
__ ret(0); __ ret(0);
@ -3767,9 +3759,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
regs_.Restore(masm); regs_.Restore(masm);
if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
__ RememberedSetHelper(object_, __ RememberedSetHelper(object(), address(), value(),
address_,
value_,
MacroAssembler::kReturnAtEnd); MacroAssembler::kReturnAtEnd);
} else { } else {
__ ret(0); __ ret(0);

View File

@ -75,13 +75,13 @@ class NameDictionaryLookupStub: public PlatformCodeStub {
public: public:
enum LookupMode { POSITIVE_LOOKUP, NEGATIVE_LOOKUP }; enum LookupMode { POSITIVE_LOOKUP, NEGATIVE_LOOKUP };
NameDictionaryLookupStub(Isolate* isolate, NameDictionaryLookupStub(Isolate* isolate, Register dictionary,
Register dictionary, Register result, Register index, LookupMode mode)
Register result, : PlatformCodeStub(isolate) {
Register index, minor_key_ = DictionaryBits::encode(dictionary.code()) |
LookupMode mode) ResultBits::encode(result.code()) |
: PlatformCodeStub(isolate), IndexBits::encode(index.code()) | LookupModeBits::encode(mode);
dictionary_(dictionary), result_(result), index_(index), mode_(mode) { } }
void Generate(MacroAssembler* masm); void Generate(MacroAssembler* masm);
@ -116,22 +116,26 @@ class NameDictionaryLookupStub: public PlatformCodeStub {
Major MajorKey() const { return NameDictionaryLookup; } Major MajorKey() const { return NameDictionaryLookup; }
uint32_t MinorKey() const { Register dictionary() const {
return DictionaryBits::encode(dictionary_.code()) | return Register::from_code(DictionaryBits::decode(minor_key_));
ResultBits::encode(result_.code()) |
IndexBits::encode(index_.code()) |
LookupModeBits::encode(mode_);
} }
Register result() const {
return Register::from_code(ResultBits::decode(minor_key_));
}
Register index() const {
return Register::from_code(IndexBits::decode(minor_key_));
}
LookupMode mode() const { return LookupModeBits::decode(minor_key_); }
class DictionaryBits: public BitField<int, 0, 3> {}; class DictionaryBits: public BitField<int, 0, 3> {};
class ResultBits: public BitField<int, 3, 3> {}; class ResultBits: public BitField<int, 3, 3> {};
class IndexBits: public BitField<int, 6, 3> {}; class IndexBits: public BitField<int, 6, 3> {};
class LookupModeBits: public BitField<LookupMode, 9, 1> {}; class LookupModeBits: public BitField<LookupMode, 9, 1> {};
Register dictionary_; DISALLOW_COPY_AND_ASSIGN(NameDictionaryLookupStub);
Register result_;
Register index_;
LookupMode mode_;
}; };
@ -143,13 +147,13 @@ class RecordWriteStub: public PlatformCodeStub {
Register address, Register address,
RememberedSetAction remembered_set_action) RememberedSetAction remembered_set_action)
: PlatformCodeStub(isolate), : PlatformCodeStub(isolate),
object_(object),
value_(value),
address_(address),
remembered_set_action_(remembered_set_action),
regs_(object, // An input reg. regs_(object, // An input reg.
address, // An input reg. address, // An input reg.
value) { // One scratch reg. value) { // One scratch reg.
minor_key_ = ObjectBits::encode(object.code()) |
ValueBits::encode(value.code()) |
AddressBits::encode(address.code()) |
RememberedSetActionBits::encode(remembered_set_action);
} }
enum Mode { enum Mode {
@ -332,8 +336,10 @@ class RecordWriteStub: public PlatformCodeStub {
enum OnNoNeedToInformIncrementalMarker { enum OnNoNeedToInformIncrementalMarker {
kReturnOnNoNeedToInformIncrementalMarker, kReturnOnNoNeedToInformIncrementalMarker,
kUpdateRememberedSetOnNoNeedToInformIncrementalMarker kUpdateRememberedSetOnNoNeedToInformIncrementalMarker
} };
;
Major MajorKey() const { return RecordWrite; }
void Generate(MacroAssembler* masm); void Generate(MacroAssembler* masm);
void GenerateIncremental(MacroAssembler* masm, Mode mode); void GenerateIncremental(MacroAssembler* masm, Mode mode);
void CheckNeedsToInformIncrementalMarker( void CheckNeedsToInformIncrementalMarker(
@ -342,29 +348,34 @@ class RecordWriteStub: public PlatformCodeStub {
Mode mode); Mode mode);
void InformIncrementalMarker(MacroAssembler* masm); void InformIncrementalMarker(MacroAssembler* masm);
Major MajorKey() const { return RecordWrite; }
uint32_t MinorKey() const {
return ObjectBits::encode(object_.code()) |
ValueBits::encode(value_.code()) |
AddressBits::encode(address_.code()) |
RememberedSetActionBits::encode(remembered_set_action_);
}
void Activate(Code* code) { void Activate(Code* code) {
code->GetHeap()->incremental_marking()->ActivateGeneratedStub(code); code->GetHeap()->incremental_marking()->ActivateGeneratedStub(code);
} }
Register object() const {
return Register::from_code(ObjectBits::decode(minor_key_));
}
Register value() const {
return Register::from_code(ValueBits::decode(minor_key_));
}
Register address() const {
return Register::from_code(AddressBits::decode(minor_key_));
}
RememberedSetAction remembered_set_action() const {
return RememberedSetActionBits::decode(minor_key_);
}
class ObjectBits: public BitField<int, 0, 3> {}; class ObjectBits: public BitField<int, 0, 3> {};
class ValueBits: public BitField<int, 3, 3> {}; class ValueBits: public BitField<int, 3, 3> {};
class AddressBits: public BitField<int, 6, 3> {}; class AddressBits: public BitField<int, 6, 3> {};
class RememberedSetActionBits: public BitField<RememberedSetAction, 9, 1> {}; class RememberedSetActionBits: public BitField<RememberedSetAction, 9, 1> {};
Register object_;
Register value_;
Register address_;
RememberedSetAction remembered_set_action_;
RegisterAllocation regs_; RegisterAllocation regs_;
DISALLOW_COPY_AND_ASSIGN(RecordWriteStub);
}; };