Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(179)

Side by Side Diff: src/ia32/code-stubs-ia32.h

Issue 535733004: Minor-key-ify remaining code stubs. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_IA32_CODE_STUBS_IA32_H_ 5 #ifndef V8_IA32_CODE_STUBS_IA32_H_
6 #define V8_IA32_CODE_STUBS_IA32_H_ 6 #define V8_IA32_CODE_STUBS_IA32_H_
7 7
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 9
10 namespace v8 { 10 namespace v8 {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 Label::Distance chars_not_equal_near = Label::kFar); 68 Label::Distance chars_not_equal_near = Label::kFar);
69 69
70 DISALLOW_IMPLICIT_CONSTRUCTORS(StringHelper); 70 DISALLOW_IMPLICIT_CONSTRUCTORS(StringHelper);
71 }; 71 };
72 72
73 73
74 class NameDictionaryLookupStub: public PlatformCodeStub { 74 class NameDictionaryLookupStub: public PlatformCodeStub {
75 public: 75 public:
76 enum LookupMode { POSITIVE_LOOKUP, NEGATIVE_LOOKUP }; 76 enum LookupMode { POSITIVE_LOOKUP, NEGATIVE_LOOKUP };
77 77
78 NameDictionaryLookupStub(Isolate* isolate, 78 NameDictionaryLookupStub(Isolate* isolate, Register dictionary,
79 Register dictionary, 79 Register result, Register index, LookupMode mode)
80 Register result, 80 : PlatformCodeStub(isolate) {
81 Register index, 81 minor_key_ = DictionaryBits::encode(dictionary.code()) |
82 LookupMode mode) 82 ResultBits::encode(result.code()) |
83 : PlatformCodeStub(isolate), 83 IndexBits::encode(index.code()) | LookupModeBits::encode(mode);
84 dictionary_(dictionary), result_(result), index_(index), mode_(mode) { } 84 }
85 85
86 void Generate(MacroAssembler* masm); 86 void Generate(MacroAssembler* masm);
87 87
88 static void GenerateNegativeLookup(MacroAssembler* masm, 88 static void GenerateNegativeLookup(MacroAssembler* masm,
89 Label* miss, 89 Label* miss,
90 Label* done, 90 Label* done,
91 Register properties, 91 Register properties,
92 Handle<Name> name, 92 Handle<Name> name,
93 Register r0); 93 Register r0);
94 94
(...skipping 14 matching lines...) Expand all
109 static const int kCapacityOffset = 109 static const int kCapacityOffset =
110 NameDictionary::kHeaderSize + 110 NameDictionary::kHeaderSize +
111 NameDictionary::kCapacityIndex * kPointerSize; 111 NameDictionary::kCapacityIndex * kPointerSize;
112 112
113 static const int kElementsStartOffset = 113 static const int kElementsStartOffset =
114 NameDictionary::kHeaderSize + 114 NameDictionary::kHeaderSize +
115 NameDictionary::kElementsStartIndex * kPointerSize; 115 NameDictionary::kElementsStartIndex * kPointerSize;
116 116
117 Major MajorKey() const { return NameDictionaryLookup; } 117 Major MajorKey() const { return NameDictionaryLookup; }
118 118
119 uint32_t MinorKey() const { 119 Register dictionary() const {
120 return DictionaryBits::encode(dictionary_.code()) | 120 return Register::from_code(DictionaryBits::decode(minor_key_));
121 ResultBits::encode(result_.code()) |
122 IndexBits::encode(index_.code()) |
123 LookupModeBits::encode(mode_);
124 } 121 }
125 122
123 Register result() const {
124 return Register::from_code(ResultBits::decode(minor_key_));
125 }
126
127 Register index() const {
128 return Register::from_code(IndexBits::decode(minor_key_));
129 }
130
131 LookupMode mode() const { return LookupModeBits::decode(minor_key_); }
132
126 class DictionaryBits: public BitField<int, 0, 3> {}; 133 class DictionaryBits: public BitField<int, 0, 3> {};
127 class ResultBits: public BitField<int, 3, 3> {}; 134 class ResultBits: public BitField<int, 3, 3> {};
128 class IndexBits: public BitField<int, 6, 3> {}; 135 class IndexBits: public BitField<int, 6, 3> {};
129 class LookupModeBits: public BitField<LookupMode, 9, 1> {}; 136 class LookupModeBits: public BitField<LookupMode, 9, 1> {};
130 137
131 Register dictionary_; 138 DISALLOW_COPY_AND_ASSIGN(NameDictionaryLookupStub);
132 Register result_;
133 Register index_;
134 LookupMode mode_;
135 }; 139 };
136 140
137 141
138 class RecordWriteStub: public PlatformCodeStub { 142 class RecordWriteStub: public PlatformCodeStub {
139 public: 143 public:
140 RecordWriteStub(Isolate* isolate, 144 RecordWriteStub(Isolate* isolate,
141 Register object, 145 Register object,
142 Register value, 146 Register value,
143 Register address, 147 Register address,
144 RememberedSetAction remembered_set_action, 148 RememberedSetAction remembered_set_action,
145 SaveFPRegsMode fp_mode) 149 SaveFPRegsMode fp_mode)
146 : PlatformCodeStub(isolate), 150 : PlatformCodeStub(isolate),
147 object_(object),
148 value_(value),
149 address_(address),
150 remembered_set_action_(remembered_set_action),
151 save_fp_regs_mode_(fp_mode),
152 regs_(object, // An input reg. 151 regs_(object, // An input reg.
153 address, // An input reg. 152 address, // An input reg.
154 value) { // One scratch reg. 153 value) { // One scratch reg.
154 minor_key_ = ObjectBits::encode(object.code()) |
155 ValueBits::encode(value.code()) |
156 AddressBits::encode(address.code()) |
157 RememberedSetActionBits::encode(remembered_set_action) |
158 SaveFPRegsModeBits::encode(fp_mode);
155 } 159 }
156 160
157 enum Mode { 161 enum Mode {
158 STORE_BUFFER_ONLY, 162 STORE_BUFFER_ONLY,
159 INCREMENTAL, 163 INCREMENTAL,
160 INCREMENTAL_COMPACTION 164 INCREMENTAL_COMPACTION
161 }; 165 };
162 166
163 virtual bool SometimesSetsUpAFrame() { return false; } 167 virtual bool SometimesSetsUpAFrame() { return false; }
164 168
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 } 350 }
347 UNREACHABLE(); 351 UNREACHABLE();
348 return no_reg; 352 return no_reg;
349 } 353 }
350 friend class RecordWriteStub; 354 friend class RecordWriteStub;
351 }; 355 };
352 356
353 enum OnNoNeedToInformIncrementalMarker { 357 enum OnNoNeedToInformIncrementalMarker {
354 kReturnOnNoNeedToInformIncrementalMarker, 358 kReturnOnNoNeedToInformIncrementalMarker,
355 kUpdateRememberedSetOnNoNeedToInformIncrementalMarker 359 kUpdateRememberedSetOnNoNeedToInformIncrementalMarker
356 } 360 };
357 ; 361
362 Major MajorKey() const { return RecordWrite; }
363
358 void Generate(MacroAssembler* masm); 364 void Generate(MacroAssembler* masm);
359 void GenerateIncremental(MacroAssembler* masm, Mode mode); 365 void GenerateIncremental(MacroAssembler* masm, Mode mode);
360 void CheckNeedsToInformIncrementalMarker( 366 void CheckNeedsToInformIncrementalMarker(
361 MacroAssembler* masm, 367 MacroAssembler* masm,
362 OnNoNeedToInformIncrementalMarker on_no_need, 368 OnNoNeedToInformIncrementalMarker on_no_need,
363 Mode mode); 369 Mode mode);
364 void InformIncrementalMarker(MacroAssembler* masm); 370 void InformIncrementalMarker(MacroAssembler* masm);
365 371
366 Major MajorKey() const { return RecordWrite; }
367
368 uint32_t MinorKey() const {
369 return ObjectBits::encode(object_.code()) |
370 ValueBits::encode(value_.code()) |
371 AddressBits::encode(address_.code()) |
372 RememberedSetActionBits::encode(remembered_set_action_) |
373 SaveFPRegsModeBits::encode(save_fp_regs_mode_);
374 }
375
376 void Activate(Code* code) { 372 void Activate(Code* code) {
377 code->GetHeap()->incremental_marking()->ActivateGeneratedStub(code); 373 code->GetHeap()->incremental_marking()->ActivateGeneratedStub(code);
378 } 374 }
379 375
376 Register object() const {
377 return Register::from_code(ObjectBits::decode(minor_key_));
378 }
379
380 Register value() const {
381 return Register::from_code(ValueBits::decode(minor_key_));
382 }
383
384 Register address() const {
385 return Register::from_code(AddressBits::decode(minor_key_));
386 }
387
388 RememberedSetAction remembered_set_action() const {
389 return RememberedSetActionBits::decode(minor_key_);
390 }
391
392 SaveFPRegsMode save_fp_regs_mode() const {
393 return SaveFPRegsModeBits::decode(minor_key_);
394 }
395
380 class ObjectBits: public BitField<int, 0, 3> {}; 396 class ObjectBits: public BitField<int, 0, 3> {};
381 class ValueBits: public BitField<int, 3, 3> {}; 397 class ValueBits: public BitField<int, 3, 3> {};
382 class AddressBits: public BitField<int, 6, 3> {}; 398 class AddressBits: public BitField<int, 6, 3> {};
383 class RememberedSetActionBits: public BitField<RememberedSetAction, 9, 1> {}; 399 class RememberedSetActionBits: public BitField<RememberedSetAction, 9, 1> {};
384 class SaveFPRegsModeBits: public BitField<SaveFPRegsMode, 10, 1> {}; 400 class SaveFPRegsModeBits: public BitField<SaveFPRegsMode, 10, 1> {};
385 401
386 Register object_;
387 Register value_;
388 Register address_;
389 RememberedSetAction remembered_set_action_;
390 SaveFPRegsMode save_fp_regs_mode_;
391 RegisterAllocation regs_; 402 RegisterAllocation regs_;
403
404 DISALLOW_COPY_AND_ASSIGN(RecordWriteStub);
392 }; 405 };
393 406
394 407
395 } } // namespace v8::internal 408 } } // namespace v8::internal
396 409
397 #endif // V8_IA32_CODE_STUBS_IA32_H_ 410 #endif // V8_IA32_CODE_STUBS_IA32_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698