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

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

Issue 571173003: PowerPC specific sub-directories (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Remove IBM copyright, update code to later level Created 6 years, 2 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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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_ARM_CODE_STUBS_ARM_H_ 5 #ifndef V8_PPC_CODE_STUBS_PPC_H_
6 #define V8_ARM_CODE_STUBS_ARM_H_ 6 #define V8_PPC_CODE_STUBS_PPC_H_
7 7
8 namespace v8 { 8 namespace v8 {
9 namespace internal { 9 namespace internal {
10 10
11 11
12 void ArrayNativeCode(MacroAssembler* masm, Label* call_generic_code); 12 void ArrayNativeCode(MacroAssembler* masm, Label* call_generic_code);
13 13
14 14
15 class StringHelper : public AllStatic { 15 class StringHelper : public AllStatic {
16 public: 16 public:
17 // Generate code for copying a large number of characters. This function 17 // Generate code for copying a large number of characters. This function
18 // is allowed to spend extra time setting up conditions to make copying 18 // is allowed to spend extra time setting up conditions to make copying
19 // faster. Copying of overlapping regions is not supported. 19 // faster. Copying of overlapping regions is not supported.
20 // Dest register ends at the position after the last character written. 20 // Dest register ends at the position after the last character written.
21 static void GenerateCopyCharacters(MacroAssembler* masm, 21 static void GenerateCopyCharacters(MacroAssembler* masm, Register dest,
22 Register dest, 22 Register src, Register count,
23 Register src,
24 Register count,
25 Register scratch, 23 Register scratch,
26 String::Encoding encoding); 24 String::Encoding encoding);
27 25
28 // Compares two flat one-byte strings and returns result in r0. 26 // Compares two flat one-byte strings and returns result in r0.
29 static void GenerateCompareFlatOneByteStrings( 27 static void GenerateCompareFlatOneByteStrings(MacroAssembler* masm,
30 MacroAssembler* masm, Register left, Register right, Register scratch1, 28 Register left, Register right,
31 Register scratch2, Register scratch3, Register scratch4); 29 Register scratch1,
30 Register scratch2,
31 Register scratch3);
32 32
33 // Compares two flat one-byte strings for equality and returns result in r0. 33 // Compares two flat one-byte strings for equality and returns result in r0.
34 static void GenerateFlatOneByteStringEquals(MacroAssembler* masm, 34 static void GenerateFlatOneByteStringEquals(MacroAssembler* masm,
35 Register left, Register right, 35 Register left, Register right,
36 Register scratch1, 36 Register scratch1,
37 Register scratch2, 37 Register scratch2);
38 Register scratch3);
39 38
40 private: 39 private:
41 static void GenerateOneByteCharsCompareLoop( 40 static void GenerateOneByteCharsCompareLoop(MacroAssembler* masm,
42 MacroAssembler* masm, Register left, Register right, Register length, 41 Register left, Register right,
43 Register scratch1, Register scratch2, Label* chars_not_equal); 42 Register length,
43 Register scratch1,
44 Label* chars_not_equal);
44 45
45 DISALLOW_IMPLICIT_CONSTRUCTORS(StringHelper); 46 DISALLOW_IMPLICIT_CONSTRUCTORS(StringHelper);
46 }; 47 };
47 48
48 49
49 // This stub can convert a signed int32 to a heap number (double). It does 50 class RecordWriteStub : public PlatformCodeStub {
50 // not work for int32s that are in Smi range! No GC occurs during this stub
51 // so you don't have to set up the frame.
52 class WriteInt32ToHeapNumberStub : public PlatformCodeStub {
53 public: 51 public:
54 WriteInt32ToHeapNumberStub(Isolate* isolate, Register the_int, 52 RecordWriteStub(Isolate* isolate, Register object, Register value,
55 Register the_heap_number, Register scratch) 53 Register address, RememberedSetAction remembered_set_action,
56 : PlatformCodeStub(isolate) {
57 minor_key_ = IntRegisterBits::encode(the_int.code()) |
58 HeapNumberRegisterBits::encode(the_heap_number.code()) |
59 ScratchRegisterBits::encode(scratch.code());
60 }
61
62 static void GenerateFixedRegStubsAheadOfTime(Isolate* isolate);
63
64 private:
65 Register the_int() const {
66 return Register::from_code(IntRegisterBits::decode(minor_key_));
67 }
68
69 Register the_heap_number() const {
70 return Register::from_code(HeapNumberRegisterBits::decode(minor_key_));
71 }
72
73 Register scratch() const {
74 return Register::from_code(ScratchRegisterBits::decode(minor_key_));
75 }
76
77 // Minor key encoding in 16 bits.
78 class IntRegisterBits: public BitField<int, 0, 4> {};
79 class HeapNumberRegisterBits: public BitField<int, 4, 4> {};
80 class ScratchRegisterBits: public BitField<int, 8, 4> {};
81
82 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR();
83 DEFINE_PLATFORM_CODE_STUB(WriteInt32ToHeapNumber, PlatformCodeStub);
84 };
85
86
87 class RecordWriteStub: public PlatformCodeStub {
88 public:
89 RecordWriteStub(Isolate* isolate,
90 Register object,
91 Register value,
92 Register address,
93 RememberedSetAction remembered_set_action,
94 SaveFPRegsMode fp_mode) 54 SaveFPRegsMode fp_mode)
95 : PlatformCodeStub(isolate), 55 : PlatformCodeStub(isolate),
96 regs_(object, // An input reg. 56 regs_(object, // An input reg.
97 address, // An input reg. 57 address, // An input reg.
98 value) { // One scratch reg. 58 value) { // One scratch reg.
99 minor_key_ = ObjectBits::encode(object.code()) | 59 minor_key_ = ObjectBits::encode(object.code()) |
100 ValueBits::encode(value.code()) | 60 ValueBits::encode(value.code()) |
101 AddressBits::encode(address.code()) | 61 AddressBits::encode(address.code()) |
102 RememberedSetActionBits::encode(remembered_set_action) | 62 RememberedSetActionBits::encode(remembered_set_action) |
103 SaveFPRegsModeBits::encode(fp_mode); 63 SaveFPRegsModeBits::encode(fp_mode);
104 } 64 }
105 65
106 RecordWriteStub(uint32_t key, Isolate* isolate) 66 RecordWriteStub(uint32_t key, Isolate* isolate)
107 : PlatformCodeStub(key, isolate), regs_(object(), address(), value()) {} 67 : PlatformCodeStub(key, isolate), regs_(object(), address(), value()) {}
108 68
109 enum Mode { 69 enum Mode { STORE_BUFFER_ONLY, INCREMENTAL, INCREMENTAL_COMPACTION };
110 STORE_BUFFER_ONLY,
111 INCREMENTAL,
112 INCREMENTAL_COMPACTION
113 };
114 70
115 virtual bool SometimesSetsUpAFrame() { return false; } 71 virtual bool SometimesSetsUpAFrame() { return false; }
116 72
117 static void PatchBranchIntoNop(MacroAssembler* masm, int pos) { 73 static void PatchBranchIntoNop(MacroAssembler* masm, int pos) {
118 masm->instr_at_put(pos, (masm->instr_at(pos) & ~B27) | (B24 | B20)); 74 masm->instr_at_put(pos, (masm->instr_at(pos) & ~kBOfieldMask) | BT);
119 DCHECK(Assembler::IsTstImmediate(masm->instr_at(pos))); 75 // roohack DCHECK(Assembler::IsTstImmediate(masm->instr_at(pos)));
120 } 76 }
121 77
122 static void PatchNopIntoBranch(MacroAssembler* masm, int pos) { 78 static void PatchNopIntoBranch(MacroAssembler* masm, int pos) {
123 masm->instr_at_put(pos, (masm->instr_at(pos) & ~(B24 | B20)) | B27); 79 masm->instr_at_put(pos, (masm->instr_at(pos) & ~kBOfieldMask) | BF);
124 DCHECK(Assembler::IsBranch(masm->instr_at(pos))); 80 // roohack DCHECK(Assembler::IsBranch(masm->instr_at(pos)));
125 } 81 }
126 82
127 static Mode GetMode(Code* stub) { 83 static Mode GetMode(Code* stub) {
128 Instr first_instruction = Assembler::instr_at(stub->instruction_start()); 84 Instr first_instruction =
85 Assembler::instr_at(stub->instruction_start() + Assembler::kInstrSize);
129 Instr second_instruction = Assembler::instr_at(stub->instruction_start() + 86 Instr second_instruction = Assembler::instr_at(stub->instruction_start() +
130 Assembler::kInstrSize); 87 (Assembler::kInstrSize * 2));
131 88
132 if (Assembler::IsBranch(first_instruction)) { 89 if (BF == (first_instruction & kBOfieldMask)) {
133 return INCREMENTAL; 90 return INCREMENTAL;
134 } 91 }
135 92
136 DCHECK(Assembler::IsTstImmediate(first_instruction)); 93 // roohack DCHECK(Assembler::IsTstImmediate(first_instruction));
137 94
138 if (Assembler::IsBranch(second_instruction)) { 95 if (BF == (second_instruction & kBOfieldMask)) {
139 return INCREMENTAL_COMPACTION; 96 return INCREMENTAL_COMPACTION;
140 } 97 }
141 98
142 DCHECK(Assembler::IsTstImmediate(second_instruction)); 99 // roohack DCHECK(Assembler::IsTstImmediate(second_instruction));
143 100
144 return STORE_BUFFER_ONLY; 101 return STORE_BUFFER_ONLY;
145 } 102 }
146 103
147 static void Patch(Code* stub, Mode mode) { 104 static void Patch(Code* stub, Mode mode) {
148 MacroAssembler masm(NULL, 105 MacroAssembler masm(NULL, stub->instruction_start(),
149 stub->instruction_start(),
150 stub->instruction_size()); 106 stub->instruction_size());
151 switch (mode) { 107 switch (mode) {
152 case STORE_BUFFER_ONLY: 108 case STORE_BUFFER_ONLY:
153 DCHECK(GetMode(stub) == INCREMENTAL || 109 DCHECK(GetMode(stub) == INCREMENTAL ||
154 GetMode(stub) == INCREMENTAL_COMPACTION); 110 GetMode(stub) == INCREMENTAL_COMPACTION);
155 PatchBranchIntoNop(&masm, 0); 111
156 PatchBranchIntoNop(&masm, Assembler::kInstrSize); 112 PatchBranchIntoNop(&masm, Assembler::kInstrSize);
113 PatchBranchIntoNop(&masm, Assembler::kInstrSize * 2);
157 break; 114 break;
158 case INCREMENTAL: 115 case INCREMENTAL:
159 DCHECK(GetMode(stub) == STORE_BUFFER_ONLY); 116 DCHECK(GetMode(stub) == STORE_BUFFER_ONLY);
160 PatchNopIntoBranch(&masm, 0); 117 PatchNopIntoBranch(&masm, Assembler::kInstrSize);
161 break; 118 break;
162 case INCREMENTAL_COMPACTION: 119 case INCREMENTAL_COMPACTION:
163 DCHECK(GetMode(stub) == STORE_BUFFER_ONLY); 120 DCHECK(GetMode(stub) == STORE_BUFFER_ONLY);
164 PatchNopIntoBranch(&masm, Assembler::kInstrSize); 121 PatchNopIntoBranch(&masm, Assembler::kInstrSize * 2);
165 break; 122 break;
166 } 123 }
167 DCHECK(GetMode(stub) == mode); 124 DCHECK(GetMode(stub) == mode);
168 CpuFeatures::FlushICache(stub->instruction_start(), 125 CpuFeatures::FlushICache(stub->instruction_start() + Assembler::kInstrSize,
169 2 * Assembler::kInstrSize); 126 2 * Assembler::kInstrSize);
170 } 127 }
171 128
172 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR(); 129 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR();
173 130
174 private: 131 private:
175 // This is a helper class for freeing up 3 scratch registers. The input is 132 // This is a helper class for freeing up 3 scratch registers. The input is
176 // two registers that must be preserved and one scratch register provided by 133 // two registers that must be preserved and one scratch register provided by
177 // the caller. 134 // the caller.
178 class RegisterAllocation { 135 class RegisterAllocation {
179 public: 136 public:
180 RegisterAllocation(Register object, 137 RegisterAllocation(Register object, Register address, Register scratch0)
181 Register address, 138 : object_(object), address_(address), scratch0_(scratch0) {
182 Register scratch0)
183 : object_(object),
184 address_(address),
185 scratch0_(scratch0) {
186 DCHECK(!AreAliased(scratch0, object, address, no_reg)); 139 DCHECK(!AreAliased(scratch0, object, address, no_reg));
187 scratch1_ = GetRegisterThatIsNotOneOf(object_, address_, scratch0_); 140 scratch1_ = GetRegisterThatIsNotOneOf(object_, address_, scratch0_);
188 } 141 }
189 142
190 void Save(MacroAssembler* masm) { 143 void Save(MacroAssembler* masm) {
191 DCHECK(!AreAliased(object_, address_, scratch1_, scratch0_)); 144 DCHECK(!AreAliased(object_, address_, scratch1_, scratch0_));
192 // We don't have to save scratch0_ because it was given to us as 145 // We don't have to save scratch0_ because it was given to us as
193 // a scratch register. 146 // a scratch register.
194 masm->push(scratch1_); 147 masm->push(scratch1_);
195 } 148 }
196 149
197 void Restore(MacroAssembler* masm) { 150 void Restore(MacroAssembler* masm) { masm->pop(scratch1_); }
198 masm->pop(scratch1_);
199 }
200 151
201 // If we have to call into C then we need to save and restore all caller- 152 // If we have to call into C then we need to save and restore all caller-
202 // saved registers that were not already preserved. The scratch registers 153 // saved registers that were not already preserved. The scratch registers
203 // will be restored by other means so we don't bother pushing them here. 154 // will be restored by other means so we don't bother pushing them here.
204 void SaveCallerSaveRegisters(MacroAssembler* masm, SaveFPRegsMode mode) { 155 void SaveCallerSaveRegisters(MacroAssembler* masm, SaveFPRegsMode mode) {
205 masm->stm(db_w, sp, (kCallerSaved | lr.bit()) & ~scratch1_.bit()); 156 masm->mflr(r0);
157 masm->push(r0);
158 masm->MultiPush(kJSCallerSaved & ~scratch1_.bit());
206 if (mode == kSaveFPRegs) { 159 if (mode == kSaveFPRegs) {
207 masm->SaveFPRegs(sp, scratch0_); 160 // Save all volatile FP registers except d0.
161 masm->SaveFPRegs(sp, 1, DoubleRegister::kNumVolatileRegisters - 1);
208 } 162 }
209 } 163 }
210 164
211 inline void RestoreCallerSaveRegisters(MacroAssembler*masm, 165 inline void RestoreCallerSaveRegisters(MacroAssembler* masm,
212 SaveFPRegsMode mode) { 166 SaveFPRegsMode mode) {
213 if (mode == kSaveFPRegs) { 167 if (mode == kSaveFPRegs) {
214 masm->RestoreFPRegs(sp, scratch0_); 168 // Restore all volatile FP registers except d0.
169 masm->RestoreFPRegs(sp, 1, DoubleRegister::kNumVolatileRegisters - 1);
215 } 170 }
216 masm->ldm(ia_w, sp, (kCallerSaved | lr.bit()) & ~scratch1_.bit()); 171 masm->MultiPop(kJSCallerSaved & ~scratch1_.bit());
172 masm->pop(r0);
173 masm->mtlr(r0);
217 } 174 }
218 175
219 inline Register object() { return object_; } 176 inline Register object() { return object_; }
220 inline Register address() { return address_; } 177 inline Register address() { return address_; }
221 inline Register scratch0() { return scratch0_; } 178 inline Register scratch0() { return scratch0_; }
222 inline Register scratch1() { return scratch1_; } 179 inline Register scratch1() { return scratch1_; }
223 180
224 private: 181 private:
225 Register object_; 182 Register object_;
226 Register address_; 183 Register address_;
227 Register scratch0_; 184 Register scratch0_;
228 Register scratch1_; 185 Register scratch1_;
229 186
230 friend class RecordWriteStub; 187 friend class RecordWriteStub;
231 }; 188 };
232 189
233 enum OnNoNeedToInformIncrementalMarker { 190 enum OnNoNeedToInformIncrementalMarker {
234 kReturnOnNoNeedToInformIncrementalMarker, 191 kReturnOnNoNeedToInformIncrementalMarker,
235 kUpdateRememberedSetOnNoNeedToInformIncrementalMarker 192 kUpdateRememberedSetOnNoNeedToInformIncrementalMarker
236 }; 193 };
237 194
238 virtual inline Major MajorKey() const FINAL OVERRIDE { return RecordWrite; } 195 virtual inline Major MajorKey() const FINAL OVERRIDE { return RecordWrite; }
239 196
240 virtual void Generate(MacroAssembler* masm) OVERRIDE; 197 virtual void Generate(MacroAssembler* masm) OVERRIDE;
241 void GenerateIncremental(MacroAssembler* masm, Mode mode); 198 void GenerateIncremental(MacroAssembler* masm, Mode mode);
242 void CheckNeedsToInformIncrementalMarker( 199 void CheckNeedsToInformIncrementalMarker(
243 MacroAssembler* masm, 200 MacroAssembler* masm, OnNoNeedToInformIncrementalMarker on_no_need,
244 OnNoNeedToInformIncrementalMarker on_no_need,
245 Mode mode); 201 Mode mode);
246 void InformIncrementalMarker(MacroAssembler* masm); 202 void InformIncrementalMarker(MacroAssembler* masm);
247 203
248 void Activate(Code* code) { 204 void Activate(Code* code) {
249 code->GetHeap()->incremental_marking()->ActivateGeneratedStub(code); 205 code->GetHeap()->incremental_marking()->ActivateGeneratedStub(code);
250 } 206 }
251 207
252 Register object() const { 208 Register object() const {
253 return Register::from_code(ObjectBits::decode(minor_key_)); 209 return Register::from_code(ObjectBits::decode(minor_key_));
254 } 210 }
255 211
256 Register value() const { 212 Register value() const {
257 return Register::from_code(ValueBits::decode(minor_key_)); 213 return Register::from_code(ValueBits::decode(minor_key_));
258 } 214 }
259 215
260 Register address() const { 216 Register address() const {
261 return Register::from_code(AddressBits::decode(minor_key_)); 217 return Register::from_code(AddressBits::decode(minor_key_));
262 } 218 }
263 219
264 RememberedSetAction remembered_set_action() const { 220 RememberedSetAction remembered_set_action() const {
265 return RememberedSetActionBits::decode(minor_key_); 221 return RememberedSetActionBits::decode(minor_key_);
266 } 222 }
267 223
268 SaveFPRegsMode save_fp_regs_mode() const { 224 SaveFPRegsMode save_fp_regs_mode() const {
269 return SaveFPRegsModeBits::decode(minor_key_); 225 return SaveFPRegsModeBits::decode(minor_key_);
270 } 226 }
271 227
272 class ObjectBits: public BitField<int, 0, 4> {}; 228 class ObjectBits : public BitField<int, 0, 5> {};
273 class ValueBits: public BitField<int, 4, 4> {}; 229 class ValueBits : public BitField<int, 5, 5> {};
274 class AddressBits: public BitField<int, 8, 4> {}; 230 class AddressBits : public BitField<int, 10, 5> {};
275 class RememberedSetActionBits: public BitField<RememberedSetAction, 12, 1> {}; 231 class RememberedSetActionBits : public BitField<RememberedSetAction, 15, 1> {
276 class SaveFPRegsModeBits: public BitField<SaveFPRegsMode, 13, 1> {}; 232 };
233 class SaveFPRegsModeBits : public BitField<SaveFPRegsMode, 16, 1> {};
277 234
278 Label slow_; 235 Label slow_;
279 RegisterAllocation regs_; 236 RegisterAllocation regs_;
280 237
281 DISALLOW_COPY_AND_ASSIGN(RecordWriteStub); 238 DISALLOW_COPY_AND_ASSIGN(RecordWriteStub);
282 }; 239 };
283 240
284 241
285 // Trampoline stub to call into native code. To call safely into native code 242 // Trampoline stub to call into native code. To call safely into native code
286 // in the presence of compacting GC (which can move code objects) we need to 243 // in the presence of compacting GC (which can move code objects) we need to
287 // keep the code which called into native pinned in the memory. Currently the 244 // keep the code which called into native pinned in the memory. Currently the
288 // simplest approach is to generate such stub early enough so it can never be 245 // simplest approach is to generate such stub early enough so it can never be
289 // moved by GC 246 // moved by GC
290 class DirectCEntryStub: public PlatformCodeStub { 247 class DirectCEntryStub : public PlatformCodeStub {
291 public: 248 public:
292 explicit DirectCEntryStub(Isolate* isolate) : PlatformCodeStub(isolate) {} 249 explicit DirectCEntryStub(Isolate* isolate) : PlatformCodeStub(isolate) {}
293 void GenerateCall(MacroAssembler* masm, Register target); 250 void GenerateCall(MacroAssembler* masm, Register target);
294 251
295 private: 252 private:
296 bool NeedsImmovableCode() { return true; } 253 bool NeedsImmovableCode() { return true; }
297 254
298 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR(); 255 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR();
299 DEFINE_PLATFORM_CODE_STUB(DirectCEntry, PlatformCodeStub); 256 DEFINE_PLATFORM_CODE_STUB(DirectCEntry, PlatformCodeStub);
300 }; 257 };
301 258
302 259
303 class NameDictionaryLookupStub: public PlatformCodeStub { 260 class NameDictionaryLookupStub : public PlatformCodeStub {
304 public: 261 public:
305 enum LookupMode { POSITIVE_LOOKUP, NEGATIVE_LOOKUP }; 262 enum LookupMode { POSITIVE_LOOKUP, NEGATIVE_LOOKUP };
306 263
307 NameDictionaryLookupStub(Isolate* isolate, LookupMode mode) 264 NameDictionaryLookupStub(Isolate* isolate, LookupMode mode)
308 : PlatformCodeStub(isolate) { 265 : PlatformCodeStub(isolate) {
309 minor_key_ = LookupModeBits::encode(mode); 266 minor_key_ = LookupModeBits::encode(mode);
310 } 267 }
311 268
312 static void GenerateNegativeLookup(MacroAssembler* masm, 269 static void GenerateNegativeLookup(MacroAssembler* masm, Label* miss,
313 Label* miss, 270 Label* done, Register receiver,
314 Label* done, 271 Register properties, Handle<Name> name,
315 Register receiver,
316 Register properties,
317 Handle<Name> name,
318 Register scratch0); 272 Register scratch0);
319 273
320 static void GeneratePositiveLookup(MacroAssembler* masm, 274 static void GeneratePositiveLookup(MacroAssembler* masm, Label* miss,
321 Label* miss, 275 Label* done, Register elements,
322 Label* done, 276 Register name, Register r0, Register r1);
323 Register elements,
324 Register name,
325 Register r0,
326 Register r1);
327 277
328 virtual bool SometimesSetsUpAFrame() { return false; } 278 virtual bool SometimesSetsUpAFrame() { return false; }
329 279
330 private: 280 private:
331 static const int kInlinedProbes = 4; 281 static const int kInlinedProbes = 4;
332 static const int kTotalProbes = 20; 282 static const int kTotalProbes = 20;
333 283
334 static const int kCapacityOffset = 284 static const int kCapacityOffset =
335 NameDictionary::kHeaderSize + 285 NameDictionary::kHeaderSize +
336 NameDictionary::kCapacityIndex * kPointerSize; 286 NameDictionary::kCapacityIndex * kPointerSize;
337 287
338 static const int kElementsStartOffset = 288 static const int kElementsStartOffset =
339 NameDictionary::kHeaderSize + 289 NameDictionary::kHeaderSize +
340 NameDictionary::kElementsStartIndex * kPointerSize; 290 NameDictionary::kElementsStartIndex * kPointerSize;
341 291
342 LookupMode mode() const { return LookupModeBits::decode(minor_key_); } 292 LookupMode mode() const { return LookupModeBits::decode(minor_key_); }
343 293
344 class LookupModeBits: public BitField<LookupMode, 0, 1> {}; 294 class LookupModeBits : public BitField<LookupMode, 0, 1> {};
345 295
346 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR(); 296 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR();
347 DEFINE_PLATFORM_CODE_STUB(NameDictionaryLookup, PlatformCodeStub); 297 DEFINE_PLATFORM_CODE_STUB(NameDictionaryLookup, PlatformCodeStub);
348 }; 298 };
299 }
300 } // namespace v8::internal
349 301
350 } } // namespace v8::internal 302 #endif // V8_PPC_CODE_STUBS_PPC_H_
351
352 #endif // V8_ARM_CODE_STUBS_ARM_H_
OLDNEW
« no previous file with comments | « src/ppc/builtins-ppc.cc ('k') | src/ppc/code-stubs-ppc.cc » ('j') | src/ppc/code-stubs-ppc.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698