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

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

Issue 542613003: Introduce code stub constructors for stub keys. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: define MajorKey inline 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"
9
10 namespace v8 { 8 namespace v8 {
11 namespace internal { 9 namespace internal {
12 10
13 11
14 void ArrayNativeCode(MacroAssembler* masm, 12 void ArrayNativeCode(MacroAssembler* masm,
15 bool construct_call, 13 bool construct_call,
16 Label* call_generic_code); 14 Label* call_generic_code);
17 15
18 16
19 class StringHelper : public AllStatic { 17 class StringHelper : public AllStatic {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 static const int kTotalProbes = 20; 105 static const int kTotalProbes = 20;
108 106
109 static const int kCapacityOffset = 107 static const int kCapacityOffset =
110 NameDictionary::kHeaderSize + 108 NameDictionary::kHeaderSize +
111 NameDictionary::kCapacityIndex * kPointerSize; 109 NameDictionary::kCapacityIndex * kPointerSize;
112 110
113 static const int kElementsStartOffset = 111 static const int kElementsStartOffset =
114 NameDictionary::kHeaderSize + 112 NameDictionary::kHeaderSize +
115 NameDictionary::kElementsStartIndex * kPointerSize; 113 NameDictionary::kElementsStartIndex * kPointerSize;
116 114
117 virtual inline Major MajorKey() const FINAL OVERRIDE;
118
119 Register dictionary() const { 115 Register dictionary() const {
120 return Register::from_code(DictionaryBits::decode(minor_key_)); 116 return Register::from_code(DictionaryBits::decode(minor_key_));
121 } 117 }
122 118
123 Register result() const { 119 Register result() const {
124 return Register::from_code(ResultBits::decode(minor_key_)); 120 return Register::from_code(ResultBits::decode(minor_key_));
125 } 121 }
126 122
127 Register index() const { 123 Register index() const {
128 return Register::from_code(IndexBits::decode(minor_key_)); 124 return Register::from_code(IndexBits::decode(minor_key_));
129 } 125 }
130 126
131 LookupMode mode() const { return LookupModeBits::decode(minor_key_); } 127 LookupMode mode() const { return LookupModeBits::decode(minor_key_); }
132 128
133 class DictionaryBits: public BitField<int, 0, 3> {}; 129 class DictionaryBits: public BitField<int, 0, 3> {};
134 class ResultBits: public BitField<int, 3, 3> {}; 130 class ResultBits: public BitField<int, 3, 3> {};
135 class IndexBits: public BitField<int, 6, 3> {}; 131 class IndexBits: public BitField<int, 6, 3> {};
136 class LookupModeBits: public BitField<LookupMode, 9, 1> {}; 132 class LookupModeBits: public BitField<LookupMode, 9, 1> {};
137 133
138 DISALLOW_COPY_AND_ASSIGN(NameDictionaryLookupStub); 134 DEFINE_CODE_STUB(NameDictionaryLookup, PlatformCodeStub);
139 }; 135 };
140 136
141 137
142 class RecordWriteStub: public PlatformCodeStub { 138 class RecordWriteStub: public PlatformCodeStub {
143 public: 139 public:
144 RecordWriteStub(Isolate* isolate, 140 RecordWriteStub(Isolate* isolate,
145 Register object, 141 Register object,
146 Register value, 142 Register value,
147 Register address, 143 Register address,
148 RememberedSetAction remembered_set_action, 144 RememberedSetAction remembered_set_action,
149 SaveFPRegsMode fp_mode) 145 SaveFPRegsMode fp_mode)
150 : PlatformCodeStub(isolate), 146 : PlatformCodeStub(isolate),
151 regs_(object, // An input reg. 147 regs_(object, // An input reg.
152 address, // An input reg. 148 address, // An input reg.
153 value) { // One scratch reg. 149 value) { // One scratch reg.
154 minor_key_ = ObjectBits::encode(object.code()) | 150 minor_key_ = ObjectBits::encode(object.code()) |
155 ValueBits::encode(value.code()) | 151 ValueBits::encode(value.code()) |
156 AddressBits::encode(address.code()) | 152 AddressBits::encode(address.code()) |
157 RememberedSetActionBits::encode(remembered_set_action) | 153 RememberedSetActionBits::encode(remembered_set_action) |
158 SaveFPRegsModeBits::encode(fp_mode); 154 SaveFPRegsModeBits::encode(fp_mode);
159 } 155 }
160 156
157 RecordWriteStub(uint32_t key, Isolate* isolate)
158 : PlatformCodeStub(key, isolate), regs_(object(), address(), value()) {}
159
161 enum Mode { 160 enum Mode {
162 STORE_BUFFER_ONLY, 161 STORE_BUFFER_ONLY,
163 INCREMENTAL, 162 INCREMENTAL,
164 INCREMENTAL_COMPACTION 163 INCREMENTAL_COMPACTION
165 }; 164 };
166 165
167 virtual bool SometimesSetsUpAFrame() { return false; } 166 virtual bool SometimesSetsUpAFrame() { return false; }
168 167
169 static const byte kTwoByteNopInstruction = 0x3c; // Cmpb al, #imm8. 168 static const byte kTwoByteNopInstruction = 0x3c; // Cmpb al, #imm8.
170 static const byte kTwoByteJumpInstruction = 0xeb; // Jmp #imm8. 169 static const byte kTwoByteJumpInstruction = 0xeb; // Jmp #imm8.
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 return no_reg; 351 return no_reg;
353 } 352 }
354 friend class RecordWriteStub; 353 friend class RecordWriteStub;
355 }; 354 };
356 355
357 enum OnNoNeedToInformIncrementalMarker { 356 enum OnNoNeedToInformIncrementalMarker {
358 kReturnOnNoNeedToInformIncrementalMarker, 357 kReturnOnNoNeedToInformIncrementalMarker,
359 kUpdateRememberedSetOnNoNeedToInformIncrementalMarker 358 kUpdateRememberedSetOnNoNeedToInformIncrementalMarker
360 }; 359 };
361 360
362 virtual inline Major MajorKey() const FINAL OVERRIDE; 361 virtual inline Major MajorKey() const FINAL OVERRIDE { return RecordWrite; }
363 362
364 void Generate(MacroAssembler* masm); 363 void Generate(MacroAssembler* masm);
365 void GenerateIncremental(MacroAssembler* masm, Mode mode); 364 void GenerateIncremental(MacroAssembler* masm, Mode mode);
366 void CheckNeedsToInformIncrementalMarker( 365 void CheckNeedsToInformIncrementalMarker(
367 MacroAssembler* masm, 366 MacroAssembler* masm,
368 OnNoNeedToInformIncrementalMarker on_no_need, 367 OnNoNeedToInformIncrementalMarker on_no_need,
369 Mode mode); 368 Mode mode);
370 void InformIncrementalMarker(MacroAssembler* masm); 369 void InformIncrementalMarker(MacroAssembler* masm);
371 370
372 void Activate(Code* code) { 371 void Activate(Code* code) {
(...skipping 28 matching lines...) Expand all
401 400
402 RegisterAllocation regs_; 401 RegisterAllocation regs_;
403 402
404 DISALLOW_COPY_AND_ASSIGN(RecordWriteStub); 403 DISALLOW_COPY_AND_ASSIGN(RecordWriteStub);
405 }; 404 };
406 405
407 406
408 } } // namespace v8::internal 407 } } // namespace v8::internal
409 408
410 #endif // V8_IA32_CODE_STUBS_IA32_H_ 409 #endif // V8_IA32_CODE_STUBS_IA32_H_
OLDNEW
« no previous file with comments | « src/code-stubs.cc ('k') | src/ic/ic.cc » ('j') | test/cctest/test-code-stubs.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698